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
 | 
			
		||||
		}
 | 
			
		||||
		if err = server.Ping(); err != nil {
 | 
			
		||||
			server.Close()
 | 
			
		||||
			delete(s.servers, dsn)
 | 
			
		||||
			time.Sleep(time.Duration(errCount) * time.Second)
 | 
			
		||||
			continue
 | 
			
		||||
 
 | 
			
		||||
@@ -173,11 +173,11 @@ func (p PostgresCollector) Collect(ch chan<- prometheus.Metric) {
 | 
			
		||||
 | 
			
		||||
	// Set up the database connection for the collector.
 | 
			
		||||
	err := inst.setup()
 | 
			
		||||
	defer inst.Close()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		p.logger.Error("Error opening connection to database", "err", err)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	defer inst.Close()
 | 
			
		||||
 | 
			
		||||
	wg := sync.WaitGroup{}
 | 
			
		||||
	wg.Add(len(p.Collectors))
 | 
			
		||||
@@ -190,6 +190,10 @@ func (p PostgresCollector) Collect(ch chan<- prometheus.Metric) {
 | 
			
		||||
	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) {
 | 
			
		||||
	begin := time.Now()
 | 
			
		||||
	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) {
 | 
			
		||||
	// Set up the database connection for the collector.
 | 
			
		||||
	err := pc.instance.setup()
 | 
			
		||||
	defer pc.instance.Close()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		pc.logger.Error("Error opening connection to database", "err", err)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	defer pc.instance.Close()
 | 
			
		||||
 | 
			
		||||
	wg := sync.WaitGroup{}
 | 
			
		||||
	wg.Add(len(pc.collectors))
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user