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/REST/Auth.py ADDED
@@ -0,0 +1,202 @@
1
+ from builtins import map, str, bytes
2
+ from future.utils import viewitems
3
+
4
+ import cherrypy
5
+ import hashlib
6
+ import hmac
7
+ import re
8
+
9
+ from Utils.Utilities import lowerCmsHeaders, encodeUnicodeToBytes
10
+ from Utils.PythonVersion import PY3
11
+
12
+ def get_user_info():
13
+ "Helper function to return user based information of the request"
14
+ return cherrypy.request.user
15
+
16
+
17
+ def user_info_from_headers(key, verbose=False):
18
+ """Read the user information HTTP request headers added by front-end.
19
+ Validates the HMAC on them to check for tampering, and if all is ok,
20
+ returns user info object with the data from the headers."""
21
+ # Set initial user information for this request
22
+ log = cherrypy.log
23
+ headers = lowerCmsHeaders(cherrypy.request.headers)
24
+ user = {'dn': None, 'method': None, 'login': None, 'name': None, 'roles': {}}
25
+
26
+ # Reject if request was not authenticated.
27
+ if 'cms-auth-status' not in headers:
28
+ if headers.get('Remote-Addr', '') == '127.0.0.1':
29
+ # since we are using localhost access we can skip authentication
30
+ log("DEBUG: non-authenticated request performed on localhost")
31
+ return
32
+ log("ERROR: authz denied, front-end headers not present")
33
+ raise cherrypy.HTTPError(403, "You are not allowed to access this resource.")
34
+
35
+ # If authentication is optional and wasn't done, accept.
36
+ if headers['cms-auth-status'] == 'NONE':
37
+ if verbose: log("DEBUG: authn optional and missing")
38
+ return
39
+
40
+ # Extract user information from the headers. Collect data required
41
+ # for HMAC validation while processing headers.
42
+ prefix = suffix = ""
43
+ hkeys = sorted(headers.keys())
44
+ for hk in hkeys:
45
+ hk = hk.lower()
46
+ if hk[0:9] in ("cms-authn", "cms-authz") and hk != "cms-authn-hmac":
47
+ prefix += "h%xv%x" % (len(hk), len(headers[hk]))
48
+ suffix += "%s%s" % (hk, headers[hk])
49
+ hkname = hk.split('-', 2)[-1]
50
+ if hk.startswith("cms-authn"):
51
+ val = headers[hk]
52
+ if hk in ("cms-authn-name", "cms-authn-dn"):
53
+ val = str(val) if PY3 else str(val, "utf-8")
54
+ user[hkname] = val
55
+ if hk.startswith("cms-authz"):
56
+ user['roles'][hkname] = {'site': set(), 'group': set()}
57
+ for r in headers[hk].split():
58
+ site_or_group, name = r.split(':')
59
+ user['roles'][hkname][site_or_group].add(name)
60
+
61
+ # Check HMAC over authn/z headers with server key. If differs, reject.
62
+ msg = prefix + "#" + suffix
63
+ if PY3:
64
+ key = encodeUnicodeToBytes(key)
65
+ msg = encodeUnicodeToBytes(msg)
66
+ cksum = hmac.new(key, msg, hashlib.sha1).hexdigest()
67
+ if cksum != headers["cms-authn-hmac"]:
68
+ log("ERROR: authz hmac mismatch, %s vs. %s" % (cksum, headers["cms-authn-hmac"]))
69
+ raise cherrypy.HTTPError(403, "You are not allowed to access this resource.")
70
+
71
+ # Authn/z is legal, accept
72
+ if verbose:
73
+ log("DEBUG: authn accepted for user %s" % user)
74
+ return user
75
+
76
+
77
+ def authz_canonical(val):
78
+ """Make a name canonical."""
79
+ return re.sub(r"[^a-z0-9]+", "-", val.lower())
80
+
81
+
82
+ def authz_match(role=None, group=None, site=None, verbose=False):
83
+ """Match user against authorisation requirements."""
84
+ role = role or []
85
+ group = group or []
86
+ site = site or []
87
+ user = get_user_info()
88
+ log = cherrypy.log
89
+
90
+ # If role, group or site are strings, convert to list first.
91
+ role = (role and isinstance(role, (str, bytes)) and [role]) or role
92
+ group = (group and isinstance(group, (str, bytes)) and [group]) or group
93
+ site = (site and isinstance(site, (str, bytes)) and [site]) or site
94
+
95
+ # Reformat all items into canonical format.
96
+ role = role and list(map(authz_canonical, role))
97
+ group = group and list(map(authz_canonical, group))
98
+ site = site and list(map(authz_canonical, site))
99
+
100
+ # If role, group and site are all empty, no authz requirements: pass
101
+ if not (role or group or site):
102
+ if verbose:
103
+ log("DEBUG: authz accepted nil requirements for user %s" % user)
104
+ return
105
+
106
+ # Otherwise determine set intersection of requirements.
107
+ for r, authz in viewitems((user and user['roles']) or {}):
108
+ if (not role) or (r in role):
109
+ if not (group or site):
110
+ if verbose:
111
+ log("DEBUG: authz accepted role '%s' for user %s" % (r, user))
112
+ return
113
+ if set(group) & authz['group']:
114
+ if verbose:
115
+ log("DEBUG: authz accepted role '%s' group %s for user %s" % (r, group, user))
116
+ return
117
+ if set(site) & authz['site']:
118
+ if verbose:
119
+ log("DEBUG: authz accepted role '%s' site %s for user %s" % (r, site, user))
120
+ return
121
+
122
+ # Deny access, requirements weren't fulfilled
123
+ log("ERROR: authz denied role %s group %s site %s for user %s" % (role, group, site, user))
124
+ raise cherrypy.HTTPError(403, "You are not allowed to access this resource.")
125
+
126
+
127
+ def authz_user(role=None, group=None, site=None, key=None, verbose=False):
128
+ """Default authorisation implementation: returns True for an authorised
129
+ user, one with any of the requested roles for the given sites or groups.
130
+
131
+ If no roles are specified, belonging to any of the requested sites or
132
+ groups is sufficient."""
133
+ role = role or []
134
+ group = group or []
135
+ site = site or []
136
+ # Get user information from request headers, then run real matcher.
137
+ assert getattr(cherrypy.request, "user", None) == None
138
+ cherrypy.request.user = user_info_from_headers(key, verbose)
139
+ authz_match(role, group, site, verbose)
140
+
141
+
142
+ _fake_warned = False
143
+
144
+
145
+ def authz_fake(role=None, group=None, site=None, verbose=False):
146
+ """Fake authorisation routine."""
147
+ role = role or []
148
+ group = group or []
149
+ site = site or []
150
+ log = cherrypy.log
151
+ global _fake_warned
152
+ if not _fake_warned:
153
+ if cherrypy.server.environment == 'production':
154
+ log("ERROR: authz faking denied in production server")
155
+ raise Exception("authz faking denied in production server")
156
+ if cherrypy.server.socket_host not in ("127.0.0.1", "::1"):
157
+ log("ERROR: authz faking denied on non-local interface")
158
+ raise Exception("authz faking denied on non-local interface")
159
+ log("WARNING: authz faking activated, only test use is permitted")
160
+ _fake_warned = True
161
+ cherrypy.request.user = {
162
+ 'method': 'fake',
163
+ 'login': 'fake_insecure_auth',
164
+ 'name': 'Fake Insecure Auth',
165
+ 'dn': '/CN=Fake Insecure Auth',
166
+ 'roles': {'fake': {'site': set(['fake']), 'group': set(['fake'])}}
167
+ }
168
+
169
+ if verbose:
170
+ log("DEBUG: authz accepted bypass role %s group %s site %s for user %s"
171
+ % (role, group, site, cherrypy.request.user))
172
+
173
+
174
+ class RESTAuth(cherrypy.Tool):
175
+ """Restrict access based on CMSWEB authn/z information."""
176
+ _key = None
177
+
178
+ def __init__(self):
179
+ cherrypy.Tool.__init__(self, 'before_request_body', authz_user, priority=60)
180
+
181
+ def _setup(self):
182
+ """Hook this tool into cherrypy request."""
183
+ log = cherrypy.log
184
+ hooks = cherrypy.request.hooks
185
+ conf = self._merged_args()
186
+
187
+ # Install authz policy. Load front-end hmac key on first use.
188
+ prio = conf.pop("priority", self._priority)
189
+ policy = conf.pop("policy", "user")
190
+ if policy == "user":
191
+ key_file = conf.pop("key_file")
192
+ if not self._key:
193
+ with open(key_file, "rb") as fd:
194
+ self._key = fd.read()
195
+ conf["key"] = self._key
196
+
197
+ hooks.attach(self._point, self.callable, priority=prio, **conf)
198
+ elif policy == "dangerously_insecure":
199
+ conf.pop("key_file", None)
200
+ hooks.attach(self._point, authz_fake, priority=prio, **conf)
201
+ else:
202
+ raise Exception('unknown authz policy "%s"' % policy)
@@ -0,0 +1,166 @@
1
+ '''
2
+ Created on Jul 31, 2014
3
+
4
+ @author: sryu
5
+ '''
6
+ from __future__ import print_function, division
7
+ from builtins import object
8
+
9
+ import cherrypy
10
+ import traceback
11
+ from threading import Thread, Condition
12
+
13
+ from WMCore.WMLogging import getTimeRotatingLogger
14
+
15
+
16
+ class CherryPyPeriodicTask(object):
17
+
18
+ def __init__(self, config):
19
+
20
+ """
21
+ BaseClass which can set up the concurrent task using cherrypy thread.
22
+ WARNING: This assumes each task doesn't share the object.
23
+ (It can be share only read operation is performed)
24
+ If the object shared by multple task and read/write operation is performed.
25
+ Lock is not provided for these object
26
+
27
+ :arg config WMCore.Configuration object. which need to contain in duration attr.
28
+ TODO: add validation for config.duration
29
+ """
30
+ self.logger = getTimeRotatingLogger(config._internal_name, config.log_file)
31
+ self.logger.info("Setting CherryPy periodic task with the following config:\n%s", config)
32
+ self.setConcurrentTasks(config)
33
+ self.setUpLogDB(config)
34
+
35
+ for task in self.concurrentTasks:
36
+ PeriodicWorker(task['func'], config, task['duration'], logger=self.logger, logDB=self.logDB)
37
+
38
+ def setUpLogDB(self, config):
39
+ if hasattr(config, "central_logdb_url"):
40
+ # default set up for logDB config section need to contain propervalues
41
+ from WMCore.Services.LogDB.LogDB import LogDB
42
+ self.logDB = LogDB(config.central_logdb_url, config.log_reporter, logger=self.logger,
43
+ thread_name=config.object.rsplit(".", 1)[-1])
44
+ else:
45
+ self.logDB = None
46
+
47
+ def setConcurrentTasks(self, config):
48
+ """
49
+ sets the list of function reference for concurrent tasks,
50
+ sub class should implement this
51
+
52
+ each function in the list should have the same signature with
53
+ 3 arguments (self, config, duration)
54
+ config is WMCore.Configuration object
55
+ """
56
+ self.concurrentTasks = {'func': None, 'duration': None}
57
+ raise NotImplementedError("need to implement setSequencialTas assign self._callSequence")
58
+
59
+ class PeriodicWorker(Thread):
60
+
61
+ def __init__(self, func, config, duration=600, logger=cherrypy.log, logDB=None):
62
+ # use default RLock from condition
63
+ # Lock wan't be shared between the instance used only for wait
64
+ # func : function or callable object pointer
65
+ self.wakeUp = Condition()
66
+ self.stopFlag = False
67
+ self.taskFunc = func
68
+ self.config = config
69
+ self.duration = duration
70
+ self.logger = logger
71
+ self.logDB = logDB
72
+
73
+ try:
74
+ name = func.__name__
75
+ print(name)
76
+ except AttributeError:
77
+ name = func.__class__.__name__
78
+ print(name)
79
+
80
+ Thread.__init__(self, name=name)
81
+ cherrypy.engine.subscribe('start', self.start, priority=100)
82
+ cherrypy.engine.subscribe('stop', self.stop, priority=100)
83
+
84
+ def stop(self):
85
+ self.wakeUp.acquire()
86
+ self.stopFlag = True
87
+ self.wakeUp.notifyAll()
88
+ self.wakeUp.release()
89
+
90
+ def run(self):
91
+
92
+ while not self.stopFlag:
93
+ self.wakeUp.acquire()
94
+ try:
95
+ self.taskFunc(self.config)
96
+ self.heartBeatInfoToLogDB()
97
+ except Exception as e:
98
+ self.logger.error("Periodic Thread ERROR %s.%s %s"
99
+ % (getattr(e, "__module__", "__builtins__"),
100
+ e.__class__.__name__, str(e)))
101
+ traceMsg = traceback.format_exc()
102
+ for line in traceMsg.rstrip().split("\n"):
103
+ self.logger.error(" " + line)
104
+ self.heartBeatErrorToLogDB(traceMsg)
105
+
106
+ self.wakeUp.wait(self.duration)
107
+ self.wakeUp.release()
108
+
109
+ def heartBeatInfoToLogDB(self):
110
+ if self.logDB:
111
+ self.logDB.delete(mtype="error", this_thread=True, agent=False)
112
+ self.logDB.post(mtype="info")
113
+ return
114
+
115
+ def heartBeatErrorToLogDB(self, msg):
116
+ if self.logDB:
117
+ self.logDB.post(msg=msg, mtype="error")
118
+ return
119
+
120
+
121
+ class SequentialTaskBase(object):
122
+
123
+ """
124
+ Base class for the tasks which should run sequentially
125
+ """
126
+ def __init__(self):
127
+ self.setCallSequence()
128
+
129
+ def __call__(self, config):
130
+ for call in self._callSequence:
131
+ try:
132
+ call(config)
133
+ except Exception as ex:
134
+ #log the excpeiotn and break.
135
+ #SequencialTasks are interconnected between functions
136
+ trace = traceback.format_exc()
137
+ self.logger.error("%s:\n %s" % (str(ex), trace))
138
+ break
139
+
140
+ def setCallSequence(self):
141
+ """
142
+ set the list of function call with out args on self.callSequence
143
+
144
+ i.e.
145
+ self.callSequence = [self.do_something1, self.do_something1]
146
+ """
147
+ raise NotImplementedError("need to implement setCallSequence assign self._callSequence")
148
+
149
+
150
+ #this is the sckeleton of request data collector
151
+ class DataUploadTask(SequentialTaskBase):
152
+
153
+ def setCallSequence(self):
154
+ self._callSequence = [self.getData, self.convertData, self.putData]
155
+
156
+ def getData(self, config):
157
+ # self.data = getData(self.sourceUrl)
158
+ pass
159
+
160
+ def convertData(self, config):
161
+ # self.data = convertData(self.data)
162
+ pass
163
+
164
+ def putData(self, config):
165
+ # putData(self.destUrl)
166
+ pass