@@ -1581,50 +1581,51 @@ func (e *Exporter) scrapeDSN(ch chan<- prometheus.Metric, dsn string) error {
1581
1581
// DATA_SOURCE_NAME always wins so we do not break older versions
1582
1582
// reading secrets from files wins over secrets in environment variables
1583
1583
// DATA_SOURCE_NAME > DATA_SOURCE_{USER|PASS}_FILE > DATA_SOURCE_{USER|PASS}
1584
- func getDataSources () []string {
1584
+ func getDataSources () ( []string , error ) {
1585
1585
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
+ }
1590
1589
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
1600
1591
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 ())
1609
1597
}
1598
+ user = strings .TrimSpace (string (fileContents ))
1599
+ } else {
1600
+ user = os .Getenv ("DATA_SOURCE_USER" )
1601
+ }
1610
1602
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
+ }
1612
1613
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 ())
1621
1620
}
1621
+ uri = strings .TrimSpace (string (fileContents ))
1622
+ } else {
1623
+ uri = os .Getenv ("DATA_SOURCE_URI" )
1624
+ }
1622
1625
1623
- dsn = "postgresql://" + ui + "@" + uri
1626
+ dsn = "postgresql://" + ui + "@" + uri
1624
1627
1625
- return []string {dsn }
1626
- }
1627
- return strings .Split (dsn , "," )
1628
+ return []string {dsn }, nil
1628
1629
}
1629
1630
1630
1631
func contains (a []string , x string ) bool {
@@ -1657,19 +1658,25 @@ func main() {
1657
1658
return
1658
1659
}
1659
1660
1660
- dsn := getDataSources ()
1661
+ dsn , err := getDataSources ()
1662
+ if err != nil {
1663
+ log .Fatalf ("failed reading data sources: %s" , err .Error ())
1664
+ }
1665
+
1661
1666
if len (dsn ) == 0 {
1662
1667
log .Fatal ("couldn't find environment variables describing the datasource to use" )
1663
1668
}
1664
1669
1665
- exporter := NewExporter ( dsn ,
1670
+ opts := [] ExporterOpt {
1666
1671
DisableDefaultMetrics (* disableDefaultMetrics ),
1667
1672
DisableSettingsMetrics (* disableSettingsMetrics ),
1668
1673
AutoDiscoverDatabases (* autoDiscoverDatabases ),
1669
1674
WithUserQueriesPath (* queriesPath ),
1670
1675
WithConstantLabels (* constantLabelsList ),
1671
1676
ExcludeDatabases (* excludeDatabases ),
1672
- )
1677
+ }
1678
+
1679
+ exporter := NewExporter (dsn , opts ... )
1673
1680
defer func () {
1674
1681
exporter .servers .Close ()
1675
1682
}()
0 commit comments