Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • calibration/pycalibration
1 result
Show changes
Commits on Source (5)
...@@ -5,7 +5,7 @@ from importlib.machinery import SourceFileLoader ...@@ -5,7 +5,7 @@ from importlib.machinery import SourceFileLoader
from os import chdir, listdir, path from os import chdir, listdir, path
from pathlib import Path from pathlib import Path
from shutil import copy, copytree, move, rmtree from shutil import copy, copytree, move, rmtree
from subprocess import CalledProcessError, check_call, check_output from subprocess import PIPE, CalledProcessError, check_call, run
from tempfile import TemporaryDirectory from tempfile import TemporaryDirectory
from textwrap import dedent from textwrap import dedent
from typing import Dict, List from typing import Dict, List
...@@ -129,10 +129,17 @@ def get_job_info(jobs: List[str], fmt: List[str]) -> List[List[str]]: ...@@ -129,10 +129,17 @@ def get_job_info(jobs: List[str], fmt: List[str]) -> List[List[str]]:
# will use JobID to match results to jobs (duplicate field in fmt is OK) # will use JobID to match results to jobs (duplicate field in fmt is OK)
fmt_query = ",".join(["JobID"] + fmt) fmt_query = ",".join(["JobID"] + fmt)
sacct_out = check_output(["sacct", "--truncate", "--parsable2", "--noheader", res = run([
f"--jobs={','.join(jobs)}", "sacct", "--truncate", "--parsable2", "--noheader",
f"--format={fmt_query}"]) f"--jobs={','.join(jobs)}", f"--format={fmt_query}"
lines = sacct_out.decode().split("\n") ], stdout=PIPE, text=True)
if res.returncode == 0:
lines = res.stdout.split("\n")
else:
print(f"Call to sacct failed (exit status {res.returncode})", flush=True)
if res.stdout:
print(res.stdout, flush=True)
lines = []
missing_info = ["not-found"] * len(fmt) missing_info = ["not-found"] * len(fmt)
job_info = {job: missing_info for job in jobs} job_info = {job: missing_info for job in jobs}
......
...@@ -8,7 +8,7 @@ import shlex ...@@ -8,7 +8,7 @@ import shlex
import signal import signal
import time import time
from bisect import insort_left from bisect import insort_left
from collections import deque from collections import deque, defaultdict
from datetime import datetime, timezone from datetime import datetime, timezone
from pathlib import Path from pathlib import Path
from subprocess import run, PIPE from subprocess import run, PIPE
...@@ -145,7 +145,7 @@ class JobsMonitor: ...@@ -145,7 +145,7 @@ class JobsMonitor:
self.kafka_prod = init_kafka_producer(config) self.kafka_prod = init_kafka_producer(config)
self.kafka_topic = config['kafka']['topic'] self.kafka_topic = config['kafka']['topic']
self.time_interval = int(config['web-service']['job-update-interval']) self.time_interval = int(config['web-service']['job-update-interval'])
self.instant_fails_by_host = defauldict(ExpiringEvents) self.instant_fails_by_host = defaultdict(ExpiringEvents)
def __enter__(self): def __enter__(self):
return self return self
......