File indexing completed on 2026-04-10 08:39:18
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010 from os import environ
0011
0012 import logging
0013 logger = logging.getLogger(__name__)
0014
0015
0016 def get_job_metrics_entry(name, value):
0017 """
0018 Get a formatted job metrics entry.
0019 Return a a job metrics substring with the format 'name=value ' (return empty entry if value is not set).
0020
0021 :param name: job metrics parameter name (string).
0022 :param value: job metrics parameter value (string).
0023 :return: job metrics entry (string).
0024 """
0025
0026 job_metrics_entry = ""
0027 if value != "":
0028 job_metrics_entry += "%s=%s " % (name, value)
0029
0030 return job_metrics_entry
0031
0032
0033 def get_job_metrics(job):
0034 """
0035 Return a properly formatted job metrics string.
0036 Job metrics are highly user specific, so this function merely calls a corresponding get_job_metrics() in the
0037 user code. The format of the job metrics string is defined by the server. It will be reported to the server during
0038 updateJob.
0039
0040 Example of job metrics:
0041 Number of events read | Number of events written | vmPeak maximum | vmPeak average | RSS average | ..
0042 Format: nEvents=<int> nEventsW=<int> vmPeakMax=<int> vmPeakMean=<int> RSSMean=<int> hs06=<float> shutdownTime=<int>
0043 cpuFactor=<float> cpuLimit=<float> diskLimit=<float> jobStart=<int> memLimit=<int> runLimit=<float>
0044
0045 :param job: job object.
0046 :return: job metrics (string).
0047 """
0048
0049 user = environ.get('PILOT_USER', 'generic').lower()
0050 try:
0051 job_metrics_module = __import__('pilot.user.%s.jobmetrics' % user, globals(), locals(), [user], 0)
0052 except AttributeError as e:
0053 job_metrics = None
0054 logger.warning('function not implemented in jobmetrics module: %s' % e)
0055 else:
0056 job_metrics = job_metrics_module.get_job_metrics(job)
0057
0058 return job_metrics