Skip to content

Commit cbaf869

Browse files
committed
collector util func
Check feature gates and check spec
1 parent c5665b6 commit cbaf869

File tree

5 files changed

+67
-13
lines changed

5 files changed

+67
-13
lines changed

internal/collector/instance.go

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,9 +49,7 @@ func AddToPod(
4949
logDirectories []string,
5050
includeLogrotate bool,
5151
) {
52-
if spec == nil ||
53-
!(feature.Enabled(ctx, feature.OpenTelemetryLogs) ||
54-
feature.Enabled(ctx, feature.OpenTelemetryMetrics)) {
52+
if !OpenTelemetryLogsOrMetricsEnabled(ctx, spec) {
5553
return
5654
}
5755

internal/collector/util.go

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
// Copyright 2025 Crunchy Data Solutions, Inc.
2+
//
3+
// SPDX-License-Identifier: Apache-2.0
4+
5+
package collector
6+
7+
import (
8+
"context"
9+
10+
"github.com/crunchydata/postgres-operator/internal/feature"
11+
"github.com/crunchydata/postgres-operator/pkg/apis/postgres-operator.crunchydata.com/v1beta1"
12+
)
13+
14+
type CrunchyCRD interface {
15+
*v1beta1.PostgresCluster | *v1beta1.PGAdmin | *v1beta1.InstrumentationSpec
16+
}
17+
18+
func OpenTelemetrySpecPresent[T CrunchyCRD](object T) bool {
19+
20+
switch v := any(object).(type) {
21+
case *v1beta1.InstrumentationSpec:
22+
return true
23+
case *v1beta1.PostgresCluster:
24+
return v.Spec.Instrumentation != nil
25+
case *v1beta1.PGAdmin:
26+
return v.Spec.Instrumentation != nil
27+
default:
28+
return false
29+
}
30+
31+
}
32+
33+
func OpenTelemetryLogsOrMetricsEnabled[T CrunchyCRD](
34+
ctx context.Context,
35+
object T,
36+
) bool {
37+
return OpenTelemetrySpecPresent(object) &&
38+
(feature.Enabled(ctx, feature.OpenTelemetryLogs) ||
39+
feature.Enabled(ctx, feature.OpenTelemetryMetrics))
40+
}
41+
42+
func OpenTelemetryLogsEnabled[T CrunchyCRD](
43+
ctx context.Context,
44+
object T,
45+
) bool {
46+
return OpenTelemetrySpecPresent(object) &&
47+
feature.Enabled(ctx, feature.OpenTelemetryLogs)
48+
}
49+
50+
func OpenTelemetryMetricsEnabled[T CrunchyCRD](
51+
ctx context.Context,
52+
object T,
53+
) bool {
54+
return OpenTelemetrySpecPresent(object) &&
55+
feature.Enabled(ctx, feature.OpenTelemetryMetrics)
56+
}

internal/controller/standalone_pgadmin/configmap.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ import (
1919
"github.com/pkg/errors"
2020

2121
"github.com/crunchydata/postgres-operator/internal/collector"
22-
"github.com/crunchydata/postgres-operator/internal/feature"
2322
"github.com/crunchydata/postgres-operator/internal/initialize"
2423
"github.com/crunchydata/postgres-operator/internal/naming"
2524
"github.com/crunchydata/postgres-operator/pkg/apis/postgres-operator.crunchydata.com/v1beta1"
@@ -73,7 +72,7 @@ func configmap(ctx context.Context, pgadmin *v1beta1.PGAdmin,
7372
gunicornRetentionPeriod = "D"
7473
)
7574
// If OTel logs feature gate is enabled, we want to change the pgAdmin/gunicorn logging
76-
if feature.Enabled(ctx, feature.OpenTelemetryLogs) && pgadmin.Spec.Instrumentation != nil {
75+
if collector.OpenTelemetryLogsEnabled(ctx, pgadmin) {
7776
logRetention = true
7877

7978
// If the user has set a retention period, we will use those values for log rotation,

internal/controller/standalone_pgadmin/statefulset.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ import (
1717

1818
"github.com/crunchydata/postgres-operator/internal/collector"
1919
"github.com/crunchydata/postgres-operator/internal/controller/postgrescluster"
20-
"github.com/crunchydata/postgres-operator/internal/feature"
2120
"github.com/crunchydata/postgres-operator/internal/initialize"
2221
"github.com/crunchydata/postgres-operator/internal/naming"
2322
"github.com/crunchydata/postgres-operator/pkg/apis/postgres-operator.crunchydata.com/v1beta1"
@@ -122,7 +121,7 @@ func statefulset(
122121

123122
pod(pgadmin, configmap, &sts.Spec.Template.Spec, dataVolume)
124123

125-
if pgadmin.Spec.Instrumentation != nil && feature.Enabled(ctx, feature.OpenTelemetryLogs) {
124+
if collector.OpenTelemetryLogsEnabled(ctx, pgadmin) {
126125
// Logs for gunicorn and pgadmin write to /var/lib/pgadmin/logs
127126
// so the collector needs access to that that path.
128127
dataVolumeMount := corev1.VolumeMount{

internal/pgmonitor/postgres.go

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,11 @@ import (
88
"context"
99
"strings"
1010

11-
corev1 "k8s.io/api/core/v1"
12-
13-
"github.com/crunchydata/postgres-operator/internal/feature"
11+
"github.com/crunchydata/postgres-operator/internal/collector"
1412
"github.com/crunchydata/postgres-operator/internal/logging"
1513
"github.com/crunchydata/postgres-operator/internal/postgres"
1614
"github.com/crunchydata/postgres-operator/pkg/apis/postgres-operator.crunchydata.com/v1beta1"
15+
corev1 "k8s.io/api/core/v1"
1716
)
1817

1918
const (
@@ -24,7 +23,8 @@ const (
2423
// PostgreSQLHBAs provides the Postgres HBA rules for allowing the monitoring
2524
// exporter to be accessible
2625
func PostgreSQLHBAs(ctx context.Context, inCluster *v1beta1.PostgresCluster, outHBAs *postgres.HBAs) {
27-
if ExporterEnabled(ctx, inCluster) || feature.Enabled(ctx, feature.OpenTelemetryMetrics) {
26+
if ExporterEnabled(ctx, inCluster) ||
27+
collector.OpenTelemetryMetricsEnabled(ctx, inCluster) {
2828
// Limit the monitoring user to local connections using SCRAM.
2929
outHBAs.Mandatory = append(outHBAs.Mandatory,
3030
postgres.NewHBA().TCP().Users(MonitoringUser).Method("scram-sha-256").Network("127.0.0.0/8"),
@@ -34,9 +34,11 @@ func PostgreSQLHBAs(ctx context.Context, inCluster *v1beta1.PostgresCluster, out
3434
}
3535

3636
// PostgreSQLParameters provides additional required configuration parameters
37-
// that Postgres needs to support monitoring
37+
// that Postgres needs to support monitoring for both pgMonitor and OTel
3838
func PostgreSQLParameters(ctx context.Context, inCluster *v1beta1.PostgresCluster, outParameters *postgres.Parameters) {
39-
if ExporterEnabled(ctx, inCluster) || feature.Enabled(ctx, feature.OpenTelemetryMetrics) {
39+
if ExporterEnabled(ctx, inCluster) ||
40+
collector.OpenTelemetryMetricsEnabled(ctx, inCluster) {
41+
4042
// Exporter expects that shared_preload_libraries are installed
4143
// pg_stat_statements: https://access.crunchydata.com/documentation/pgmonitor/latest/exporter/
4244
// pgnodemx: https://github.com/CrunchyData/pgnodemx

0 commit comments

Comments
 (0)