You've already forked postgres_exporter
							
							
				mirror of
				https://github.com/prometheus-community/postgres_exporter.git
				synced 2025-11-03 07:53:12 +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