Skip to content

Commit 623c471

Browse files
committed
Add telemetry for ProxySettingsPolicy
1 parent 0f24f89 commit 623c471

File tree

6 files changed

+97
-20
lines changed

6 files changed

+97
-20
lines changed

internal/controller/telemetry/collector.go

Lines changed: 43 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,48 @@ type NGFResourceCounts struct {
110110
UpstreamSettingsPolicyCount int64
111111
// GatewayAttachedNpCount is the total number of NginxProxy resources that are attached to a Gateway.
112112
GatewayAttachedNpCount int64
113+
// GatewayAttachedProxySettingsPolicyCount is the number of relevant ProxySettingsPolicies
114+
// attached at the Gateway level.
115+
GatewayAttachedProxySettingsPolicyCount int64
116+
// RouteAttachedProxySettingsPolicyCount is the number of relevant ProxySettingsPolicies
117+
// attached at the Route level.
118+
RouteAttachedProxySettingsPolicyCount int64
119+
}
120+
121+
func (rc *NGFResourceCounts) CountPolicies(g *graph.Graph) {
122+
rc.BackendTLSPolicyCount = int64(len(g.BackendTLSPolicies))
123+
124+
for policyKey, policy := range g.NGFPolicies {
125+
switch policyKey.GVK.Kind {
126+
case kinds.ClientSettingsPolicy:
127+
if len(policy.TargetRefs) == 0 {
128+
continue
129+
}
130+
131+
if policy.TargetRefs[0].Kind == kinds.Gateway {
132+
rc.GatewayAttachedClientSettingsPolicyCount++
133+
} else {
134+
rc.RouteAttachedClientSettingsPolicyCount++
135+
}
136+
case kinds.ObservabilityPolicy:
137+
rc.ObservabilityPolicyCount++
138+
case kinds.UpstreamSettingsPolicy:
139+
rc.UpstreamSettingsPolicyCount++
140+
case kinds.ProxySettingsPolicy:
141+
if len(policy.TargetRefs) == 0 {
142+
continue
143+
}
144+
145+
for _, tr := range policy.TargetRefs {
146+
switch tr.Kind {
147+
case kinds.Gateway:
148+
rc.GatewayAttachedProxySettingsPolicyCount++
149+
case kinds.HTTPRoute, kinds.GRPCRoute:
150+
rc.RouteAttachedProxySettingsPolicyCount++
151+
}
152+
}
153+
}
154+
}
113155
}
114156

115157
// DataCollectorConfig holds configuration parameters for DataCollectorImpl.
@@ -244,26 +286,7 @@ func collectGraphResourceCount(
244286
}
245287
}
246288

247-
ngfResourceCounts.BackendTLSPolicyCount = int64(len(g.BackendTLSPolicies))
248-
249-
for policyKey, policy := range g.NGFPolicies {
250-
switch policyKey.GVK.Kind {
251-
case kinds.ClientSettingsPolicy:
252-
if len(policy.TargetRefs) == 0 {
253-
continue
254-
}
255-
256-
if policy.TargetRefs[0].Kind == kinds.Gateway {
257-
ngfResourceCounts.GatewayAttachedClientSettingsPolicyCount++
258-
} else {
259-
ngfResourceCounts.RouteAttachedClientSettingsPolicyCount++
260-
}
261-
case kinds.ObservabilityPolicy:
262-
ngfResourceCounts.ObservabilityPolicyCount++
263-
case kinds.UpstreamSettingsPolicy:
264-
ngfResourceCounts.UpstreamSettingsPolicyCount++
265-
}
266-
}
289+
ngfResourceCounts.CountPolicies(g)
267290

268291
ngfResourceCounts.NginxProxyCount = int64(len(g.ReferencedNginxProxies))
269292
ngfResourceCounts.SnippetsFilterCount = int64(len(g.SnippetsFilters))

