@@ -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
5191class 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 )
0 commit comments