stock-bot/libs/config/src/monitoring.ts

90 lines
3.1 KiB
TypeScript

/**
* 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;