This is an automated email from the ASF dual-hosted git repository.

mani pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/yunikorn-core.git


The following commit(s) were added to refs/heads/master by this push:
     new 879c80a7 [YUNIKORN-2015] separate container metric from application in 
queue (#670)
879c80a7 is described below

commit 879c80a787c49c8f8117a18a05d297dab46bfd33
Author: PoAn Yang <[email protected]>
AuthorDate: Wed Oct 11 20:09:19 2023 +0530

    [YUNIKORN-2015] separate container metric from application in queue (#670)
    
    Closes: #670
    
    Signed-off-by: Manikandan R <[email protected]>
---
 pkg/metrics/queue.go      | 22 ++++++++++++++++------
 pkg/metrics/queue_test.go | 32 ++++++++++++++++++++++++++++----
 2 files changed, 44 insertions(+), 10 deletions(-)

diff --git a/pkg/metrics/queue.go b/pkg/metrics/queue.go
index 1cb77a50..8e0dc70a 100644
--- a/pkg/metrics/queue.go
+++ b/pkg/metrics/queue.go
@@ -27,8 +27,9 @@ import (
 
 // QueueMetrics to declare queue metrics
 type QueueMetrics struct {
-       appMetrics      *prometheus.GaugeVec
-       ResourceMetrics *prometheus.GaugeVec
+       appMetrics       *prometheus.GaugeVec
+       containerMetrics *prometheus.CounterVec
+       ResourceMetrics  *prometheus.GaugeVec
 }
 
 // InitQueueMetrics to initialize queue metrics
@@ -42,7 +43,15 @@ func InitQueueMetrics(name string) CoreQueueMetrics {
                        Namespace: Namespace,
                        Subsystem: replaceStr,
                        Name:      "queue_app",
-                       Help:      "Queue application metrics. State of the 
application includes `running`, `accepted`, `rejected`, `failed`, `completed`, 
`allocated`, `released`.",
+                       Help:      "Queue application metrics. State of the 
application includes `accepted`, `rejected`, `running`, `failed`, `completed`.",
+               }, []string{"state"})
+
+       q.containerMetrics = prometheus.NewCounterVec(
+               prometheus.CounterOpts{
+                       Namespace: Namespace,
+                       Subsystem: replaceStr,
+                       Name:      "queue_container",
+                       Help:      "Queue container metrics. State of the 
attempt includes `allocated`, `released`.",
                }, []string{"state"})
 
        q.ResourceMetrics = prometheus.NewGaugeVec(
@@ -55,6 +64,7 @@ func InitQueueMetrics(name string) CoreQueueMetrics {
 
        var queueMetricsList = []prometheus.Collector{
                q.appMetrics,
+               q.containerMetrics,
                q.ResourceMetrics,
        }
 
@@ -101,15 +111,15 @@ func (m *QueueMetrics) IncQueueApplicationsCompleted() {
 }
 
 func (m *QueueMetrics) IncAllocatedContainer() {
-       m.appMetrics.With(prometheus.Labels{"state": "allocated"}).Inc()
+       m.containerMetrics.With(prometheus.Labels{"state": "allocated"}).Inc()
 }
 
 func (m *QueueMetrics) IncReleasedContainer() {
-       m.appMetrics.With(prometheus.Labels{"state": "released"}).Inc()
+       m.containerMetrics.With(prometheus.Labels{"state": "released"}).Inc()
 }
 
 func (m *QueueMetrics) AddReleasedContainers(value int) {
-       m.appMetrics.With(prometheus.Labels{"state": 
"released"}).Add(float64(value))
+       m.containerMetrics.With(prometheus.Labels{"state": 
"released"}).Add(float64(value))
 }
 
 func (m *QueueMetrics) SetQueueGuaranteedResourceMetrics(resourceName string, 
value float64) {
diff --git a/pkg/metrics/queue_test.go b/pkg/metrics/queue_test.go
index ae17ed17..5a3b01b4 100644
--- a/pkg/metrics/queue_test.go
+++ b/pkg/metrics/queue_test.go
@@ -75,7 +75,7 @@ func TestAllocatedContainers(t *testing.T) {
        defer unregisterQueueMetrics(t)
 
        cqm.IncAllocatedContainer()
-       verifyAppMetrics(t, "allocated")
+       verifyContainerMetrics(t, "allocated", float64(1))
 }
 
 func TestReleasedContainers(t *testing.T) {
@@ -83,15 +83,15 @@ func TestReleasedContainers(t *testing.T) {
        defer unregisterQueueMetrics(t)
 
        cqm.IncReleasedContainer()
-       verifyAppMetrics(t, "released")
+       verifyContainerMetrics(t, "released", float64(1))
 }
 
 func TestAddReleasedContainers(t *testing.T) {
        cqm = getQueueMetrics()
        defer unregisterQueueMetrics(t)
 
-       cqm.AddReleasedContainers(1)
-       verifyAppMetrics(t, "released")
+       cqm.AddReleasedContainers(2)
+       verifyContainerMetrics(t, "released", float64(2))
 }
 
 func TestQueueGuaranteedResourceMetrics(t *testing.T) {
@@ -148,6 +148,28 @@ func verifyAppMetrics(t *testing.T, expectedState string) {
        verifyMetrics(t, checkFn)
 }
 
+func verifyContainerMetrics(t *testing.T, expectedState string, value float64) 
{
+       mfs, err := prometheus.DefaultGatherer.Gather()
+       assert.NilError(t, err)
+
+       var checked bool
+       for _, metric := range mfs {
+               if strings.Contains(metric.GetName(), "yunikorn_root_test") {
+                       assert.Equal(t, 1, len(metric.Metric))
+                       assert.Equal(t, dto.MetricType_COUNTER, 
metric.GetType())
+                       m := metric.Metric[0]
+                       assert.Equal(t, 1, len(m.Label))
+                       assert.Equal(t, "state", *m.Label[0].Name)
+                       assert.Equal(t, expectedState, *m.Label[0].Value)
+                       assert.Assert(t, m.Counter != nil)
+                       assert.Equal(t, value, *m.Counter.Value)
+                       checked = true
+                       break
+               }
+       }
+
+       assert.Assert(t, checked, "Failed to find metric")
+}
 func verifyResourceMetrics(t *testing.T, expectedState, expectedResource 
string) {
        checkFn := func(labels []*dto.LabelPair) {
                assert.Equal(t, 2, len(labels))
@@ -180,6 +202,7 @@ func verifyMetrics(t *testing.T, checkLabel func(label 
[]*dto.LabelPair)) {
 
        assert.Assert(t, checked, "Failed to find metric")
 }
+
 func unregisterQueueMetrics(t *testing.T) {
        qm, ok := cqm.(*QueueMetrics)
        if !ok {
@@ -187,5 +210,6 @@ func unregisterQueueMetrics(t *testing.T) {
        }
 
        prometheus.Unregister(qm.appMetrics)
+       prometheus.Unregister(qm.containerMetrics)
        prometheus.Unregister(qm.ResourceMetrics)
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to