@@ -24,6 +24,8 @@ import (
2424
2525var Version string = "0.0.1"
2626
27+ var db * sql.DB = nil
28+
2729var (
2830 listenAddress = flag .String (
2931 "web.listen-address" , ":9187" ,
@@ -966,6 +968,20 @@ func (e *Exporter) checkMapVersions(ch chan<- prometheus.Metric, db *sql.DB) err
966968 return nil
967969}
968970
971+ func getDB (conn string ) (* sql.DB , error ) {
972+ if db == nil {
973+ d , err := sql .Open ("postgres" , conn )
974+ if err != nil {
975+ return nil , err
976+ }
977+ d .SetMaxOpenConns (1 )
978+ d .SetMaxIdleConns (1 )
979+ db = d
980+ }
981+
982+ return db , nil
983+ }
984+
969985func (e * Exporter ) scrape (ch chan <- prometheus.Metric ) {
970986 defer func (begun time.Time ) {
971987 e .duration .Set (time .Since (begun ).Seconds ())
@@ -974,13 +990,12 @@ func (e *Exporter) scrape(ch chan<- prometheus.Metric) {
974990 e .error .Set (0 )
975991 e .totalScrapes .Inc ()
976992
977- db , err := sql . Open ( "postgres" , e .dsn )
993+ db , err := getDB ( e .dsn )
978994 if err != nil {
979995 log .Infoln ("Error opening connection to database:" , err )
980996 e .error .Set (1 )
981997 return
982998 }
983- defer db .Close ()
984999
9851000 // Check if map versions need to be updated
9861001 if err := e .checkMapVersions (ch , db ); err != nil {
@@ -1026,4 +1041,7 @@ func main() {
10261041
10271042 log .Infof ("Starting Server: %s" , * listenAddress )
10281043 log .Fatal (http .ListenAndServe (* listenAddress , nil ))
1044+ if db != nil {
1045+ defer db .Close ()
1046+ }
10291047}
0 commit comments