diff --git a/ganga/GangaCore/Core/MonitoringComponent/MonitoringService.py b/ganga/GangaCore/Core/MonitoringComponent/MonitoringService.py index 83387e81ce..503aa69d05 100644 --- a/ganga/GangaCore/Core/MonitoringComponent/MonitoringService.py +++ b/ganga/GangaCore/Core/MonitoringComponent/MonitoringService.py @@ -226,3 +226,28 @@ def stop(self): log.error(err) self._cleanup_scheduled_tasks() self.loop.call_soon_threadsafe(self.loop.stop) + + def runMonitoring(self, jobs=None): + """ + Enable/Run the monitoring loop and wait for the monitoring steps completion. + Parameters: + steps: number of monitoring steps to run + timeout: how long to wait for monitor steps termination (seconds) + jobs: a registry slice to be monitored (None -> all jobs) + Return: + False, if the loop cannot be started or the timeout occured while waiting for monitoring termination + True, if the monitoring steps were successfully executed + Note: + This method is meant to be used in Ganga scripts to request monitoring on demand. + """ + + log.debug("runMonitoring") + if not self.alive: + log.error("Cannot run the monitoring loop. It has already been stopped") + return False + + self.enabled = True + self.thread_executor = ThreadPoolExecutor(max_workers=THREAD_POOL_SIZE) + self._cleanup_dirty_jobs() + self.loop.call_soon_threadsafe(functools.partial(self._check_active_backends, jobs)) + return True