Skip to content

Commit b89aa34

Browse files
committed
Python server fixes :
- Moved the remote target to another folder because the modifications were causing Infrabox build to fail - The metrics server now force the update to zero when datas are missing in the PostGres request. It was causing ghost rsc datas cumulating over time
1 parent 667a24f commit b89aa34

4 files changed

Lines changed: 47 additions & 7 deletions

File tree

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@ FROM python:3
22

33
RUN pip install psycopg2 prometheus_client
44

5-
COPY src/metrics/collector_server/ collector_server/
5+
COPY src/metrics/ metrics/
66
COPY src/pyinfraboxutils /pyinfraboxutils
77

88
ENV PYTHONPATH=/
99

10-
CMD /collector_server/server.py
10+
CMD /metrics/server.py
Lines changed: 43 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,24 +33,64 @@ def __init__(self, name):
3333
"FROM job "\
3434
"WHERE state='running' GROUP BY project_id) as foo"
3535

36+
self._request_possible_cluster = "SELECT DISTINCT name FROM cluster"
37+
self._request_possible_projects = "SELECT DISTINCT name FROM project"
38+
self._possible_combination = None
39+
self._possible_cluster = None
40+
self._possible_project = None
41+
self._count_to_request = 0
42+
3643
def update(self, conn):
3744
per_cluster = execute_sql(conn, self._request_per_cluster, None)
3845
total = execute_sql(conn, self._request_total, None)
46+
self._reset_possible_combination(conn)
3947
self._set_values(per_cluster, total)
4048

49+
def _reset_possible_combination(self, conn):
50+
self._possible_combination = dict()
51+
if self._count_to_request == 0:
52+
self._possible_cluster = execute_sql(conn, self._request_possible_cluster, None)
53+
self._possible_cluster.append(["'%'"])
54+
self._possible_project = execute_sql(conn, self._request_possible_projects, None)
55+
self._count_to_request = 10
56+
57+
for cluster in self._possible_cluster:
58+
if cluster[0]:
59+
project_dict = dict()
60+
for project in self._possible_project:
61+
if project[0]:
62+
project_dict[project[0]] = True
63+
self._possible_combination[cluster[0]] = project_dict
64+
65+
self._count_to_request -= 1
66+
4167
def _set_values(self, per_cluster, total):
4268
for row in per_cluster:
69+
project_dict = self._possible_combination.get(row[0])
70+
if project_dict and project_dict.get(row[1]):
71+
project_dict[row[1]] = False
72+
4373
self._gauge.labels(rsc="mem", cluster=row[0], project=row[1]).set(row[2])
4474
self._gauge.labels(rsc="cpu", cluster=row[0], project=row[1]).set(row[3])
4575

4676
for row in total:
77+
project_dict = self._possible_combination.get("'%'")
78+
if project_dict and project_dict.get(row[0]):
79+
project_dict[row[0]] = False
80+
4781
self._gauge.labels(rsc="mem", cluster="'%'", project=row[0]).set(row[1])
4882
self._gauge.labels(rsc="cpu", cluster="'%'", project=row[0]).set(row[2])
4983

84+
for cluster, project_dict in self._possible_combination.items():
85+
for project, not_used in project_dict.items():
86+
if not_used:
87+
self._gauge.labels(rsc="mem", cluster=cluster, project=project).set(0)
88+
self._gauge.labels(rsc="cpu", cluster=cluster, project=project).set(0)
89+
5090

5191
class AllJobNodeGauge:
5292
def __init__(self, name):
53-
self._gauge = Gauge(name, "A gauge of current ammount of active jobs",
93+
self._gauge = Gauge(name, "A gauge of current ammount of all jobs",
5494
['state', 'node'])
5595

5696
self._request_possible_states = "SELECT distinct state FROM job"
@@ -62,8 +102,8 @@ def __init__(self, name):
62102

63103
self._possible_combination = dict()
64104
self._count_to_reset_nodes = 0
65-
self._possible_nodes = dict()
66-
self._possibles_states = dict()
105+
self._possible_nodes = None
106+
self._possibles_states = None
67107

68108
def update(self, conn):
69109
self._reset_used_combination(conn)
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@ FROM python:3
22

33
RUN pip install prometheus_client requests
44

5-
COPY src/metrics/remote_target remote_target/
5+
COPY src/remote_metrics remote_metrics/
66

77

88
ENV PYTHONPATH=/
99

10-
CMD /remote_target/server.py
10+
CMD /remote_metrics/server.py

0 commit comments

Comments
 (0)