1212from copy import deepcopy
1313
1414def add_k8s_variables (dashboard : Dict , preserve_uid : str = None ) -> Dict :
15- """Add standard K8s variables to dashboard templating"""
15+ """Add standard K8s variables to dashboard templating (env and service only) """
1616 k8s_vars = [
1717 {
1818 "current" : {
19- "selected" : False ,
20- "text" : "default" ,
21- "value" : "default"
19+ "text" : "mainnet" ,
20+ "value" : "mainnet"
2221 },
23- "hide" : 0 ,
24- "includeAll" : False ,
25- "label" : "Environment" ,
26- "multi" : False ,
22+ "definition" : "label_values(env)" ,
2723 "name" : "env" ,
2824 "options" : [],
2925 "query" : {
@@ -32,44 +28,15 @@ def add_k8s_variables(dashboard: Dict, preserve_uid: str = None) -> Dict:
3228 "refId" : "PrometheusVariableQueryEditor-VariableQuery"
3329 },
3430 "refresh" : 1 ,
35- "regex" : "" ,
36- "skipUrlSync" : False ,
37- "sort" : 0 ,
31+ "regex" : "(sepolia|mainnet)-eks.*" ,
3832 "type" : "query"
3933 },
4034 {
4135 "current" : {
42- "selected" : False ,
43- "text" : "All" ,
44- "value" : "$__all"
36+ "text" : "l1reth-el-0" ,
37+ "value" : "l1reth-el-0"
4538 },
46- "hide" : 0 ,
47- "includeAll" : True ,
48- "label" : "Pod" ,
49- "multi" : True ,
50- "name" : "pod" ,
51- "options" : [],
52- "query" : {
53- "qryType" : 1 ,
54- "query" : "label_values(pod)" ,
55- "refId" : "PrometheusVariableQueryEditor-VariableQuery"
56- },
57- "refresh" : 1 ,
58- "regex" : "" ,
59- "skipUrlSync" : False ,
60- "sort" : 0 ,
61- "type" : "query"
62- },
63- {
64- "current" : {
65- "selected" : False ,
66- "text" : "" ,
67- "value" : ""
68- },
69- "hide" : 0 ,
70- "includeAll" : False ,
71- "label" : "Service" ,
72- "multi" : False ,
39+ "definition" : "label_values(reth_info{namespace=\" $env\" },service)" ,
7340 "name" : "service" ,
7441 "options" : [],
7542 "query" : {
@@ -78,22 +45,17 @@ def add_k8s_variables(dashboard: Dict, preserve_uid: str = None) -> Dict:
7845 "refId" : "PrometheusVariableQueryEditor-VariableQuery"
7946 },
8047 "refresh" : 1 ,
81- "regex" : "" ,
82- "skipUrlSync" : False ,
83- "sort" : 0 ,
48+ "regex" : "(l[1|2]reth.*)" ,
8449 "type" : "query"
8550 }
8651 ]
8752
8853 if 'templating' not in dashboard :
8954 dashboard ['templating' ] = {'list' : []}
9055
91- # Remove any existing env, pod, service variables to avoid duplicates
92- existing_vars = [v for v in dashboard ['templating' ]['list' ]
93- if v .get ('name' ) not in ['env' , 'pod' , 'service' ]]
94-
95- # Add K8s variables at the beginning
96- dashboard ['templating' ]['list' ] = k8s_vars + existing_vars
56+ # Replace ALL variables with ONLY K8s variables (env, pod, service)
57+ # This ensures we only have the 3 required K8s variables
58+ dashboard ['templating' ]['list' ] = k8s_vars
9759
9860 # Preserve scroll UID if provided
9961 if preserve_uid :
@@ -103,67 +65,65 @@ def add_k8s_variables(dashboard: Dict, preserve_uid: str = None) -> Dict:
10365
10466def transform_query (query : str ) -> str :
10567 """
106- Transform PromQL query to use K8s labels
107- Handles various patterns of instance label usage
68+ Transform PromQL query to use K8s labels (service only, no pod)
69+ This enables data continuity when pods are replaced
10870 """
10971 if not query or not isinstance (query , str ):
11072 return query
11173
112- original = query
113-
11474 # Pattern 1: $instance_label="$instance" or $instance_label=~"$instance"
11575 query = re .sub (
11676 r'\$instance_label\s*=~?\s*["\']?\$instance["\']?' ,
117- 'service=~"$service", pod="$pod" ' ,
77+ 'service=~"$service"' ,
11878 query
11979 )
12080
12181 # Pattern 2: instance="$instance" or instance=~"$instance" (direct usage)
12282 query = re .sub (
12383 r'instance\s*=~?\s*["\']?\$instance["\']?' ,
124- 'service="$service", pod="$pod "' ,
84+ 'service=~ "$service"' ,
12585 query
12686 )
12787
12888 # Pattern 3: {$instance_label="$instance"} at start of label set
12989 query = re .sub (
13090 r'\{\s*\$instance_label\s*=~?\s*["\']?\$instance["\']?\s*,' ,
131- '{service=~"$service", pod="$pod", ' ,
91+ '{service=~"$service",' ,
13292 query
13393 )
13494
13595 # Pattern 4: {instance="$instance"} at start of label set
13696 query = re .sub (
13797 r'\{\s*instance\s*=~?\s*["\']?\$instance["\']?\s*,' ,
138- '{service="$service", pod="$pod ",' ,
98+ '{service=~ "$service",' ,
13999 query
140100 )
141101
142102 # Pattern 5: , $instance_label="$instance"} at end of label set
143103 query = re .sub (
144104 r',\s*\$instance_label\s*=~?\s*["\']?\$instance["\']?\s*\}' ,
145- ', service=~"$service", pod="$pod" }' ,
105+ ', service=~"$service"}' ,
146106 query
147107 )
148108
149109 # Pattern 6: , instance="$instance"} at end of label set
150110 query = re .sub (
151111 r',\s*instance\s*=~?\s*["\']?\$instance["\']?\s*\}' ,
152- ', service="$service", pod="$pod "}' ,
112+ ', service=~ "$service"}' ,
153113 query
154114 )
155115
156116 # Pattern 7: {$instance_label="$instance"} as only label
157117 query = re .sub (
158118 r'\{\s*\$instance_label\s*=~?\s*["\']?\$instance["\']?\s*\}' ,
159- '{service="$service", pod="$pod "}' ,
119+ '{service=~ "$service"}' ,
160120 query
161121 )
162122
163123 # Pattern 8: {instance="$instance"} as only label
164124 query = re .sub (
165125 r'\{\s*instance\s*=~?\s*["\']?\$instance["\']?\s*\}' ,
166- '{service="$service", pod="$pod "}' ,
126+ '{service=~ "$service"}' ,
167127 query
168128 )
169129
0 commit comments