import os from pathlib import Path from urllib.parse import urlparse, unquote, parse_qs from dotenv import load_dotenv BASE_DIR=Path(__file__).resolve().parent.parent load_dotenv(os.getenv('DASHBOARD_ENV_FILE', str(BASE_DIR/'.env'))) SECRET_KEY=os.environ.get('DJANGO_SECRET_KEY','') if not SECRET_KEY or SECRET_KEY.startswith('CHANGE_ME'): raise RuntimeError('Set a random DJANGO_SECRET_KEY in .env') DEBUG=os.getenv('DEBUG','0')=='1' ALLOWED_HOSTS=os.getenv('ALLOWED_HOSTS','127.0.0.1,localhost').split(',') CSRF_TRUSTED_ORIGINS=list(filter(None,os.getenv('CSRF_TRUSTED_ORIGINS','').split(','))) INSTALLED_APPS=['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','rest_framework','monitoring'] MIDDLEWARE=['django.middleware.security.SecurityMiddleware','django.contrib.sessions.middleware.SessionMiddleware','django.middleware.common.CommonMiddleware','django.middleware.csrf.CsrfViewMiddleware','django.contrib.auth.middleware.AuthenticationMiddleware','django.contrib.messages.middleware.MessageMiddleware','django.middleware.clickjacking.XFrameOptionsMiddleware'] ROOT_URLCONF='config.urls' TEMPLATES=[{'BACKEND':'django.template.backends.django.DjangoTemplates','DIRS':[],'APP_DIRS':True,'OPTIONS':{'context_processors':['django.template.context_processors.request','django.contrib.auth.context_processors.auth','django.contrib.messages.context_processors.messages']}}] WSGI_APPLICATION='config.wsgi.application' if os.getenv('TEST_SQLITE')=='1': DATABASES={'default':{'ENGINE':'django.db.backends.sqlite3','NAME':BASE_DIR/'var/test.sqlite3'}} else: u=urlparse(os.environ['DATABASE_URL']) if u.scheme not in ('postgres','postgresql'): raise RuntimeError('PostgreSQL is required') DATABASES={'default':{'ENGINE':'django.db.backends.postgresql','NAME':u.path.lstrip('/'),'USER':unquote(u.username or ''),'PASSWORD':unquote(u.password or ''),'HOST':u.hostname,'PORT':u.port or 5432,'CONN_MAX_AGE':60,'OPTIONS':{k:v[0] for k,v in parse_qs(u.query).items() if k in ('sslmode','sslrootcert')}}} AUTH_PASSWORD_VALIDATORS=[{'NAME':'django.contrib.auth.password_validation.UserAttributeSimilarityValidator'},{'NAME':'django.contrib.auth.password_validation.MinimumLengthValidator'},{'NAME':'django.contrib.auth.password_validation.CommonPasswordValidator'},{'NAME':'django.contrib.auth.password_validation.NumericPasswordValidator'}] LANGUAGE_CODE='de-de' TIME_ZONE='Europe/Berlin' USE_TZ=True STATIC_URL='/static/' STATIC_ROOT=BASE_DIR/'staticfiles' DEFAULT_AUTO_FIELD='django.db.models.BigAutoField' SECURE_PROXY_SSL_HEADER=('HTTP_X_FORWARDED_PROTO','https') SESSION_COOKIE_SECURE=os.getenv('COOKIE_SECURE','1')=='1' CSRF_COOKIE_SECURE=SESSION_COOKIE_SECURE SECURE_CONTENT_TYPE_NOSNIFF=True SECURE_HSTS_SECONDS=0 if DEBUG else 31536000 SECURE_HSTS_INCLUDE_SUBDOMAINS=False SECURE_HSTS_PRELOAD=False X_FRAME_OPTIONS='DENY' DATA_UPLOAD_MAX_MEMORY_SIZE=2*1024*1024 REST_FRAMEWORK={'DEFAULT_AUTHENTICATION_CLASSES':['monitoring.auth.BearerAuthentication'],'DEFAULT_PERMISSION_CLASSES':['rest_framework.permissions.IsAuthenticated'],'DEFAULT_RENDERER_CLASSES':['rest_framework.renderers.JSONRenderer'],'DEFAULT_PARSER_CLASSES':['rest_framework.parsers.JSONParser'],'DEFAULT_THROTTLE_CLASSES':['rest_framework.throttling.AnonRateThrottle'],'DEFAULT_THROTTLE_RATES':{'anon':'60/min'}} if os.getenv('TEST_SQLITE')=='1': CACHES={'default':{'BACKEND':'django.core.cache.backends.locmem.LocMemCache'}} else: CACHES={'default':{'BACKEND':'django.core.cache.backends.redis.RedisCache','LOCATION':os.environ['CACHE_URL']}} CELERY_BROKER_URL=os.environ.get('CELERY_BROKER_URL','redis://127.0.0.1:6379/5') CELERY_TASK_IGNORE_RESULT=True CELERY_TASK_SERIALIZER='json' CELERY_ACCEPT_CONTENT=['json'] CELERY_TIMEZONE='UTC' CELERY_BEAT_SCHEDULE={'alarms':{'task':'monitoring.tasks.evaluate_alarms','schedule':15.0},'mail':{'task':'monitoring.tasks.deliver_notifications','schedule':30.0},'retention':{'task':'monitoring.tasks.cleanup','schedule':3600.0}} EMAIL_BACKEND=os.getenv('EMAIL_BACKEND','django.core.mail.backends.smtp.EmailBackend') EMAIL_HOST=os.getenv('EMAIL_HOST','localhost') EMAIL_PORT=int(os.getenv('EMAIL_PORT','25')) EMAIL_USE_TLS=os.getenv('EMAIL_USE_TLS','0')=='1' EMAIL_HOST_USER=os.getenv('EMAIL_HOST_USER','') EMAIL_HOST_PASSWORD=os.getenv('EMAIL_HOST_PASSWORD','') EMAIL_TIMEOUT=15 DEFAULT_FROM_EMAIL=os.getenv('DEFAULT_FROM_EMAIL','monitoring@localhost') ALERT_RECIPIENTS=list(filter(None,os.getenv('ALERT_RECIPIENTS','').split(','))) LOGGING={'version':1,'disable_existing_loggers':False,'handlers':{'console':{'class':'logging.StreamHandler'}},'root':{'handlers':['console'],'level':'INFO'}} CELERY_WORKER_SEND_TASK_EVENTS=True CELERY_TASK_SEND_SENT_EVENT=True CELERY_TASK_TRACK_STARTED=True CELERY_BROKER_CONNECTION_RETRY_ON_STARTUP=True