Skip to content

Commit ffe1def

Browse files
authored
Telemetry implementation (#170)
1 parent fe8ba53 commit ffe1def

File tree

21 files changed

+1017
-21
lines changed

21 files changed

+1017
-21
lines changed

src/backend/analytics/__init__.py

Whitespace-only changes.
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
from dispatcherd.publish import task
2+
from django.conf import settings
3+
4+
from backend.analytics.subsystem_metrics import DispatcherMetrics
5+
6+
7+
@task(queue=settings.DISPATCHER_METRICS_CHANNEL, timeout=300, on_duplicate='discard')
8+
def send_subsystem_metrics():
9+
DispatcherMetrics().send_metrics()
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
from django.db.models import Count
2+
3+
from backend.apps.scheduler.models import SyncJob
4+
5+
6+
def job_counts():
7+
counts = {
8+
'total_jobs': SyncJob.objects.count(),
9+
'status': dict(SyncJob.objects.values_list('status').annotate(Count('status')).order_by()),
10+
'launch_type': dict(SyncJob.objects.values_list('launch_type').annotate(Count('launch_type')).order_by()),
11+
'type': dict(SyncJob.objects.values_list('type').annotate(Count('type')).order_by())}
12+
return counts

src/backend/analytics/metrics.py

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
from prometheus_client import CollectorRegistry, Gauge, generate_latest
2+
3+
from backend.analytics.collectors import job_counts
4+
from backend.apps.clusters.models import JobStatusChoices
5+
from backend.apps.scheduler.models import JobTypeChoices
6+
7+
8+
def metrics():
9+
registry = CollectorRegistry()
10+
11+
all_jobs = Gauge(
12+
'automation_dashboard_jobs_total',
13+
'Number of all jobs on the system',
14+
registry=registry)
15+
16+
jobs_by_status = Gauge(
17+
'automation_dashboard_status_total',
18+
'Status of Job launched',
19+
[
20+
'status',
21+
],
22+
registry=registry,
23+
)
24+
25+
jobs_by_type = Gauge(
26+
'automation_dashboard_type_total',
27+
'Type of Job launched',
28+
[
29+
'type',
30+
],
31+
registry=registry,
32+
)
33+
34+
all_job_data = job_counts()
35+
job_count_by_status = all_job_data.get('status', {})
36+
states = set(dict(JobStatusChoices.choices)) - {JobStatusChoices.NEW}
37+
for state in states:
38+
jobs_by_status.labels(status=state).set(job_count_by_status.get(state, 0))
39+
40+
all_jobs.set(all_job_data.get('total_jobs', {}))
41+
42+
job_types = set(dict(JobTypeChoices.choices))
43+
job_count_by_type = all_job_data.get('type', {})
44+
for job_type in job_types:
45+
jobs_by_type.labels(type=job_type).set(job_count_by_type.get(job_type, 0))
46+
47+
return generate_latest(registry=registry)

0 commit comments

Comments
 (0)