Skip to content

Commit 6a9b368

Browse files
authored
Merge pull request #168 from consideRatio/pr/username-safe
Username mapping for both of kubespawner's escaping schemes
2 parents 55843ef + 6cf8f44 commit 6a9b368

File tree

2 files changed

+44
-20
lines changed

2 files changed

+44
-20
lines changed

dashboards/group.jsonnet

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -131,19 +131,22 @@ local homedirSharedUsage =
131131
# make namespace/directory combinations become more namespace/directory/usergroup combinations
132132
* on (namespace, directory) group_right()
133133
group(
134-
# FIXME: We assume ability to match the escaped username with the
135-
# directory name, but how usernames are escaped has changed
136-
# over time - the directory name may or may not match
137-
# `username_escaped`.
138-
#
139-
# - actual: [email protected]
140-
# - old escaped: my-2ename-40example-2ecom
141-
# - new escaped: my-name-example-com---abcd1234
142-
#
143-
# duplicate jupyterhub_user_group_info's username_escaped label as directory
144-
label_replace(
145-
jupyterhub_user_group_info{namespace=~"$hub_name", username_escaped=~".*", usergroup=~"$user_group"},
146-
"directory", "$1", "username_escaped", "(.+)"
134+
# match using username_safe (kubespawner's modern "safe" scheme)
135+
(
136+
# duplicate jupyterhub_user_group_info's username_safe label as directory
137+
label_replace(
138+
jupyterhub_user_group_info{namespace=~"$hub_name", username_safe=~".*", usergroup=~"$user_group"},
139+
"directory", "$1", "username_safe", "(.+)"
140+
)
141+
)
142+
or
143+
# match using username_escaped (kubespawner's legacy "escape" scheme)
144+
(
145+
# duplicate jupyterhub_user_group_info's username_escaped label as directory
146+
label_replace(
147+
jupyterhub_user_group_info{namespace=~"$hub_name", username_escaped=~".*", usergroup=~"$user_group"},
148+
"directory", "$1", "username_escaped", "(.+)"
149+
)
147150
)
148151
) by (namespace, directory, usergroup)
149152

dashboards/user.jsonnet

Lines changed: 28 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -85,14 +85,35 @@ local homedirSharedUsage =
8585
prometheus.new(
8686
'$PROMETHEUS_DS',
8787
|||
88-
max(
89-
dirsize_total_size_bytes{namespace=~"$hub_name"}
90-
* on (namespace, directory) group_left(username)
88+
sum(
89+
90+
# max is used to de-duplicate data from multiple sources
91+
max(
92+
dirsize_total_size_bytes{namespace=~"$hub_name"}
93+
) by (namespace, directory)
94+
95+
# make namespace/directory combinations become more namespace/directory/username combinations
96+
* on (namespace, directory) group_right()
9197
group(
92-
label_replace(
93-
jupyterhub_user_group_info{namespace=~"$hub_name", username_escaped=~".*"},
94-
"directory", "$1", "username_escaped", "(.+)")
95-
) by (directory, namespace, username)
98+
# match using username_safe (kubespawner's modern "safe" scheme)
99+
(
100+
# duplicate jupyterhub_user_group_info's username_safe label as directory
101+
label_replace(
102+
jupyterhub_user_group_info{namespace=~"$hub_name", username_safe=~".*"},
103+
"directory", "$1", "username_safe", "(.+)"
104+
)
105+
)
106+
or
107+
# match using username_escaped (kubespawner's legacy "escape" scheme)
108+
(
109+
# duplicate jupyterhub_user_group_info's username_escaped label as directory
110+
label_replace(
111+
jupyterhub_user_group_info{namespace=~"$hub_name", username_escaped=~".*"},
112+
"directory", "$1", "username_escaped", "(.+)"
113+
)
114+
)
115+
) by (namespace, directory, username)
116+
96117
) by (namespace, username)
97118
|||
98119
)

0 commit comments

Comments
 (0)