From 1c66044856afa39b90d20282bbc451226e86d89d Mon Sep 17 00:00:00 2001 From: Michael Todorovic Date: Wed, 27 Nov 2024 15:06:40 +0100 Subject: [PATCH 1/3] fix: skip collector if pg<17 Signed-off-by: Michael Todorovic --- collector/pg_stat_checkpointer.go | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/collector/pg_stat_checkpointer.go b/collector/pg_stat_checkpointer.go index 284cf650c..55663fcab 100644 --- a/collector/pg_stat_checkpointer.go +++ b/collector/pg_stat_checkpointer.go @@ -16,7 +16,9 @@ package collector import ( "context" "database/sql" + "log/slog" + "github.com/blang/semver/v4" "github.com/prometheus/client_golang/prometheus" ) @@ -29,10 +31,11 @@ func init() { } type PGStatCheckpointerCollector struct { + log *slog.Logger } -func NewPGStatCheckpointerCollector(collectorConfig) (Collector, error) { - return &PGStatCheckpointerCollector{}, nil +func NewPGStatCheckpointerCollector(config collectorConfig) (Collector, error) { + return &PGStatCheckpointerCollector{log: config.logger}, nil } var ( @@ -104,8 +107,15 @@ var ( FROM pg_stat_checkpointer;` ) -func (PGStatCheckpointerCollector) Update(ctx context.Context, instance *instance, ch chan<- prometheus.Metric) error { +func (c PGStatCheckpointerCollector) Update(ctx context.Context, instance *instance, ch chan<- prometheus.Metric) error { db := instance.getDB() + + before17 := instance.version.Compare(semver.MustParse("17.0.0")) + if before17 < 0 { + c.log.Warn("pg_stat_checkpointer collector is not available on PostgreSQL < 17.0.0, skipping") + return nil + } + row := db.QueryRowContext(ctx, statCheckpointerQuery) // num_timed = nt = bigint From d55dd27b78c1bf7b11d8236e594bf8327228f989 Mon Sep 17 00:00:00 2001 From: Michael Todorovic Date: Wed, 27 Nov 2024 18:14:48 +0100 Subject: [PATCH 2/3] fix: better condition Signed-off-by: Michael Todorovic --- collector/pg_stat_checkpointer.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/collector/pg_stat_checkpointer.go b/collector/pg_stat_checkpointer.go index 55663fcab..31e9c5d62 100644 --- a/collector/pg_stat_checkpointer.go +++ b/collector/pg_stat_checkpointer.go @@ -110,8 +110,8 @@ var ( func (c PGStatCheckpointerCollector) Update(ctx context.Context, instance *instance, ch chan<- prometheus.Metric) error { db := instance.getDB() - before17 := instance.version.Compare(semver.MustParse("17.0.0")) - if before17 < 0 { + before17 := instance.version.LT(semver.MustParse("17.0.0")) + if before17 { c.log.Warn("pg_stat_checkpointer collector is not available on PostgreSQL < 17.0.0, skipping") return nil } From 7689de7767ab4d704cd0882ac613b7bfc8c069a6 Mon Sep 17 00:00:00 2001 From: Nicolas Rodriguez Date: Wed, 19 Feb 2025 20:50:51 +0100 Subject: [PATCH 3/3] fix: fix PGStatCheckpointerCollector tests Signed-off-by: Nicolas Rodriguez --- collector/pg_stat_checkpointer_test.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/collector/pg_stat_checkpointer_test.go b/collector/pg_stat_checkpointer_test.go index 2f59343bb..9a8dd7f21 100644 --- a/collector/pg_stat_checkpointer_test.go +++ b/collector/pg_stat_checkpointer_test.go @@ -18,6 +18,7 @@ import ( "time" "github.com/DATA-DOG/go-sqlmock" + "github.com/blang/semver/v4" "github.com/prometheus/client_golang/prometheus" dto "github.com/prometheus/client_model/go" "github.com/smartystreets/goconvey/convey" @@ -30,7 +31,7 @@ func TestPGStatCheckpointerCollector(t *testing.T) { } defer db.Close() - inst := &instance{db: db} + inst := &instance{db: db, version: semver.MustParse("17.0.0")} columns := []string{ "num_timed", @@ -92,7 +93,7 @@ func TestPGStatCheckpointerCollectorNullValues(t *testing.T) { } defer db.Close() - inst := &instance{db: db} + inst := &instance{db: db, version: semver.MustParse("17.0.0")} columns := []string{ "num_timed",