diff --git a/postgres_exporter.go b/postgres_exporter.go index eec04200..5666ba44 100644 --- a/postgres_exporter.go +++ b/postgres_exporter.go @@ -24,6 +24,8 @@ import ( var Version string = "0.0.1" +var db *sql.DB = nil + var ( listenAddress = flag.String( "web.listen-address", ":9187", @@ -966,6 +968,20 @@ func (e *Exporter) checkMapVersions(ch chan<- prometheus.Metric, db *sql.DB) err return nil } +func getDB(conn string) (*sql.DB, error) { + if db == nil { + d, err := sql.Open("postgres", conn) + if err != nil { + return nil, err + } + d.SetMaxOpenConns(1) + d.SetMaxIdleConns(1) + db = d + } + + return db, nil +} + func (e *Exporter) scrape(ch chan<- prometheus.Metric) { defer func(begun time.Time) { e.duration.Set(time.Since(begun).Seconds()) @@ -974,13 +990,12 @@ func (e *Exporter) scrape(ch chan<- prometheus.Metric) { e.error.Set(0) e.totalScrapes.Inc() - db, err := sql.Open("postgres", e.dsn) + db, err := getDB(e.dsn) if err != nil { log.Infoln("Error opening connection to database:", err) e.error.Set(1) return } - defer db.Close() // Check if map versions need to be updated if err := e.checkMapVersions(ch, db); err != nil { @@ -1026,4 +1041,7 @@ func main() { log.Infof("Starting Server: %s", *listenAddress) log.Fatal(http.ListenAndServe(*listenAddress, nil)) + if db != nil { + defer db.Close() + } }