internal/controller/telemetry/collector_test.go

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -384,6 +384,22 @@ var _ = Describe("Collector", Ordered, func() {
384384
NsName: types.NamespacedName{Namespace: "test", Name: "UpstreamSettingsPolicy-1"},
385385
GVK: schema.GroupVersionKind{Kind: kinds.UpstreamSettingsPolicy},
386386
}: {},
387+
{
388+
NsName: types.NamespacedName{Namespace: "test", Name: "ProxySettingsPolicy-1"},
389+
GVK: schema.GroupVersionKind{Kind: kinds.ProxySettingsPolicy},
390+
}: {TargetRefs: []graph.PolicyTargetRef{{Kind: kinds.Gateway}}},
391+
{
392+
NsName: types.NamespacedName{Namespace: "test", Name: "ProxySettingsPolicy-2"},
393+
GVK: schema.GroupVersionKind{Kind: kinds.ProxySettingsPolicy},
394+
}: {TargetRefs: []graph.PolicyTargetRef{{Kind: kinds.HTTPRoute}}},
395+
{
396+
NsName: types.NamespacedName{Namespace: "test", Name: "ProxySettingsPolicy-3"},
397+
GVK: schema.GroupVersionKind{Kind: kinds.ProxySettingsPolicy},
398+
}: {TargetRefs: []graph.PolicyTargetRef{{Kind: kinds.GRPCRoute}}},
399+
{
400+
NsName: types.NamespacedName{Namespace: "test", Name: "ProxySettingsPolicy-4"},
401+
GVK: schema.GroupVersionKind{Kind: kinds.ProxySettingsPolicy},
402+
}: {TargetRefs: []graph.PolicyTargetRef{{Kind: kinds.Gateway}, {Kind: kinds.HTTPRoute}, {Kind: kinds.GRPCRoute}}},
387403
},
388404
ReferencedNginxProxies: map[types.NamespacedName]*graph.NginxProxy{
389405
{Namespace: "test", Name: "NginxProxy-1"}: &gcNP,
@@ -494,6 +510,8 @@ var _ = Describe("Collector", Ordered, func() {
494510
SnippetsFilterCount: 3,
495511
UpstreamSettingsPolicyCount: 1,
496512
GatewayAttachedNpCount: 2,
513+
GatewayAttachedProxySettingsPolicyCount: 2,
514+
RouteAttachedProxySettingsPolicyCount: 4,
497515
}
498516
expData.ClusterVersion = "1.29.2"
499517
expData.ClusterPlatform = "kind"
@@ -700,6 +718,22 @@ var _ = Describe("Collector", Ordered, func() {
700718
NsName: types.NamespacedName{Namespace: "test", Name: "UpstreamSettingsPolicy-1"},
701719
GVK: schema.GroupVersionKind{Kind: kinds.UpstreamSettingsPolicy},
702720
}: {},
721+
{
722+
NsName: types.NamespacedName{Namespace: "test", Name: "ProxySettingsPolicy-1"},
723+
GVK: schema.GroupVersionKind{Kind: kinds.ProxySettingsPolicy},
724+
}: {TargetRefs: []graph.PolicyTargetRef{{Kind: kinds.Gateway}}},
725+
{
726+
NsName: types.NamespacedName{Namespace: "test", Name: "ProxySettingsPolicy-2"},
727+
GVK: schema.GroupVersionKind{Kind: kinds.ProxySettingsPolicy},
728+
}: {TargetRefs: []graph.PolicyTargetRef{{Kind: kinds.HTTPRoute}}},
729+
{
730+
NsName: types.NamespacedName{Namespace: "test", Name: "ProxySettingsPolicy-plural"},
731+
GVK: schema.GroupVersionKind{Kind: kinds.ProxySettingsPolicy},
732+
}: {TargetRefs: []graph.PolicyTargetRef{{Kind: kinds.Gateway}, {Kind: kinds.HTTPRoute}, {Kind: kinds.GRPCRoute}}},
733+
{
734+
NsName: types.NamespacedName{Namespace: "test", Name: "ProxySettingsPolicy-empty"},
735+
GVK: schema.GroupVersionKind{Kind: kinds.ProxySettingsPolicy},
736+
}: {},
703737
},
704738
ReferencedNginxProxies: map[types.NamespacedName]*graph.NginxProxy{
705739
{Namespace: "test", Name: "NginxProxy-1"}: {Valid: true},
@@ -794,6 +828,8 @@ var _ = Describe("Collector", Ordered, func() {
794828
UpstreamSettingsPolicyCount: 1,
795829
GatewayAttachedNpCount: 1,
796830
BackendTLSPolicyCount: 1,
831+
GatewayAttachedProxySettingsPolicyCount: 2,
832+
RouteAttachedProxySettingsPolicyCount: 3,
797833
}
798834
expData.NginxPodCount = 1
799835
expData.InferencePoolCount = 1

internal/controller/telemetry/data.avdl

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,14 @@ attached at the Gateway level. */
105105
/** GatewayAttachedNpCount is the total number of NginxProxy resources that are attached to a Gateway. */
106106
long? GatewayAttachedNpCount = null;
107107

108+
/** GatewayAttachedProxySettingsPolicyCount is the number of relevant ProxySettingsPolicies
109+
attached at the Gateway level. */
110+
long? GatewayAttachedProxySettingsPolicyCount = null;
111+
112+
/** RouteAttachedProxySettingsPolicyCount is the number of relevant ProxySettingsPolicies
113+
attached at the Route level. */
114+
long? RouteAttachedProxySettingsPolicyCount = null;
115+
108116
/** NginxPodCount is the total number of Nginx data plane Pods. */
109117
long? NginxPodCount = null;
110118

internal/controller/telemetry/data_test.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@ func TestDataAttributes(t *testing.T) {
4141
SnippetsFilterCount: 13,
4242
UpstreamSettingsPolicyCount: 14,
4343
GatewayAttachedNpCount: 15,
44+
GatewayAttachedProxySettingsPolicyCount: 17,
45+
RouteAttachedProxySettingsPolicyCount: 18,
4446
},
4547
SnippetsFiltersDirectives: []string{"main-three-count", "http-two-count", "server-one-count"},
4648
SnippetsFiltersDirectivesCount: []int64{3, 2, 1},
@@ -84,6 +86,8 @@ func TestDataAttributes(t *testing.T) {
8486
attribute.Int64("SnippetsFilterCount", 13),
8587
attribute.Int64("UpstreamSettingsPolicyCount", 14),
8688
attribute.Int64("GatewayAttachedNpCount", 15),
89+
attribute.Int64("GatewayAttachedProxySettingsPolicyCount", 17),
90+
attribute.Int64("RouteAttachedProxySettingsPolicyCount", 18),
8791
attribute.Int64("NginxPodCount", 3),
8892
attribute.Int64("ControlPlanePodCount", 3),
8993
attribute.Bool("NginxOneConnectionEnabled", true),
@@ -132,6 +136,8 @@ func TestDataAttributesWithEmptyData(t *testing.T) {
132136
attribute.Int64("SnippetsFilterCount", 0),
133137
attribute.Int64("UpstreamSettingsPolicyCount", 0),
134138
attribute.Int64("GatewayAttachedNpCount", 0),
139+
attribute.Int64("GatewayAttachedProxySettingsPolicyCount", 0),
140+
attribute.Int64("RouteAttachedProxySettingsPolicyCount", 0),
135141
attribute.Int64("NginxPodCount", 0),
136142
attribute.Int64("ControlPlanePodCount", 0),
137143
attribute.Bool("NginxOneConnectionEnabled", false),

internal/controller/telemetry/ngfresourcecounts_attributes_generated.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ func (d *NGFResourceCounts) Attributes() []attribute.KeyValue {
2828
attrs = append(attrs, attribute.Int64("SnippetsFilterCount", d.SnippetsFilterCount))
2929
attrs = append(attrs, attribute.Int64("UpstreamSettingsPolicyCount", d.UpstreamSettingsPolicyCount))
3030
attrs = append(attrs, attribute.Int64("GatewayAttachedNpCount", d.GatewayAttachedNpCount))
31+
attrs = append(attrs, attribute.Int64("GatewayAttachedProxySettingsPolicyCount", d.GatewayAttachedProxySettingsPolicyCount))
32+
attrs = append(attrs, attribute.Int64("RouteAttachedProxySettingsPolicyCount", d.RouteAttachedProxySettingsPolicyCount))
3133

3234
return attrs
3335
}

tests/suite/telemetry_test.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,8 @@ var _ = Describe("Telemetry test with OTel collector", Label("telemetry"), func(
9393
"SnippetsFilterCount: Int(0)",
9494
"UpstreamSettingsPolicyCount: Int(0)",
9595
"GatewayAttachedNpCount: Int(0)",
96+
"GatewayAttachedProxySettingsPolicyCount: Int(0)",
97+
"RouteAttachedProxySettingsPolicyCount: Int(0)",
9698
"NginxPodCount: Int(0)",
9799
"ControlPlanePodCount: Int(1)",
98100
"NginxOneConnectionEnabled: Bool(false)",

0 commit comments

Comments
 (0)