@@ -1561,50 +1561,51 @@ func (e *Exporter) scrapeDSN(ch chan<- prometheus.Metric, dsn string) error {
15611561// DATA_SOURCE_NAME always wins so we do not break older versions
15621562// reading secrets from files wins over secrets in environment variables
15631563// DATA_SOURCE_NAME > DATA_SOURCE_{USER|PASS}_FILE > DATA_SOURCE_{USER|PASS}
1564- func getDataSources () []string {
1564+ func getDataSources () ( []string , error ) {
15651565 var dsn = os .Getenv ("DATA_SOURCE_NAME" )
1566- if len (dsn ) == 0 {
1567- var user string
1568- var pass string
1569- var uri string
1566+ if len (dsn ) != 0 {
1567+ return strings .Split (dsn , "," ), nil
1568+ }
15701569
1571- if len (os .Getenv ("DATA_SOURCE_USER_FILE" )) != 0 {
1572- fileContents , err := ioutil .ReadFile (os .Getenv ("DATA_SOURCE_USER_FILE" ))
1573- if err != nil {
1574- panic (err )
1575- }
1576- user = strings .TrimSpace (string (fileContents ))
1577- } else {
1578- user = os .Getenv ("DATA_SOURCE_USER" )
1579- }
1570+ var user , pass , uri string
15801571
1581- if len (os .Getenv ("DATA_SOURCE_PASS_FILE" )) != 0 {
1582- fileContents , err := ioutil .ReadFile (os .Getenv ("DATA_SOURCE_PASS_FILE" ))
1583- if err != nil {
1584- panic (err )
1585- }
1586- pass = strings .TrimSpace (string (fileContents ))
1587- } else {
1588- pass = os .Getenv ("DATA_SOURCE_PASS" )
1572+ dataSourceUserFile := os .Getenv ("DATA_SOURCE_USER_FILE" )
1573+ if len (dataSourceUserFile ) != 0 {
1574+ fileContents , err := ioutil .ReadFile (dataSourceUserFile )
1575+ if err != nil {
1576+ return nil , fmt .Errorf ("failed loading data source user file %s: %s" , dataSourceUserFile , err .Error ())
15891577 }
1578+ user = strings .TrimSpace (string (fileContents ))
1579+ } else {
1580+ user = os .Getenv ("DATA_SOURCE_USER" )
1581+ }
15901582
1591- ui := url .UserPassword (user , pass ).String ()
1583+ dataSourcePassFile := os .Getenv ("DATA_SOURCE_PASS_FILE" )
1584+ if len (dataSourcePassFile ) != 0 {
1585+ fileContents , err := ioutil .ReadFile (dataSourcePassFile )
1586+ if err != nil {
1587+ return nil , fmt .Errorf ("failed loading data source pass file %s: %s" , dataSourcePassFile , err .Error ())
1588+ }
1589+ pass = strings .TrimSpace (string (fileContents ))
1590+ } else {
1591+ pass = os .Getenv ("DATA_SOURCE_PASS" )
1592+ }
15921593
1593- if len (os .Getenv ("DATA_SOURCE_URI_FILE" )) != 0 {
1594- fileContents , err := ioutil .ReadFile (os .Getenv ("DATA_SOURCE_URI_FILE" ))
1595- if err != nil {
1596- panic (err )
1597- }
1598- uri = strings .TrimSpace (string (fileContents ))
1599- } else {
1600- uri = os .Getenv ("DATA_SOURCE_URI" )
1594+ ui := url .UserPassword (user , pass ).String ()
1595+ dataSrouceURIFile := os .Getenv ("DATA_SOURCE_URI_FILE" )
1596+ if len (dataSrouceURIFile ) != 0 {
1597+ fileContents , err := ioutil .ReadFile (dataSrouceURIFile )
1598+ if err != nil {
1599+ return nil , fmt .Errorf ("failed loading data source URI file %s: %s" , dataSrouceURIFile , err .Error ())
16011600 }
1601+ uri = strings .TrimSpace (string (fileContents ))
1602+ } else {
1603+ uri = os .Getenv ("DATA_SOURCE_URI" )
1604+ }
16021605
1603- dsn = "postgresql://" + ui + "@" + uri
1606+ dsn = "postgresql://" + ui + "@" + uri
16041607
1605- return []string {dsn }
1606- }
1607- return strings .Split (dsn , "," )
1608+ return []string {dsn }, nil
16081609}
16091610
16101611func contains (a []string , x string ) bool {
@@ -1637,19 +1638,25 @@ func main() {
16371638 return
16381639 }
16391640
1640- dsn := getDataSources ()
1641+ dsn , err := getDataSources ()
1642+ if err != nil {
1643+ log .Fatalf ("failed reading data sources: %s" , err .Error ())
1644+ }
1645+
16411646 if len (dsn ) == 0 {
16421647 log .Fatal ("couldn't find environment variables describing the datasource to use" )
16431648 }
16441649
1645- exporter := NewExporter ( dsn ,
1650+ opts := [] ExporterOpt {
16461651 DisableDefaultMetrics (* disableDefaultMetrics ),
16471652 DisableSettingsMetrics (* disableSettingsMetrics ),
16481653 AutoDiscoverDatabases (* autoDiscoverDatabases ),
16491654 WithUserQueriesPath (* queriesPath ),
16501655 WithConstantLabels (* constantLabelsList ),
16511656 ExcludeDatabases (* excludeDatabases ),
1652- )
1657+ }
1658+
1659+ exporter := NewExporter (dsn , opts ... )
16531660 defer func () {
16541661 exporter .servers .Close ()
16551662 }()
0 commit comments