Source code for tokio.tools.jobinfo

"""Site-independent interface to retrieve job info
"""

import os
import datetime
import tokio.config as config

try:
    import tokio.connectors.slurm
except ImportError:
    pass

try:
    import tokio.connectors.nersc_jobsdb
except ImportError:
    pass

DEFAULT_JOBID_PROVIDERS = ['slurm']
DEFAULT_JOBNODES_PROVIDERS = ['slurm']

[docs]def get_job_startend(jobid, cache_file=None): """Find earliest start and latest end time for a job. Returns: tuple of datetime.datetime: Two-item tuple of (earliest start time, latest end time) Raises: tokio.ConfigError: When no valid providers are found """ jobid_providers = config.CONFIG.get('jobinfo_jobid_providers', DEFAULT_JOBID_PROVIDERS) for jobid_provider in jobid_providers: if jobid_provider == 'slurm': slurm_job = tokio.connectors.slurm.Slurm(jobid=jobid, cache_file=cache_file) return slurm_job.get_job_startend() elif jobid_provider == 'nersc_jobsdb': nersc_host = config.CONFIG.get('nersc_host') if nersc_host is None: nersc_host = os.environ.get('NERSC_HOST') if nersc_host is None: raise KeyError("NERSC_HOST not defined in environment or pytokio config") nersc_jobsdb = tokio.connectors.nersc_jobsdb.NerscJobsDb(cache_file=cache_file) start, end = nersc_jobsdb.get_job_startend(jobid=jobid, nersc_host=nersc_host) return datetime.datetime.fromtimestamp(start), datetime.datetime.fromtimestamp(end) else: raise tokio.ConfigError("No valid jobid providers found") raise tokio.ConfigError("No valid jobid providers found")
[docs]def get_job_nodes(jobid, cache_file=None): """Return a list of all job nodes used. Creates a list of all nodes used for a jobid. Returns: set: Set of node names used by the job described by this object Raises: tokio.ConfigError: When no valid providers are found """ jobnodes_providers = config.CONFIG.get('jobinfo_jobnodes_providers', DEFAULT_JOBNODES_PROVIDERS) for jobnodes_provider in jobnodes_providers: if jobnodes_provider == 'slurm': slurm_job = tokio.connectors.slurm.Slurm(jobid=jobid, cache_file=cache_file) return slurm_job.get_job_nodes() else: raise tokio.ConfigError("No valid jobnodes providers found") raise tokio.ConfigError("No valid jobnodes providers found")