Skip to content

Commit 6b2785b

Browse files
committed
groups dashboard: fix for users part of multiple groups
1 parent dc63ff9 commit 6b2785b

File tree

1 file changed

+107
-44
lines changed

1 file changed

+107
-44
lines changed

dashboards/group.jsonnet

Lines changed: 107 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -25,17 +25,29 @@ local memoryUsage =
2525
'$PROMETHEUS_DS',
2626
|||
2727
sum(
28-
container_memory_working_set_bytes{name!="", pod=~"jupyter-.*", namespace=~"$hub_name"}
29-
* on (namespace, pod) group_left(annotation_hub_jupyter_org_username, usergroup)
30-
group(
31-
kube_pod_annotations{namespace=~"$hub_name", annotation_hub_jupyter_org_username=~".*", pod=~"jupyter-.*"}
32-
) by (pod, namespace, annotation_hub_jupyter_org_username)
33-
* on (namespace, annotation_hub_jupyter_org_username) group_left(usergroup)
28+
29+
# sum pod containers' Memory usage, for each namespace and user combination
30+
sum(
31+
container_memory_working_set_bytes{namespace=~"$hub_name", pod=~"jupyter-.*", name!=""}
32+
33+
# add an annotation_hub_jupyter_org_username label
34+
* on (namespace, pod) group_left(annotation_hub_jupyter_org_username)
3435
group(
35-
label_replace(jupyterhub_user_group_info{namespace=~"$hub_name", username=~".*", usergroup=~"$user_group"},
36-
"annotation_hub_jupyter_org_username", "$1", "username", "(.+)")
37-
) by (annotation_hub_jupyter_org_username, usergroup, namespace)
38-
) by (usergroup, namespace)
36+
kube_pod_annotations{namespace=~"$hub_name", annotation_hub_jupyter_org_username=~".*"}
37+
) by (namespace, pod, annotation_hub_jupyter_org_username)
38+
) by (namespace, annotation_hub_jupyter_org_username)
39+
40+
# make namespace/user combinations become more namespace/user/usergroup combinations
41+
* on (namespace, annotation_hub_jupyter_org_username) group_right()
42+
group(
43+
# duplicate jupyterhub_user_group_info's username label as annotation_hub_jupyter_org_username
44+
label_replace(
45+
jupyterhub_user_group_info{namespace=~"$hub_name", username=~".*", usergroup=~"$user_group"},
46+
"annotation_hub_jupyter_org_username", "$1", "username", "(.+)"
47+
)
48+
) by (namespace, annotation_hub_jupyter_org_username, usergroup)
49+
50+
) by (namespace, usergroup)
3951
|||
4052
)
4153
+ prometheus.withLegendFormat('{{ usergroup }} - ({{ namespace }})'),
@@ -61,20 +73,29 @@ local cpuUsage =
6173
'$PROMETHEUS_DS',
6274
|||
6375
sum(
64-
# exclude name="" because the same container can be reported
65-
# with both no name and `name=k8s_...`,
66-
# in which case sum() by (pod) reports double the actual metric
67-
irate(container_cpu_usage_seconds_total{name!="", pod=~"jupyter-.*"}[5m])
68-
* on (namespace, pod) group_left(annotation_hub_jupyter_org_username)
69-
group(
70-
kube_pod_annotations{namespace=~"$hub_name", annotation_hub_jupyter_org_username=~".*"}
71-
) by (pod, namespace, annotation_hub_jupyter_org_username)
72-
* on (namespace, annotation_hub_jupyter_org_username) group_left(usergroup)
76+
77+
# sum pod containers' CPU usage, for each namespace and user combination
78+
sum(
79+
irate(container_cpu_usage_seconds_total{pod=~"jupyter-.*", name!=""}[5m])
80+
81+
# add an annotation_hub_jupyter_org_username label
82+
* on (namespace, pod) group_left(annotation_hub_jupyter_org_username)
83+
group(
84+
kube_pod_annotations{namespace=~"$hub_name", annotation_hub_jupyter_org_username=~".*"}
85+
) by (namespace, pod, annotation_hub_jupyter_org_username)
86+
) by (namespace, annotation_hub_jupyter_org_username)
87+
88+
# make namespace/user combinations become more namespace/user/usergroup combinations
89+
* on (namespace, annotation_hub_jupyter_org_username) group_right()
7390
group(
74-
label_replace(jupyterhub_user_group_info{namespace=~"$hub_name", username=~".*", usergroup=~"$user_group"},
75-
"annotation_hub_jupyter_org_username", "$1", "username", "(.+)")
76-
) by (annotation_hub_jupyter_org_username, usergroup, namespace)
77-
) by (usergroup, namespace)
91+
# duplicate jupyterhub_user_group_info's username label as annotation_hub_jupyter_org_username
92+
label_replace(
93+
jupyterhub_user_group_info{namespace=~"$hub_name", username=~".*", usergroup=~"$user_group"},
94+
"annotation_hub_jupyter_org_username", "$1", "username", "(.+)"
95+
)
96+
) by (namespace, annotation_hub_jupyter_org_username, usergroup)
97+
98+
) by (namespace, usergroup)
7899
|||
79100
)
80101
+ prometheus.withLegendFormat('{{ usergroup }} - ({{ namespace }})'),
@@ -99,15 +120,31 @@ local homedirSharedUsage =
99120
'$PROMETHEUS_DS',
100121
|||
101122
sum(
123+
124+
# max is used to de-duplicate data from multiple sources
102125
max(
103126
dirsize_total_size_bytes{namespace=~"$hub_name"}
104127
) by (namespace, directory)
105-
* on (namespace, directory) group_left(usergroup)
128+
129+
# make namespace/directory combinations become more namespace/directory/usergroup combinations
130+
* on (namespace, directory) group_right()
106131
group(
132+
# FIXME: We assume ability to match the escaped username with the
133+
# directory name, but how usernames are escaped has changed
134+
# over time - the directory name may or may not match
135+
# `username_escaped`.
136+
#
137+
# - actual: [email protected]
138+
# - old escaped: my-2ename-40example-2ecom
139+
# - new escaped: my-name-example-com---abcd1234
140+
#
141+
# duplicate jupyterhub_user_group_info's username_escaped label as directory
107142
label_replace(
108143
jupyterhub_user_group_info{namespace=~"$hub_name", username_escaped=~".*", usergroup=~"$user_group"},
109-
"directory", "$1", "username_escaped", "(.+)")
110-
) by (directory, namespace, usergroup)
144+
"directory", "$1", "username_escaped", "(.+)"
145+
)
146+
) by (namespace, directory, usergroup)
147+
111148
) by (namespace, usergroup)
112149
|||
113150
)
@@ -133,16 +170,29 @@ local memoryRequests =
133170
'$PROMETHEUS_DS',
134171
|||
135172
sum(
136-
kube_pod_container_resource_requests{resource="memory", namespace=~"$hub_name", pod=~"jupyter-.*"} * on (namespace, pod)
137-
group_left(annotation_hub_jupyter_org_username) group(
138-
kube_pod_annotations{namespace=~"$hub_name", annotation_hub_jupyter_org_username=~".*"}
139-
) by (pod, namespace, annotation_hub_jupyter_org_username)
140-
* on (namespace, annotation_hub_jupyter_org_username) group_left(usergroup)
173+
174+
# sum pod containers' Memory requests, for each namespace and user combination
175+
sum(
176+
kube_pod_container_resource_requests{resource="memory", namespace=~"$hub_name", pod=~"jupyter-.*"}
177+
178+
# add an annotation_hub_jupyter_org_username label
179+
* on (namespace, pod) group_left(annotation_hub_jupyter_org_username)
180+
group(
181+
kube_pod_annotations{namespace=~"$hub_name", annotation_hub_jupyter_org_username=~".*"}
182+
) by (namespace, pod, annotation_hub_jupyter_org_username)
183+
) by (namespace, annotation_hub_jupyter_org_username)
184+
185+
# make namespace/user combinations become more namespace/user/usergroup combinations
186+
* on (namespace, annotation_hub_jupyter_org_username) group_right()
141187
group(
142-
label_replace(jupyterhub_user_group_info{namespace=~"$hub_name", username=~".*", usergroup=~"$user_group"},
143-
"annotation_hub_jupyter_org_username", "$1", "username", "(.+)")
144-
) by (annotation_hub_jupyter_org_username, usergroup, namespace)
145-
) by (usergroup, namespace)
188+
# duplicate jupyterhub_user_group_info's username label as annotation_hub_jupyter_org_username
189+
label_replace(
190+
jupyterhub_user_group_info{namespace=~"$hub_name", username=~".*", usergroup=~"$user_group"},
191+
"annotation_hub_jupyter_org_username", "$1", "username", "(.+)"
192+
)
193+
) by (namespace, annotation_hub_jupyter_org_username, usergroup)
194+
195+
) by (namespace, usergroup)
146196
|||
147197
)
148198
+ prometheus.withLegendFormat('{{ usergroup }} - ({{ namespace }})'),
@@ -167,16 +217,29 @@ local cpuRequests =
167217
'$PROMETHEUS_DS',
168218
|||
169219
sum(
170-
kube_pod_container_resource_requests{resource="cpu", namespace=~"$hub_name", pod=~"jupyter-.*"} * on (namespace, pod)
171-
group_left(annotation_hub_jupyter_org_username) group(
172-
kube_pod_annotations{namespace=~"$hub_name", annotation_hub_jupyter_org_username=~".*"}
173-
) by (pod, namespace, annotation_hub_jupyter_org_username)
174-
* on (namespace, annotation_hub_jupyter_org_username) group_left(usergroup)
220+
221+
# sum pod containers' CPU requests, for each namespace and user combination
222+
sum(
223+
kube_pod_container_resource_requests{resource="cpu", namespace=~"$hub_name", pod=~"jupyter-.*"}
224+
225+
# add an annotation_hub_jupyter_org_username label
226+
* on (namespace, pod) group_left(annotation_hub_jupyter_org_username)
227+
group(
228+
kube_pod_annotations{namespace=~"$hub_name", annotation_hub_jupyter_org_username=~".*"}
229+
) by (namespace, pod, annotation_hub_jupyter_org_username)
230+
) by (namespace, annotation_hub_jupyter_org_username)
231+
232+
# make namespace/user combinations become more namespace/user/usergroup combinations
233+
* on (namespace, annotation_hub_jupyter_org_username) group_right()
175234
group(
176-
label_replace(jupyterhub_user_group_info{namespace=~"$hub_name", username=~".*", usergroup=~"$user_group"},
177-
"annotation_hub_jupyter_org_username", "$1", "username", "(.+)")
178-
) by (annotation_hub_jupyter_org_username, usergroup, namespace)
179-
) by (usergroup, namespace)
235+
# duplicate jupyterhub_user_group_info's username label as annotation_hub_jupyter_org_username
236+
label_replace(
237+
jupyterhub_user_group_info{namespace=~"$hub_name", username=~".*", usergroup=~"$user_group"},
238+
"annotation_hub_jupyter_org_username", "$1", "username", "(.+)"
239+
)
240+
) by (namespace, annotation_hub_jupyter_org_username, usergroup)
241+
242+
) by (namespace, usergroup)
180243
|||
181244
)
182245
+ prometheus.withLegendFormat('{{ usergroup }} - ({{ namespace }})'),

0 commit comments

Comments
 (0)