From 4d220853f50db2c2ac0dde40b2c93dccf6d4cbb7 Mon Sep 17 00:00:00 2001 From: Spencer Ugbo Date: Thu, 13 Aug 2026 10:38:25 +0100 Subject: [PATCH] add telemetry support for native oidc --- internal/telemetry/cluster.go | 2 ++ internal/telemetry/collector.go | 5 ++++ internal/telemetry/collector_test.go | 24 +++++++++++++++++++ internal/telemetry/data.avdl | 3 +++ internal/telemetry/exporter.go | 2 ++ .../nicresourcecounts_attributes_generated.go | 1 + 6 files changed, 37 insertions(+) diff --git a/internal/telemetry/cluster.go b/internal/telemetry/cluster.go index 872c58804d..9de94de3bf 100644 --- a/internal/telemetry/cluster.go +++ b/internal/telemetry/cluster.go @@ -278,6 +278,8 @@ func (c *Collector) PolicyCount() map[string]int { policyCounters["ExternalAuth"]++ case spec.HSTS != nil: policyCounters["HSTS"]++ + case spec.OIDCNative != nil: + policyCounters["OIDCNative"]++ } } return policyCounters diff --git a/internal/telemetry/collector.go b/internal/telemetry/collector.go index 7fe6307beb..a3d1dea1e7 100644 --- a/internal/telemetry/collector.go +++ b/internal/telemetry/collector.go @@ -169,6 +169,7 @@ func (c *Collector) Collect(ctx context.Context) { CORSPolicies: int64(report.CORSCount), ExternalAuthPolicies: int64(report.ExternalAuthCount), HSTSPolicies: int64(report.HSTSCount), + OIDCNativePolicies: int64(report.OIDCNativeCount), WAFBundleSourceTypes: report.WAFBundleSourceTypes, WAFLogBundleSourceTypes: report.WAFLogBundleSourceTypes, @@ -230,6 +231,7 @@ type Report struct { CORSCount int ExternalAuthCount int HSTSCount int + OIDCNativeCount int WAFBundleSourceTypes []string WAFLogBundleSourceTypes []string GlobalConfiguration bool @@ -314,6 +316,7 @@ func (c *Collector) BuildReport(ctx context.Context) (Report, error) { corsCount int externalAuthCount int hstsCount int + oidcNativeCount int ) // Collect Custom Resources (Policies) only if CR enabled at startup. if c.Config.CustomResourcesEnabled { @@ -333,6 +336,7 @@ func (c *Collector) BuildReport(ctx context.Context) (Report, error) { corsCount = policies["CORS"] externalAuthCount = policies["ExternalAuth"] hstsCount = policies["HSTS"] + oidcNativeCount = policies["OIDCNative"] } wafBundleSourceTypes := c.WAFBundleSourceTypes() @@ -401,6 +405,7 @@ func (c *Collector) BuildReport(ctx context.Context) (Report, error) { CORSCount: corsCount, ExternalAuthCount: externalAuthCount, HSTSCount: hstsCount, + OIDCNativeCount: oidcNativeCount, GlobalConfiguration: c.Config.GlobalConfiguration, IngressAnnotations: ingressAnnotations, AppProtectVersion: appProtectVersion, diff --git a/internal/telemetry/collector_test.go b/internal/telemetry/collector_test.go index e075544139..b149261628 100644 --- a/internal/telemetry/collector_test.go +++ b/internal/telemetry/collector_test.go @@ -296,6 +296,13 @@ func TestCollectPolicyCountOnCustomResourcesEnabled(t *testing.T) { }, want: 1, }, + { + name: "OIDCNativePolicy", + policies: func() []*conf_v1.Policy { + return []*conf_v1.Policy{oidcNativePolicy} + }, + want: 1, + }, { name: "MultiplePolicies", policies: func() []*conf_v1.Policy { @@ -451,6 +458,7 @@ func TestCollectPoliciesReportOnEnabledCustomResources(t *testing.T) { corsPolicy, externalAuthPolicy, hstsPolicy, + oidcNativePolicy, } }, CustomResourcesEnabled: true, @@ -481,6 +489,7 @@ func TestCollectPoliciesReportOnEnabledCustomResources(t *testing.T) { CORSPolicies: 1, ExternalAuthPolicies: 1, HSTSPolicies: 1, + OIDCNativePolicies: 1, } td := telemetry.Data{ @@ -3001,6 +3010,21 @@ var ( Status: conf_v1.PolicyStatus{}, } + oidcNativePolicy = &conf_v1.Policy{ + TypeMeta: metaV1.TypeMeta{ + Kind: "Policy", + APIVersion: "k8s.nginx.org/v1", + }, + ObjectMeta: metaV1.ObjectMeta{ + Name: "oidc-native-policy", + Namespace: "default", + }, + Spec: conf_v1.PolicySpec{ + OIDCNative: &conf_v1.OIDCNative{}, + }, + Status: conf_v1.PolicyStatus{}, + } + wafBundleSourceN1CPolicy = &conf_v1.Policy{ TypeMeta: metaV1.TypeMeta{ Kind: "Policy", diff --git a/internal/telemetry/data.avdl b/internal/telemetry/data.avdl index e3d85c6a7a..d48635818f 100644 --- a/internal/telemetry/data.avdl +++ b/internal/telemetry/data.avdl @@ -148,5 +148,8 @@ It is the UID of the `kube-system` Namespace. */ /** HSTSPolicies is the number of HSTS policies managed by NGINX Ingress Controller */ long? HSTSPolicies = null; + /** OIDCNativePolicies is the number of OIDC Native policies managed by NGINX Ingress Controller */ + long? OIDCNativePolicies = null; + } } diff --git a/internal/telemetry/exporter.go b/internal/telemetry/exporter.go index a9278bdd99..ab2fb16121 100644 --- a/internal/telemetry/exporter.go +++ b/internal/telemetry/exporter.go @@ -156,4 +156,6 @@ type NICResourceCounts struct { WAFLogBundleSourceTypes []string // HSTSPolicies is the number of HSTS policies managed by NGINX Ingress Controller HSTSPolicies int64 + // OIDCNativePolicies is the number of OIDC Native policies managed by NGINX Ingress Controller + OIDCNativePolicies int64 } diff --git a/internal/telemetry/nicresourcecounts_attributes_generated.go b/internal/telemetry/nicresourcecounts_attributes_generated.go index b283bbbb26..b54f79bb91 100644 --- a/internal/telemetry/nicresourcecounts_attributes_generated.go +++ b/internal/telemetry/nicresourcecounts_attributes_generated.go @@ -50,6 +50,7 @@ func (d *NICResourceCounts) Attributes() []attribute.KeyValue { attrs = append(attrs, attribute.StringSlice("WAFBundleSourceTypes", d.WAFBundleSourceTypes)) attrs = append(attrs, attribute.StringSlice("WAFLogBundleSourceTypes", d.WAFLogBundleSourceTypes)) attrs = append(attrs, attribute.Int64("HSTSPolicies", d.HSTSPolicies)) + attrs = append(attrs, attribute.Int64("OIDCNativePolicies", d.OIDCNativePolicies)) return attrs }