|
| 1 | +# ============================================================================= |
| 2 | +# Golden Hour Engine - Environment Variables |
| 3 | +# ============================================================================= |
| 4 | +# Copy this file to .env and fill in the values for your environment. |
| 5 | +# All variables have sensible defaults for local development. |
| 6 | +# ============================================================================= |
| 7 | + |
| 8 | +# -- Application ------------------------------------------------------------- |
| 9 | +GHE_APP_NAME="Golden Hour Engine" |
| 10 | +GHE_APP_VERSION="1.0.0" |
| 11 | +GHE_ENVIRONMENT=development |
| 12 | +GHE_DEBUG=true |
| 13 | +GHE_LOG_LEVEL=INFO |
| 14 | +GHE_HOST=0.0.0.0 |
| 15 | +GHE_PORT=8000 |
| 16 | +GHE_WORKERS=1 |
| 17 | +GHE_RELOAD=true |
| 18 | +GHE_CORS_ORIGINS=["http://localhost:3000","http://localhost:8000"] |
| 19 | +GHE_TIMEZONE=Asia/Kolkata |
| 20 | +GHE_API_V1_PREFIX=/api/v1 |
| 21 | +GHE_DOCS_URL=/docs |
| 22 | +GHE_REDOC_URL=/redoc |
| 23 | + |
| 24 | +# -- PostgreSQL + PostGIS ---------------------------------------------------- |
| 25 | +DB_HOST=localhost |
| 26 | +DB_PORT=5432 |
| 27 | +DB_USER=ghe_user |
| 28 | +DB_PASSWORD=ghe_password |
| 29 | +DB_NAME=golden_hour_engine |
| 30 | +DB_ECHO=false |
| 31 | +DB_POOL_SIZE=20 |
| 32 | +DB_MAX_OVERFLOW=10 |
| 33 | +DB_POOL_TIMEOUT=30 |
| 34 | +DB_POOL_RECYCLE=1800 |
| 35 | +DB_STATEMENT_TIMEOUT_MS=30000 |
| 36 | + |
| 37 | +# -- Redis ------------------------------------------------------------------- |
| 38 | +REDIS_HOST=localhost |
| 39 | +REDIS_PORT=6379 |
| 40 | +REDIS_PASSWORD= |
| 41 | +REDIS_DB=0 |
| 42 | +REDIS_CACHE_DB=1 |
| 43 | +REDIS_CELERY_DB=2 |
| 44 | +REDIS_MAX_CONNECTIONS=50 |
| 45 | +REDIS_SOCKET_TIMEOUT=5 |
| 46 | +REDIS_SOCKET_CONNECT_TIMEOUT=5 |
| 47 | +REDIS_RETRY_ON_TIMEOUT=true |
| 48 | +REDIS_SSL=false |
| 49 | + |
| 50 | +# -- MQTT Broker ------------------------------------------------------------- |
| 51 | +MQTT_HOST=localhost |
| 52 | +MQTT_PORT=1883 |
| 53 | +MQTT_USERNAME= |
| 54 | +MQTT_PASSWORD= |
| 55 | +MQTT_CLIENT_ID=ghe-backend |
| 56 | +MQTT_KEEPALIVE=60 |
| 57 | +MQTT_USE_TLS=false |
| 58 | +MQTT_TOPIC_PREFIX=ghe |
| 59 | +MQTT_QOS=1 |
| 60 | +MQTT_RECONNECT_INTERVAL=5 |
| 61 | +MQTT_MAX_RECONNECT_DELAY=120 |
| 62 | + |
| 63 | +# -- OSRM Routing Engine ---------------------------------------------------- |
| 64 | +OSRM_ENDPOINT=http://localhost:5000 |
| 65 | +OSRM_TIMEOUT=10 |
| 66 | +OSRM_MAX_RETRIES=3 |
| 67 | +OSRM_PROFILE=driving |
| 68 | +OSRM_ALTERNATIVES=3 |
| 69 | +OSRM_STEPS=true |
| 70 | +OSRM_GEOMETRIES=geojson |
| 71 | +OSRM_OVERVIEW=full |
| 72 | +OSRM_ANNOTATIONS=true |
| 73 | + |
| 74 | +# -- MinIO (S3-Compatible Object Storage) ----------------------------------- |
| 75 | +MINIO_ENDPOINT=localhost:9000 |
| 76 | +MINIO_ACCESS_KEY=minioadmin |
| 77 | +MINIO_SECRET_KEY=minioadmin |
| 78 | +MINIO_SECURE=false |
| 79 | +MINIO_REGION=us-east-1 |
| 80 | +MINIO_BUCKET_VIDEO=ghe-video |
| 81 | +MINIO_BUCKET_SNAPSHOTS=ghe-snapshots |
| 82 | +MINIO_BUCKET_EVIDENCE=ghe-evidence |
| 83 | +MINIO_BUCKET_MODELS=ghe-models |
| 84 | +MINIO_PRESIGNED_EXPIRY_SECONDS=3600 |
| 85 | + |
| 86 | +# -- Nominatim Geocoding ---------------------------------------------------- |
| 87 | +NOMINATIM_ENDPOINT=http://localhost:8080 |
| 88 | +NOMINATIM_TIMEOUT=10 |
| 89 | +NOMINATIM_MAX_RETRIES=3 |
| 90 | +NOMINATIM_USER_AGENT=golden-hour-engine/1.0 |
| 91 | +NOMINATIM_RATE_LIMIT_RPS=1.0 |
| 92 | +NOMINATIM_CACHE_TTL_SECONDS=86400 |
| 93 | + |
| 94 | +# -- Camera Defaults --------------------------------------------------------- |
| 95 | +CAMERA_DEFAULT_FPS=15 |
| 96 | +CAMERA_SNAPSHOT_INTERVAL_SECONDS=5 |
| 97 | +CAMERA_STREAM_PROTOCOL=rtsp |
| 98 | +CAMERA_RTSP_TRANSPORT=tcp |
| 99 | +CAMERA_RECONNECT_DELAY_SECONDS=5 |
| 100 | +CAMERA_MAX_RECONNECT_ATTEMPTS=10 |
| 101 | +CAMERA_FRAME_WIDTH=1920 |
| 102 | +CAMERA_FRAME_HEIGHT=1080 |
| 103 | +CAMERA_JPEG_QUALITY=85 |
| 104 | +CAMERA_BUFFER_SIZE=30 |
| 105 | +CAMERA_ONVIF_PORT=80 |
| 106 | +CAMERA_ONVIF_WSDL_DIR= |
| 107 | +CAMERA_HEALTH_CHECK_INTERVAL_SECONDS=30 |
| 108 | + |
| 109 | +# -- Detection Thresholds --------------------------------------------------- |
| 110 | +DETECTION_ACCIDENT_CONFIDENCE_THRESHOLD=0.65 |
| 111 | +DETECTION_VEHICLE_CONFIDENCE_THRESHOLD=0.50 |
| 112 | +DETECTION_PERSON_CONFIDENCE_THRESHOLD=0.50 |
| 113 | +DETECTION_FIRE_CONFIDENCE_THRESHOLD=0.60 |
| 114 | +DETECTION_SMOKE_CONFIDENCE_THRESHOLD=0.55 |
| 115 | +DETECTION_SEVERITY_LOW_THRESHOLD=0.3 |
| 116 | +DETECTION_SEVERITY_MEDIUM_THRESHOLD=0.6 |
| 117 | +DETECTION_SEVERITY_HIGH_THRESHOLD=0.8 |
| 118 | +DETECTION_NMS_IOU_THRESHOLD=0.45 |
| 119 | +DETECTION_MAX_DETECTIONS_PER_FRAME=100 |
| 120 | +DETECTION_MODEL_PATH=models/accident_detector.onnx |
| 121 | +DETECTION_MODEL_DEVICE=cpu |
| 122 | +DETECTION_MODEL_INPUT_SIZE=640 |
| 123 | +DETECTION_BATCH_SIZE=1 |
| 124 | +DETECTION_ENABLE_TRACKING=true |
| 125 | +DETECTION_TRACKER_TYPE=bytetrack |
| 126 | +DETECTION_CONFIRMATION_FRAMES=3 |
| 127 | +DETECTION_COOLDOWN_SECONDS=60 |
| 128 | +DETECTION_FALSE_POSITIVE_FILTER_ENABLED=true |
| 129 | + |
| 130 | +# -- Dispatch Scoring Weights ----------------------------------------------- |
| 131 | +DISPATCH_WEIGHT_DISTANCE=0.30 |
| 132 | +DISPATCH_WEIGHT_ETA=0.25 |
| 133 | +DISPATCH_WEIGHT_EQUIPMENT_MATCH=0.20 |
| 134 | +DISPATCH_WEIGHT_CREW_SKILL=0.15 |
| 135 | +DISPATCH_WEIGHT_FATIGUE_PENALTY=0.05 |
| 136 | +DISPATCH_WEIGHT_AVAILABILITY=0.05 |
| 137 | +DISPATCH_WEIGHT_MAX_DISPATCH_RADIUS_KM=25.0 |
| 138 | +DISPATCH_WEIGHT_MAX_ETA_MINUTES=30.0 |
| 139 | +DISPATCH_WEIGHT_REASSIGNMENT_THRESHOLD=0.15 |
| 140 | +DISPATCH_WEIGHT_CONCURRENT_INCIDENT_LIMIT=1 |
| 141 | + |
| 142 | +# -- Hospital Selection Weights --------------------------------------------- |
| 143 | +HOSPITAL_WEIGHT_DISTANCE=0.25 |
| 144 | +HOSPITAL_WEIGHT_ETA=0.25 |
| 145 | +HOSPITAL_WEIGHT_SPECIALTY_MATCH=0.20 |
| 146 | +HOSPITAL_WEIGHT_BED_AVAILABILITY=0.15 |
| 147 | +HOSPITAL_WEIGHT_TRAUMA_CENTER_LEVEL=0.10 |
| 148 | +HOSPITAL_WEIGHT_HISTORICAL_OUTCOME=0.05 |
| 149 | +HOSPITAL_WEIGHT_MAX_HOSPITAL_RADIUS_KM=50.0 |
| 150 | +HOSPITAL_WEIGHT_MAX_ETA_MINUTES=45.0 |
| 151 | +HOSPITAL_WEIGHT_BED_AVAILABILITY_CACHE_TTL_SECONDS=300 |
| 152 | + |
| 153 | +# -- WhatsApp Business API --------------------------------------------------- |
| 154 | +WHATSAPP_ENABLED=false |
| 155 | +WHATSAPP_API_URL=https://graph.facebook.com/v18.0 |
| 156 | +WHATSAPP_PHONE_NUMBER_ID= |
| 157 | +WHATSAPP_ACCESS_TOKEN= |
| 158 | +WHATSAPP_VERIFY_TOKEN= |
| 159 | +WHATSAPP_TEMPLATE_NAMESPACE= |
| 160 | +WHATSAPP_INCIDENT_TEMPLATE_NAME=incident_alert |
| 161 | +WHATSAPP_DISPATCH_TEMPLATE_NAME=dispatch_notification |
| 162 | +WHATSAPP_TIMEOUT=10 |
| 163 | +WHATSAPP_MAX_RETRIES=3 |
| 164 | + |
| 165 | +# -- SMS (Twilio / MSG91 / TextLocal) --------------------------------------- |
| 166 | +SMS_ENABLED=false |
| 167 | +SMS_PROVIDER=twilio |
| 168 | +SMS_ACCOUNT_SID= |
| 169 | +SMS_AUTH_TOKEN= |
| 170 | +SMS_FROM_NUMBER= |
| 171 | +SMS_API_URL=https://api.twilio.com/2010-04-01 |
| 172 | +SMS_TIMEOUT=10 |
| 173 | +SMS_MAX_RETRIES=3 |
| 174 | +SMS_RATE_LIMIT_PER_MINUTE=60 |
| 175 | + |
| 176 | +# -- Voice Call Notifications ------------------------------------------------ |
| 177 | +VOICE_ENABLED=false |
| 178 | +VOICE_PROVIDER=twilio |
| 179 | +VOICE_ACCOUNT_SID= |
| 180 | +VOICE_AUTH_TOKEN= |
| 181 | +VOICE_FROM_NUMBER= |
| 182 | +VOICE_TWIML_URL= |
| 183 | +VOICE_TIMEOUT=10 |
| 184 | +VOICE_MAX_RETRIES=3 |
| 185 | +VOICE_MAX_CALL_DURATION_SECONDS=120 |
| 186 | +VOICE_RETRY_DELAY_SECONDS=30 |
| 187 | + |
| 188 | +# -- Notification General ---------------------------------------------------- |
| 189 | +NOTIFICATION_ESCALATION_TIMEOUT_SECONDS=120 |
| 190 | +NOTIFICATION_MAX_ESCALATION_LEVELS=3 |
| 191 | +NOTIFICATION_DEDUP_WINDOW_SECONDS=300 |
| 192 | +NOTIFICATION_QUIET_HOURS_START=0 |
| 193 | +NOTIFICATION_QUIET_HOURS_END=0 |
| 194 | + |
| 195 | +# -- Prometheus Monitoring --------------------------------------------------- |
| 196 | +PROMETHEUS_ENABLED=true |
| 197 | +PROMETHEUS_PORT=9090 |
| 198 | +PROMETHEUS_METRICS_PATH=/metrics |
| 199 | +PROMETHEUS_PUSH_GATEWAY_URL= |
| 200 | +PROMETHEUS_PUSH_INTERVAL_SECONDS=15 |
| 201 | + |
| 202 | +# -- Grafana ----------------------------------------------------------------- |
| 203 | +GRAFANA_ENABLED=true |
| 204 | +GRAFANA_URL=http://localhost:3001 |
| 205 | +GRAFANA_API_KEY= |
| 206 | +GRAFANA_ORG_ID=1 |
| 207 | +GRAFANA_DASHBOARD_FOLDER=Golden Hour Engine |
| 208 | + |
| 209 | +# -- Loki Log Aggregation --------------------------------------------------- |
| 210 | +LOKI_ENABLED=true |
| 211 | +LOKI_URL=http://localhost:3100 |
| 212 | +LOKI_PUSH_PATH=/loki/api/v1/push |
| 213 | +LOKI_BATCH_SIZE=100 |
| 214 | +LOKI_FLUSH_INTERVAL_SECONDS=5 |
| 215 | + |
| 216 | +# -- Authentication / JWT ---------------------------------------------------- |
| 217 | +AUTH_SECRET_KEY=CHANGE-ME-in-production-use-a-real-256-bit-key |
| 218 | +AUTH_ALGORITHM=HS256 |
| 219 | +AUTH_ACCESS_TOKEN_EXPIRE_MINUTES=30 |
| 220 | +AUTH_REFRESH_TOKEN_EXPIRE_DAYS=7 |
| 221 | +AUTH_ISSUER=golden-hour-engine |
| 222 | +AUTH_AUDIENCE=ghe-api |
| 223 | +AUTH_BCRYPT_ROUNDS=12 |
| 224 | + |
| 225 | +# -- Celery Task Queue ------------------------------------------------------- |
| 226 | +CELERY_TASK_SERIALIZER=json |
| 227 | +CELERY_RESULT_SERIALIZER=json |
| 228 | +CELERY_TIMEZONE=Asia/Kolkata |
| 229 | +CELERY_ENABLE_UTC=true |
| 230 | +CELERY_TASK_TRACK_STARTED=true |
| 231 | +CELERY_TASK_TIME_LIMIT=300 |
| 232 | +CELERY_TASK_SOFT_TIME_LIMIT=240 |
| 233 | +CELERY_WORKER_PREFETCH_MULTIPLIER=1 |
| 234 | +CELERY_WORKER_MAX_TASKS_PER_CHILD=1000 |
| 235 | +CELERY_WORKER_CONCURRENCY=4 |
| 236 | +CELERY_RESULT_EXPIRES=3600 |
0 commit comments