wmglobalqueue 2.4.5.1__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.
- Utils/CPMetrics.py +270 -0
- Utils/CertTools.py +100 -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/ProcFS.py +112 -0
- Utils/ProcessStats.py +194 -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 +318 -0
- Utils/__init__.py +11 -0
- Utils/wmcoreDTools.py +707 -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 +659 -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 +1430 -0
- WMCore/Database/ConfigDBMap.py +29 -0
- WMCore/Database/CouchMonitoring.py +450 -0
- WMCore/Database/CouchUtils.py +118 -0
- WMCore/Database/DBCore.py +198 -0
- WMCore/Database/DBCreator.py +113 -0
- WMCore/Database/DBExceptionHandler.py +59 -0
- WMCore/Database/DBFactory.py +117 -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 +636 -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 +112 -0
- WMCore/Services/DBS/DBSReader.py +23 -0
- WMCore/Services/DBS/DBSUtils.py +166 -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/__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 +1290 -0
- WMCore/Services/Rucio/RucioUtils.py +74 -0
- WMCore/Services/Rucio/__init__.py +0 -0
- WMCore/Services/RucioConMon/RucioConMon.py +121 -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 +377 -0
- WMCore/WMLogging.py +104 -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 +1997 -0
- WMCore/WMSpec/WMWorkload.py +2288 -0
- WMCore/WMSpec/WMWorkloadTools.py +382 -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.4.5.1.data/data/bin/wmc-dist-patch +15 -0
- wmglobalqueue-2.4.5.1.data/data/bin/wmc-dist-unpatch +8 -0
- wmglobalqueue-2.4.5.1.data/data/bin/wmc-httpd +3 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/.couchapprc +1 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/README.md +40 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/_attachments/index.html +264 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/_attachments/js/ElementInfoByWorkflow.js +96 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/_attachments/js/StuckElementInfo.js +57 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/_attachments/js/WorkloadInfoTable.js +80 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/_attachments/js/dataTable.js +70 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/_attachments/js/namespace.js +23 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/_attachments/style/main.css +75 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/couchapp.json +4 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/filters/childQueueFilter.js +13 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/filters/filterDeletedDocs.js +3 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/filters/queueFilter.js +11 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/language +1 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/lib/mustache.js +333 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/lib/validate.js +27 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/lib/workqueue_utils.js +61 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/lists/elementsDetail.js +28 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/lists/filter.js +86 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/lists/stuckElements.js +38 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/lists/workRestrictions.js +153 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/lists/workflowSummary.js +28 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/rewrites.json +73 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/shows/redirect.js +23 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/shows/status.js +40 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/templates/ElementSummaryByWorkflow.html +27 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/templates/StuckElementSummary.html +26 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/templates/TaskStatus.html +23 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/templates/WorkflowSummary.html +27 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/templates/partials/workqueue-common-lib.html +2 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/templates/partials/yui-lib-remote.html +16 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/templates/partials/yui-lib.html +18 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/updates/in-place.js +50 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/validate_doc_update.js +8 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/vendor/couchapp/_attachments/jquery.couch.app.js +235 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/vendor/couchapp/_attachments/jquery.pathbinder.js +173 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/activeData/map.js +8 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/activeData/reduce.js +2 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/activeParentData/map.js +8 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/activeParentData/reduce.js +2 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/activePileupData/map.js +8 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/activePileupData/reduce.js +2 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/analyticsData/map.js +11 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/analyticsData/reduce.js +1 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/availableByPriority/map.js +6 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/conflicts/map.js +5 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/elements/map.js +5 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/elementsByData/map.js +8 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/elementsByParent/map.js +8 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/elementsByParentData/map.js +8 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/elementsByPileupData/map.js +8 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/elementsByStatus/map.js +8 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/elementsBySubscription/map.js +6 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/elementsByWorkflow/map.js +8 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/elementsByWorkflow/reduce.js +3 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/elementsDetailByWorkflowAndStatus/map.js +26 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/jobInjectStatusByRequest/map.js +10 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/jobInjectStatusByRequest/reduce.js +1 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/jobStatusByRequest/map.js +6 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/jobStatusByRequest/reduce.js +1 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/jobsByChildQueueAndPriority/map.js +6 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/jobsByChildQueueAndPriority/reduce.js +1 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/jobsByChildQueueAndStatus/map.js +6 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/jobsByChildQueueAndStatus/reduce.js +1 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/jobsByRequest/map.js +6 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/jobsByRequest/reduce.js +1 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/jobsByStatus/map.js +6 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/jobsByStatus/reduce.js +1 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/jobsByStatusAndPriority/map.js +6 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/jobsByStatusAndPriority/reduce.js +1 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/openRequests/map.js +6 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/recent-items/map.js +5 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/siteWhitelistByRequest/map.js +6 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/siteWhitelistByRequest/reduce.js +1 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/specsByWorkflow/map.js +5 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/stuckElements/map.js +38 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/wmbsInjectStatusByRequest/map.js +12 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/wmbsInjectStatusByRequest/reduce.js +3 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/wmbsUrl/map.js +6 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/wmbsUrl/reduce.js +2 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/wmbsUrlByRequest/map.js +6 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/wmbsUrlByRequest/reduce.js +2 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/workflowSummary/map.js +9 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/workflowSummary/reduce.js +10 -0
- wmglobalqueue-2.4.5.1.dist-info/METADATA +26 -0
- wmglobalqueue-2.4.5.1.dist-info/RECORD +347 -0
- wmglobalqueue-2.4.5.1.dist-info/WHEEL +5 -0
- wmglobalqueue-2.4.5.1.dist-info/licenses/LICENSE +202 -0
- wmglobalqueue-2.4.5.1.dist-info/licenses/NOTICE +16 -0
- wmglobalqueue-2.4.5.1.dist-info/top_level.txt +2 -0
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
#!/usr/bin/env python
|
|
2
|
+
"""
|
|
3
|
+
File : DBSConcurrency.py
|
|
4
|
+
Author : Valentin Kuznetsov <vkuznet AT gmail dot com>
|
|
5
|
+
Description: dedicated module to holds DBS related functions executed
|
|
6
|
+
concurrent calls to DBS APIs.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
import json
|
|
10
|
+
import urllib
|
|
11
|
+
from WMCore.Services.pycurl_manager import getdata as multi_getdata
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def getBlockInfo4PU(blockNames, dbsUrl, ckey, cert):
|
|
15
|
+
"""
|
|
16
|
+
Fetch block information details, file list and number of events, from DBS
|
|
17
|
+
server. Here we use concrete set of parameters for DBS to use in this case, i.e.
|
|
18
|
+
we must look-up only valid files and get full details from the DBS API (in order
|
|
19
|
+
to get number of events).
|
|
20
|
+
:param blockNames: list of block names
|
|
21
|
+
:param dbsUrl: dbs URL
|
|
22
|
+
:param ckey: user keyfile
|
|
23
|
+
:param cert: user certificate
|
|
24
|
+
:return: dictionary of {block: {"FileList": list of strings, "NumberOfEvents": integer}, ...}
|
|
25
|
+
"""
|
|
26
|
+
urls = []
|
|
27
|
+
for blk in blockNames:
|
|
28
|
+
# need to encode block name properly
|
|
29
|
+
block = urllib.parse.quote_plus(blk)
|
|
30
|
+
url = f"{dbsUrl}/files?detail=true&validFileOnly=1&block_name={block}"
|
|
31
|
+
urls.append(url)
|
|
32
|
+
# place concurrent calls to DBS, please note that multi_getdata is generator, therefore
|
|
33
|
+
# it does not put DBS results into the memory until this generator is iterated
|
|
34
|
+
results = multi_getdata(urls, ckey, cert)
|
|
35
|
+
# parse output of getdata in some form
|
|
36
|
+
blockInfo = {}
|
|
37
|
+
for row in results:
|
|
38
|
+
blk = row['url'].split('block_name=')[-1]
|
|
39
|
+
block = urllib.parse.unquote_plus(blk)
|
|
40
|
+
data = json.loads(row['data'])
|
|
41
|
+
files = [r['logical_file_name'] for r in data]
|
|
42
|
+
nevents = sum([r['event_count'] for r in data])
|
|
43
|
+
blockInfo[block] = {'FileList': files, 'NumberOfEvents': nevents}
|
|
44
|
+
return blockInfo
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
DBSErrors represents generic class to handle DBS Go server errors
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
import json
|
|
7
|
+
|
|
8
|
+
from WMCore.Services.DBS.ProdException import ProdException
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def formatEx(excepInst):
|
|
12
|
+
"""
|
|
13
|
+
_formatEx_
|
|
14
|
+
|
|
15
|
+
given a DbdException instance, generate a simple message from it
|
|
16
|
+
"""
|
|
17
|
+
msg = "%s:%s %s" % (excepInst.__class__.__name__,
|
|
18
|
+
excepInst.getErrorMessage(),
|
|
19
|
+
excepInst.getErrorCode(),
|
|
20
|
+
)
|
|
21
|
+
return msg
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def formatEx3(excepInst):
|
|
25
|
+
"""
|
|
26
|
+
_formatEx_
|
|
27
|
+
|
|
28
|
+
given a DbdException instance, generate a simple message from it
|
|
29
|
+
"""
|
|
30
|
+
msg = "%s:%s" % (excepInst.__class__.__name__, str(excepInst))
|
|
31
|
+
return msg
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
class DataMgmtError(ProdException):
|
|
35
|
+
"""
|
|
36
|
+
_DataMgmtError_
|
|
37
|
+
|
|
38
|
+
General Exception from DataMgmt Interface
|
|
39
|
+
|
|
40
|
+
"""
|
|
41
|
+
def __init__(self, message, errorNo=1000, **data):
|
|
42
|
+
ProdException.__init__(self, message, errorNo, **data)
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
class DBSWriterError(DataMgmtError):
|
|
46
|
+
"""
|
|
47
|
+
_DBSWriterError_
|
|
48
|
+
|
|
49
|
+
Generic Exception for DBS Write Error
|
|
50
|
+
|
|
51
|
+
"""
|
|
52
|
+
def __init__(self, msg, **data):
|
|
53
|
+
DataMgmtError.__init__(self, msg, 1001, **data)
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
class DBSReaderError(DataMgmtError):
|
|
57
|
+
"""
|
|
58
|
+
_DBSReaderError_
|
|
59
|
+
|
|
60
|
+
Generic Exception for DBS Read Error
|
|
61
|
+
|
|
62
|
+
"""
|
|
63
|
+
def __init__(self, msg, **data):
|
|
64
|
+
DataMgmtError.__init__(self, msg, 1002, **data)
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
class DBSError():
|
|
68
|
+
"""
|
|
69
|
+
DBSError provides generic interface for DBS (Go-based) errors
|
|
70
|
+
"""
|
|
71
|
+
def __init__(self, ex):
|
|
72
|
+
try:
|
|
73
|
+
if hasattr(ex, "body"):
|
|
74
|
+
# case of DBSClient HTTPError
|
|
75
|
+
self.data = json.loads(ex.body)[0]
|
|
76
|
+
else:
|
|
77
|
+
self.data = json.loads(ex)[0]
|
|
78
|
+
except Exception as exp:
|
|
79
|
+
self.data = str(ex)
|
|
80
|
+
|
|
81
|
+
def getHttpCode(self):
|
|
82
|
+
"""
|
|
83
|
+
:return: HTTP error code
|
|
84
|
+
"""
|
|
85
|
+
if isinstance(self.data, dict):
|
|
86
|
+
return self.data['http']['code']
|
|
87
|
+
return 0
|
|
88
|
+
|
|
89
|
+
def getServerCode(self):
|
|
90
|
+
"""
|
|
91
|
+
:return: DBS server error code which is defined here
|
|
92
|
+
- https://github.com/dmwm/dbs2go/blob/master/dbs/errors.go
|
|
93
|
+
"""
|
|
94
|
+
if isinstance(self.data, dict):
|
|
95
|
+
return self.data['error']['code']
|
|
96
|
+
return 0
|
|
97
|
+
|
|
98
|
+
def getMessage(self):
|
|
99
|
+
"""
|
|
100
|
+
:return: DBS server error message (consice output, last error in DBS error chain)
|
|
101
|
+
"""
|
|
102
|
+
if isinstance(self.data, dict):
|
|
103
|
+
return self.data['error']['message']
|
|
104
|
+
return ""
|
|
105
|
+
|
|
106
|
+
def getReason(self):
|
|
107
|
+
"""
|
|
108
|
+
:return: DBS server error reason (expanded message)
|
|
109
|
+
"""
|
|
110
|
+
if isinstance(self.data, dict):
|
|
111
|
+
return self.data['error']['reason']
|
|
112
|
+
return ""
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
#!/usr/bin/env python
|
|
2
|
+
"""
|
|
3
|
+
_DBSReader_
|
|
4
|
+
|
|
5
|
+
Readonly DBS Interface
|
|
6
|
+
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from WMCore.Services.DBS.DBSErrors import DBSReaderError
|
|
10
|
+
from WMCore.Services.DBS.DBS3Reader import DBS3Reader
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def DBSReader(endpoint, **kwargs):
|
|
14
|
+
"""Function to find and instantiate desired DBSReader object"""
|
|
15
|
+
|
|
16
|
+
try:
|
|
17
|
+
dbs = DBS3Reader(endpoint, **kwargs)
|
|
18
|
+
# if this doesn't throw endpoint is dbs3
|
|
19
|
+
dbs.dbs.serverinfo()
|
|
20
|
+
return dbs
|
|
21
|
+
except Exception as ex:
|
|
22
|
+
msg = 'Instantiating DBS3Reader failed with %s\n' % str(ex)
|
|
23
|
+
raise DBSReaderError("Can't contact DBS at %s, got errors %s" % (endpoint, msg))
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
#!/usr/bin/env python
|
|
2
|
+
"""
|
|
3
|
+
_DBSUtils_
|
|
4
|
+
|
|
5
|
+
set of common utilities for DBS3Reader
|
|
6
|
+
|
|
7
|
+
"""
|
|
8
|
+
import json
|
|
9
|
+
import urllib
|
|
10
|
+
import logging
|
|
11
|
+
from urllib.parse import urlparse, parse_qs, quote_plus
|
|
12
|
+
from collections import defaultdict
|
|
13
|
+
|
|
14
|
+
from Utils.CertTools import cert, ckey
|
|
15
|
+
from dbs.apis.dbsClient import aggFileLumis, aggFileParents
|
|
16
|
+
from WMCore.Services.pycurl_manager import getdata as multi_getdata
|
|
17
|
+
from WMCore.Services.pycurl_manager import RequestHandler
|
|
18
|
+
from Utils.PortForward import PortForward
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def dbsListFileParents(dbsUrl, blocks):
|
|
22
|
+
"""
|
|
23
|
+
Concurrent counter part of DBS listFileParents API
|
|
24
|
+
|
|
25
|
+
:param dbsUrl: DBS URL
|
|
26
|
+
:param blocks: list of blocks
|
|
27
|
+
:return: list of file parents
|
|
28
|
+
"""
|
|
29
|
+
urls = ['%s/fileparents?block_name=%s' % (dbsUrl, quote_plus(b)) for b in blocks]
|
|
30
|
+
func = aggFileParents
|
|
31
|
+
uKey = 'block_name'
|
|
32
|
+
return getUrls(urls, func, uKey)
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
def dbsListFileLumis(dbsUrl, blocks):
|
|
36
|
+
"""
|
|
37
|
+
Concurrent counter part of DBS listFileLumis API
|
|
38
|
+
|
|
39
|
+
:param dbsUrl: DBS URL
|
|
40
|
+
:param blocks: list of blocks
|
|
41
|
+
:return: list of file lumis
|
|
42
|
+
"""
|
|
43
|
+
urls = ['%s/filelumis?block_name=%s' % (dbsUrl, quote_plus(b)) for b in blocks]
|
|
44
|
+
func = aggFileLumis
|
|
45
|
+
uKey = 'block_name'
|
|
46
|
+
return getUrls(urls, func, uKey)
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
def dbsBlockOrigin(dbsUrl, blocks):
|
|
50
|
+
"""
|
|
51
|
+
Concurrent counter part of DBS files API
|
|
52
|
+
|
|
53
|
+
:param dbsUrl: DBS URL
|
|
54
|
+
:param blocks: list of blocks
|
|
55
|
+
:return: list of block origins for a given parent lfns
|
|
56
|
+
"""
|
|
57
|
+
urls = ['%s/blockorigin?block_name=%s' % (dbsUrl, quote_plus(b)) for b in blocks]
|
|
58
|
+
func = None
|
|
59
|
+
uKey = 'block_name'
|
|
60
|
+
return getUrls(urls, func, uKey)
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
def dbsParentFilesGivenParentDataset(dbsUrl, parentDataset, fInfo):
|
|
64
|
+
"""
|
|
65
|
+
Obtain parent files for given fileInfo object
|
|
66
|
+
|
|
67
|
+
:param dbsUrl: DBS URL
|
|
68
|
+
:param parentDataset: parent dataset name
|
|
69
|
+
:param fInfo: file info object
|
|
70
|
+
:return: list of parent files for given file info object
|
|
71
|
+
"""
|
|
72
|
+
portForwarder = PortForward(8443)
|
|
73
|
+
urls = []
|
|
74
|
+
for fileInfo in fInfo:
|
|
75
|
+
run = fileInfo['run_num']
|
|
76
|
+
lumis = urllib.parse.quote_plus(str(fileInfo['lumi_section_num']))
|
|
77
|
+
url = f'{dbsUrl}/files?dataset={parentDataset}&run_num={run}&lumi_list={lumis}'
|
|
78
|
+
urls.append(portForwarder(url))
|
|
79
|
+
func = None
|
|
80
|
+
uKey = None
|
|
81
|
+
rdict = getUrls(urls, func, uKey)
|
|
82
|
+
parentFiles = defaultdict(set)
|
|
83
|
+
for fileInfo in fInfo:
|
|
84
|
+
run = fileInfo['run_num']
|
|
85
|
+
lumis = urllib.parse.quote_plus(str(fileInfo['lumi_section_num']))
|
|
86
|
+
url = f'{dbsUrl}/files?dataset={parentDataset}&run_num={run}&lumi_list={lumis}'
|
|
87
|
+
url = portForwarder(url)
|
|
88
|
+
if url in rdict:
|
|
89
|
+
pFileList = rdict[url]
|
|
90
|
+
pFiles = {x['logical_file_name'] for x in pFileList}
|
|
91
|
+
parentFiles[fileInfo['logical_file_name']] = \
|
|
92
|
+
parentFiles[fileInfo['logical_file_name']].union(pFiles)
|
|
93
|
+
return parentFiles
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
def getUrls(urls, aggFunc, uKey=None):
|
|
97
|
+
"""
|
|
98
|
+
Perform parallel DBS calls for given set of urls and apply given aggregation
|
|
99
|
+
function to the results.
|
|
100
|
+
|
|
101
|
+
:param urls: list of DBS urls to call
|
|
102
|
+
:param aggFunc: aggregation function
|
|
103
|
+
:param uKey: url parameter to use for final dictionary
|
|
104
|
+
:return: dictionary of resuls where keys are urls and values are obtained results
|
|
105
|
+
"""
|
|
106
|
+
data = multi_getdata(urls, ckey(), cert())
|
|
107
|
+
|
|
108
|
+
rdict = {}
|
|
109
|
+
for row in data:
|
|
110
|
+
url = row['url']
|
|
111
|
+
code = int(row.get('code', 200))
|
|
112
|
+
error = row.get('error')
|
|
113
|
+
if code != 200:
|
|
114
|
+
msg = f"Fail to query {url}. Error: {code} {error}"
|
|
115
|
+
raise RuntimeError(msg)
|
|
116
|
+
if uKey:
|
|
117
|
+
key = urlParams(url).get(uKey)
|
|
118
|
+
else:
|
|
119
|
+
key = url
|
|
120
|
+
data = row.get('data', [])
|
|
121
|
+
res = json.loads(data)
|
|
122
|
+
if aggFunc:
|
|
123
|
+
rdict[key] = aggFunc(res)
|
|
124
|
+
else:
|
|
125
|
+
rdict[key] = res
|
|
126
|
+
return rdict
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
def urlParams(url):
|
|
130
|
+
"""
|
|
131
|
+
Return dictionary of URL parameters
|
|
132
|
+
|
|
133
|
+
:param url: URL link
|
|
134
|
+
:return: dictionary of URL parameters
|
|
135
|
+
"""
|
|
136
|
+
parsedUrl = urlparse(url)
|
|
137
|
+
rdict = parse_qs(parsedUrl.query)
|
|
138
|
+
for key, vals in rdict.items():
|
|
139
|
+
if len(vals) == 1:
|
|
140
|
+
rdict[key] = vals[0]
|
|
141
|
+
return rdict
|
|
142
|
+
|
|
143
|
+
def DBSErrors(dbsUrl):
|
|
144
|
+
"""
|
|
145
|
+
Fetch and return all DBS server errors
|
|
146
|
+
:param dbsUrl: DBS url to use
|
|
147
|
+
:return: dictionary of DBS server errors and their meaning
|
|
148
|
+
"""
|
|
149
|
+
dbsErrors = {}
|
|
150
|
+
method = "GET"
|
|
151
|
+
payload = {}
|
|
152
|
+
headers = {'Content-Type': 'application/json'}
|
|
153
|
+
mgr = RequestHandler()
|
|
154
|
+
# dbs server url for error codes
|
|
155
|
+
rurl = f"{dbsUrl}/errors"
|
|
156
|
+
data = "" # initialize data variable to be used in logging.error if necessary
|
|
157
|
+
try:
|
|
158
|
+
data = mgr.getdata(rurl, payload, headers, verb=method, ckey=ckey(), cert=cert())
|
|
159
|
+
# check if we received proper data from DBS server
|
|
160
|
+
if 'code' in str(data) and 'meaning' in str(data):
|
|
161
|
+
errorCodes = json.loads(data)
|
|
162
|
+
for row in errorCodes:
|
|
163
|
+
dbsErrors[row['code']] = row['meaning']
|
|
164
|
+
except Exception as exp:
|
|
165
|
+
logging.error("Unable to query DBS url %s, error %s, data=%s", dbsUrl, str(exp), data)
|
|
166
|
+
return dbsErrors
|