diff --git a/internal/controller/telemetry/collector.go b/internal/controller/telemetry/collector.go index 0369b3b740..41709f9271 100644 --- a/internal/controller/telemetry/collector.go +++ b/internal/controller/telemetry/collector.go @@ -110,6 +110,48 @@ type NGFResourceCounts struct { UpstreamSettingsPolicyCount int64 // GatewayAttachedNpCount is the total number of NginxProxy resources that are attached to a Gateway. GatewayAttachedNpCount int64 + // GatewayAttachedProxySettingsPolicyCount is the number of relevant ProxySettingsPolicies + // attached at the Gateway level. + GatewayAttachedProxySettingsPolicyCount int64 + // RouteAttachedProxySettingsPolicyCount is the number of relevant ProxySettingsPolicies + // attached at the Route level. + RouteAttachedProxySettingsPolicyCount int64 +} + +func (rc *NGFResourceCounts) CountPolicies(g *graph.Graph) { + rc.BackendTLSPolicyCount = int64(len(g.BackendTLSPolicies)) + + for policyKey, policy := range g.NGFPolicies { + switch policyKey.GVK.Kind { + case kinds.ClientSettingsPolicy: + if len(policy.TargetRefs) == 0 { + continue + } + + if policy.TargetRefs[0].Kind == kinds.Gateway { + rc.GatewayAttachedClientSettingsPolicyCount++ + } else { + rc.RouteAttachedClientSettingsPolicyCount++ + } + case kinds.ObservabilityPolicy: + rc.ObservabilityPolicyCount++ + case kinds.UpstreamSettingsPolicy: + rc.UpstreamSettingsPolicyCount++ + case kinds.ProxySettingsPolicy: + if len(policy.TargetRefs) == 0 { + continue + } + + for _, tr := range policy.TargetRefs { + switch tr.Kind { + case kinds.Gateway: + rc.GatewayAttachedProxySettingsPolicyCount++ + case kinds.HTTPRoute, kinds.GRPCRoute: + rc.RouteAttachedProxySettingsPolicyCount++ + } + } + } + } } // DataCollectorConfig holds configuration parameters for DataCollectorImpl. @@ -244,26 +286,7 @@ func collectGraphResourceCount( } } - ngfResourceCounts.BackendTLSPolicyCount = int64(len(g.BackendTLSPolicies)) - - for policyKey, policy := range g.NGFPolicies { - switch policyKey.GVK.Kind { - case kinds.ClientSettingsPolicy: - if len(policy.TargetRefs) == 0 { - continue - } - - if policy.TargetRefs[0].Kind == kinds.Gateway { - ngfResourceCounts.GatewayAttachedClientSettingsPolicyCount++ - } else { - ngfResourceCounts.RouteAttachedClientSettingsPolicyCount++ - } - case kinds.ObservabilityPolicy: - ngfResourceCounts.ObservabilityPolicyCount++ - case kinds.UpstreamSettingsPolicy: - ngfResourceCounts.UpstreamSettingsPolicyCount++ - } - } + ngfResourceCounts.CountPolicies(g) ngfResourceCounts.NginxProxyCount = int64(len(g.ReferencedNginxProxies)) ngfResourceCounts.SnippetsFilterCount = int64(len(g.SnippetsFilters)) diff --git a/internal/controller/telemetry/collector_test.go b/internal/controller/telemetry/collector_test.go index 2316d9414e..f9d41e240f 100644 --- a/internal/controller/telemetry/collector_test.go +++ b/internal/controller/telemetry/collector_test.go @@ -384,6 +384,22 @@ var _ = Describe("Collector", Ordered, func() { NsName: types.NamespacedName{Namespace: "test", Name: "UpstreamSettingsPolicy-1"}, GVK: schema.GroupVersionKind{Kind: kinds.UpstreamSettingsPolicy}, }: {}, + { + NsName: types.NamespacedName{Namespace: "test", Name: "ProxySettingsPolicy-1"}, + GVK: schema.GroupVersionKind{Kind: kinds.ProxySettingsPolicy}, + }: {TargetRefs: []graph.PolicyTargetRef{{Kind: kinds.Gateway}}}, + { + NsName: types.NamespacedName{Namespace: "test", Name: "ProxySettingsPolicy-2"}, + GVK: schema.GroupVersionKind{Kind: kinds.ProxySettingsPolicy}, + }: {TargetRefs: []graph.PolicyTargetRef{{Kind: kinds.HTTPRoute}}}, + { + NsName: types.NamespacedName{Namespace: "test", Name: "ProxySettingsPolicy-3"}, + GVK: schema.GroupVersionKind{Kind: kinds.ProxySettingsPolicy}, + }: {TargetRefs: []graph.PolicyTargetRef{{Kind: kinds.GRPCRoute}}}, + { + NsName: types.NamespacedName{Namespace: "test", Name: "ProxySettingsPolicy-4"}, + GVK: schema.GroupVersionKind{Kind: kinds.ProxySettingsPolicy}, + }: {TargetRefs: []graph.PolicyTargetRef{{Kind: kinds.Gateway}, {Kind: kinds.HTTPRoute}, {Kind: kinds.GRPCRoute}}}, }, ReferencedNginxProxies: map[types.NamespacedName]*graph.NginxProxy{ {Namespace: "test", Name: "NginxProxy-1"}: &gcNP, @@ -494,6 +510,8 @@ var _ = Describe("Collector", Ordered, func() { SnippetsFilterCount: 3, UpstreamSettingsPolicyCount: 1, GatewayAttachedNpCount: 2, + GatewayAttachedProxySettingsPolicyCount: 2, + RouteAttachedProxySettingsPolicyCount: 4, } expData.ClusterVersion = "1.29.2" expData.ClusterPlatform = "kind" @@ -700,6 +718,22 @@ var _ = Describe("Collector", Ordered, func() { NsName: types.NamespacedName{Namespace: "test", Name: "UpstreamSettingsPolicy-1"}, GVK: schema.GroupVersionKind{Kind: kinds.UpstreamSettingsPolicy}, }: {}, + { + NsName: types.NamespacedName{Namespace: "test", Name: "ProxySettingsPolicy-1"}, + GVK: schema.GroupVersionKind{Kind: kinds.ProxySettingsPolicy}, + }: {TargetRefs: []graph.PolicyTargetRef{{Kind: kinds.Gateway}}}, + { + NsName: types.NamespacedName{Namespace: "test", Name: "ProxySettingsPolicy-2"}, + GVK: schema.GroupVersionKind{Kind: kinds.ProxySettingsPolicy}, + }: {TargetRefs: []graph.PolicyTargetRef{{Kind: kinds.HTTPRoute}}}, + { + NsName: types.NamespacedName{Namespace: "test", Name: "ProxySettingsPolicy-plural"}, + GVK: schema.GroupVersionKind{Kind: kinds.ProxySettingsPolicy}, + }: {TargetRefs: []graph.PolicyTargetRef{{Kind: kinds.Gateway}, {Kind: kinds.HTTPRoute}, {Kind: kinds.GRPCRoute}}}, + { + NsName: types.NamespacedName{Namespace: "test", Name: "ProxySettingsPolicy-empty"}, + GVK: schema.GroupVersionKind{Kind: kinds.ProxySettingsPolicy}, + }: {}, }, ReferencedNginxProxies: map[types.NamespacedName]*graph.NginxProxy{ {Namespace: "test", Name: "NginxProxy-1"}: {Valid: true}, @@ -794,6 +828,8 @@ var _ = Describe("Collector", Ordered, func() { UpstreamSettingsPolicyCount: 1, GatewayAttachedNpCount: 1, BackendTLSPolicyCount: 1, + GatewayAttachedProxySettingsPolicyCount: 2, + RouteAttachedProxySettingsPolicyCount: 3, } expData.NginxPodCount = 1 expData.InferencePoolCount = 1 diff --git a/internal/controller/telemetry/data.avdl b/internal/controller/telemetry/data.avdl index 9b56755400..e3509835ba 100644 --- a/internal/controller/telemetry/data.avdl +++ b/internal/controller/telemetry/data.avdl @@ -105,6 +105,14 @@ attached at the Gateway level. */ /** GatewayAttachedNpCount is the total number of NginxProxy resources that are attached to a Gateway. */ long? GatewayAttachedNpCount = null; + /** GatewayAttachedProxySettingsPolicyCount is the number of relevant ProxySettingsPolicies +attached at the Gateway level. */ + long? GatewayAttachedProxySettingsPolicyCount = null; + + /** RouteAttachedProxySettingsPolicyCount is the number of relevant ProxySettingsPolicies +attached at the Route level. */ + long? RouteAttachedProxySettingsPolicyCount = null; + /** NginxPodCount is the total number of Nginx data plane Pods. */ long? NginxPodCount = null; diff --git a/internal/controller/telemetry/data_test.go b/internal/controller/telemetry/data_test.go index f6dbcfc333..6c1b1019f2 100644 --- a/internal/controller/telemetry/data_test.go +++ b/internal/controller/telemetry/data_test.go @@ -41,6 +41,8 @@ func TestDataAttributes(t *testing.T) { SnippetsFilterCount: 13, UpstreamSettingsPolicyCount: 14, GatewayAttachedNpCount: 15, + GatewayAttachedProxySettingsPolicyCount: 17, + RouteAttachedProxySettingsPolicyCount: 18, }, SnippetsFiltersDirectives: []string{"main-three-count", "http-two-count", "server-one-count"}, SnippetsFiltersDirectivesCount: []int64{3, 2, 1}, @@ -84,6 +86,8 @@ func TestDataAttributes(t *testing.T) { attribute.Int64("SnippetsFilterCount", 13), attribute.Int64("UpstreamSettingsPolicyCount", 14), attribute.Int64("GatewayAttachedNpCount", 15), + attribute.Int64("GatewayAttachedProxySettingsPolicyCount", 17), + attribute.Int64("RouteAttachedProxySettingsPolicyCount", 18), attribute.Int64("NginxPodCount", 3), attribute.Int64("ControlPlanePodCount", 3), attribute.Bool("NginxOneConnectionEnabled", true), @@ -132,6 +136,8 @@ func TestDataAttributesWithEmptyData(t *testing.T) { attribute.Int64("SnippetsFilterCount", 0), attribute.Int64("UpstreamSettingsPolicyCount", 0), attribute.Int64("GatewayAttachedNpCount", 0), + attribute.Int64("GatewayAttachedProxySettingsPolicyCount", 0), + attribute.Int64("RouteAttachedProxySettingsPolicyCount", 0), attribute.Int64("NginxPodCount", 0), attribute.Int64("ControlPlanePodCount", 0), attribute.Bool("NginxOneConnectionEnabled", false), diff --git a/internal/controller/telemetry/ngfresourcecounts_attributes_generated.go b/internal/controller/telemetry/ngfresourcecounts_attributes_generated.go index 3073f15eb4..3cf498d027 100644 --- a/internal/controller/telemetry/ngfresourcecounts_attributes_generated.go +++ b/internal/controller/telemetry/ngfresourcecounts_attributes_generated.go @@ -28,6 +28,8 @@ func (d *NGFResourceCounts) Attributes() []attribute.KeyValue { attrs = append(attrs, attribute.Int64("SnippetsFilterCount", d.SnippetsFilterCount)) attrs = append(attrs, attribute.Int64("UpstreamSettingsPolicyCount", d.UpstreamSettingsPolicyCount)) attrs = append(attrs, attribute.Int64("GatewayAttachedNpCount", d.GatewayAttachedNpCount)) + attrs = append(attrs, attribute.Int64("GatewayAttachedProxySettingsPolicyCount", d.GatewayAttachedProxySettingsPolicyCount)) + attrs = append(attrs, attribute.Int64("RouteAttachedProxySettingsPolicyCount", d.RouteAttachedProxySettingsPolicyCount)) return attrs } diff --git a/tests/suite/telemetry_test.go b/tests/suite/telemetry_test.go index 51d227ed2d..91780f8c55 100644 --- a/tests/suite/telemetry_test.go +++ b/tests/suite/telemetry_test.go @@ -93,6 +93,8 @@ var _ = Describe("Telemetry test with OTel collector", Label("telemetry"), func( "SnippetsFilterCount: Int(0)", "UpstreamSettingsPolicyCount: Int(0)", "GatewayAttachedNpCount: Int(0)", + "GatewayAttachedProxySettingsPolicyCount: Int(0)", + "RouteAttachedProxySettingsPolicyCount: Int(0)", "NginxPodCount: Int(0)", "ControlPlanePodCount: Int(1)", "NginxOneConnectionEnabled: Bool(false)",