ATLAS Offline Software
Loading...
Searching...
No Matches
PerfMonFlags.py
Go to the documentation of this file.
1# Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
2
3# @file: PerfMonFlags.py
4# @purpose: a container of flags for Performance Monitoring
5# @author: Sebastien Binet <binet@cern.ch>
6
7""" A container of flags for Performance Monitoring
8
9"""
10#
11#
12__author__ = 'Sebastien Binet'
13__version__ = "$Revision: 1.17 $"
14__doc__ = "A container of flags for Performance Monitoring"
15
16from AthenaCommon.JobProperties import JobProperty, JobPropertyContainer
17from AthenaCommon.JobProperties import jobproperties
18
19#
20class doMonitoringMT(JobProperty):
21 """Flag to active the MT-safe monitoring framework and service(s)
22 It of course deactives serial monitoring
23 """
24 statusOn = False
25 allowedTypes = ['bool']
26 StoredValue = False
27 def _do_action(seld):
28 # Setup PerfMonMTSvc
29 from AthenaCommon.AppMgr import ServiceMgr as svcMgr
30 if not hasattr(svcMgr, 'PerfMonMTSvc'):
31 from PerfMonComps.MTJobOptCfg import PerfMonMTSvc
32 svcMgr += PerfMonMTSvc("PerfMonMTSvc")
33 return
34
35 def _undo_action(self):
36 # Uninstall the service and the algorithm
37 from AthenaCommon.AppMgr import ServiceMgr as svcMgr
38
39 if hasattr(svcMgr, 'PerfMonMTSvc'):
40 del svcMgr.PerfMonMTSvc
41 return
42#
43class doFastMonMT(JobProperty):
44 """ Flag to active fast MT-safe monitoring framework and service(s)
45 It also activates the doMonitoringMT flag
46 """
47 statusOn = False
48 allowedTypes = ['bool']
49 StoredValue = False
50 def _do_action(self):
51 jobproperties.PerfMonFlags.doMonitoringMT = True
52 return
53
54#
55class doFullMonMT(JobProperty):
56 """ Flag to activate full MT-safe monitoring framework and service(s)
57 It also activate the doMonitoringMT flag
58 Note that due to locks this functionality might negatively impact
59 concurrency
60 """
61 statusOn = False
62 allowedTypes = ['bool']
63 StoredValue = False
64 def _do_action(self):
65 jobproperties.PerfMonFlags.doMonitoringMT = True
66 return
67
68#
69class OutputJSON(JobProperty):
70 """ Flag to override the default output file name of the perfmonmt json
71 """
72 statusOn = True
73 allowedTypes = ['str']
74 StoredValue = "perfmonmt.json"
75
76# Defines the container for the performance monitoring flags
77class PerfMonFlags(JobPropertyContainer):
78 """ The global performance monitoring flag/job property container.
79 """
80 pass
81
82# add the perfmon flags container to the top container
83jobproperties.add_Container(PerfMonFlags)
84
85
86# We want always the following flags in the container
87list_jobproperties = [
88 doMonitoringMT,
89 doFastMonMT,
90 doFullMonMT,
91 OutputJSON,
92 ]
93
94for i in list_jobproperties:
95 jobproperties.PerfMonFlags.add_JobProperty(i)
96
97
98del list_jobproperties
99
100
101def _decode_pmon_opts(opts, dry_run=False):
102 """helper function to decode athena-command-line options.
103
104 @param opts is a list of options which can enable or disable a few
105 jobproperties.PerfMonFlags fields
106
107 @param dry_run to only decode but not set the options
108
109 one activates a perfmon flag by prepending '+' in front of the option name
110 (or nothing prepended, '+' being the implied default)
111 and de-activates it by prepending '-'.
112 """
113 pmf = jobproperties.PerfMonFlags
114 dispatch = {
115 'perfmonmt': pmf.doMonitoringMT,
116 'fastmonmt': pmf.doFastMonMT,
117 'fullmonmt': pmf.doFullMonMT,
118 }
119
120 for opt in opts:
121 flag_name = opt[:]
122 val = True
123 if opt.startswith('-'):
124 val = False
125 flag_name = flag_name[1:]
126 elif opt.startswith('+'):
127 val = True
128 flag_name = flag_name[1:]
129 if flag_name not in dispatch:
130 raise ValueError(
131 '[%s] is not a valid PerfMonFlag (allowed: %r)' %
132 (flag_name, list(dispatch.keys()))
133 )
134
135 if not dry_run:
136 dispatch[flag_name].set_Value(val)
_decode_pmon_opts(opts, dry_run=False)
module clean-up