Merge ~andreserl/maas:prometheus_publish_stats into maas:master

Proposed by Andres Rodriguez
Status: Merged
Approved by: Andres Rodriguez
Approved revision: 1e757599782607cdbde91424fe0448addf8b754a
Merge reported by: MAAS Lander
Merged at revision: not available
Proposed branch: ~andreserl/maas:prometheus_publish_stats
Merge into: maas:master
Diff against target: 127 lines (+80/-1)
2 files modified
src/maasserver/prometheus.py (+49/-1)
src/maasserver/tests/test_prometheus.py (+31/-0)
Reviewer Review Type Date Requested Status
MAAS Lander Approve
Andres Rodriguez (community) Approve
Lee Trager (community) Approve
Review via email: mp+357425@code.launchpad.net

Commit message

Publish more stats for prometheus.

To post a comment you must log in.
Revision history for this message
Lee Trager (ltrager) wrote :

LGTM!

review: Approve
Revision history for this message
Andres Rodriguez (andreserl) :
review: Approve
Revision history for this message
MAAS Lander (maas-lander) wrote :

UNIT TESTS
-b prometheus_publish_stats lp:~andreserl/maas/+git/maas into -b master lp:~maas-committers/maas

STATUS: SUCCESS
COMMIT: 1e757599782607cdbde91424fe0448addf8b754a

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1diff --git a/src/maasserver/prometheus.py b/src/maasserver/prometheus.py
2index 55c58df..fe69f4a 100644
3--- a/src/maasserver/prometheus.py
4+++ b/src/maasserver/prometheus.py
5@@ -16,7 +16,11 @@ from django.http import (
6 HttpResponseNotFound,
7 )
8 from maasserver.models import Config
9-from maasserver.stats import get_maas_stats
10+from maasserver.stats import (
11+ get_kvm_pods_stats,
12+ get_maas_stats,
13+ get_machines_by_architecture,
14+)
15 from maasserver.utils.orm import transactional
16 from maasserver.utils.threads import deferToDatabase
17 from provisioningserver.logger import LegacyLogger
18@@ -49,6 +53,8 @@ def prometheus_handler(request):
19 def get_stats_for_prometheus():
20 registry = CollectorRegistry()
21 stats = json.loads(get_maas_stats())
22+ architectures = get_machines_by_architecture()
23+ pods = get_kvm_pods_stats()
24
25 # Gather counter for machines per status
26 counter = Gauge(
27@@ -57,6 +63,48 @@ def get_stats_for_prometheus():
28 for status, machines in stats['machine_status'].items():
29 counter.labels(status).set(machines)
30
31+ # Gather counter for number of nodes (controllers/machine/devices)
32+ counter = Gauge(
33+ "nodes", "Number of nodes per type (e.g. racks, machines, etc).",
34+ ["type"], registry=registry)
35+ for ctype, number in stats['controllers'].items():
36+ counter.labels(ctype).set(number)
37+ for ctype, number in stats['nodes'].items():
38+ counter.labels(ctype).set(number)
39+
40+ # Gather counter for networks
41+ counter = Gauge(
42+ "networks", "General statistics for subnets.",
43+ ["type"], registry=registry)
44+ for stype, number in stats['network_stats'].items():
45+ counter.labels(stype).set(number)
46+
47+ # Gather overall amount of machine resources
48+ counter = Gauge(
49+ "machine_resources", "Amount of combined resources for all machines",
50+ ["resource"], registry=registry)
51+ for resource, value in stats['machine_stats'].items():
52+ counter.labels(resource).set(value)
53+
54+ # Gather all stats for pods
55+ counter = Gauge(
56+ "kvm_pods", "General stats for KVM pods",
57+ ["type"], registry=registry)
58+ for resource, value in pods.items():
59+ if isinstance(value, dict):
60+ for r, v in value.items():
61+ counter.labels("%s_%s" % (resource, r)).set(v)
62+ else:
63+ counter.labels(resource).set(value)
64+
65+ # Gather statistics for architectures
66+ if len(architectures.keys()) > 0:
67+ counter = Gauge(
68+ "machine_arches", "Number of machines per architecture.",
69+ ["arches"], registry=registry)
70+ for arch, machines in architectures.items():
71+ counter.labels(arch).set(machines)
72+
73 return registry
74
75
76diff --git a/src/maasserver/tests/test_prometheus.py b/src/maasserver/tests/test_prometheus.py
77index fc93872..8637ede 100644
78--- a/src/maasserver/tests/test_prometheus.py
79+++ b/src/maasserver/tests/test_prometheus.py
80@@ -68,16 +68,47 @@ class TestPrometheus(MAASServerTestCase):
81 def test_get_stats_for_prometheus(self):
82 self.patch(prometheus, "CollectorRegistry")
83 self.patch(prometheus, "Gauge")
84+ # general values
85 values = {
86 "machine_status": {
87 "random_status": 0,
88 },
89+ "controllers": {
90+ "regions": 0,
91+ },
92+ "nodes": {
93+ "machines": 0,
94+ },
95+ "network_stats": {
96+ "spaces": 0,
97+ },
98+ "machine_stats": {
99+ "total_cpus": 0,
100+ },
101 }
102 mock = self.patch(prometheus, "get_maas_stats")
103 mock.return_value = json.dumps(values)
104+ # architecture
105+ arches = {
106+ "amd64": 0,
107+ "i386": 0,
108+ }
109+ mock_arches = self.patch(prometheus, "get_machines_by_architecture")
110+ mock_arches.return_value = arches
111+ # pods
112+ pods = {
113+ "kvm_pods": 0,
114+ "kvm_machines": 0,
115+ }
116+ mock_pods = self.patch(prometheus, "get_kvm_pods_stats")
117+ mock_pods.return_value = pods
118 get_stats_for_prometheus()
119 self.assertThat(
120 mock, MockCalledOnce())
121+ self.assertThat(
122+ mock_arches, MockCalledOnce())
123+ self.assertThat(
124+ mock_pods, MockCalledOnce())
125
126 def test_push_stats_to_prometheus(self):
127 factory.make_RegionRackController()

Subscribers

People subscribed via source and target branches