You've already forked postgres_exporter
mirror of
https://github.com/prometheus-community/postgres_exporter.git
synced 2025-08-09 15:42:47 +03:00
Ensure database connections are always closed (#1177)
Signed-off-by: Sam DeHaan <sam.dehaan@grafana.com> Signed-off-by: Sam DeHaan <dehaansa@gmail.com> Co-authored-by: Sam DeHaan <sam.dehaan@grafana.com> Co-authored-by: Sam DeHaan <dehaansa@gmail.com>
This commit is contained in:
@@ -173,6 +173,7 @@ func (s *Servers) GetServer(dsn string) (*Server, error) {
|
|||||||
s.servers[dsn] = server
|
s.servers[dsn] = server
|
||||||
}
|
}
|
||||||
if err = server.Ping(); err != nil {
|
if err = server.Ping(); err != nil {
|
||||||
|
server.Close()
|
||||||
delete(s.servers, dsn)
|
delete(s.servers, dsn)
|
||||||
time.Sleep(time.Duration(errCount) * time.Second)
|
time.Sleep(time.Duration(errCount) * time.Second)
|
||||||
continue
|
continue
|
||||||
|
@@ -173,11 +173,11 @@ func (p PostgresCollector) Collect(ch chan<- prometheus.Metric) {
|
|||||||
|
|
||||||
// Set up the database connection for the collector.
|
// Set up the database connection for the collector.
|
||||||
err := inst.setup()
|
err := inst.setup()
|
||||||
|
defer inst.Close()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
p.logger.Error("Error opening connection to database", "err", err)
|
p.logger.Error("Error opening connection to database", "err", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
defer inst.Close()
|
|
||||||
|
|
||||||
wg := sync.WaitGroup{}
|
wg := sync.WaitGroup{}
|
||||||
wg.Add(len(p.Collectors))
|
wg.Add(len(p.Collectors))
|
||||||
@@ -190,6 +190,10 @@ func (p PostgresCollector) Collect(ch chan<- prometheus.Metric) {
|
|||||||
wg.Wait()
|
wg.Wait()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (p *PostgresCollector) Close() error {
|
||||||
|
return p.instance.Close()
|
||||||
|
}
|
||||||
|
|
||||||
func execute(ctx context.Context, name string, c Collector, instance *instance, ch chan<- prometheus.Metric, logger *slog.Logger) {
|
func execute(ctx context.Context, name string, c Collector, instance *instance, ch chan<- prometheus.Metric, logger *slog.Logger) {
|
||||||
begin := time.Now()
|
begin := time.Now()
|
||||||
err := c.Update(ctx, instance, ch)
|
err := c.Update(ctx, instance, ch)
|
||||||
|
@@ -76,11 +76,11 @@ func (pc *ProbeCollector) Describe(ch chan<- *prometheus.Desc) {
|
|||||||
func (pc *ProbeCollector) Collect(ch chan<- prometheus.Metric) {
|
func (pc *ProbeCollector) Collect(ch chan<- prometheus.Metric) {
|
||||||
// Set up the database connection for the collector.
|
// Set up the database connection for the collector.
|
||||||
err := pc.instance.setup()
|
err := pc.instance.setup()
|
||||||
|
defer pc.instance.Close()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
pc.logger.Error("Error opening connection to database", "err", err)
|
pc.logger.Error("Error opening connection to database", "err", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
defer pc.instance.Close()
|
|
||||||
|
|
||||||
wg := sync.WaitGroup{}
|
wg := sync.WaitGroup{}
|
||||||
wg.Add(len(pc.collectors))
|
wg.Add(len(pc.collectors))
|
||||||
|
Reference in New Issue
Block a user