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
WMCore/WMFactory.py
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
#!/usr/bin/env python
|
|
2
|
+
"""
|
|
3
|
+
A factory Class that is 'not thread safe' but is intended to work in threads
|
|
4
|
+
(no sharing). The class dynamically loads objects from files when needed and
|
|
5
|
+
caches them (or not). It is a generalized factory object. If needed this class
|
|
6
|
+
can be made threadsafe.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from builtins import object
|
|
10
|
+
import threading
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class WMFactory(object):
|
|
14
|
+
"""
|
|
15
|
+
A factory Class that is 'not thread safe' but is intended to work in
|
|
16
|
+
threads (no sharing). The class dynamically loads objects from files
|
|
17
|
+
when needed and caches them.
|
|
18
|
+
"""
|
|
19
|
+
|
|
20
|
+
def __init__(self, name, namespace=''):
|
|
21
|
+
"""
|
|
22
|
+
Initializes the factory, and checks if this thread already
|
|
23
|
+
has an attribute for storing registries. It uses the reserved
|
|
24
|
+
'registries' attribute in the thread.
|
|
25
|
+
"""
|
|
26
|
+
self.namespace = namespace
|
|
27
|
+
self.objectList = {}
|
|
28
|
+
|
|
29
|
+
myThread = threading.currentThread()
|
|
30
|
+
if not hasattr(myThread, "factory"):
|
|
31
|
+
myThread.factory = {}
|
|
32
|
+
myThread.factory[name] = self
|
|
33
|
+
|
|
34
|
+
def loadObject(self, classname, args=None, storeInCache=True,
|
|
35
|
+
getFromCache=True, listFlag=False, alteredClassName=None):
|
|
36
|
+
"""
|
|
37
|
+
Dynamically loads the object from file.
|
|
38
|
+
For this to work the class name has to
|
|
39
|
+
be the same as the file name (minus the .py)
|
|
40
|
+
|
|
41
|
+
Be default objects are loaded from cache. However if you
|
|
42
|
+
want several different instances of the same object in one
|
|
43
|
+
thread, you set cache to False.
|
|
44
|
+
"""
|
|
45
|
+
if getFromCache:
|
|
46
|
+
if classname in self.objectList:
|
|
47
|
+
return self.objectList[classname]
|
|
48
|
+
|
|
49
|
+
if self.namespace == '':
|
|
50
|
+
module = classname
|
|
51
|
+
# FIXME: hoky way of doing this! Change this please!
|
|
52
|
+
errModule = classname
|
|
53
|
+
else:
|
|
54
|
+
module = "%s.%s" % (self.namespace, classname)
|
|
55
|
+
errModule = "%s.%s" % (self.namespace, classname)
|
|
56
|
+
if alteredClassName:
|
|
57
|
+
classname = alteredClassName
|
|
58
|
+
module = __import__(module, globals(), locals(), [classname])
|
|
59
|
+
obj = getattr(module, classname.split('.')[-1])
|
|
60
|
+
if args is None:
|
|
61
|
+
classinstance = obj()
|
|
62
|
+
else:
|
|
63
|
+
# This handles the passing of list-style arguments instead of dicts
|
|
64
|
+
# Primarily for setting the schema
|
|
65
|
+
# Or anywhere you need arguments of the form (a,b,c,...)
|
|
66
|
+
if isinstance(args, list) and listFlag:
|
|
67
|
+
classinstance = obj(*args)
|
|
68
|
+
elif isinstance(args, dict):
|
|
69
|
+
classinstance = obj(**args)
|
|
70
|
+
else:
|
|
71
|
+
# But if you actually need to pass a list, better do it the old fashioned way
|
|
72
|
+
classinstance = obj(args)
|
|
73
|
+
if storeInCache:
|
|
74
|
+
self.objectList[classname] = classinstance
|
|
75
|
+
|
|
76
|
+
return classinstance
|
WMCore/WMInit.py
ADDED
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
#!/usr/bin/env python
|
|
2
|
+
"""
|
|
3
|
+
_WMInit
|
|
4
|
+
|
|
5
|
+
Init class that can be used by external projects
|
|
6
|
+
that only use part of the libraries
|
|
7
|
+
"""
|
|
8
|
+
from __future__ import print_function
|
|
9
|
+
|
|
10
|
+
import logging
|
|
11
|
+
import os
|
|
12
|
+
import os.path
|
|
13
|
+
import sys
|
|
14
|
+
import threading
|
|
15
|
+
import traceback
|
|
16
|
+
|
|
17
|
+
from WMCore.Configuration import loadConfigurationFile
|
|
18
|
+
from WMCore.DAOFactory import DAOFactory
|
|
19
|
+
from WMCore.Database.DBFactory import DBFactory
|
|
20
|
+
from WMCore.Database.Transaction import Transaction
|
|
21
|
+
from WMCore.WMBase import getWMBASE
|
|
22
|
+
from WMCore.WMException import WMException
|
|
23
|
+
from WMCore.WMFactory import WMFactory
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class WMInitException(WMException):
|
|
27
|
+
"""
|
|
28
|
+
WMInitException
|
|
29
|
+
|
|
30
|
+
You should never, ever see one of these.
|
|
31
|
+
I'm not optimistic that this will be the case.
|
|
32
|
+
"""
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
def connectToDB():
|
|
36
|
+
"""
|
|
37
|
+
_connectToDB_
|
|
38
|
+
|
|
39
|
+
Connect to the database specified in the WMAgent config.
|
|
40
|
+
"""
|
|
41
|
+
if "WMAGENT_CONFIG" not in os.environ:
|
|
42
|
+
print("Please set WMAGENT_CONFIG to point at your WMAgent configuration.")
|
|
43
|
+
sys.exit(1)
|
|
44
|
+
|
|
45
|
+
if not os.path.exists(os.environ["WMAGENT_CONFIG"]):
|
|
46
|
+
print("Can't find config: %s" % os.environ["WMAGENT_CONFIG"])
|
|
47
|
+
sys.exit(1)
|
|
48
|
+
|
|
49
|
+
wmAgentConfig = loadConfigurationFile(os.environ["WMAGENT_CONFIG"])
|
|
50
|
+
|
|
51
|
+
if not hasattr(wmAgentConfig, "CoreDatabase"):
|
|
52
|
+
print("Your config is missing the CoreDatabase section.")
|
|
53
|
+
sys.exit(1)
|
|
54
|
+
|
|
55
|
+
socketLoc = getattr(wmAgentConfig.CoreDatabase, "socket", None)
|
|
56
|
+
connectUrl = getattr(wmAgentConfig.CoreDatabase, "connectUrl", None)
|
|
57
|
+
(dialect, junk) = connectUrl.split(":", 1)
|
|
58
|
+
|
|
59
|
+
myWMInit = WMInit()
|
|
60
|
+
myWMInit.setDatabaseConnection(dbConfig=connectUrl, dialect=dialect,
|
|
61
|
+
socketLoc=socketLoc)
|
|
62
|
+
return
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
class WMInit(object):
|
|
66
|
+
def __init__(self):
|
|
67
|
+
return
|
|
68
|
+
|
|
69
|
+
def getWMBASE(self):
|
|
70
|
+
""" for those that don't want to use the static version"""
|
|
71
|
+
return getWMBASE()
|
|
72
|
+
|
|
73
|
+
def setLogging(self, logFile=None, logName=None, logLevel=logging.INFO, logExists=True):
|
|
74
|
+
"""
|
|
75
|
+
Sets logging parameters, depending on the settings,
|
|
76
|
+
this method will create a logging file.
|
|
77
|
+
"""
|
|
78
|
+
# use logName as name for file is no log file is given
|
|
79
|
+
if not logExists:
|
|
80
|
+
logging.basicConfig(level=logLevel, \
|
|
81
|
+
format='%(asctime)s %(name)-12s %(levelname)-8s %(message)s', \
|
|
82
|
+
datefmt='%m-%d %H:%M', \
|
|
83
|
+
filename='%s.log' % logFile, \
|
|
84
|
+
filemode='w')
|
|
85
|
+
logging.debug("Log file ready")
|
|
86
|
+
|
|
87
|
+
myThread = threading.currentThread()
|
|
88
|
+
if logName != None:
|
|
89
|
+
myThread.logger = logging.getLogger(logName)
|
|
90
|
+
else:
|
|
91
|
+
myThread.logger = logging.getLogger()
|
|
92
|
+
|
|
93
|
+
def setDatabaseConnection(self, dbConfig, dialect, socketLoc=None):
|
|
94
|
+
"""
|
|
95
|
+
Sets the default connection parameters, without having to worry
|
|
96
|
+
much on what attributes need to be set. This is esepcially
|
|
97
|
+
advantagous for developers of third party projects that want
|
|
98
|
+
to use only parts of the WMCore lib.
|
|
99
|
+
|
|
100
|
+
The class differentiates between different formats used by external
|
|
101
|
+
projects. External project formats that are supported can activated
|
|
102
|
+
it by setting the flavor flag.
|
|
103
|
+
"""
|
|
104
|
+
myThread = threading.currentThread()
|
|
105
|
+
if getattr(myThread, "dialect", None) != None:
|
|
106
|
+
# Database is already initialized, we'll create a new
|
|
107
|
+
# transaction and move on.
|
|
108
|
+
if hasattr(myThread, "transaction"):
|
|
109
|
+
if myThread.transaction != None:
|
|
110
|
+
myThread.transaction.commit()
|
|
111
|
+
|
|
112
|
+
myThread.transaction = Transaction(myThread.dbi)
|
|
113
|
+
return
|
|
114
|
+
|
|
115
|
+
options = {}
|
|
116
|
+
if dialect.lower() == 'mysql':
|
|
117
|
+
dialect = 'MySQL'
|
|
118
|
+
if socketLoc != None:
|
|
119
|
+
options['unix_socket'] = socketLoc
|
|
120
|
+
elif dialect.lower() == 'oracle':
|
|
121
|
+
dialect = 'Oracle'
|
|
122
|
+
elif dialect.lower() == 'http':
|
|
123
|
+
dialect = 'CouchDB'
|
|
124
|
+
else:
|
|
125
|
+
msg = "Unsupported dialect %s !" % dialect
|
|
126
|
+
logging.error(msg)
|
|
127
|
+
raise WMInitException(msg)
|
|
128
|
+
|
|
129
|
+
myThread.dialect = dialect
|
|
130
|
+
myThread.logger = logging
|
|
131
|
+
myThread.dbFactory = DBFactory(logging, dbConfig, options)
|
|
132
|
+
myThread.dbi = myThread.dbFactory.connect()
|
|
133
|
+
|
|
134
|
+
# The transaction object will begin a transaction as soon as it is
|
|
135
|
+
# initialized. I'd rather have the user handle that, so we'll commit
|
|
136
|
+
# it here.
|
|
137
|
+
myThread.transaction = Transaction(myThread.dbi)
|
|
138
|
+
myThread.transaction.commit()
|
|
139
|
+
|
|
140
|
+
return
|
|
141
|
+
|
|
142
|
+
def setSchema(self, modules=None, params=None):
|
|
143
|
+
"""
|
|
144
|
+
Creates the schema in the database based on the modules
|
|
145
|
+
input.
|
|
146
|
+
|
|
147
|
+
This method needs to have been preceded by the
|
|
148
|
+
setDatabaseConnection.
|
|
149
|
+
"""
|
|
150
|
+
modules = modules or []
|
|
151
|
+
myThread = threading.currentThread()
|
|
152
|
+
|
|
153
|
+
parameters = None
|
|
154
|
+
flag = False
|
|
155
|
+
# Set up for typical DBCreator format: logger, dbi, params
|
|
156
|
+
if params != None:
|
|
157
|
+
parameters = [None, None, params]
|
|
158
|
+
flag = True
|
|
159
|
+
|
|
160
|
+
myThread.transaction.begin()
|
|
161
|
+
for factoryName in modules:
|
|
162
|
+
# need to create these tables for testing.
|
|
163
|
+
# notice the default structure: <dialect>/Create
|
|
164
|
+
factory = WMFactory(factoryName, factoryName + "." + myThread.dialect)
|
|
165
|
+
|
|
166
|
+
create = factory.loadObject("Create", args=parameters, listFlag=flag)
|
|
167
|
+
createworked = create.execute(conn=myThread.transaction.conn,
|
|
168
|
+
transaction=myThread.transaction)
|
|
169
|
+
if createworked:
|
|
170
|
+
logging.debug("Tables for " + factoryName + " created")
|
|
171
|
+
else:
|
|
172
|
+
logging.debug("Tables " + factoryName + " could not be created.")
|
|
173
|
+
myThread.transaction.commit()
|
|
174
|
+
|
|
175
|
+
def clearDatabase(self, modules=None):
|
|
176
|
+
"""
|
|
177
|
+
Database deletion. Global, ignore modules.
|
|
178
|
+
"""
|
|
179
|
+
myThread = threading.currentThread()
|
|
180
|
+
if hasattr(myThread, 'transaction') and getattr(myThread.transaction, 'transaction', None):
|
|
181
|
+
# Then we have an open transaction
|
|
182
|
+
# We should try and close it first
|
|
183
|
+
try:
|
|
184
|
+
myThread.transaction.commit()
|
|
185
|
+
except:
|
|
186
|
+
try:
|
|
187
|
+
myThread.transaction.rollback()
|
|
188
|
+
except:
|
|
189
|
+
pass
|
|
190
|
+
|
|
191
|
+
# Setup the DAO
|
|
192
|
+
daoFactory = DAOFactory(package="WMCore.Database",
|
|
193
|
+
logger=myThread.logger,
|
|
194
|
+
dbinterface=myThread.dbi)
|
|
195
|
+
destroyDAO = daoFactory(classname="Destroy")
|
|
196
|
+
|
|
197
|
+
# Actually run a transaction and delete the DB
|
|
198
|
+
try:
|
|
199
|
+
destroyDAO.execute()
|
|
200
|
+
except Exception as ex:
|
|
201
|
+
msg = "Critical error while attempting to delete entire DB!\n"
|
|
202
|
+
msg += str(ex)
|
|
203
|
+
msg += str(traceback.format_exc())
|
|
204
|
+
logging.error(msg)
|
|
205
|
+
raise WMInitException(msg)
|
|
206
|
+
|
|
207
|
+
return
|
|
208
|
+
|
|
209
|
+
def checkDatabaseContents(self):
|
|
210
|
+
"""
|
|
211
|
+
_checkDatabaseContents_
|
|
212
|
+
|
|
213
|
+
Check and see if anything is in the database.
|
|
214
|
+
This should be called by methods about to build the schema to make sure
|
|
215
|
+
that the DB itself is empty.
|
|
216
|
+
"""
|
|
217
|
+
|
|
218
|
+
myThread = threading.currentThread()
|
|
219
|
+
daoFactory = DAOFactory(package="WMCore.Database",
|
|
220
|
+
logger=myThread.logger,
|
|
221
|
+
dbinterface=myThread.dbi)
|
|
222
|
+
|
|
223
|
+
testDAO = daoFactory(classname="ListUserContent")
|
|
224
|
+
|
|
225
|
+
result = testDAO.execute()
|
|
226
|
+
myThread.dbi.engine.dispose()
|
|
227
|
+
|
|
228
|
+
return result
|
WMCore/WMLogging.py
ADDED
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
#!/usr/bin/env python
|
|
2
|
+
"""
|
|
3
|
+
_WMLogging_
|
|
4
|
+
|
|
5
|
+
Logging facilities used in WMCore.
|
|
6
|
+
"""
|
|
7
|
+
import logging
|
|
8
|
+
import codecs
|
|
9
|
+
from datetime import date, timedelta
|
|
10
|
+
from logging.handlers import HTTPHandler, RotatingFileHandler, TimedRotatingFileHandler
|
|
11
|
+
|
|
12
|
+
# a new log level which is lower than debug
|
|
13
|
+
# to prevent a tsunami of log messages in debug
|
|
14
|
+
# mode but to have the possibility to see all
|
|
15
|
+
# database queries if necessary.
|
|
16
|
+
logging.SQLDEBUG = 5
|
|
17
|
+
logging.addLevelName(logging.SQLDEBUG,"SQLDEBUG")
|
|
18
|
+
|
|
19
|
+
def sqldebug(msg):
|
|
20
|
+
"""
|
|
21
|
+
A convenience method that all default levels
|
|
22
|
+
have for publishing log messages.
|
|
23
|
+
"""
|
|
24
|
+
logging.log(logging.SQLDEBUG, msg)
|
|
25
|
+
|
|
26
|
+
def setupRotatingHandler(fileName, maxBytes = 200000000, backupCount = 3):
|
|
27
|
+
"""
|
|
28
|
+
_setupRotatingHandler_
|
|
29
|
+
|
|
30
|
+
Create a rotating log handler with the given parameters.
|
|
31
|
+
"""
|
|
32
|
+
handler = RotatingFileHandler(fileName, "a", maxBytes, backupCount)
|
|
33
|
+
logging.getLogger().addHandler(handler)
|
|
34
|
+
return
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def getTimeRotatingLogger(name, logFile, duration = 'midnight'):
|
|
38
|
+
""" Set the logger for time based lotaing.
|
|
39
|
+
"""
|
|
40
|
+
logger = logging.getLogger(name)
|
|
41
|
+
if duration == 'midnight':
|
|
42
|
+
handler = MyTimedRotatingFileHandler(logFile, duration, backupCount = 10)
|
|
43
|
+
else:
|
|
44
|
+
handler = TimedRotatingFileHandler(logFile, duration, backupCount = 10)
|
|
45
|
+
formatter = logging.Formatter("%(asctime)s:%(levelname)s:%(module)s:%(message)s")
|
|
46
|
+
handler.setFormatter(formatter)
|
|
47
|
+
logger.addHandler(handler)
|
|
48
|
+
logger.setLevel(logging.INFO)
|
|
49
|
+
|
|
50
|
+
return logger
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
class MyTimedRotatingFileHandler(TimedRotatingFileHandler):
|
|
54
|
+
"""
|
|
55
|
+
_MyTimedRotatingFileHandler_
|
|
56
|
+
|
|
57
|
+
Overwrite the standard filename functionality from
|
|
58
|
+
logging.handlers.MyTimedRotatingFileHandler
|
|
59
|
+
such that it mimics the same behaviour as rotatelogs tool.
|
|
60
|
+
|
|
61
|
+
Source code from:
|
|
62
|
+
https://stackoverflow.com/questions/338450/timedrotatingfilehandler-changing-file-name
|
|
63
|
+
"""
|
|
64
|
+
def __init__(self, logName, interval, backupCount):
|
|
65
|
+
super(MyTimedRotatingFileHandler, self).__init__(logName, when=interval,
|
|
66
|
+
backupCount=backupCount)
|
|
67
|
+
|
|
68
|
+
def doRollover(self):
|
|
69
|
+
"""
|
|
70
|
+
_doRollover_
|
|
71
|
+
|
|
72
|
+
Rotate the log file and add the date between the log name
|
|
73
|
+
and its extension, e.g.:
|
|
74
|
+
reqmgr2.log becomes reqmgr2-20170815.log
|
|
75
|
+
"""
|
|
76
|
+
self.stream.close()
|
|
77
|
+
# replace yesterday's date by today
|
|
78
|
+
yesterdayStr = (date.today() - timedelta(1)).strftime("%Y%m%d")
|
|
79
|
+
todayStr = date.today().strftime("%Y%m%d")
|
|
80
|
+
self.baseFilename = self.baseFilename.replace(yesterdayStr, todayStr)
|
|
81
|
+
if self.encoding:
|
|
82
|
+
self.stream = codecs.open(self.baseFilename, 'w', self.encoding)
|
|
83
|
+
else:
|
|
84
|
+
self.stream = open(self.baseFilename, 'w')
|
|
85
|
+
self.rolloverAt = self.rolloverAt + self.interval
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
class CouchHandler(logging.handlers.HTTPHandler):
|
|
89
|
+
def __init__(self, host, database):
|
|
90
|
+
HTTPHandler.__init__(self, host, database, 'POST')
|
|
91
|
+
from WMCore.Database.CMSCouch import CouchServer
|
|
92
|
+
self.database = CouchServer(dburl=host).connectDatabase(database, size=10)
|
|
93
|
+
|
|
94
|
+
def emit(self, record):
|
|
95
|
+
"""
|
|
96
|
+
Write a document to CouchDB representing the log message.
|
|
97
|
+
"""
|
|
98
|
+
doc = {}
|
|
99
|
+
doc['message'] = record.msg
|
|
100
|
+
doc['threadName'] = record.threadName
|
|
101
|
+
doc['name'] = record.name
|
|
102
|
+
doc['created'] = record.created
|
|
103
|
+
doc['process'] = record.process
|
|
104
|
+
doc['levelno'] = record.levelno
|
|
105
|
+
doc['lineno'] = record.lineno
|
|
106
|
+
doc['processName'] = record.processName
|
|
107
|
+
doc['levelname'] = record.levelname
|
|
108
|
+
self.database.commitOne(doc, timestamp=True)
|