@@ -171,6 +171,30 @@ def add_remote_services(result, remote):
171171 data = json .loads (r .content .decode ('utf-8' ))
172172 result ["remote" ][remote ["name" ]] = data
173173
174+ # Collect runners from remote for later merging
175+ if "runners" in data :
176+ if "_remote_runners" not in result :
177+ result ["_remote_runners" ] = []
178+ result ["_remote_runners" ].append ((remote ["name" ], data ["runners" ]))
179+
180+
181+ def merge_runners (result ):
182+ """Merge remote runners into result, prefixing only if multiple sources exist"""
183+ remote_runners = result .pop ("_remote_runners" , [])
184+ if not remote_runners :
185+ return
186+
187+ # Count sources: local + each remote that has runners
188+ num_sources = (1 if result ["runners" ] else 0 ) + sum (1 for _ , r in remote_runners if r )
189+ need_prefix = num_sources > 1
190+
191+ if need_prefix and result ["runners" ]:
192+ result ["runners" ] = {f"local-{ k } " : v for k , v in result ["runners" ].items ()}
193+
194+ for remote_name , runners in remote_runners :
195+ prefix = f"{ remote_name } -" if need_prefix else ""
196+ result ["runners" ].update ({f"{ prefix } { k } " : v for k , v in runners .items ()})
197+
174198
175199def get_metric_values (db_connection , source , category , name , limit = 120 ):
176200 """ Query metrics from the DB """
@@ -284,6 +308,9 @@ def main():
284308 for remote in cfg ["remote" ]:
285309 add_remote_services (result , remote )
286310
311+ # Merge runners from remotes (after all remotes are fetched)
312+ merge_runners (result )
313+
287314 add_disk_size (result , "/" )
288315
289316 if "db" in cfg and run_db :
0 commit comments