Select Git revision
monitor_postgres.go
-
Janne Mareike Koschinski authoredJanne Mareike Koschinski authored
monitor_postgres.go 1.09 KiB
package main
import (
"database/sql"
"fmt"
_ "github.com/lib/pq"
"github.com/sirupsen/logrus"
"time"
)
type PostgresMonitor struct {
config ConfigComponent
}
func NewPostgresMonitor(config ConfigComponent) *PostgresMonitor {
return &PostgresMonitor{
config: config,
}
}
func (m *PostgresMonitor) Config() *ConfigComponent {
return &m.config
}
func (m *PostgresMonitor) Measure() (Datapoint, error) {
sslMode := "verify-full"
if m.config.Postgres.Insecure {
sslMode = "allow"
}
connStr := fmt.Sprintf(
"postgres://%s:%s@%s:%d/%s?sslmode=%s",
m.config.Postgres.Username,
m.config.Postgres.Password,
m.config.Postgres.Hostname,
m.config.Postgres.Port,
m.config.Postgres.Database,
sslMode,
)
before := time.Now()
db, err := sql.Open("postgres", connStr)
after := time.Now()
latency := int(after.Sub(before).Nanoseconds() / 1000000)
defer db.Close()
if err != nil {
logrus.Infof("Monitor %s: %s", err)
return Datapoint{
Time: after,
Up: false,
Latency: latency,
}, nil
}
return Datapoint{
Time: after,
Up: true,
Latency: latency,
}, nil
}