106 lines
2.9 KiB
Python
106 lines
2.9 KiB
Python
"""
|
|
Application configuration management
|
|
"""
|
|
import os
|
|
from datetime import timedelta
|
|
|
|
class Config:
|
|
"""Base configuration"""
|
|
SECRET_KEY = os.environ.get('SECRET_KEY') or 'dev-secret-key-change-in-production'
|
|
|
|
# Database
|
|
DATABASE_URL = os.environ.get('DATABASE_URL') or 'sqlite:///data/enhanced_monitoring.db'
|
|
|
|
# File Upload Settings
|
|
UPLOAD_FOLDER = 'data/uploads'
|
|
MAX_CONTENT_LENGTH = 50 * 1024 * 1024 # 50MB max file size
|
|
ALLOWED_EXTENSIONS = {'txt', 'log', 'conf', 'cfg', 'json', 'yml', 'yaml'}
|
|
|
|
# Message Compression Settings
|
|
ENABLE_MESSAGE_COMPRESSION = True
|
|
COMPRESSION_THRESHOLD = 100 # Compress messages longer than 100 chars
|
|
MAX_TEMPLATE_CACHE_SIZE = 1000
|
|
|
|
# Ansible Settings
|
|
ANSIBLE_INVENTORY_PATH = 'ansible/inventory/dynamic_inventory.yaml'
|
|
ANSIBLE_PLAYBOOK_PATH = 'ansible/playbooks'
|
|
SSH_KEY_PATH = os.path.expanduser('~/.ssh/ansible_key')
|
|
|
|
# SSH Settings
|
|
SSH_USERNAME = 'pi'
|
|
SSH_PORT = 22
|
|
SSH_TIMEOUT = 10
|
|
|
|
# Performance Settings
|
|
DATABASE_POOL_SIZE = 20
|
|
DATABASE_POOL_TIMEOUT = 30
|
|
LOG_RETENTION_DAYS = 90
|
|
|
|
# Security Settings
|
|
BCRYPT_LOG_ROUNDS = 12
|
|
SESSION_COOKIE_SECURE = False # Set to True in production with HTTPS
|
|
SESSION_COOKIE_HTTPONLY = True
|
|
SESSION_COOKIE_SAMESITE = 'Lax'
|
|
PERMANENT_SESSION_LIFETIME = timedelta(days=7)
|
|
|
|
# API Settings
|
|
API_RATE_LIMIT = '1000 per hour'
|
|
API_PAGINATION_DEFAULT = 100
|
|
API_PAGINATION_MAX = 1000
|
|
|
|
class DevelopmentConfig(Config):
|
|
"""Development configuration"""
|
|
DEBUG = True
|
|
TESTING = False
|
|
|
|
# More verbose logging in development
|
|
LOG_LEVEL = 'DEBUG'
|
|
|
|
# Disable some security features for development
|
|
SESSION_COOKIE_SECURE = False
|
|
WTF_CSRF_ENABLED = False # Disable CSRF for API testing
|
|
|
|
class ProductionConfig(Config):
|
|
"""Production configuration"""
|
|
DEBUG = False
|
|
TESTING = False
|
|
|
|
# Security settings for production
|
|
SESSION_COOKIE_SECURE = True
|
|
WTF_CSRF_ENABLED = True
|
|
|
|
# Production database (if using PostgreSQL)
|
|
DATABASE_URL = os.environ.get('DATABASE_URL') or 'sqlite:///data/enhanced_monitoring.db'
|
|
|
|
# Logging
|
|
LOG_LEVEL = 'INFO'
|
|
LOG_FILE = 'logs/app.log'
|
|
|
|
# Performance
|
|
DATABASE_POOL_SIZE = 50
|
|
|
|
class TestingConfig(Config):
|
|
"""Testing configuration"""
|
|
TESTING = True
|
|
DEBUG = True
|
|
|
|
# Use in-memory database for testing
|
|
DATABASE_URL = 'sqlite:///:memory:'
|
|
|
|
# Disable CSRF for testing
|
|
WTF_CSRF_ENABLED = False
|
|
|
|
# Configuration dictionary
|
|
config = {
|
|
'development': DevelopmentConfig,
|
|
'production': ProductionConfig,
|
|
'testing': TestingConfig,
|
|
'default': DevelopmentConfig
|
|
}
|
|
|
|
def get_config(config_name=None):
|
|
"""Get configuration class"""
|
|
if config_name is None:
|
|
config_name = os.environ.get('FLASK_ENV', 'default')
|
|
|
|
return config.get(config_name, config['default']) |