Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-04-10 08:39:18

0001 #!/usr/bin/env python
0002 # Licensed under the Apache License, Version 2.0 (the "License");
0003 # you may not use this file except in compliance with the License.
0004 # You may obtain a copy of the License at
0005 # http://www.apache.org/licenses/LICENSE-2.0
0006 #
0007 # Authors:
0008 # - Paul Nilsson, paul.nilsson@cern.ch, 2018-2020
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()  # TODO: replace with singleton
0050     try:
0051         job_metrics_module = __import__('pilot.user.%s.jobmetrics' % user, globals(), locals(), [user], 0)  # Python 2/3
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