/** * Monitoring configuration using envalid * Prometheus metrics, Grafana visualization, and Loki logging */ import { cleanEnv, str, port, bool, num } from 'envalid'; /** * Prometheus configuration with validation and defaults */ export const prometheusConfig = cleanEnv(process.env, { // Prometheus Server PROMETHEUS_HOST: str({ default: 'localhost', desc: 'Prometheus host' }), PROMETHEUS_PORT: port({ default: 9090, desc: 'Prometheus port' }), PROMETHEUS_URL: str({ default: '', desc: 'Complete Prometheus URL (overrides host/port)' }), // Authentication PROMETHEUS_USERNAME: str({ default: '', desc: 'Prometheus username (if auth enabled)' }), PROMETHEUS_PASSWORD: str({ default: '', desc: 'Prometheus password (if auth enabled)' }), // Metrics Collection PROMETHEUS_SCRAPE_INTERVAL: str({ default: '15s', desc: 'Default scrape interval' }), PROMETHEUS_EVALUATION_INTERVAL: str({ default: '15s', desc: 'Rule evaluation interval' }), PROMETHEUS_RETENTION_TIME: str({ default: '15d', desc: 'Data retention time' }), // TLS Settings PROMETHEUS_TLS_ENABLED: bool({ default: false, desc: 'Enable TLS for Prometheus' }), PROMETHEUS_TLS_INSECURE: bool({ default: false, desc: 'Skip TLS verification' }), }); /** * Grafana configuration with validation and defaults */ export const grafanaConfig = cleanEnv(process.env, { // Grafana Server GRAFANA_HOST: str({ default: 'localhost', desc: 'Grafana host' }), GRAFANA_PORT: port({ default: 3000, desc: 'Grafana port' }), GRAFANA_URL: str({ default: '', desc: 'Complete Grafana URL (overrides host/port)' }), // Authentication GRAFANA_ADMIN_USER: str({ default: 'admin', desc: 'Grafana admin username' }), GRAFANA_ADMIN_PASSWORD: str({ default: 'admin', desc: 'Grafana admin password' }), // Security Settings GRAFANA_ALLOW_SIGN_UP: bool({ default: false, desc: 'Allow user sign up' }), GRAFANA_SECRET_KEY: str({ default: '', desc: 'Grafana secret key for encryption' }), // Database Settings GRAFANA_DATABASE_TYPE: str({ default: 'sqlite3', choices: ['mysql', 'postgres', 'sqlite3'], desc: 'Grafana database type' }), GRAFANA_DATABASE_URL: str({ default: '', desc: 'Grafana database URL' }), // Feature Flags GRAFANA_DISABLE_GRAVATAR: bool({ default: true, desc: 'Disable Gravatar avatars' }), GRAFANA_ENABLE_GZIP: bool({ default: true, desc: 'Enable gzip compression' }), }); // Export typed configuration objects export type PrometheusConfig = typeof prometheusConfig; export type GrafanaConfig = typeof grafanaConfig; // Export individual config values for convenience export const { PROMETHEUS_HOST, PROMETHEUS_PORT, PROMETHEUS_URL, PROMETHEUS_USERNAME, PROMETHEUS_PASSWORD, PROMETHEUS_SCRAPE_INTERVAL, PROMETHEUS_EVALUATION_INTERVAL, PROMETHEUS_RETENTION_TIME, PROMETHEUS_TLS_ENABLED, PROMETHEUS_TLS_INSECURE, } = prometheusConfig; export const { GRAFANA_HOST, GRAFANA_PORT, GRAFANA_URL, GRAFANA_ADMIN_USER, GRAFANA_ADMIN_PASSWORD, GRAFANA_ALLOW_SIGN_UP, GRAFANA_SECRET_KEY, GRAFANA_DATABASE_TYPE, GRAFANA_DATABASE_URL, GRAFANA_DISABLE_GRAVATAR, GRAFANA_ENABLE_GZIP, } = grafanaConfig;