diff --git a/internal/controller/telemetry/collector.go b/internal/controller/telemetry/collector.go index e06da3f0b8..43a8a2218b 100644 --- a/internal/controller/telemetry/collector.go +++ b/internal/controller/telemetry/collector.go @@ -66,6 +66,8 @@ type Data struct { ControlPlanePodCount int64 // NginxOneConnectionEnabled is a boolean that indicates whether the connection to the Nginx One Console is enabled. NginxOneConnectionEnabled bool + // InferencePoolCount is the number of InferencePools that are referenced by at least one Route. + InferencePoolCount int64 } // NGFResourceCounts stores the counts of all relevant resources that NGF processes and generates configuration from. @@ -174,6 +176,8 @@ func (c DataCollectorImpl) Collect(ctx context.Context) (Data, error) { nginxPodCount := getNginxPodCount(g, clusterInfo.NodeCount) + inferencePoolCount := int64(len(g.ReferencedInferencePools)) + data := Data{ Data: tel.Data{ ProjectName: "NGF", @@ -194,6 +198,7 @@ func (c DataCollectorImpl) Collect(ctx context.Context) (Data, error) { NginxPodCount: nginxPodCount, ControlPlanePodCount: int64(replicaCount), NginxOneConnectionEnabled: c.cfg.NginxOneConsoleConnection, + InferencePoolCount: inferencePoolCount, } return data, nil diff --git a/internal/controller/telemetry/collector_test.go b/internal/controller/telemetry/collector_test.go index 8c749fdfbe..3aa9896bae 100644 --- a/internal/controller/telemetry/collector_test.go +++ b/internal/controller/telemetry/collector_test.go @@ -417,6 +417,11 @@ var _ = Describe("Collector", Ordered, func() { }, }, }, + ReferencedInferencePools: map[types.NamespacedName]*graph.ReferencedInferencePool{ + {Namespace: "test", Name: "inferencePool-1"}: {}, + {Namespace: "test", Name: "inferencePool-2"}: {}, + {Namespace: "test", Name: "inferencePool-3"}: {}, + }, } configs := []*dataplane.Configuration{ @@ -520,6 +525,8 @@ var _ = Describe("Collector", Ordered, func() { expData.ControlPlanePodCount = int64(2) expData.NginxOneConnectionEnabled = true + expData.InferencePoolCount = 3 + data, err := dataCollector.Collect(ctx) Expect(err).ToNot(HaveOccurred()) @@ -700,6 +707,9 @@ var _ = Describe("Collector", Ordered, func() { BackendTLSPolicies: map[types.NamespacedName]*graph.BackendTLSPolicy{ {Namespace: "test", Name: "BackendTLSPolicy-1"}: {}, }, + ReferencedInferencePools: map[types.NamespacedName]*graph.ReferencedInferencePool{ + {Namespace: "test", Name: "inferencePool-1"}: {}, + }, } config1 = []*dataplane.Configuration{ @@ -783,6 +793,7 @@ var _ = Describe("Collector", Ordered, func() { BackendTLSPolicyCount: 1, } expData.NginxPodCount = 1 + expData.InferencePoolCount = 1 data, err := dataCollector.Collect(ctx) diff --git a/internal/controller/telemetry/data.avdl b/internal/controller/telemetry/data.avdl index c19881315a..10034cfbfb 100644 --- a/internal/controller/telemetry/data.avdl +++ b/internal/controller/telemetry/data.avdl @@ -114,5 +114,8 @@ attached at the Gateway level. */ /** NginxOneConnectionEnabled is a boolean that indicates whether the connection to the Nginx One Console is enabled. */ boolean? NginxOneConnectionEnabled = null; + /** InferencePoolCount is the number of InferencePools that are referenced by at least one Route. */ + long? InferencePoolCount = null; + } } diff --git a/internal/controller/telemetry/data_attributes_generated.go b/internal/controller/telemetry/data_attributes_generated.go index 3b8b3dcf3f..37a5a61a03 100644 --- a/internal/controller/telemetry/data_attributes_generated.go +++ b/internal/controller/telemetry/data_attributes_generated.go @@ -23,6 +23,7 @@ func (d *Data) Attributes() []attribute.KeyValue { attrs = append(attrs, attribute.Int64("NginxPodCount", d.NginxPodCount)) attrs = append(attrs, attribute.Int64("ControlPlanePodCount", d.ControlPlanePodCount)) attrs = append(attrs, attribute.Bool("NginxOneConnectionEnabled", d.NginxOneConnectionEnabled)) + attrs = append(attrs, attribute.Int64("InferencePoolCount", d.InferencePoolCount)) return attrs } diff --git a/internal/controller/telemetry/data_test.go b/internal/controller/telemetry/data_test.go index 49c8e3543c..633af19766 100644 --- a/internal/controller/telemetry/data_test.go +++ b/internal/controller/telemetry/data_test.go @@ -47,6 +47,7 @@ func TestDataAttributes(t *testing.T) { NginxPodCount: 3, ControlPlanePodCount: 3, NginxOneConnectionEnabled: true, + InferencePoolCount: 16, } expected := []attribute.KeyValue{ @@ -86,6 +87,7 @@ func TestDataAttributes(t *testing.T) { attribute.Int64("NginxPodCount", 3), attribute.Int64("ControlPlanePodCount", 3), attribute.Bool("NginxOneConnectionEnabled", true), + attribute.Int64("InferencePoolCount", 16), } result := data.Attributes() @@ -132,6 +134,7 @@ func TestDataAttributesWithEmptyData(t *testing.T) { attribute.Int64("NginxPodCount", 0), attribute.Int64("ControlPlanePodCount", 0), attribute.Bool("NginxOneConnectionEnabled", false), + attribute.Int64("InferencePoolCount", 0), } result := data.Attributes() diff --git a/tests/suite/telemetry_test.go b/tests/suite/telemetry_test.go index 2ad0c0b3a0..7ddce2aa26 100644 --- a/tests/suite/telemetry_test.go +++ b/tests/suite/telemetry_test.go @@ -96,6 +96,7 @@ var _ = Describe("Telemetry test with OTel collector", Label("telemetry"), func( "NginxPodCount: Int(0)", "ControlPlanePodCount: Int(1)", "NginxOneConnectionEnabled: Bool(false)", + "InferencePoolCount: Int(0)", }, ) })