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