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]