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.

Files changed (345) hide show
  1. Utils/CPMetrics.py +270 -0
  2. Utils/CertTools.py +62 -0
  3. Utils/EmailAlert.py +50 -0
  4. Utils/ExtendedUnitTestCase.py +62 -0
  5. Utils/FileTools.py +182 -0
  6. Utils/IteratorTools.py +80 -0
  7. Utils/MathUtils.py +31 -0
  8. Utils/MemoryCache.py +119 -0
  9. Utils/Patterns.py +24 -0
  10. Utils/Pipeline.py +137 -0
  11. Utils/PortForward.py +97 -0
  12. Utils/ProcessStats.py +103 -0
  13. Utils/PythonVersion.py +17 -0
  14. Utils/Signals.py +36 -0
  15. Utils/TemporaryEnvironment.py +27 -0
  16. Utils/Throttled.py +227 -0
  17. Utils/Timers.py +130 -0
  18. Utils/Timestamps.py +86 -0
  19. Utils/TokenManager.py +143 -0
  20. Utils/Tracing.py +60 -0
  21. Utils/TwPrint.py +98 -0
  22. Utils/Utilities.py +308 -0
  23. Utils/__init__.py +11 -0
  24. WMCore/ACDC/Collection.py +57 -0
  25. WMCore/ACDC/CollectionTypes.py +12 -0
  26. WMCore/ACDC/CouchCollection.py +67 -0
  27. WMCore/ACDC/CouchFileset.py +238 -0
  28. WMCore/ACDC/CouchService.py +73 -0
  29. WMCore/ACDC/DataCollectionService.py +485 -0
  30. WMCore/ACDC/Fileset.py +94 -0
  31. WMCore/ACDC/__init__.py +11 -0
  32. WMCore/Algorithms/Alarm.py +39 -0
  33. WMCore/Algorithms/MathAlgos.py +274 -0
  34. WMCore/Algorithms/MiscAlgos.py +67 -0
  35. WMCore/Algorithms/ParseXMLFile.py +115 -0
  36. WMCore/Algorithms/Permissions.py +27 -0
  37. WMCore/Algorithms/Singleton.py +58 -0
  38. WMCore/Algorithms/SubprocessAlgos.py +129 -0
  39. WMCore/Algorithms/__init__.py +7 -0
  40. WMCore/Cache/GenericDataCache.py +98 -0
  41. WMCore/Cache/WMConfigCache.py +572 -0
  42. WMCore/Cache/__init__.py +0 -0
  43. WMCore/Configuration.py +651 -0
  44. WMCore/DAOFactory.py +47 -0
  45. WMCore/DataStructs/File.py +177 -0
  46. WMCore/DataStructs/Fileset.py +140 -0
  47. WMCore/DataStructs/Job.py +182 -0
  48. WMCore/DataStructs/JobGroup.py +142 -0
  49. WMCore/DataStructs/JobPackage.py +49 -0
  50. WMCore/DataStructs/LumiList.py +734 -0
  51. WMCore/DataStructs/Mask.py +219 -0
  52. WMCore/DataStructs/MathStructs/ContinuousSummaryHistogram.py +197 -0
  53. WMCore/DataStructs/MathStructs/DiscreteSummaryHistogram.py +92 -0
  54. WMCore/DataStructs/MathStructs/SummaryHistogram.py +117 -0
  55. WMCore/DataStructs/MathStructs/__init__.py +0 -0
  56. WMCore/DataStructs/Pickleable.py +24 -0
  57. WMCore/DataStructs/Run.py +256 -0
  58. WMCore/DataStructs/Subscription.py +175 -0
  59. WMCore/DataStructs/WMObject.py +47 -0
  60. WMCore/DataStructs/WorkUnit.py +112 -0
  61. WMCore/DataStructs/Workflow.py +60 -0
  62. WMCore/DataStructs/__init__.py +8 -0
  63. WMCore/Database/CMSCouch.py +1349 -0
  64. WMCore/Database/ConfigDBMap.py +29 -0
  65. WMCore/Database/CouchUtils.py +118 -0
  66. WMCore/Database/DBCore.py +198 -0
  67. WMCore/Database/DBCreator.py +113 -0
  68. WMCore/Database/DBExceptionHandler.py +57 -0
  69. WMCore/Database/DBFactory.py +110 -0
  70. WMCore/Database/DBFormatter.py +177 -0
  71. WMCore/Database/Dialects.py +13 -0
  72. WMCore/Database/ExecuteDAO.py +327 -0
  73. WMCore/Database/MongoDB.py +241 -0
  74. WMCore/Database/MySQL/Destroy.py +42 -0
  75. WMCore/Database/MySQL/ListUserContent.py +20 -0
  76. WMCore/Database/MySQL/__init__.py +9 -0
  77. WMCore/Database/MySQLCore.py +132 -0
  78. WMCore/Database/Oracle/Destroy.py +56 -0
  79. WMCore/Database/Oracle/ListUserContent.py +19 -0
  80. WMCore/Database/Oracle/__init__.py +9 -0
  81. WMCore/Database/ResultSet.py +44 -0
  82. WMCore/Database/Transaction.py +91 -0
  83. WMCore/Database/__init__.py +9 -0
  84. WMCore/Database/ipy_profile_couch.py +438 -0
  85. WMCore/GlobalWorkQueue/CherryPyThreads/CleanUpTask.py +29 -0
  86. WMCore/GlobalWorkQueue/CherryPyThreads/HeartbeatMonitor.py +105 -0
  87. WMCore/GlobalWorkQueue/CherryPyThreads/LocationUpdateTask.py +28 -0
  88. WMCore/GlobalWorkQueue/CherryPyThreads/ReqMgrInteractionTask.py +35 -0
  89. WMCore/GlobalWorkQueue/CherryPyThreads/__init__.py +0 -0
  90. WMCore/GlobalWorkQueue/__init__.py +0 -0
  91. WMCore/GroupUser/CouchObject.py +127 -0
  92. WMCore/GroupUser/Decorators.py +51 -0
  93. WMCore/GroupUser/Group.py +33 -0
  94. WMCore/GroupUser/Interface.py +73 -0
  95. WMCore/GroupUser/User.py +96 -0
  96. WMCore/GroupUser/__init__.py +11 -0
  97. WMCore/Lexicon.py +836 -0
  98. WMCore/REST/Auth.py +202 -0
  99. WMCore/REST/CherryPyPeriodicTask.py +166 -0
  100. WMCore/REST/Error.py +333 -0
  101. WMCore/REST/Format.py +642 -0
  102. WMCore/REST/HeartbeatMonitorBase.py +90 -0
  103. WMCore/REST/Main.py +623 -0
  104. WMCore/REST/Server.py +2435 -0
  105. WMCore/REST/Services.py +24 -0
  106. WMCore/REST/Test.py +120 -0
  107. WMCore/REST/Tools.py +38 -0
  108. WMCore/REST/Validation.py +250 -0
  109. WMCore/REST/__init__.py +1 -0
  110. WMCore/ReqMgr/DataStructs/RequestStatus.py +209 -0
  111. WMCore/ReqMgr/DataStructs/RequestType.py +13 -0
  112. WMCore/ReqMgr/DataStructs/__init__.py +0 -0
  113. WMCore/ReqMgr/__init__.py +1 -0
  114. WMCore/Services/AlertManager/AlertManagerAPI.py +111 -0
  115. WMCore/Services/AlertManager/__init__.py +0 -0
  116. WMCore/Services/CRIC/CRIC.py +238 -0
  117. WMCore/Services/CRIC/__init__.py +0 -0
  118. WMCore/Services/DBS/DBS3Reader.py +1044 -0
  119. WMCore/Services/DBS/DBSConcurrency.py +44 -0
  120. WMCore/Services/DBS/DBSErrors.py +113 -0
  121. WMCore/Services/DBS/DBSReader.py +23 -0
  122. WMCore/Services/DBS/DBSUtils.py +139 -0
  123. WMCore/Services/DBS/DBSWriterObjects.py +381 -0
  124. WMCore/Services/DBS/ProdException.py +133 -0
  125. WMCore/Services/DBS/__init__.py +8 -0
  126. WMCore/Services/FWJRDB/FWJRDBAPI.py +118 -0
  127. WMCore/Services/FWJRDB/__init__.py +0 -0
  128. WMCore/Services/HTTPS/HTTPSAuthHandler.py +66 -0
  129. WMCore/Services/HTTPS/__init__.py +0 -0
  130. WMCore/Services/LogDB/LogDB.py +201 -0
  131. WMCore/Services/LogDB/LogDBBackend.py +191 -0
  132. WMCore/Services/LogDB/LogDBExceptions.py +11 -0
  133. WMCore/Services/LogDB/LogDBReport.py +85 -0
  134. WMCore/Services/LogDB/__init__.py +0 -0
  135. WMCore/Services/MSPileup/__init__.py +0 -0
  136. WMCore/Services/MSUtils/MSUtils.py +54 -0
  137. WMCore/Services/MSUtils/__init__.py +0 -0
  138. WMCore/Services/McM/McM.py +173 -0
  139. WMCore/Services/McM/__init__.py +8 -0
  140. WMCore/Services/MonIT/Grafana.py +133 -0
  141. WMCore/Services/MonIT/__init__.py +0 -0
  142. WMCore/Services/PyCondor/PyCondorAPI.py +154 -0
  143. WMCore/Services/PyCondor/PyCondorUtils.py +105 -0
  144. WMCore/Services/PyCondor/__init__.py +0 -0
  145. WMCore/Services/ReqMgr/ReqMgr.py +261 -0
  146. WMCore/Services/ReqMgr/__init__.py +0 -0
  147. WMCore/Services/ReqMgrAux/ReqMgrAux.py +419 -0
  148. WMCore/Services/ReqMgrAux/__init__.py +0 -0
  149. WMCore/Services/RequestDB/RequestDBReader.py +267 -0
  150. WMCore/Services/RequestDB/RequestDBWriter.py +39 -0
  151. WMCore/Services/RequestDB/__init__.py +0 -0
  152. WMCore/Services/Requests.py +624 -0
  153. WMCore/Services/Rucio/Rucio.py +1287 -0
  154. WMCore/Services/Rucio/RucioUtils.py +74 -0
  155. WMCore/Services/Rucio/__init__.py +0 -0
  156. WMCore/Services/RucioConMon/RucioConMon.py +128 -0
  157. WMCore/Services/RucioConMon/__init__.py +0 -0
  158. WMCore/Services/Service.py +400 -0
  159. WMCore/Services/StompAMQ/__init__.py +0 -0
  160. WMCore/Services/TagCollector/TagCollector.py +155 -0
  161. WMCore/Services/TagCollector/XMLUtils.py +98 -0
  162. WMCore/Services/TagCollector/__init__.py +0 -0
  163. WMCore/Services/UUIDLib.py +13 -0
  164. WMCore/Services/UserFileCache/UserFileCache.py +160 -0
  165. WMCore/Services/UserFileCache/__init__.py +8 -0
  166. WMCore/Services/WMAgent/WMAgent.py +63 -0
  167. WMCore/Services/WMAgent/__init__.py +0 -0
  168. WMCore/Services/WMArchive/CMSSWMetrics.py +526 -0
  169. WMCore/Services/WMArchive/DataMap.py +463 -0
  170. WMCore/Services/WMArchive/WMArchive.py +33 -0
  171. WMCore/Services/WMArchive/__init__.py +0 -0
  172. WMCore/Services/WMBS/WMBS.py +97 -0
  173. WMCore/Services/WMBS/__init__.py +0 -0
  174. WMCore/Services/WMStats/DataStruct/RequestInfoCollection.py +300 -0
  175. WMCore/Services/WMStats/DataStruct/__init__.py +0 -0
  176. WMCore/Services/WMStats/WMStatsPycurl.py +145 -0
  177. WMCore/Services/WMStats/WMStatsReader.py +445 -0
  178. WMCore/Services/WMStats/WMStatsWriter.py +273 -0
  179. WMCore/Services/WMStats/__init__.py +0 -0
  180. WMCore/Services/WMStatsServer/WMStatsServer.py +134 -0
  181. WMCore/Services/WMStatsServer/__init__.py +0 -0
  182. WMCore/Services/WorkQueue/WorkQueue.py +492 -0
  183. WMCore/Services/WorkQueue/__init__.py +0 -0
  184. WMCore/Services/__init__.py +8 -0
  185. WMCore/Services/pycurl_manager.py +574 -0
  186. WMCore/WMBase.py +50 -0
  187. WMCore/WMConnectionBase.py +164 -0
  188. WMCore/WMException.py +183 -0
  189. WMCore/WMExceptions.py +269 -0
  190. WMCore/WMFactory.py +76 -0
  191. WMCore/WMInit.py +228 -0
  192. WMCore/WMLogging.py +108 -0
  193. WMCore/WMSpec/ConfigSectionTree.py +442 -0
  194. WMCore/WMSpec/Persistency.py +135 -0
  195. WMCore/WMSpec/Steps/BuildMaster.py +87 -0
  196. WMCore/WMSpec/Steps/BuildTools.py +201 -0
  197. WMCore/WMSpec/Steps/Builder.py +97 -0
  198. WMCore/WMSpec/Steps/Diagnostic.py +89 -0
  199. WMCore/WMSpec/Steps/Emulator.py +62 -0
  200. WMCore/WMSpec/Steps/ExecuteMaster.py +208 -0
  201. WMCore/WMSpec/Steps/Executor.py +210 -0
  202. WMCore/WMSpec/Steps/StepFactory.py +213 -0
  203. WMCore/WMSpec/Steps/TaskEmulator.py +75 -0
  204. WMCore/WMSpec/Steps/Template.py +204 -0
  205. WMCore/WMSpec/Steps/Templates/AlcaHarvest.py +76 -0
  206. WMCore/WMSpec/Steps/Templates/CMSSW.py +613 -0
  207. WMCore/WMSpec/Steps/Templates/DQMUpload.py +59 -0
  208. WMCore/WMSpec/Steps/Templates/DeleteFiles.py +70 -0
  209. WMCore/WMSpec/Steps/Templates/LogArchive.py +84 -0
  210. WMCore/WMSpec/Steps/Templates/LogCollect.py +105 -0
  211. WMCore/WMSpec/Steps/Templates/StageOut.py +105 -0
  212. WMCore/WMSpec/Steps/Templates/__init__.py +10 -0
  213. WMCore/WMSpec/Steps/WMExecutionFailure.py +21 -0
  214. WMCore/WMSpec/Steps/__init__.py +8 -0
  215. WMCore/WMSpec/Utilities.py +63 -0
  216. WMCore/WMSpec/WMSpecErrors.py +12 -0
  217. WMCore/WMSpec/WMStep.py +347 -0
  218. WMCore/WMSpec/WMTask.py +1980 -0
  219. WMCore/WMSpec/WMWorkload.py +2288 -0
  220. WMCore/WMSpec/WMWorkloadTools.py +370 -0
  221. WMCore/WMSpec/__init__.py +9 -0
  222. WMCore/WorkQueue/DataLocationMapper.py +273 -0
  223. WMCore/WorkQueue/DataStructs/ACDCBlock.py +47 -0
  224. WMCore/WorkQueue/DataStructs/Block.py +48 -0
  225. WMCore/WorkQueue/DataStructs/CouchWorkQueueElement.py +148 -0
  226. WMCore/WorkQueue/DataStructs/WorkQueueElement.py +274 -0
  227. WMCore/WorkQueue/DataStructs/WorkQueueElementResult.py +152 -0
  228. WMCore/WorkQueue/DataStructs/WorkQueueElementsSummary.py +185 -0
  229. WMCore/WorkQueue/DataStructs/__init__.py +0 -0
  230. WMCore/WorkQueue/Policy/End/EndPolicyInterface.py +44 -0
  231. WMCore/WorkQueue/Policy/End/SingleShot.py +22 -0
  232. WMCore/WorkQueue/Policy/End/__init__.py +32 -0
  233. WMCore/WorkQueue/Policy/PolicyInterface.py +17 -0
  234. WMCore/WorkQueue/Policy/Start/Block.py +258 -0
  235. WMCore/WorkQueue/Policy/Start/Dataset.py +180 -0
  236. WMCore/WorkQueue/Policy/Start/MonteCarlo.py +131 -0
  237. WMCore/WorkQueue/Policy/Start/ResubmitBlock.py +171 -0
  238. WMCore/WorkQueue/Policy/Start/StartPolicyInterface.py +316 -0
  239. WMCore/WorkQueue/Policy/Start/__init__.py +34 -0
  240. WMCore/WorkQueue/Policy/__init__.py +57 -0
  241. WMCore/WorkQueue/WMBSHelper.py +772 -0
  242. WMCore/WorkQueue/WorkQueue.py +1237 -0
  243. WMCore/WorkQueue/WorkQueueBackend.py +750 -0
  244. WMCore/WorkQueue/WorkQueueBase.py +39 -0
  245. WMCore/WorkQueue/WorkQueueExceptions.py +44 -0
  246. WMCore/WorkQueue/WorkQueueReqMgrInterface.py +278 -0
  247. WMCore/WorkQueue/WorkQueueUtils.py +130 -0
  248. WMCore/WorkQueue/__init__.py +13 -0
  249. WMCore/Wrappers/JsonWrapper/JSONThunker.py +342 -0
  250. WMCore/Wrappers/JsonWrapper/__init__.py +7 -0
  251. WMCore/Wrappers/__init__.py +6 -0
  252. WMCore/__init__.py +10 -0
  253. wmglobalqueue-2.3.10.data/data/bin/wmc-dist-patch +15 -0
  254. wmglobalqueue-2.3.10.data/data/bin/wmc-dist-unpatch +8 -0
  255. wmglobalqueue-2.3.10.data/data/bin/wmc-httpd +3 -0
  256. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/.couchapprc +1 -0
  257. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/README.md +40 -0
  258. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/_attachments/index.html +264 -0
  259. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/_attachments/js/ElementInfoByWorkflow.js +96 -0
  260. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/_attachments/js/StuckElementInfo.js +57 -0
  261. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/_attachments/js/WorkloadInfoTable.js +80 -0
  262. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/_attachments/js/dataTable.js +70 -0
  263. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/_attachments/js/namespace.js +23 -0
  264. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/_attachments/style/main.css +75 -0
  265. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/couchapp.json +4 -0
  266. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/filters/childQueueFilter.js +13 -0
  267. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/filters/filterDeletedDocs.js +3 -0
  268. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/filters/queueFilter.js +11 -0
  269. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/language +1 -0
  270. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/lib/mustache.js +333 -0
  271. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/lib/validate.js +27 -0
  272. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/lib/workqueue_utils.js +61 -0
  273. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/lists/elementsDetail.js +28 -0
  274. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/lists/filter.js +86 -0
  275. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/lists/stuckElements.js +38 -0
  276. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/lists/workRestrictions.js +153 -0
  277. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/lists/workflowSummary.js +28 -0
  278. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/rewrites.json +73 -0
  279. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/shows/redirect.js +23 -0
  280. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/shows/status.js +40 -0
  281. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/templates/ElementSummaryByWorkflow.html +27 -0
  282. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/templates/StuckElementSummary.html +26 -0
  283. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/templates/TaskStatus.html +23 -0
  284. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/templates/WorkflowSummary.html +27 -0
  285. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/templates/partials/workqueue-common-lib.html +2 -0
  286. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/templates/partials/yui-lib-remote.html +16 -0
  287. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/templates/partials/yui-lib.html +18 -0
  288. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/updates/in-place.js +50 -0
  289. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/validate_doc_update.js +8 -0
  290. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/vendor/couchapp/_attachments/jquery.couch.app.js +235 -0
  291. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/vendor/couchapp/_attachments/jquery.pathbinder.js +173 -0
  292. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/activeData/map.js +8 -0
  293. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/activeData/reduce.js +2 -0
  294. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/activeParentData/map.js +8 -0
  295. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/activeParentData/reduce.js +2 -0
  296. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/activePileupData/map.js +8 -0
  297. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/activePileupData/reduce.js +2 -0
  298. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/analyticsData/map.js +11 -0
  299. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/analyticsData/reduce.js +1 -0
  300. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/availableByPriority/map.js +6 -0
  301. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/conflicts/map.js +5 -0
  302. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/elements/map.js +5 -0
  303. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/elementsByData/map.js +8 -0
  304. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/elementsByParent/map.js +8 -0
  305. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/elementsByParentData/map.js +8 -0
  306. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/elementsByPileupData/map.js +8 -0
  307. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/elementsByStatus/map.js +8 -0
  308. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/elementsBySubscription/map.js +6 -0
  309. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/elementsByWorkflow/map.js +8 -0
  310. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/elementsByWorkflow/reduce.js +3 -0
  311. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/elementsDetailByWorkflowAndStatus/map.js +26 -0
  312. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/jobInjectStatusByRequest/map.js +10 -0
  313. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/jobInjectStatusByRequest/reduce.js +1 -0
  314. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/jobStatusByRequest/map.js +6 -0
  315. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/jobStatusByRequest/reduce.js +1 -0
  316. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/jobsByChildQueueAndPriority/map.js +6 -0
  317. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/jobsByChildQueueAndPriority/reduce.js +1 -0
  318. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/jobsByChildQueueAndStatus/map.js +6 -0
  319. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/jobsByChildQueueAndStatus/reduce.js +1 -0
  320. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/jobsByRequest/map.js +6 -0
  321. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/jobsByRequest/reduce.js +1 -0
  322. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/jobsByStatus/map.js +6 -0
  323. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/jobsByStatus/reduce.js +1 -0
  324. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/jobsByStatusAndPriority/map.js +6 -0
  325. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/jobsByStatusAndPriority/reduce.js +1 -0
  326. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/openRequests/map.js +6 -0
  327. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/recent-items/map.js +5 -0
  328. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/siteWhitelistByRequest/map.js +6 -0
  329. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/siteWhitelistByRequest/reduce.js +1 -0
  330. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/specsByWorkflow/map.js +5 -0
  331. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/stuckElements/map.js +38 -0
  332. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/wmbsInjectStatusByRequest/map.js +12 -0
  333. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/wmbsInjectStatusByRequest/reduce.js +3 -0
  334. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/wmbsUrl/map.js +6 -0
  335. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/wmbsUrl/reduce.js +2 -0
  336. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/wmbsUrlByRequest/map.js +6 -0
  337. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/wmbsUrlByRequest/reduce.js +2 -0
  338. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/workflowSummary/map.js +9 -0
  339. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/workflowSummary/reduce.js +10 -0
  340. wmglobalqueue-2.3.10.dist-info/LICENSE +202 -0
  341. wmglobalqueue-2.3.10.dist-info/METADATA +24 -0
  342. wmglobalqueue-2.3.10.dist-info/NOTICE +16 -0
  343. wmglobalqueue-2.3.10.dist-info/RECORD +345 -0
  344. wmglobalqueue-2.3.10.dist-info/WHEEL +5 -0
  345. 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)