From 8fdfb0fe6daa6e1895b98465a74e62e5db1f54c6 Mon Sep 17 00:00:00 2001 From: mesmith75 Date: Tue, 4 Jun 2024 10:24:53 +0000 Subject: [PATCH] autopep8 action fixes --- .../MonitoringComponent/MonitoringService.py | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/ganga/GangaCore/Core/MonitoringComponent/MonitoringService.py b/ganga/GangaCore/Core/MonitoringComponent/MonitoringService.py index 83387e81ce..bc31a109ad 100644 --- a/ganga/GangaCore/Core/MonitoringComponent/MonitoringService.py +++ b/ganga/GangaCore/Core/MonitoringComponent/MonitoringService.py @@ -71,6 +71,11 @@ def _check_active_backends(self, job_slice=None): log.debug("RegistryLockError: The job was most likely removed") log.debug("Reg LockError%s" % str(err)) + if job_slice and len(found_active_backends) == 0: + log.debug("No active backends found with a job slice. Turning off the monitoring loop") + self.enabled = False + return + # If a backend is newly found as active, trigger its monitoring previously_active_backends = self.active_backends self.active_backends = found_active_backends @@ -226,3 +231,27 @@ 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