Skip to content
This repository was archived by the owner on Apr 17, 2019. It is now read-only.

Commit fdad4bb

Browse files
author
Murat Kabilov
committed
skip non-reachable databases while fetching metrics
fixes #1
1 parent ae679a1 commit fdad4bb

File tree

2 files changed

+14
-3
lines changed

2 files changed

+14
-3
lines changed

main.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,5 +103,4 @@ loop:
103103
}
104104

105105
close(sigs)
106-
os.Exit(1)
107106
}

pkg/pgcollector/pgcollector.go

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -209,6 +209,8 @@ func (p *PgCollector) Collect(metricsCh chan<- prometheus.Metric) {
209209

210210
dbPool := make(map[string][]db.DbInterface)
211211
dbJobs := make(map[string]chan *workerJob)
212+
213+
dbLoop:
212214
for _, dbName := range p.config.DbList() {
213215
dbConf := p.config.Db(dbName)
214216
workersCnt := dbConf.GetWorkers()
@@ -219,7 +221,9 @@ func (p *PgCollector) Collect(metricsCh chan<- prometheus.Metric) {
219221
for i := 0; i < workersCnt; i++ {
220222
conn, err := db.New(dbConf.ConnectionString())
221223
if err != nil {
222-
log.Fatalf("could not create db instance: %v", err)
224+
log.Printf("could not create db instance: %v", err)
225+
atomic.AddUint32(&p.errors, 1)
226+
break dbLoop
223227
}
224228

225229
if pgVer, ok := pgVersions[dbInstance]; !ok {
@@ -228,7 +232,9 @@ func (p *PgCollector) Collect(metricsCh chan<- prometheus.Metric) {
228232
} else {
229233
pgVer, err = conn.PgVersion()
230234
if err != nil {
231-
log.Fatalf("could not get postgresql version: %v", err)
235+
log.Printf("could not get postgresql version: %v", err)
236+
atomic.AddUint32(&p.errors, 1)
237+
break dbLoop
232238
}
233239
}
234240
pgVersions[dbInstance] = pgVer
@@ -237,6 +243,8 @@ func (p *PgCollector) Collect(metricsCh chan<- prometheus.Metric) {
237243
if dbConf.StatementTimeout != 0 {
238244
if err := conn.SetStatementTimeout(dbConf.StatementTimeout); err != nil {
239245
log.Printf("could not set statement timeout for %s: %v", dbInstance, err)
246+
atomic.AddUint32(&p.errors, 1)
247+
break dbLoop
240248
}
241249
}
242250

@@ -259,6 +267,10 @@ func (p *PgCollector) Collect(metricsCh chan<- prometheus.Metric) {
259267
wg.Wait()
260268
for dbName, dbs := range dbPool {
261269
for id, dbConn := range dbs {
270+
if dbConn == nil {
271+
continue
272+
}
273+
262274
if err := dbConn.Close(); err != nil {
263275
log.Fatalf("%d: could not close db connection for %q: %v", id, dbName, err)
264276
}

0 commit comments

Comments
 (0)