diff --git a/collector/config.go b/collector/config.go index 363b302..cd3ae9c 100644 --- a/collector/config.go +++ b/collector/config.go @@ -206,7 +206,7 @@ func LoadMetricsConfiguration(logger *slog.Logger, cfg *Config, path string, fla } m.merge(cfg, path, flags) - return m, nil + return m, m.validate(logger) } func (wc WebConfig) Flags() *web.FlagConfig { @@ -302,3 +302,31 @@ func (m *MetricsConfiguration) defaultDatabase(cfg *Config) DatabaseConfig { } return dbconfig } + +func (m *MetricsConfiguration) validate(logger *slog.Logger) error { + m.checkDuplicatedDatabases(logger) + return nil +} + +// checkDuplicatedDatabases validates duplicated databases. If a database entry is duplicated, log a warning. +func (m *MetricsConfiguration) checkDuplicatedDatabases(logger *slog.Logger) { + type dbkey struct { + URL string + Username string + } + + dbs := map[dbkey][]string{} + for db, cfg := range m.Databases { + key := dbkey{ + URL: cfg.URL, + Username: strings.ToLower(cfg.Username), + } + dbs[key] = append(dbs[key], db) + } + + for _, v := range dbs { + if len(v) > 1 { + logger.Warn("duplicated database connections", "database connections", strings.Join(v, ", "), "count", len(v)) + } + } +}