@@ -1581,50 +1581,51 @@ func (e *Exporter) scrapeDSN(ch chan<- prometheus.Metric, dsn string) error {
15811581// DATA_SOURCE_NAME always wins so we do not break older versions
15821582// reading secrets from files wins over secrets in environment variables
15831583// DATA_SOURCE_NAME > DATA_SOURCE_{USER|PASS}_FILE > DATA_SOURCE_{USER|PASS}
1584- func getDataSources () []string {
1584+ func getDataSources () ( []string , error ) {
15851585 var dsn = os .Getenv ("DATA_SOURCE_NAME" )
1586- if len (dsn ) == 0 {
1587- var user string
1588- var pass string
1589- var uri string
1586+ if len (dsn ) != 0 {
1587+ return strings .Split (dsn , "," ), nil
1588+ }
15901589
1591- if len (os .Getenv ("DATA_SOURCE_USER_FILE" )) != 0 {
1592- fileContents , err := ioutil .ReadFile (os .Getenv ("DATA_SOURCE_USER_FILE" ))
1593- if err != nil {
1594- panic (err )
1595- }
1596- user = strings .TrimSpace (string (fileContents ))
1597- } else {
1598- user = os .Getenv ("DATA_SOURCE_USER" )
1599- }
1590+ var user , pass , uri string
16001591
1601- if len (os .Getenv ("DATA_SOURCE_PASS_FILE" )) != 0 {
1602- fileContents , err := ioutil .ReadFile (os .Getenv ("DATA_SOURCE_PASS_FILE" ))
1603- if err != nil {
1604- panic (err )
1605- }
1606- pass = strings .TrimSpace (string (fileContents ))
1607- } else {
1608- pass = os .Getenv ("DATA_SOURCE_PASS" )
1592+ dataSourceUserFile := os .Getenv ("DATA_SOURCE_USER_FILE" )
1593+ if len (dataSourceUserFile ) != 0 {
1594+ fileContents , err := ioutil .ReadFile (dataSourceUserFile )
1595+ if err != nil {
1596+ return nil , fmt .Errorf ("failed loading data source user file %s: %s" , dataSourceUserFile , err .Error ())
16091597 }
1598+ user = strings .TrimSpace (string (fileContents ))
1599+ } else {
1600+ user = os .Getenv ("DATA_SOURCE_USER" )
1601+ }
16101602
1611- ui := url .UserPassword (user , pass ).String ()
1603+ dataSourcePassFile := os .Getenv ("DATA_SOURCE_PASS_FILE" )
1604+ if len (dataSourcePassFile ) != 0 {
1605+ fileContents , err := ioutil .ReadFile (dataSourcePassFile )
1606+ if err != nil {
1607+ return nil , fmt .Errorf ("failed loading data source pass file %s: %s" , dataSourcePassFile , err .Error ())
1608+ }
1609+ pass = strings .TrimSpace (string (fileContents ))
1610+ } else {
1611+ pass = os .Getenv ("DATA_SOURCE_PASS" )
1612+ }
16121613
1613- if len (os .Getenv ("DATA_SOURCE_URI_FILE" )) != 0 {
1614- fileContents , err := ioutil .ReadFile (os .Getenv ("DATA_SOURCE_URI_FILE" ))
1615- if err != nil {
1616- panic (err )
1617- }
1618- uri = strings .TrimSpace (string (fileContents ))
1619- } else {
1620- uri = os .Getenv ("DATA_SOURCE_URI" )
1614+ ui := url .UserPassword (user , pass ).String ()
1615+ dataSrouceURIFile := os .Getenv ("DATA_SOURCE_URI_FILE" )
1616+ if len (dataSrouceURIFile ) != 0 {
1617+ fileContents , err := ioutil .ReadFile (dataSrouceURIFile )
1618+ if err != nil {
1619+ return nil , fmt .Errorf ("failed loading data source URI file %s: %s" , dataSrouceURIFile , err .Error ())
16211620 }
1621+ uri = strings .TrimSpace (string (fileContents ))
1622+ } else {
1623+ uri = os .Getenv ("DATA_SOURCE_URI" )
1624+ }
16221625
1623- dsn = "postgresql://" + ui + "@" + uri
1626+ dsn = "postgresql://" + ui + "@" + uri
16241627
1625- return []string {dsn }
1626- }
1627- return strings .Split (dsn , "," )
1628+ return []string {dsn }, nil
16281629}
16291630
16301631func contains (a []string , x string ) bool {
@@ -1657,19 +1658,25 @@ func main() {
16571658 return
16581659 }
16591660
1660- dsn := getDataSources ()
1661+ dsn , err := getDataSources ()
1662+ if err != nil {
1663+ log .Fatalf ("failed reading data sources: %s" , err .Error ())
1664+ }
1665+
16611666 if len (dsn ) == 0 {
16621667 log .Fatal ("couldn't find environment variables describing the datasource to use" )
16631668 }
16641669
1665- exporter := NewExporter ( dsn ,
1670+ opts := [] ExporterOpt {
16661671 DisableDefaultMetrics (* disableDefaultMetrics ),
16671672 DisableSettingsMetrics (* disableSettingsMetrics ),
16681673 AutoDiscoverDatabases (* autoDiscoverDatabases ),
16691674 WithUserQueriesPath (* queriesPath ),
16701675 WithConstantLabels (* constantLabelsList ),
16711676 ExcludeDatabases (* excludeDatabases ),
1672- )
1677+ }
1678+
1679+ exporter := NewExporter (dsn , opts ... )
16731680 defer func () {
16741681 exporter .servers .Close ()
16751682 }()
0 commit comments