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
@@ -0,0 +1,273 @@
1
+ import logging
2
+ import random
3
+ import time
4
+ from json import JSONEncoder
5
+
6
+ import WMCore
7
+ from Utils.IteratorTools import grouper
8
+ from WMCore.Database.CMSCouch import CouchNotFoundError
9
+ from WMCore.Services.WMStats.WMStatsReader import WMStatsReader
10
+
11
+
12
+ def monitorDocFromRequestSchema(schema):
13
+ """
14
+ prun and convert
15
+ """
16
+ doc = {}
17
+ doc["_id"] = schema['RequestName']
18
+ doc["workflow"] = schema['RequestName']
19
+ doc["requestor"] = schema['Requestor']
20
+ doc["campaign"] = schema['Campaign']
21
+ doc["request_type"] = schema['RequestType']
22
+ doc["priority"] = schema['RequestPriority']
23
+ doc["group"] = schema['Group']
24
+ doc["request_date"] = schema['RequestDate']
25
+ doc["type"] = "reqmgr_request"
26
+ # additional field
27
+ doc["inputdataset"] = schema.get('InputDataset', "")
28
+ # additional field for Analysis work
29
+ doc["vo_group"] = schema.get('VoGroup', "")
30
+ doc["vo_role"] = schema.get('VoRole', "")
31
+ doc["user_dn"] = schema.get('RequestorDN', "")
32
+ doc["async_dest"] = schema.get('asyncDest', "")
33
+ doc["dbs_url"] = schema.get("DbsUrl", "")
34
+ doc["publish_dbs_url"] = schema.get("PublishDbsUrl", "")
35
+ doc["outputdatasets"] = schema.get('OutputDatasets', [])
36
+ doc["cmssw"] = schema.get('CMSSWVersion', [])
37
+ doc['prep_id'] = schema.get('PrepID', None)
38
+
39
+ # team name is not yet available need to be updated in assign status
40
+ # doc['team'] = schema['team']
41
+ return doc
42
+
43
+
44
+ def convertToServiceCouchDoc(wqInfo, wqURL):
45
+ """
46
+ Convert services generic info into a proper couch doc.
47
+ """
48
+ wqDoc = {}
49
+ wqDoc['_id'] = wqURL
50
+ wqDoc['agent_url'] = wqURL
51
+ wqDoc['agent_team'] = ""
52
+ wqDoc['agent_version'] = WMCore.__version__
53
+ wqDoc['timestamp'] = int(time.time())
54
+ wqDoc['down_components'] = []
55
+ wqDoc['type'] = "agent_info"
56
+ wqDoc.update(wqInfo)
57
+
58
+ return wqDoc
59
+
60
+
61
+ class WMStatsWriter(WMStatsReader):
62
+ def __init__(self, couchURL, appName="WMStats", reqdbURL=None, reqdbCouchApp="ReqMgr"):
63
+ # set the connection for local couchDB call
64
+ WMStatsReader.__init__(self, couchURL, appName, reqdbURL, reqdbCouchApp)
65
+
66
+ def _sanitizeURL(self, couchURL):
67
+ """
68
+ don't sanitize url for writer
69
+ """
70
+ return couchURL
71
+
72
+ def uploadData(self, docs):
73
+ """
74
+ upload to given couchURL using cert and key authentication and authorization
75
+ """
76
+ # add delete docs as well for the compaction
77
+ # need to check whether delete and update is successful
78
+ if isinstance(docs, dict):
79
+ docs = [docs]
80
+ for doc in docs:
81
+ self.couchDB.queue(doc)
82
+ return self.couchDB.commit(returndocs=True)
83
+
84
+ def bulkUpdateData(self, docs, existingDocs):
85
+ """
86
+ Update documents to WMStats in bulk, breaking down to 100 docs chunks.
87
+ :param docs: docs to insert or update
88
+ :param existingDocs: dict of docId: docRev of docs already existent in wmstats
89
+ """
90
+ if isinstance(docs, dict):
91
+ docs = [docs]
92
+ for chunk in grouper(docs, 100):
93
+ for doc in chunk:
94
+ if doc['_id'] in existingDocs:
95
+ revList = existingDocs[doc['_id']].split('-')
96
+ # update the revision number and keep the history of the revision
97
+ doc['_revisions'] = {"start": int(revList[0]) + 1, "ids": [str(int(revList[1]) + 1), revList[1]]}
98
+ else:
99
+ # then create a random 10 digits uid for the first revision number, required by new_edits=False
100
+ firstId = "%10d" % random.randrange(9999999999)
101
+ doc['_revisions'] = {"start": 1, "ids": [firstId]}
102
+ self.couchDB.queue(doc)
103
+
104
+ logging.info("Committing bulk of %i docs ...", len(chunk))
105
+ self.couchDB.commit(new_edits=False)
106
+ return
107
+
108
+ def insertRequest(self, schema):
109
+ doc = monitorDocFromRequestSchema(schema)
110
+ return self.insertGenericRequest(doc)
111
+
112
+ def updateTeam(self, request, team):
113
+ return self.couchDB.updateDocument(request, self.couchapp, 'team',
114
+ fields={'team': team})
115
+
116
+ def insertTotalStats(self, request, totalStats):
117
+ """
118
+ update the total stats of given workflow (total_jobs, input_events, input_lumis, input_num_files)
119
+ """
120
+ return self.couchDB.updateDocument(request, self.couchapp, 'totalStats',
121
+ fields=totalStats)
122
+
123
+ def updateFromWMSpec(self, spec):
124
+ # currently only update priority and siteWhitelist and output dataset
125
+ # complex field needs to be JSON encoded
126
+ # assuming all the toplevel tasks has the same site white lists
127
+ # priority is priority + user priority + group priority
128
+ fields = {'priority': spec.priority(),
129
+ 'site_white_list': spec.getTopLevelTask()[0].siteWhitelist(),
130
+ 'outputdatasets': spec.listOutputDatasets()}
131
+ return self.couchDB.updateDocument(spec.name(), self.couchapp,
132
+ 'generalFields',
133
+ fields={'general_fields': JSONEncoder().encode(fields)})
134
+
135
+ def updateRequestsInfo(self, docs):
136
+ """
137
+ bulk update for request documents.
138
+ TODO: change to bulk update handler when it gets supported
139
+ """
140
+ for doc in docs:
141
+ del doc['type']
142
+ self.couchDB.updateDocument(doc['workflow'], self.couchapp,
143
+ 'generalFields',
144
+ fields={'general_fields': JSONEncoder().encode(doc)})
145
+
146
+ def updateAgentInfo(self, agentInfo, propertiesToKeep=None):
147
+ """
148
+ replace the agentInfo document with new one.
149
+ :param agentInfo: dictionary for agent info
150
+ :param propertiesToKeep: list of properties to keep original value
151
+ :return: None
152
+ """
153
+ try:
154
+ exist_doc = self.couchDB.document(agentInfo["_id"])
155
+ agentInfo["_rev"] = exist_doc["_rev"]
156
+ if propertiesToKeep and isinstance(propertiesToKeep, list):
157
+ for prop in propertiesToKeep:
158
+ if prop in exist_doc:
159
+ agentInfo[prop] = exist_doc[prop]
160
+
161
+ except CouchNotFoundError:
162
+ # this means document is not exist so we will just insert
163
+ pass
164
+ finally:
165
+ result = self.couchDB.commitOne(agentInfo)
166
+ return result
167
+
168
+ def updateAgentInfoInPlace(self, agentURL, agentInfo):
169
+ """
170
+ :param agentInfo: dictionary for agent info
171
+ :return: document update status
172
+
173
+ update agentInfo in couch in place without replacing a doucment
174
+ """
175
+ return self.couchDB.updateDocument(agentURL, self.couchapp, 'agentInfo', fields=agentInfo)
176
+
177
+ def updateLogArchiveLFN(self, jobNames, logArchiveLFN):
178
+ for jobName in jobNames:
179
+ self.couchDB.updateDocument(jobName, self.couchapp,
180
+ 'jobLogArchiveLocation',
181
+ fields={'logArchiveLFN': logArchiveLFN})
182
+
183
+ def deleteOldDocs(self, days):
184
+ """
185
+ delete the documents from wmstats db older than param 'days'
186
+ """
187
+ sec = int(days * 24 * 60 * 60)
188
+ threshold = int(time.time()) - sec
189
+ options = {"startkey": threshold, "descending": True,
190
+ "stale": "update_after"}
191
+ result = self._getCouchView("time", options)
192
+
193
+ for row in result['rows']:
194
+ doc = {}
195
+ doc['_id'] = row['value']['id']
196
+ doc['_rev'] = row['value']['rev']
197
+ self.couchDB.queueDelete(doc)
198
+ committed = self.couchDB.commit()
199
+
200
+ if committed:
201
+ errorReport = {}
202
+ deleted = 0
203
+ for data in committed:
204
+ if 'error' in data:
205
+ errorReport.setdefault(data['error'], 0)
206
+ errorReport[data['error']] += 1
207
+ else:
208
+ deleted += 1
209
+ return {'delete': deleted, 'error': errorReport}
210
+ else:
211
+ return "nothing"
212
+
213
+ def replicate(self, target):
214
+ return self.couchServer.replicate(self.dbName, target, continuous=True,
215
+ filter='WMStats/repfilter')
216
+
217
+ def getActiveTasks(self):
218
+ """
219
+ This is in Writter instance since it needs admin permission
220
+ """
221
+ couchStatus = self.couchServer.status()
222
+ return couchStatus['active_tasks']
223
+
224
+ def deleteDocsByIDs(self, ids):
225
+
226
+ if not ids:
227
+ # if ids is empty don't run this
228
+ # it will delete all the docs
229
+ return None
230
+
231
+ docs = self.couchDB.allDocs(keys=ids)['rows']
232
+ for j in docs:
233
+ doc = {}
234
+ doc["_id"] = j['id']
235
+ doc["_rev"] = j['value']['rev']
236
+ self.couchDB.queueDelete(doc)
237
+ committed = self.couchDB.commit()
238
+ return committed
239
+
240
+ def replaceRequestTransitionFromReqMgr(self, docs):
241
+ """
242
+ bulk update for request documents.
243
+ TODO: change to bulk update handler when it gets supported
244
+ """
245
+
246
+ for doc in docs:
247
+ requestName = doc["RequestName"]
248
+ requestTransition = {}
249
+ requestTransition['request_status'] = []
250
+ for r in doc["RequestTransition"]:
251
+ newR = {}
252
+ newR['status'] = r['Status']
253
+ newR['update_time'] = r['UpdateTime']
254
+ requestTransition['request_status'].append(newR)
255
+
256
+ self.couchDB.updateDocument(requestName, self.couchapp,
257
+ 'generalFields',
258
+ fields={'general_fields': JSONEncoder().encode(requestTransition)})
259
+
260
+ def deleteDocsByWorkflow(self, requestName):
261
+ """
262
+ delete all wmstats docs for a given requestName
263
+ """
264
+ options = {"reduce": False, "key": requestName}
265
+ docs = self._getCouchView("allWorkflows", options)['rows']
266
+
267
+ for j in docs:
268
+ doc = {}
269
+ doc["_id"] = j['value']['id']
270
+ doc["_rev"] = j['value']['rev']
271
+ self.couchDB.queueDelete(doc)
272
+ committed = self.couchDB.commit()
273
+ return committed
File without changes
@@ -0,0 +1,134 @@
1
+ from builtins import str, bytes
2
+ from future.utils import viewitems
3
+
4
+ import json
5
+ import logging
6
+
7
+ from WMCore.Services.Service import Service
8
+
9
+
10
+ class WMStatsServer(Service):
11
+ """
12
+ API to query wmstats server: mostly against acive datacache
13
+
14
+ """
15
+
16
+ def __init__(self, url, header=None, logger=None):
17
+ """
18
+ responseType will be either xml or json
19
+ """
20
+
21
+ httpDict = {}
22
+ header = header or {}
23
+ # url is end point
24
+ httpDict['endpoint'] = "%s/data" % url
25
+ httpDict['logger'] = logger if logger else logging.getLogger()
26
+
27
+ # cherrypy converts request.body to params when content type is set
28
+ # application/x-www-form-urlencodeds
29
+ httpDict.setdefault("content_type", 'application/json')
30
+ httpDict.setdefault('cacheduration', 0)
31
+ httpDict.setdefault("accept_type", "application/json")
32
+ httpDict.update(header)
33
+ self.encoder = json.dumps
34
+ Service.__init__(self, httpDict)
35
+
36
+ def _getResult(self, callname, clearCache=True, args=None, verb="GET",
37
+ encoder=json.loads, decoder=json.loads, contentType=None):
38
+ """
39
+ _getResult_
40
+ """
41
+ cfile = callname.replace("/", "_")
42
+ if clearCache:
43
+ self.clearCache(cfile, args, verb)
44
+
45
+ f = self.refreshCache(cfile, callname, args, encoder=encoder,
46
+ verb=verb, contentType=contentType)
47
+ result = f.read()
48
+ f.close()
49
+
50
+ if result and decoder:
51
+ result = decoder(result)
52
+
53
+ return result['result']
54
+
55
+ def _createQuery(self, queryDict):
56
+ """
57
+ _createQuery
58
+ :param queryDict: is the format of {name: values} fair. value can be sting, int or list
59
+ :type queryDict: dict
60
+ :returns: url query string
61
+ """
62
+ args = ""
63
+ for name, values in viewitems(queryDict):
64
+ if isinstance(values, (str, bytes, int)):
65
+ values = [values]
66
+ for val in values:
67
+ args += '%s=%s&' % (name, val)
68
+
69
+ return args.rstrip('&')
70
+
71
+ def getGlobalLocks(self):
72
+ """
73
+ _getGlobalLocks_
74
+
75
+ A public method to return the global locks from WMStatServer.
76
+ :returns: A list of datasets
77
+ """
78
+ callname = 'globallocks'
79
+ return self._getResult(callname, clearCache=True, verb="GET")
80
+
81
+ def getActiveData(self):
82
+
83
+ """
84
+ _getActiveData_
85
+
86
+ :returns:
87
+ """
88
+
89
+ callname = 'requestcache'
90
+ return self._getResult(callname, verb="GET")[0]
91
+
92
+ def getFilteredActiveData(self, inputCondition, outputMask):
93
+ """
94
+ _getFilteredActiveData_
95
+
96
+ :param inputCondition: dict of Condition
97
+ :type inputCondition: dict
98
+ :param outputMask: list of output mask
99
+ :type outputMask: list
100
+ :returns: list of dict or which passes the input condition and only result on outputMask
101
+ """
102
+ inputCondition.update({'mask': outputMask})
103
+ query = self._createQuery(inputCondition)
104
+ callname = 'filtered_requests?%s' % query
105
+ return self._getResult(callname, verb="GET")
106
+
107
+ def getChildParentDatasetMap(self, requestType="StepChain", parentageResolved=False):
108
+ """
109
+
110
+ :param requestType: specify the type of requests you want find the parentag
111
+ :param dataset: child dataset
112
+ :param includeInputDataset:
113
+ :return: dict of {child_dataset_name: parent_dataset_name}
114
+ """
115
+ queryFilter = {"RequestType": requestType, "ParentageResolved": parentageResolved}
116
+ mask = ["ChainParentageMap"]
117
+
118
+ results = self.getFilteredActiveData(queryFilter, mask)
119
+ childParentMap = {}
120
+ for info in results:
121
+ if info["ChainParentageMap"]:
122
+ for childParentDS in info["ChainParentageMap"]:
123
+ if childParentDS["ParentDset"]:
124
+ for childDS in childParentDS["ChildDsets"]:
125
+ childParentMap[childDS] = childParentDS["ParentDset"]
126
+ return childParentMap
127
+
128
+ def getProtectedLFNs(self):
129
+ """
130
+ A method to be used for fetching a list of all protected lfns from WMStatServer
131
+ :returns: A list of lfns
132
+ """
133
+ callname = 'protectedlfns'
134
+ return self._getResult(callname, verb="GET")
File without changes