wmglobalqueue 2.3.10__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of wmglobalqueue might be problematic. Click here for more details.
- Utils/CPMetrics.py +270 -0
- Utils/CertTools.py +62 -0
- Utils/EmailAlert.py +50 -0
- Utils/ExtendedUnitTestCase.py +62 -0
- Utils/FileTools.py +182 -0
- Utils/IteratorTools.py +80 -0
- Utils/MathUtils.py +31 -0
- Utils/MemoryCache.py +119 -0
- Utils/Patterns.py +24 -0
- Utils/Pipeline.py +137 -0
- Utils/PortForward.py +97 -0
- Utils/ProcessStats.py +103 -0
- Utils/PythonVersion.py +17 -0
- Utils/Signals.py +36 -0
- Utils/TemporaryEnvironment.py +27 -0
- Utils/Throttled.py +227 -0
- Utils/Timers.py +130 -0
- Utils/Timestamps.py +86 -0
- Utils/TokenManager.py +143 -0
- Utils/Tracing.py +60 -0
- Utils/TwPrint.py +98 -0
- Utils/Utilities.py +308 -0
- Utils/__init__.py +11 -0
- WMCore/ACDC/Collection.py +57 -0
- WMCore/ACDC/CollectionTypes.py +12 -0
- WMCore/ACDC/CouchCollection.py +67 -0
- WMCore/ACDC/CouchFileset.py +238 -0
- WMCore/ACDC/CouchService.py +73 -0
- WMCore/ACDC/DataCollectionService.py +485 -0
- WMCore/ACDC/Fileset.py +94 -0
- WMCore/ACDC/__init__.py +11 -0
- WMCore/Algorithms/Alarm.py +39 -0
- WMCore/Algorithms/MathAlgos.py +274 -0
- WMCore/Algorithms/MiscAlgos.py +67 -0
- WMCore/Algorithms/ParseXMLFile.py +115 -0
- WMCore/Algorithms/Permissions.py +27 -0
- WMCore/Algorithms/Singleton.py +58 -0
- WMCore/Algorithms/SubprocessAlgos.py +129 -0
- WMCore/Algorithms/__init__.py +7 -0
- WMCore/Cache/GenericDataCache.py +98 -0
- WMCore/Cache/WMConfigCache.py +572 -0
- WMCore/Cache/__init__.py +0 -0
- WMCore/Configuration.py +651 -0
- WMCore/DAOFactory.py +47 -0
- WMCore/DataStructs/File.py +177 -0
- WMCore/DataStructs/Fileset.py +140 -0
- WMCore/DataStructs/Job.py +182 -0
- WMCore/DataStructs/JobGroup.py +142 -0
- WMCore/DataStructs/JobPackage.py +49 -0
- WMCore/DataStructs/LumiList.py +734 -0
- WMCore/DataStructs/Mask.py +219 -0
- WMCore/DataStructs/MathStructs/ContinuousSummaryHistogram.py +197 -0
- WMCore/DataStructs/MathStructs/DiscreteSummaryHistogram.py +92 -0
- WMCore/DataStructs/MathStructs/SummaryHistogram.py +117 -0
- WMCore/DataStructs/MathStructs/__init__.py +0 -0
- WMCore/DataStructs/Pickleable.py +24 -0
- WMCore/DataStructs/Run.py +256 -0
- WMCore/DataStructs/Subscription.py +175 -0
- WMCore/DataStructs/WMObject.py +47 -0
- WMCore/DataStructs/WorkUnit.py +112 -0
- WMCore/DataStructs/Workflow.py +60 -0
- WMCore/DataStructs/__init__.py +8 -0
- WMCore/Database/CMSCouch.py +1349 -0
- WMCore/Database/ConfigDBMap.py +29 -0
- WMCore/Database/CouchUtils.py +118 -0
- WMCore/Database/DBCore.py +198 -0
- WMCore/Database/DBCreator.py +113 -0
- WMCore/Database/DBExceptionHandler.py +57 -0
- WMCore/Database/DBFactory.py +110 -0
- WMCore/Database/DBFormatter.py +177 -0
- WMCore/Database/Dialects.py +13 -0
- WMCore/Database/ExecuteDAO.py +327 -0
- WMCore/Database/MongoDB.py +241 -0
- WMCore/Database/MySQL/Destroy.py +42 -0
- WMCore/Database/MySQL/ListUserContent.py +20 -0
- WMCore/Database/MySQL/__init__.py +9 -0
- WMCore/Database/MySQLCore.py +132 -0
- WMCore/Database/Oracle/Destroy.py +56 -0
- WMCore/Database/Oracle/ListUserContent.py +19 -0
- WMCore/Database/Oracle/__init__.py +9 -0
- WMCore/Database/ResultSet.py +44 -0
- WMCore/Database/Transaction.py +91 -0
- WMCore/Database/__init__.py +9 -0
- WMCore/Database/ipy_profile_couch.py +438 -0
- WMCore/GlobalWorkQueue/CherryPyThreads/CleanUpTask.py +29 -0
- WMCore/GlobalWorkQueue/CherryPyThreads/HeartbeatMonitor.py +105 -0
- WMCore/GlobalWorkQueue/CherryPyThreads/LocationUpdateTask.py +28 -0
- WMCore/GlobalWorkQueue/CherryPyThreads/ReqMgrInteractionTask.py +35 -0
- WMCore/GlobalWorkQueue/CherryPyThreads/__init__.py +0 -0
- WMCore/GlobalWorkQueue/__init__.py +0 -0
- WMCore/GroupUser/CouchObject.py +127 -0
- WMCore/GroupUser/Decorators.py +51 -0
- WMCore/GroupUser/Group.py +33 -0
- WMCore/GroupUser/Interface.py +73 -0
- WMCore/GroupUser/User.py +96 -0
- WMCore/GroupUser/__init__.py +11 -0
- WMCore/Lexicon.py +836 -0
- WMCore/REST/Auth.py +202 -0
- WMCore/REST/CherryPyPeriodicTask.py +166 -0
- WMCore/REST/Error.py +333 -0
- WMCore/REST/Format.py +642 -0
- WMCore/REST/HeartbeatMonitorBase.py +90 -0
- WMCore/REST/Main.py +623 -0
- WMCore/REST/Server.py +2435 -0
- WMCore/REST/Services.py +24 -0
- WMCore/REST/Test.py +120 -0
- WMCore/REST/Tools.py +38 -0
- WMCore/REST/Validation.py +250 -0
- WMCore/REST/__init__.py +1 -0
- WMCore/ReqMgr/DataStructs/RequestStatus.py +209 -0
- WMCore/ReqMgr/DataStructs/RequestType.py +13 -0
- WMCore/ReqMgr/DataStructs/__init__.py +0 -0
- WMCore/ReqMgr/__init__.py +1 -0
- WMCore/Services/AlertManager/AlertManagerAPI.py +111 -0
- WMCore/Services/AlertManager/__init__.py +0 -0
- WMCore/Services/CRIC/CRIC.py +238 -0
- WMCore/Services/CRIC/__init__.py +0 -0
- WMCore/Services/DBS/DBS3Reader.py +1044 -0
- WMCore/Services/DBS/DBSConcurrency.py +44 -0
- WMCore/Services/DBS/DBSErrors.py +113 -0
- WMCore/Services/DBS/DBSReader.py +23 -0
- WMCore/Services/DBS/DBSUtils.py +139 -0
- WMCore/Services/DBS/DBSWriterObjects.py +381 -0
- WMCore/Services/DBS/ProdException.py +133 -0
- WMCore/Services/DBS/__init__.py +8 -0
- WMCore/Services/FWJRDB/FWJRDBAPI.py +118 -0
- WMCore/Services/FWJRDB/__init__.py +0 -0
- WMCore/Services/HTTPS/HTTPSAuthHandler.py +66 -0
- WMCore/Services/HTTPS/__init__.py +0 -0
- WMCore/Services/LogDB/LogDB.py +201 -0
- WMCore/Services/LogDB/LogDBBackend.py +191 -0
- WMCore/Services/LogDB/LogDBExceptions.py +11 -0
- WMCore/Services/LogDB/LogDBReport.py +85 -0
- WMCore/Services/LogDB/__init__.py +0 -0
- WMCore/Services/MSPileup/__init__.py +0 -0
- WMCore/Services/MSUtils/MSUtils.py +54 -0
- WMCore/Services/MSUtils/__init__.py +0 -0
- WMCore/Services/McM/McM.py +173 -0
- WMCore/Services/McM/__init__.py +8 -0
- WMCore/Services/MonIT/Grafana.py +133 -0
- WMCore/Services/MonIT/__init__.py +0 -0
- WMCore/Services/PyCondor/PyCondorAPI.py +154 -0
- WMCore/Services/PyCondor/PyCondorUtils.py +105 -0
- WMCore/Services/PyCondor/__init__.py +0 -0
- WMCore/Services/ReqMgr/ReqMgr.py +261 -0
- WMCore/Services/ReqMgr/__init__.py +0 -0
- WMCore/Services/ReqMgrAux/ReqMgrAux.py +419 -0
- WMCore/Services/ReqMgrAux/__init__.py +0 -0
- WMCore/Services/RequestDB/RequestDBReader.py +267 -0
- WMCore/Services/RequestDB/RequestDBWriter.py +39 -0
- WMCore/Services/RequestDB/__init__.py +0 -0
- WMCore/Services/Requests.py +624 -0
- WMCore/Services/Rucio/Rucio.py +1287 -0
- WMCore/Services/Rucio/RucioUtils.py +74 -0
- WMCore/Services/Rucio/__init__.py +0 -0
- WMCore/Services/RucioConMon/RucioConMon.py +128 -0
- WMCore/Services/RucioConMon/__init__.py +0 -0
- WMCore/Services/Service.py +400 -0
- WMCore/Services/StompAMQ/__init__.py +0 -0
- WMCore/Services/TagCollector/TagCollector.py +155 -0
- WMCore/Services/TagCollector/XMLUtils.py +98 -0
- WMCore/Services/TagCollector/__init__.py +0 -0
- WMCore/Services/UUIDLib.py +13 -0
- WMCore/Services/UserFileCache/UserFileCache.py +160 -0
- WMCore/Services/UserFileCache/__init__.py +8 -0
- WMCore/Services/WMAgent/WMAgent.py +63 -0
- WMCore/Services/WMAgent/__init__.py +0 -0
- WMCore/Services/WMArchive/CMSSWMetrics.py +526 -0
- WMCore/Services/WMArchive/DataMap.py +463 -0
- WMCore/Services/WMArchive/WMArchive.py +33 -0
- WMCore/Services/WMArchive/__init__.py +0 -0
- WMCore/Services/WMBS/WMBS.py +97 -0
- WMCore/Services/WMBS/__init__.py +0 -0
- WMCore/Services/WMStats/DataStruct/RequestInfoCollection.py +300 -0
- WMCore/Services/WMStats/DataStruct/__init__.py +0 -0
- WMCore/Services/WMStats/WMStatsPycurl.py +145 -0
- WMCore/Services/WMStats/WMStatsReader.py +445 -0
- WMCore/Services/WMStats/WMStatsWriter.py +273 -0
- WMCore/Services/WMStats/__init__.py +0 -0
- WMCore/Services/WMStatsServer/WMStatsServer.py +134 -0
- WMCore/Services/WMStatsServer/__init__.py +0 -0
- WMCore/Services/WorkQueue/WorkQueue.py +492 -0
- WMCore/Services/WorkQueue/__init__.py +0 -0
- WMCore/Services/__init__.py +8 -0
- WMCore/Services/pycurl_manager.py +574 -0
- WMCore/WMBase.py +50 -0
- WMCore/WMConnectionBase.py +164 -0
- WMCore/WMException.py +183 -0
- WMCore/WMExceptions.py +269 -0
- WMCore/WMFactory.py +76 -0
- WMCore/WMInit.py +228 -0
- WMCore/WMLogging.py +108 -0
- WMCore/WMSpec/ConfigSectionTree.py +442 -0
- WMCore/WMSpec/Persistency.py +135 -0
- WMCore/WMSpec/Steps/BuildMaster.py +87 -0
- WMCore/WMSpec/Steps/BuildTools.py +201 -0
- WMCore/WMSpec/Steps/Builder.py +97 -0
- WMCore/WMSpec/Steps/Diagnostic.py +89 -0
- WMCore/WMSpec/Steps/Emulator.py +62 -0
- WMCore/WMSpec/Steps/ExecuteMaster.py +208 -0
- WMCore/WMSpec/Steps/Executor.py +210 -0
- WMCore/WMSpec/Steps/StepFactory.py +213 -0
- WMCore/WMSpec/Steps/TaskEmulator.py +75 -0
- WMCore/WMSpec/Steps/Template.py +204 -0
- WMCore/WMSpec/Steps/Templates/AlcaHarvest.py +76 -0
- WMCore/WMSpec/Steps/Templates/CMSSW.py +613 -0
- WMCore/WMSpec/Steps/Templates/DQMUpload.py +59 -0
- WMCore/WMSpec/Steps/Templates/DeleteFiles.py +70 -0
- WMCore/WMSpec/Steps/Templates/LogArchive.py +84 -0
- WMCore/WMSpec/Steps/Templates/LogCollect.py +105 -0
- WMCore/WMSpec/Steps/Templates/StageOut.py +105 -0
- WMCore/WMSpec/Steps/Templates/__init__.py +10 -0
- WMCore/WMSpec/Steps/WMExecutionFailure.py +21 -0
- WMCore/WMSpec/Steps/__init__.py +8 -0
- WMCore/WMSpec/Utilities.py +63 -0
- WMCore/WMSpec/WMSpecErrors.py +12 -0
- WMCore/WMSpec/WMStep.py +347 -0
- WMCore/WMSpec/WMTask.py +1980 -0
- WMCore/WMSpec/WMWorkload.py +2288 -0
- WMCore/WMSpec/WMWorkloadTools.py +370 -0
- WMCore/WMSpec/__init__.py +9 -0
- WMCore/WorkQueue/DataLocationMapper.py +273 -0
- WMCore/WorkQueue/DataStructs/ACDCBlock.py +47 -0
- WMCore/WorkQueue/DataStructs/Block.py +48 -0
- WMCore/WorkQueue/DataStructs/CouchWorkQueueElement.py +148 -0
- WMCore/WorkQueue/DataStructs/WorkQueueElement.py +274 -0
- WMCore/WorkQueue/DataStructs/WorkQueueElementResult.py +152 -0
- WMCore/WorkQueue/DataStructs/WorkQueueElementsSummary.py +185 -0
- WMCore/WorkQueue/DataStructs/__init__.py +0 -0
- WMCore/WorkQueue/Policy/End/EndPolicyInterface.py +44 -0
- WMCore/WorkQueue/Policy/End/SingleShot.py +22 -0
- WMCore/WorkQueue/Policy/End/__init__.py +32 -0
- WMCore/WorkQueue/Policy/PolicyInterface.py +17 -0
- WMCore/WorkQueue/Policy/Start/Block.py +258 -0
- WMCore/WorkQueue/Policy/Start/Dataset.py +180 -0
- WMCore/WorkQueue/Policy/Start/MonteCarlo.py +131 -0
- WMCore/WorkQueue/Policy/Start/ResubmitBlock.py +171 -0
- WMCore/WorkQueue/Policy/Start/StartPolicyInterface.py +316 -0
- WMCore/WorkQueue/Policy/Start/__init__.py +34 -0
- WMCore/WorkQueue/Policy/__init__.py +57 -0
- WMCore/WorkQueue/WMBSHelper.py +772 -0
- WMCore/WorkQueue/WorkQueue.py +1237 -0
- WMCore/WorkQueue/WorkQueueBackend.py +750 -0
- WMCore/WorkQueue/WorkQueueBase.py +39 -0
- WMCore/WorkQueue/WorkQueueExceptions.py +44 -0
- WMCore/WorkQueue/WorkQueueReqMgrInterface.py +278 -0
- WMCore/WorkQueue/WorkQueueUtils.py +130 -0
- WMCore/WorkQueue/__init__.py +13 -0
- WMCore/Wrappers/JsonWrapper/JSONThunker.py +342 -0
- WMCore/Wrappers/JsonWrapper/__init__.py +7 -0
- WMCore/Wrappers/__init__.py +6 -0
- WMCore/__init__.py +10 -0
- wmglobalqueue-2.3.10.data/data/bin/wmc-dist-patch +15 -0
- wmglobalqueue-2.3.10.data/data/bin/wmc-dist-unpatch +8 -0
- wmglobalqueue-2.3.10.data/data/bin/wmc-httpd +3 -0
- wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/.couchapprc +1 -0
- wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/README.md +40 -0
- wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/_attachments/index.html +264 -0
- wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/_attachments/js/ElementInfoByWorkflow.js +96 -0
- wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/_attachments/js/StuckElementInfo.js +57 -0
- wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/_attachments/js/WorkloadInfoTable.js +80 -0
- wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/_attachments/js/dataTable.js +70 -0
- wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/_attachments/js/namespace.js +23 -0
- wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/_attachments/style/main.css +75 -0
- wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/couchapp.json +4 -0
- wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/filters/childQueueFilter.js +13 -0
- wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/filters/filterDeletedDocs.js +3 -0
- wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/filters/queueFilter.js +11 -0
- wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/language +1 -0
- wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/lib/mustache.js +333 -0
- wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/lib/validate.js +27 -0
- wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/lib/workqueue_utils.js +61 -0
- wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/lists/elementsDetail.js +28 -0
- wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/lists/filter.js +86 -0
- wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/lists/stuckElements.js +38 -0
- wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/lists/workRestrictions.js +153 -0
- wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/lists/workflowSummary.js +28 -0
- wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/rewrites.json +73 -0
- wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/shows/redirect.js +23 -0
- wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/shows/status.js +40 -0
- wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/templates/ElementSummaryByWorkflow.html +27 -0
- wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/templates/StuckElementSummary.html +26 -0
- wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/templates/TaskStatus.html +23 -0
- wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/templates/WorkflowSummary.html +27 -0
- wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/templates/partials/workqueue-common-lib.html +2 -0
- wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/templates/partials/yui-lib-remote.html +16 -0
- wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/templates/partials/yui-lib.html +18 -0
- wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/updates/in-place.js +50 -0
- wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/validate_doc_update.js +8 -0
- wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/vendor/couchapp/_attachments/jquery.couch.app.js +235 -0
- wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/vendor/couchapp/_attachments/jquery.pathbinder.js +173 -0
- wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/activeData/map.js +8 -0
- wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/activeData/reduce.js +2 -0
- wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/activeParentData/map.js +8 -0
- wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/activeParentData/reduce.js +2 -0
- wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/activePileupData/map.js +8 -0
- wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/activePileupData/reduce.js +2 -0
- wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/analyticsData/map.js +11 -0
- wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/analyticsData/reduce.js +1 -0
- wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/availableByPriority/map.js +6 -0
- wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/conflicts/map.js +5 -0
- wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/elements/map.js +5 -0
- wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/elementsByData/map.js +8 -0
- wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/elementsByParent/map.js +8 -0
- wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/elementsByParentData/map.js +8 -0
- wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/elementsByPileupData/map.js +8 -0
- wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/elementsByStatus/map.js +8 -0
- wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/elementsBySubscription/map.js +6 -0
- wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/elementsByWorkflow/map.js +8 -0
- wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/elementsByWorkflow/reduce.js +3 -0
- wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/elementsDetailByWorkflowAndStatus/map.js +26 -0
- wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/jobInjectStatusByRequest/map.js +10 -0
- wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/jobInjectStatusByRequest/reduce.js +1 -0
- wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/jobStatusByRequest/map.js +6 -0
- wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/jobStatusByRequest/reduce.js +1 -0
- wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/jobsByChildQueueAndPriority/map.js +6 -0
- wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/jobsByChildQueueAndPriority/reduce.js +1 -0
- wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/jobsByChildQueueAndStatus/map.js +6 -0
- wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/jobsByChildQueueAndStatus/reduce.js +1 -0
- wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/jobsByRequest/map.js +6 -0
- wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/jobsByRequest/reduce.js +1 -0
- wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/jobsByStatus/map.js +6 -0
- wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/jobsByStatus/reduce.js +1 -0
- wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/jobsByStatusAndPriority/map.js +6 -0
- wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/jobsByStatusAndPriority/reduce.js +1 -0
- wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/openRequests/map.js +6 -0
- wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/recent-items/map.js +5 -0
- wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/siteWhitelistByRequest/map.js +6 -0
- wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/siteWhitelistByRequest/reduce.js +1 -0
- wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/specsByWorkflow/map.js +5 -0
- wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/stuckElements/map.js +38 -0
- wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/wmbsInjectStatusByRequest/map.js +12 -0
- wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/wmbsInjectStatusByRequest/reduce.js +3 -0
- wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/wmbsUrl/map.js +6 -0
- wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/wmbsUrl/reduce.js +2 -0
- wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/wmbsUrlByRequest/map.js +6 -0
- wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/wmbsUrlByRequest/reduce.js +2 -0
- wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/workflowSummary/map.js +9 -0
- wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/workflowSummary/reduce.js +10 -0
- wmglobalqueue-2.3.10.dist-info/LICENSE +202 -0
- wmglobalqueue-2.3.10.dist-info/METADATA +24 -0
- wmglobalqueue-2.3.10.dist-info/NOTICE +16 -0
- wmglobalqueue-2.3.10.dist-info/RECORD +345 -0
- wmglobalqueue-2.3.10.dist-info/WHEEL +5 -0
- wmglobalqueue-2.3.10.dist-info/top_level.txt +2 -0
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
#!/usr/bin/env python
|
|
2
|
+
"""
|
|
3
|
+
_AlcaHarvest_
|
|
4
|
+
|
|
5
|
+
Template for a AlcaHarvest Step
|
|
6
|
+
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from WMCore.WMSpec.Steps.Template import Template
|
|
10
|
+
from WMCore.WMSpec.Steps.Template import CoreHelper
|
|
11
|
+
from WMCore.WMSpec.ConfigSectionTree import nodeName
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class AlcaHarvestStepHelper(CoreHelper):
|
|
15
|
+
"""
|
|
16
|
+
_AlcaHarvestStepHelper_
|
|
17
|
+
|
|
18
|
+
Add API calls and helper methods to the basic WMStepHelper to specialise
|
|
19
|
+
for AlcaHarvest tasks
|
|
20
|
+
|
|
21
|
+
"""
|
|
22
|
+
def setRunNumber(self, runNumber):
|
|
23
|
+
"""
|
|
24
|
+
Sets the run number, used to create a
|
|
25
|
+
run specific subdir for the output
|
|
26
|
+
"""
|
|
27
|
+
self.data.condition.runNumber = runNumber
|
|
28
|
+
|
|
29
|
+
def setConditionOutputLabel(self, outLabel):
|
|
30
|
+
"""
|
|
31
|
+
Sets the output label for the fake
|
|
32
|
+
output model containing the sqlite files
|
|
33
|
+
"""
|
|
34
|
+
self.data.condition.outLabel = outLabel
|
|
35
|
+
|
|
36
|
+
def setConditionLFNBase(self, lfnbase):
|
|
37
|
+
"""
|
|
38
|
+
Sets the LFNBase for condition file copy
|
|
39
|
+
(within the EOSCMS CERN EOS instance)
|
|
40
|
+
"""
|
|
41
|
+
self.data.condition.lfnbase = lfnbase
|
|
42
|
+
|
|
43
|
+
def setLuminosityURL(self, url):
|
|
44
|
+
"""
|
|
45
|
+
Sets the ROOT URL for luminosity file copy
|
|
46
|
+
"""
|
|
47
|
+
self.data.luminosity.url = url
|
|
48
|
+
|
|
49
|
+
class AlcaHarvest(Template):
|
|
50
|
+
"""
|
|
51
|
+
_AlcaHarvest_
|
|
52
|
+
|
|
53
|
+
Tools for creating a template AlcaHarvest Step
|
|
54
|
+
|
|
55
|
+
"""
|
|
56
|
+
|
|
57
|
+
def install(self, step):
|
|
58
|
+
stepname = nodeName(step)
|
|
59
|
+
step.stepType = "AlcaHarvest"
|
|
60
|
+
step.section_("condition")
|
|
61
|
+
step.condition.runNumber = None
|
|
62
|
+
step.condition.outLabel = None
|
|
63
|
+
step.condition.lfnbase = None
|
|
64
|
+
step.section_("luminosity")
|
|
65
|
+
step.luminosity.url = None
|
|
66
|
+
|
|
67
|
+
def helper(self, step):
|
|
68
|
+
"""
|
|
69
|
+
_helper_
|
|
70
|
+
|
|
71
|
+
Wrap the WMStep provided in the CMSSW helper class that
|
|
72
|
+
includes the ability to add and manipulate the details
|
|
73
|
+
of a CMSSW workflow step
|
|
74
|
+
|
|
75
|
+
"""
|
|
76
|
+
return AlcaHarvestStepHelper(step)
|
|
@@ -0,0 +1,613 @@
|
|
|
1
|
+
#!/usr/bin/env python
|
|
2
|
+
"""
|
|
3
|
+
_CMSSW_
|
|
4
|
+
|
|
5
|
+
Template for a CMSSW Step
|
|
6
|
+
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
import pickle
|
|
10
|
+
|
|
11
|
+
from future.utils import viewitems
|
|
12
|
+
|
|
13
|
+
from Utils.Utilities import encodeUnicodeToBytes
|
|
14
|
+
from WMCore.WMSpec.ConfigSectionTree import nodeName
|
|
15
|
+
from WMCore.WMSpec.Steps.Template import CoreHelper, Template
|
|
16
|
+
from WMCore.Cache.WMConfigCache import ConfigCacheException
|
|
17
|
+
import shlex
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class CMSSWStepHelper(CoreHelper):
|
|
21
|
+
"""
|
|
22
|
+
_CMSSWStepHelper_
|
|
23
|
+
|
|
24
|
+
Add API calls and helper methods to the basic WMStepHelper to specialise
|
|
25
|
+
for CMSSW tasks
|
|
26
|
+
|
|
27
|
+
"""
|
|
28
|
+
def setAcqEra(self, acqEra):
|
|
29
|
+
"""
|
|
30
|
+
_setAcqEra_
|
|
31
|
+
Set the acquisition era attribute for this step.
|
|
32
|
+
"""
|
|
33
|
+
self.data.output.acqEra = acqEra
|
|
34
|
+
|
|
35
|
+
def setProcStr(self, procStr):
|
|
36
|
+
"""
|
|
37
|
+
_setProcStr_
|
|
38
|
+
Set the processing string attribute for this step.
|
|
39
|
+
"""
|
|
40
|
+
self.data.output.procStr = procStr
|
|
41
|
+
|
|
42
|
+
def setProcVer(self, procVer):
|
|
43
|
+
"""
|
|
44
|
+
_setProcVer_
|
|
45
|
+
Set the processing version era attribute for this step.
|
|
46
|
+
"""
|
|
47
|
+
self.data.output.procVer = procVer
|
|
48
|
+
|
|
49
|
+
def getAcqEra(self):
|
|
50
|
+
"""
|
|
51
|
+
_getAcqEra_
|
|
52
|
+
Retrieve the acquisition era for this step, or return None if non-existent.
|
|
53
|
+
"""
|
|
54
|
+
return getattr(self.data.output, 'acqEra', None)
|
|
55
|
+
|
|
56
|
+
def getProcStr(self):
|
|
57
|
+
"""
|
|
58
|
+
_getProcStr_
|
|
59
|
+
Retrieve the processing string for this step, or return None if non-existent.
|
|
60
|
+
"""
|
|
61
|
+
return getattr(self.data.output, 'procStr', None)
|
|
62
|
+
|
|
63
|
+
def getProcVer(self):
|
|
64
|
+
"""
|
|
65
|
+
_getProcVer_
|
|
66
|
+
Retrieve the processing version for this step, or return None if non-existent.
|
|
67
|
+
"""
|
|
68
|
+
return getattr(self.data.output, 'procVer', None)
|
|
69
|
+
|
|
70
|
+
def setPrepId(self, prepId):
|
|
71
|
+
"""
|
|
72
|
+
_setPrepId_
|
|
73
|
+
Set the prep_id attribute for this step.
|
|
74
|
+
"""
|
|
75
|
+
self.data.output.prepId = prepId
|
|
76
|
+
|
|
77
|
+
def getPrepId(self):
|
|
78
|
+
"""
|
|
79
|
+
_getPrepId_
|
|
80
|
+
Retrieve the prep_id for this step, or return None if non-existent.
|
|
81
|
+
"""
|
|
82
|
+
return getattr(self.data.output, 'prepId', None)
|
|
83
|
+
|
|
84
|
+
def addOutputModule(self, moduleName, **details):
|
|
85
|
+
"""
|
|
86
|
+
_addOutputModule_
|
|
87
|
+
|
|
88
|
+
Add in an output module settings, all default to None unless
|
|
89
|
+
the value is provided in details
|
|
90
|
+
|
|
91
|
+
"""
|
|
92
|
+
modules = self.data.output.modules
|
|
93
|
+
|
|
94
|
+
if getattr(modules, moduleName, None) == None:
|
|
95
|
+
modules.section_(moduleName)
|
|
96
|
+
module = getattr(modules, moduleName)
|
|
97
|
+
|
|
98
|
+
for key, value in viewitems(details):
|
|
99
|
+
setattr(module, key, value)
|
|
100
|
+
|
|
101
|
+
return
|
|
102
|
+
|
|
103
|
+
def listOutputModules(self):
|
|
104
|
+
"""
|
|
105
|
+
_listOutputModules_
|
|
106
|
+
|
|
107
|
+
retrieve list of output module names
|
|
108
|
+
|
|
109
|
+
"""
|
|
110
|
+
if hasattr(self.data.output, "modules"):
|
|
111
|
+
return list(self.data.output.modules.dictionary_())
|
|
112
|
+
|
|
113
|
+
return []
|
|
114
|
+
|
|
115
|
+
def getOutputModule(self, name):
|
|
116
|
+
"""
|
|
117
|
+
_getOutputModule_
|
|
118
|
+
|
|
119
|
+
retrieve the data structure for an output module by name
|
|
120
|
+
None if not found
|
|
121
|
+
|
|
122
|
+
"""
|
|
123
|
+
return getattr(self.data.output.modules, name, None)
|
|
124
|
+
|
|
125
|
+
def setConfigCache(self, url, document, dbName="config_cache"):
|
|
126
|
+
"""
|
|
127
|
+
_setConfigCache_
|
|
128
|
+
|
|
129
|
+
Set the information required to retrieve a configuration from
|
|
130
|
+
the config cache.
|
|
131
|
+
|
|
132
|
+
url - base URL for the config cache instance
|
|
133
|
+
document - GUID for the config document
|
|
134
|
+
dbName - optional, name of the db instance in the couch server
|
|
135
|
+
|
|
136
|
+
"""
|
|
137
|
+
self.data.application.configuration.configCacheUrl = url
|
|
138
|
+
self.data.application.configuration.configId = document
|
|
139
|
+
self.data.application.configuration.cacheName = dbName
|
|
140
|
+
docUrl = "%s/%s/%s" % (url, dbName, document)
|
|
141
|
+
self.data.application.configuration.configUrl = docUrl
|
|
142
|
+
self.data.application.configuration.retrieveConfigUrl = "%s/configFile" % docUrl
|
|
143
|
+
|
|
144
|
+
def setDataProcessingConfig(self, scenarioName, functionName, **args):
|
|
145
|
+
"""
|
|
146
|
+
_setDataProcessingConfig_
|
|
147
|
+
|
|
148
|
+
Set a configuration library to be used from the CMSSW Release
|
|
149
|
+
DataProcessing package.
|
|
150
|
+
|
|
151
|
+
"""
|
|
152
|
+
self.data.application.configuration.scenario = scenarioName
|
|
153
|
+
self.data.application.configuration.function = functionName
|
|
154
|
+
# assume if this crashes we are dealing with complex data
|
|
155
|
+
# which is only supported in new agents that only look
|
|
156
|
+
# at pickledarguments anyways
|
|
157
|
+
try:
|
|
158
|
+
self.data.application.configuration.section_('arguments')
|
|
159
|
+
[setattr(self.data.application.configuration.arguments, k, v) for k, v in viewitems(args)]
|
|
160
|
+
except Exception:
|
|
161
|
+
pass
|
|
162
|
+
# FIXME: once both central services and WMAgent are in Py3, we can remove protocol=0
|
|
163
|
+
self.data.application.configuration.pickledarguments = pickle.dumps(args, protocol=0)
|
|
164
|
+
return
|
|
165
|
+
|
|
166
|
+
def cmsswSetup(self, cmsswVersion, **options):
|
|
167
|
+
"""
|
|
168
|
+
_cmsswSetup_
|
|
169
|
+
|
|
170
|
+
Provide setup details for CMSSW.
|
|
171
|
+
|
|
172
|
+
cmsswVersion - required - version of CMSSW to use
|
|
173
|
+
|
|
174
|
+
Optional:
|
|
175
|
+
|
|
176
|
+
scramCommand - defaults to scramv1
|
|
177
|
+
scramProject - defaults to CMSSW
|
|
178
|
+
scramArch - optional scram architecture, defaults to None
|
|
179
|
+
buildArch - optional scram build architecture, defaults to None
|
|
180
|
+
softwareEnvironment - setup command to bootstrap scram,defaults to None
|
|
181
|
+
"""
|
|
182
|
+
self.data.application.setup.cmsswVersion = cmsswVersion
|
|
183
|
+
for k, v in viewitems(options):
|
|
184
|
+
setattr(self.data.application.setup, k, v)
|
|
185
|
+
return
|
|
186
|
+
|
|
187
|
+
def getScramArch(self):
|
|
188
|
+
"""
|
|
189
|
+
_getScramArch_
|
|
190
|
+
|
|
191
|
+
Retrieve the scram architecture used for this step.
|
|
192
|
+
"""
|
|
193
|
+
return self.data.application.setup.scramArch
|
|
194
|
+
|
|
195
|
+
def getCMSSWVersion(self):
|
|
196
|
+
"""
|
|
197
|
+
_getCMSSWVersion_
|
|
198
|
+
|
|
199
|
+
Retrieve the version of the framework used for this step.
|
|
200
|
+
"""
|
|
201
|
+
return self.data.application.setup.cmsswVersion
|
|
202
|
+
|
|
203
|
+
def setGlobalTag(self, globalTag):
|
|
204
|
+
"""
|
|
205
|
+
_setGlobalTag_
|
|
206
|
+
|
|
207
|
+
Set the global tag.
|
|
208
|
+
"""
|
|
209
|
+
self.data.application.configuration.section_('arguments')
|
|
210
|
+
self.data.application.configuration.arguments.globalTag = globalTag
|
|
211
|
+
|
|
212
|
+
args = {}
|
|
213
|
+
if hasattr(self.data.application.configuration, "pickledarguments"):
|
|
214
|
+
args = pickle.loads(encodeUnicodeToBytes(self.data.application.configuration.pickledarguments))
|
|
215
|
+
args['globalTag'] = globalTag
|
|
216
|
+
# FIXME: once both central services and WMAgent are in Py3, we can remove protocol=0
|
|
217
|
+
self.data.application.configuration.pickledarguments = pickle.dumps(args, protocol=0)
|
|
218
|
+
|
|
219
|
+
return
|
|
220
|
+
|
|
221
|
+
def getGlobalTag(self):
|
|
222
|
+
"""
|
|
223
|
+
_getGlobalTag_
|
|
224
|
+
|
|
225
|
+
Retrieve the global tag.
|
|
226
|
+
"""
|
|
227
|
+
if hasattr(self.data.application.configuration, "arguments"):
|
|
228
|
+
if hasattr(self.data.application.configuration.arguments, "globalTag"):
|
|
229
|
+
return self.data.application.configuration.arguments.globalTag
|
|
230
|
+
|
|
231
|
+
pickledArgs = encodeUnicodeToBytes(self.data.application.configuration.pickledarguments)
|
|
232
|
+
return pickle.loads(pickledArgs)['globalTag']
|
|
233
|
+
|
|
234
|
+
def setDatasetName(self, datasetName):
|
|
235
|
+
"""
|
|
236
|
+
_setDatasetName_
|
|
237
|
+
|
|
238
|
+
Set the dataset name in the pickled arguments
|
|
239
|
+
"""
|
|
240
|
+
self.data.application.configuration.section_('arguments')
|
|
241
|
+
self.data.application.configuration.arguments.datasetName = datasetName
|
|
242
|
+
|
|
243
|
+
args = {}
|
|
244
|
+
if hasattr(self.data.application.configuration, "pickledarguments"):
|
|
245
|
+
args = pickle.loads(encodeUnicodeToBytes(self.data.application.configuration.pickledarguments))
|
|
246
|
+
args['datasetName'] = datasetName
|
|
247
|
+
# FIXME: once both central services and WMAgent are in Py3, we can remove protocol=0
|
|
248
|
+
self.data.application.configuration.pickledarguments = pickle.dumps(args, protocol=0)
|
|
249
|
+
|
|
250
|
+
return
|
|
251
|
+
|
|
252
|
+
def getDatasetName(self):
|
|
253
|
+
"""
|
|
254
|
+
_getDatasetName_
|
|
255
|
+
|
|
256
|
+
Retrieve the dataset name from the pickled arguments
|
|
257
|
+
"""
|
|
258
|
+
if hasattr(self.data.application.configuration, "arguments"):
|
|
259
|
+
if hasattr(self.data.application.configuration.arguments, "datasetName"):
|
|
260
|
+
return self.data.application.configuration.arguments.datasetName
|
|
261
|
+
|
|
262
|
+
return pickle.loads(self.data.application.configuration.pickledarguments).get('datasetName', None)
|
|
263
|
+
|
|
264
|
+
def getScenario(self):
|
|
265
|
+
"""
|
|
266
|
+
_getScenario_
|
|
267
|
+
|
|
268
|
+
Retrieve the scenario from the pickled arguments, if any
|
|
269
|
+
"""
|
|
270
|
+
if hasattr(self.data.application.configuration, "scenario"):
|
|
271
|
+
return self.data.application.configuration.scenario
|
|
272
|
+
|
|
273
|
+
return None
|
|
274
|
+
|
|
275
|
+
def setUserSandbox(self, userSandbox):
|
|
276
|
+
"""
|
|
277
|
+
_setUserSandbox_
|
|
278
|
+
|
|
279
|
+
Sets the userSandbox. Eventually may have to move this to a proper
|
|
280
|
+
list rather than a one element list
|
|
281
|
+
"""
|
|
282
|
+
if userSandbox:
|
|
283
|
+
self.data.user.inputSandboxes = [userSandbox]
|
|
284
|
+
return
|
|
285
|
+
|
|
286
|
+
def setUserFiles(self, userFiles):
|
|
287
|
+
"""
|
|
288
|
+
_setUserFiles_
|
|
289
|
+
|
|
290
|
+
Sets the list of extra files the user needs
|
|
291
|
+
"""
|
|
292
|
+
if userFiles:
|
|
293
|
+
self.data.user.userFiles = userFiles
|
|
294
|
+
return
|
|
295
|
+
|
|
296
|
+
def setUserLFNBase(self, lfnBase):
|
|
297
|
+
"""
|
|
298
|
+
_setUserFiles_
|
|
299
|
+
|
|
300
|
+
Sets the list of extra files the user needs
|
|
301
|
+
"""
|
|
302
|
+
if lfnBase:
|
|
303
|
+
self.data.user.lfnBase = lfnBase
|
|
304
|
+
return
|
|
305
|
+
|
|
306
|
+
def setupChainedProcessing(self, inputStepName, inputOutputModule):
|
|
307
|
+
"""
|
|
308
|
+
_setupChainedProcessing_
|
|
309
|
+
|
|
310
|
+
Set values to support chained CMSSW running.
|
|
311
|
+
"""
|
|
312
|
+
self.data.input.chainedProcessing = True
|
|
313
|
+
self.data.input.inputStepName = inputStepName
|
|
314
|
+
self.data.input.inputOutputModule = inputOutputModule
|
|
315
|
+
|
|
316
|
+
def keepOutput(self, keepOutput):
|
|
317
|
+
"""
|
|
318
|
+
_keepOutput_
|
|
319
|
+
|
|
320
|
+
Mark whether or not we should keep the output from this step. We don't
|
|
321
|
+
want to keep the output from certain chained steps.
|
|
322
|
+
"""
|
|
323
|
+
self.data.output.keep = keepOutput
|
|
324
|
+
return
|
|
325
|
+
|
|
326
|
+
def getPileup(self):
|
|
327
|
+
"""
|
|
328
|
+
_getPileup_
|
|
329
|
+
|
|
330
|
+
Retrieve the pileup config from this step.
|
|
331
|
+
"""
|
|
332
|
+
return getattr(self.data, "pileup", None)
|
|
333
|
+
|
|
334
|
+
def setupPileup(self, pileupConfig, dbsUrl):
|
|
335
|
+
"""
|
|
336
|
+
include pileup input configuration into this step configuration.
|
|
337
|
+
pileupConfig is initially specified as input to the workload
|
|
338
|
+
(user input) and here is available as a dict.
|
|
339
|
+
|
|
340
|
+
"""
|
|
341
|
+
# so, e.g. this {"cosmics": "/some/cosmics/dataset", "minbias": "/some/minbias/dataset"}
|
|
342
|
+
# would translate into
|
|
343
|
+
# self.data.pileup.comics.dataset = "/some/cosmics/dataset"
|
|
344
|
+
# self.data.pileup.minbias.dataset = "/some/minbias/dataset"
|
|
345
|
+
self.data.section_("pileup")
|
|
346
|
+
for pileupType, dataset in viewitems(pileupConfig):
|
|
347
|
+
self.data.pileup.section_(pileupType)
|
|
348
|
+
setattr(getattr(self.data.pileup, pileupType), "dataset", dataset)
|
|
349
|
+
setattr(self.data, "dbsUrl", dbsUrl)
|
|
350
|
+
|
|
351
|
+
def setEventsPerLumi(self, eventsPerLumi):
|
|
352
|
+
"""
|
|
353
|
+
_setEventsPerLumi_
|
|
354
|
+
Add event per lumi information to the step, so it can be added later
|
|
355
|
+
to the process, this comes from user input
|
|
356
|
+
"""
|
|
357
|
+
if eventsPerLumi != None:
|
|
358
|
+
setattr(self.data.application.configuration, "eventsPerLumi", eventsPerLumi)
|
|
359
|
+
|
|
360
|
+
def getSkipBadFiles(self):
|
|
361
|
+
"""
|
|
362
|
+
_getSkipBadFiles_
|
|
363
|
+
|
|
364
|
+
Check if we can skip inexistent files instead of failing the job
|
|
365
|
+
"""
|
|
366
|
+
return getattr(self.data.application.configuration, "skipBadFiles", False)
|
|
367
|
+
|
|
368
|
+
def setSkipBadFiles(self, skipBadFiles):
|
|
369
|
+
"""
|
|
370
|
+
_setSkipBadFiles_
|
|
371
|
+
|
|
372
|
+
Add a flag to indicate the CMSSW process if we can
|
|
373
|
+
skip inexistent files instead of failing the job
|
|
374
|
+
"""
|
|
375
|
+
setattr(self.data.application.configuration, "skipBadFiles", skipBadFiles)
|
|
376
|
+
|
|
377
|
+
def setNumberOfCores(self, ncores, nEventStreams=0):
|
|
378
|
+
"""
|
|
379
|
+
_setNumberOfCores_
|
|
380
|
+
|
|
381
|
+
Set the number of cores and event streams for CMSSW to run on
|
|
382
|
+
"""
|
|
383
|
+
# if None is passed for EventStreams, then set it to 0
|
|
384
|
+
nEventStreams = nEventStreams or 0
|
|
385
|
+
|
|
386
|
+
self.data.application.multicore.numberOfCores = ncores
|
|
387
|
+
self.data.application.multicore.eventStreams = nEventStreams
|
|
388
|
+
|
|
389
|
+
def getNumberOfCores(self):
|
|
390
|
+
"""
|
|
391
|
+
_getNumberOfCores_
|
|
392
|
+
|
|
393
|
+
Get number of cores
|
|
394
|
+
"""
|
|
395
|
+
return self.data.application.multicore.numberOfCores
|
|
396
|
+
|
|
397
|
+
def getEventStreams(self):
|
|
398
|
+
"""
|
|
399
|
+
_getEventStreams_
|
|
400
|
+
|
|
401
|
+
Get number of event streams
|
|
402
|
+
"""
|
|
403
|
+
return self.data.application.multicore.eventStreams
|
|
404
|
+
|
|
405
|
+
def setGPUSettings(self, requiresGPU, gpuParams):
|
|
406
|
+
"""
|
|
407
|
+
Set whether this CMSSW step should require GPUs and if so, which
|
|
408
|
+
setup should be allowed and/or used
|
|
409
|
+
"""
|
|
410
|
+
self.data.application.gpu.gpuRequired = requiresGPU
|
|
411
|
+
self.data.application.gpu.gpuRequirements = gpuParams
|
|
412
|
+
|
|
413
|
+
def getGPUSettings(self):
|
|
414
|
+
"""
|
|
415
|
+
Return the GPU configuration for this CMSSW step
|
|
416
|
+
:return: a tuple with:
|
|
417
|
+
* string whether GPU is required or not
|
|
418
|
+
* dictionary with the GPU requirements (or None)
|
|
419
|
+
"""
|
|
420
|
+
return (self.data.application.gpu.gpuRequired,
|
|
421
|
+
self.data.application.gpu.gpuRequirements)
|
|
422
|
+
|
|
423
|
+
def getPhysicsTypeFromStepsArg(self, stepsArg, hasPileup=False, hasDatamix=False):
|
|
424
|
+
"""
|
|
425
|
+
Get information about the step physics type, based on the
|
|
426
|
+
cmsDriver command line --steps argument
|
|
427
|
+
Reference: https://github.com/cms-sw/cmssw/issues/42587
|
|
428
|
+
:param stepsArg: str with the cmsDriver step arguments
|
|
429
|
+
:param hasPileup: bool, cmsDriver option
|
|
430
|
+
:param hasDatamix: bool, cmsDriver option
|
|
431
|
+
:return: str with all physics types, comman separated
|
|
432
|
+
"""
|
|
433
|
+
physicsTypes = {"GEN":"GEN", "SIM":"SIM", "DIGI":"DIGI", "RECO":"RECO", "PAT":"MINIAOD", "NANO":"NANOAOD", "ALL":"GEN,SIM,DIGI,RECO"}
|
|
434
|
+
stepTypes = []
|
|
435
|
+
for stepType in physicsTypes.keys():
|
|
436
|
+
for step in stepsArg.split(","):
|
|
437
|
+
# Steps like DIGI could come in the form of DIGI:pdigi_valid
|
|
438
|
+
step = step.split(':')[0]
|
|
439
|
+
if step == stepType:
|
|
440
|
+
physicsType = physicsTypes.get(stepType)
|
|
441
|
+
if step == "DIGI":
|
|
442
|
+
if hasPileup:
|
|
443
|
+
if hasDatamix:
|
|
444
|
+
physicsType = "DIGI_premix"
|
|
445
|
+
else:
|
|
446
|
+
physicsType = "DIGI_classicalmix"
|
|
447
|
+
else:
|
|
448
|
+
physicsType = "DIGI_nopileup"
|
|
449
|
+
stepTypes.append(physicsType)
|
|
450
|
+
if not stepTypes:
|
|
451
|
+
stepTypes.append("UNKNOWN")
|
|
452
|
+
|
|
453
|
+
return ",".join(stepTypes)
|
|
454
|
+
|
|
455
|
+
def getCmsDriverCommandLineArgs(self, conf):
|
|
456
|
+
"""
|
|
457
|
+
Find the command line arguments in a pset config file
|
|
458
|
+
:param conf: config document from configCache object
|
|
459
|
+
:return: str with the cmsDriver command line arguments
|
|
460
|
+
"""
|
|
461
|
+
# First, split all new lines
|
|
462
|
+
conf = conf.split('\n')
|
|
463
|
+
# Comment line 4 usually has the command line arguments
|
|
464
|
+
# but find it otherwise (from the comment lines in the conf)
|
|
465
|
+
cmdPattern = "# with command line options:"
|
|
466
|
+
cmd = None
|
|
467
|
+
if conf[4].startswith(cmdPattern):
|
|
468
|
+
cmd = conf[4]
|
|
469
|
+
else:
|
|
470
|
+
for line in conf:
|
|
471
|
+
if line.startswith(cmdPattern):
|
|
472
|
+
cmd = line
|
|
473
|
+
elif not line.startswith('#'):
|
|
474
|
+
break
|
|
475
|
+
# Replace "=" with spaces
|
|
476
|
+
# E.g.: --step=DIGI -> --step DIGI
|
|
477
|
+
if cmd:
|
|
478
|
+
cmd = cmd.replace("=", " ")
|
|
479
|
+
|
|
480
|
+
return cmd
|
|
481
|
+
|
|
482
|
+
def determinePhysicsType(self, configCache=None):
|
|
483
|
+
"""
|
|
484
|
+
Get information about the step physics type
|
|
485
|
+
:param configCache: configCache object
|
|
486
|
+
:return: str with the physics types, command separated.
|
|
487
|
+
"""
|
|
488
|
+
hasPileup = False
|
|
489
|
+
hasDatamix = False
|
|
490
|
+
try:
|
|
491
|
+
if configCache:
|
|
492
|
+
# command arguments are in line 4
|
|
493
|
+
myconf = configCache.getConfig()
|
|
494
|
+
if myconf == None:
|
|
495
|
+
return "UNKNOWN"
|
|
496
|
+
cmd = self.getCmsDriverCommandLineArgs(myconf)
|
|
497
|
+
cmd = shlex.split(cmd)
|
|
498
|
+
# If we are processing data,
|
|
499
|
+
# just return "DataProcessing"
|
|
500
|
+
if "--data" in cmd:
|
|
501
|
+
return "DataProcessing"
|
|
502
|
+
# The command step arg is either '--step' or '-s'
|
|
503
|
+
# Check for premixing and pileup parameters
|
|
504
|
+
if "--pileup_input" in cmd:
|
|
505
|
+
hasPileup = True
|
|
506
|
+
if "--datamix" in cmd:
|
|
507
|
+
hasDatamix = True
|
|
508
|
+
try:
|
|
509
|
+
stepsArg = cmd[cmd.index("--step")+1]
|
|
510
|
+
except ValueError:
|
|
511
|
+
stepsArg = cmd[cmd.index("-s")+1]
|
|
512
|
+
else:
|
|
513
|
+
stepsArg = "UNKNOWN"
|
|
514
|
+
except (ConfigCacheException, AttributeError, ValueError) as ex:
|
|
515
|
+
stepsArg = "UNKNOWN"
|
|
516
|
+
|
|
517
|
+
return self.getPhysicsTypeFromStepsArg(stepsArg, hasPileup, hasDatamix)
|
|
518
|
+
|
|
519
|
+
def getPhysicsType(self):
|
|
520
|
+
"""
|
|
521
|
+
Set the physics type of the step
|
|
522
|
+
:return: str
|
|
523
|
+
"""
|
|
524
|
+
return getattr(self.data, "stepPhysicsType", None)
|
|
525
|
+
|
|
526
|
+
def setPhysicsType(self, configCache=None):
|
|
527
|
+
"""
|
|
528
|
+
Set the physics type of the step.
|
|
529
|
+
:param configCache: configCache object
|
|
530
|
+
"""
|
|
531
|
+
self.data.stepPhysicsType = self.determinePhysicsType(configCache)
|
|
532
|
+
|
|
533
|
+
|
|
534
|
+
class CMSSW(Template):
|
|
535
|
+
"""
|
|
536
|
+
_CMSSW_
|
|
537
|
+
|
|
538
|
+
Tools for creating a template CMSSW Step
|
|
539
|
+
|
|
540
|
+
"""
|
|
541
|
+
|
|
542
|
+
def install(self, step):
|
|
543
|
+
"""
|
|
544
|
+
_install_
|
|
545
|
+
|
|
546
|
+
Add the set of default fields to the step required for running
|
|
547
|
+
a cmssw job
|
|
548
|
+
|
|
549
|
+
"""
|
|
550
|
+
stepname = nodeName(step)
|
|
551
|
+
step.stepType = "CMSSW"
|
|
552
|
+
step.application.section_("setup")
|
|
553
|
+
step.application.setup.scramCommand = "scramv1"
|
|
554
|
+
step.application.setup.scramProject = "CMSSW"
|
|
555
|
+
step.application.setup.cmsswVersion = None
|
|
556
|
+
step.application.setup.scramArch = None
|
|
557
|
+
step.application.setup.buildArch = None
|
|
558
|
+
step.application.setup.softwareEnvironment = None
|
|
559
|
+
|
|
560
|
+
step.application.section_("command")
|
|
561
|
+
step.application.command.executable = "cmsRun"
|
|
562
|
+
step.application.command.configuration = "PSet.py"
|
|
563
|
+
step.application.command.configurationPickle = "PSet.pkl"
|
|
564
|
+
step.application.command.configurationHash = None
|
|
565
|
+
step.application.command.psetTweak = None
|
|
566
|
+
step.application.command.arguments = ""
|
|
567
|
+
step.output.jobReport = "FrameworkJobReport.xml"
|
|
568
|
+
step.output.stdout = "%s-stdout.log" % stepname
|
|
569
|
+
step.output.stderr = "%s-stderr.log" % stepname
|
|
570
|
+
step.output.keep = True
|
|
571
|
+
step.output.section_("modules")
|
|
572
|
+
|
|
573
|
+
step.output.section_("analysisFiles")
|
|
574
|
+
|
|
575
|
+
step.section_("runtime")
|
|
576
|
+
step.runtime.preScripts = []
|
|
577
|
+
step.runtime.scramPreScripts = []
|
|
578
|
+
step.runtime.postScripts = []
|
|
579
|
+
step.runtime.postScramScripts = []
|
|
580
|
+
|
|
581
|
+
step.section_("debug")
|
|
582
|
+
step.debug.verbosity = 0
|
|
583
|
+
step.debug.keepLogs = False
|
|
584
|
+
|
|
585
|
+
step.section_("user")
|
|
586
|
+
step.user.inputSandboxes = []
|
|
587
|
+
step.user.script = None
|
|
588
|
+
step.user.outputFiles = []
|
|
589
|
+
step.user.userFiles = []
|
|
590
|
+
step.user.lfnBase = None
|
|
591
|
+
|
|
592
|
+
step.section_("monitoring")
|
|
593
|
+
|
|
594
|
+
# support for multicore cmssw running mode
|
|
595
|
+
step.application.section_("multicore")
|
|
596
|
+
step.application.multicore.numberOfCores = 1
|
|
597
|
+
step.application.multicore.eventStreams = 0
|
|
598
|
+
|
|
599
|
+
# support for GPU in CMSSW (using defaults from StdBase)
|
|
600
|
+
step.application.section_("gpu")
|
|
601
|
+
step.application.gpu.gpuRequired = "forbidden"
|
|
602
|
+
step.application.gpu.gpuRequirements = None
|
|
603
|
+
|
|
604
|
+
def helper(self, step):
|
|
605
|
+
"""
|
|
606
|
+
_helper_
|
|
607
|
+
|
|
608
|
+
Wrap the WMStep provided in the CMSSW helper class that
|
|
609
|
+
includes the ability to add and manipulate the details
|
|
610
|
+
of a CMSSW workflow step
|
|
611
|
+
|
|
612
|
+
"""
|
|
613
|
+
return CMSSWStepHelper(step)
|