reqmgr2ms-monitor 2.3.2rc2__tar.gz → 2.3.2rc4__tar.gz

Sign up to get free protection for your applications and to get access to all the features.
Files changed (272) hide show
  1. {reqmgr2ms-monitor-2.3.2rc2/src/python/reqmgr2ms_monitor.egg-info → reqmgr2ms-monitor-2.3.2rc4}/PKG-INFO +1 -1
  2. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/setup_dependencies.py +2 -1
  3. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Lexicon.py +3 -3
  4. reqmgr2ms-monitor-2.3.2rc4/src/python/WMCore/Services/WMStats/WMStatsPycurl.py +145 -0
  5. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Services/WMStats/WMStatsReader.py +34 -17
  6. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/__init__.py +1 -1
  7. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4/src/python/reqmgr2ms_monitor.egg-info}/PKG-INFO +1 -1
  8. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/reqmgr2ms_monitor.egg-info/SOURCES.txt +1 -0
  9. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/LICENSE +0 -0
  10. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/MANIFEST.in +0 -0
  11. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/NOTICE +0 -0
  12. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/README.md +0 -0
  13. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/bin/HWMon/wmcore-SysStat +0 -0
  14. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/bin/acdcserver-tools +0 -0
  15. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/bin/adhoc-scripts/ParseSpecCmsswdist.py +0 -0
  16. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/bin/adhoc-scripts/adjustMongoDocs.py +0 -0
  17. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/bin/adhoc-scripts/checkDsetFileCount.py +0 -0
  18. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/bin/adhoc-scripts/checkStuckLQE.py +0 -0
  19. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/bin/adhoc-scripts/createPileupObjects.py +0 -0
  20. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/bin/adhoc-scripts/drainAgent.py +0 -0
  21. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/bin/adhoc-scripts/fixWorkflowParentage.py +0 -0
  22. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/bin/adhoc-scripts/getWQStatusByWorkflow.py +0 -0
  23. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/bin/adhoc-scripts/injectUnified.py +0 -0
  24. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/bin/adhoc-scripts/mongoInit.py +0 -0
  25. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/bin/adhoc-scripts/parseUnifiedCampaigns.py +0 -0
  26. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/bin/adhoc-scripts/setrequeststatus.py +0 -0
  27. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/bin/adhoc-scripts/summaryWMStatsFailures.py +0 -0
  28. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/bin/adhoc-scripts/updatePileupObjects.py +0 -0
  29. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/bin/adhoc-scripts/updateTotalStats.py +0 -0
  30. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/bin/adhoc-scripts/workflowCompletion.py +0 -0
  31. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/bin/attempt-to-patch.sh +0 -0
  32. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/bin/buildrelease.sh +0 -0
  33. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/bin/check-ACDC-parentage +0 -0
  34. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/bin/check-phedex-dbs-status +0 -0
  35. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/bin/check-request-wq-status +0 -0
  36. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/bin/clean-oracle +0 -0
  37. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/bin/combineMinifyWMStats.py +0 -0
  38. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/bin/couch-thrash.py +0 -0
  39. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/bin/couch_archiver.py +0 -0
  40. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/bin/create-iam-token.sh +0 -0
  41. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/bin/createStoreResults.py +0 -0
  42. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/bin/dbsbuffer-file-fix.py +0 -0
  43. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/bin/deploy-rpm-to-jenkins.sh +0 -0
  44. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/bin/fix-dbs-parentage +0 -0
  45. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/bin/inject-to-config-cache +0 -0
  46. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/bin/kill-workflow-in-agent +0 -0
  47. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/bin/kill-workflow-in-global +0 -0
  48. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/bin/make-local-clones.sh +0 -0
  49. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/bin/outputmodules-from-config +0 -0
  50. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/bin/patchComponent.sh +0 -0
  51. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/bin/paused-jobs +0 -0
  52. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/bin/purgeDeletedCouchDoc.py +0 -0
  53. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/bin/reqmgr-put-default-config +0 -0
  54. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/bin/reqmgr-sw-update +0 -0
  55. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/bin/vaildateCMSSWMergeVersion +0 -0
  56. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/bin/wmagent-couchapp-init +0 -0
  57. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/bin/wmagent-delete-couchdb-workflow +0 -0
  58. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/bin/wmagent-mod-config +0 -0
  59. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/bin/wmagent-resource-control +0 -0
  60. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/bin/wmagent-unregister-wmstats +0 -0
  61. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/bin/wmagent-upload-config +0 -0
  62. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/bin/wmagent-workqueue +0 -0
  63. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/bin/wmc-dist-patch +0 -0
  64. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/bin/wmc-dist-unpatch +0 -0
  65. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/bin/wmc-httpd +0 -0
  66. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/bin/wmcore-db-init +0 -0
  67. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/bin/wmcore-new-config +0 -0
  68. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/bin/wmcore-new-flow +0 -0
  69. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/bin/wmcoreD +0 -0
  70. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/requirements.txt +0 -0
  71. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/setup.cfg +0 -0
  72. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/setup.py +0 -0
  73. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/setup_build.py +0 -0
  74. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/Utils/CPMetrics.py +0 -0
  75. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/Utils/CertTools.py +0 -0
  76. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/Utils/EmailAlert.py +0 -0
  77. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/Utils/ExtendedUnitTestCase.py +0 -0
  78. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/Utils/FileTools.py +0 -0
  79. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/Utils/IteratorTools.py +0 -0
  80. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/Utils/MathUtils.py +0 -0
  81. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/Utils/MemoryCache.py +0 -0
  82. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/Utils/Patterns.py +0 -0
  83. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/Utils/Pipeline.py +0 -0
  84. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/Utils/PortForward.py +0 -0
  85. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/Utils/ProcessStats.py +0 -0
  86. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/Utils/PythonVersion.py +0 -0
  87. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/Utils/Signals.py +0 -0
  88. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/Utils/TemporaryEnvironment.py +0 -0
  89. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/Utils/Throttled.py +0 -0
  90. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/Utils/Timers.py +0 -0
  91. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/Utils/Timestamps.py +0 -0
  92. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/Utils/TokenManager.py +0 -0
  93. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/Utils/Tracing.py +0 -0
  94. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/Utils/TwPrint.py +0 -0
  95. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/Utils/Utilities.py +0 -0
  96. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/Utils/__init__.py +0 -0
  97. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Algorithms/Alarm.py +0 -0
  98. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Algorithms/MathAlgos.py +0 -0
  99. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Algorithms/MiscAlgos.py +0 -0
  100. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Algorithms/ParseXMLFile.py +0 -0
  101. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Algorithms/Permissions.py +0 -0
  102. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Algorithms/Singleton.py +0 -0
  103. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Algorithms/SubprocessAlgos.py +0 -0
  104. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Algorithms/__init__.py +0 -0
  105. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Cache/GenericDataCache.py +0 -0
  106. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Cache/WMConfigCache.py +0 -0
  107. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Cache/__init__.py +0 -0
  108. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Configuration.py +0 -0
  109. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/DAOFactory.py +0 -0
  110. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/DataStructs/File.py +0 -0
  111. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/DataStructs/Fileset.py +0 -0
  112. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/DataStructs/Job.py +0 -0
  113. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/DataStructs/JobGroup.py +0 -0
  114. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/DataStructs/JobPackage.py +0 -0
  115. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/DataStructs/LumiList.py +0 -0
  116. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/DataStructs/Mask.py +0 -0
  117. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/DataStructs/MathStructs/ContinuousSummaryHistogram.py +0 -0
  118. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/DataStructs/MathStructs/DiscreteSummaryHistogram.py +0 -0
  119. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/DataStructs/MathStructs/SummaryHistogram.py +0 -0
  120. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/DataStructs/MathStructs/__init__.py +0 -0
  121. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/DataStructs/Pickleable.py +0 -0
  122. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/DataStructs/Run.py +0 -0
  123. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/DataStructs/Subscription.py +0 -0
  124. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/DataStructs/WMObject.py +0 -0
  125. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/DataStructs/WorkUnit.py +0 -0
  126. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/DataStructs/Workflow.py +0 -0
  127. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/DataStructs/__init__.py +0 -0
  128. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Database/CMSCouch.py +0 -0
  129. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Database/ConfigDBMap.py +0 -0
  130. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Database/CouchUtils.py +0 -0
  131. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Database/DBCore.py +0 -0
  132. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Database/DBCreator.py +0 -0
  133. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Database/DBExceptionHandler.py +0 -0
  134. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Database/DBFactory.py +0 -0
  135. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Database/DBFormatter.py +0 -0
  136. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Database/Dialects.py +0 -0
  137. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Database/ExecuteDAO.py +0 -0
  138. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Database/MongoDB.py +0 -0
  139. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Database/MySQL/Destroy.py +0 -0
  140. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Database/MySQL/ListUserContent.py +0 -0
  141. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Database/MySQL/__init__.py +0 -0
  142. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Database/MySQLCore.py +0 -0
  143. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Database/Oracle/Destroy.py +0 -0
  144. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Database/Oracle/ListUserContent.py +0 -0
  145. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Database/Oracle/__init__.py +0 -0
  146. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Database/ResultSet.py +0 -0
  147. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Database/Transaction.py +0 -0
  148. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Database/__init__.py +0 -0
  149. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Database/ipy_profile_couch.py +0 -0
  150. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/GroupUser/CouchObject.py +0 -0
  151. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/GroupUser/Decorators.py +0 -0
  152. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/GroupUser/Group.py +0 -0
  153. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/GroupUser/Interface.py +0 -0
  154. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/GroupUser/User.py +0 -0
  155. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/GroupUser/__init__.py +0 -0
  156. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/MicroService/CherryPyThreads/HeartbeatMonitor.py +0 -0
  157. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/MicroService/CherryPyThreads/__init__.py +0 -0
  158. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/MicroService/DataStructs/DefaultStructs.py +0 -0
  159. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/MicroService/DataStructs/__init__.py +0 -0
  160. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/MicroService/MSCore/MSAuth.py +0 -0
  161. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/MicroService/MSCore/MSCore.py +0 -0
  162. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/MicroService/MSCore/MSManager.py +0 -0
  163. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/MicroService/MSCore/TaskManager.py +0 -0
  164. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/MicroService/MSCore/__init__.py +0 -0
  165. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/MicroService/MSMonitor/MSMonitor.py +0 -0
  166. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/MicroService/MSMonitor/__init__.py +0 -0
  167. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/MicroService/Service/Data.py +0 -0
  168. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/MicroService/Service/RestApiHub.py +0 -0
  169. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/MicroService/Service/__init__.py +0 -0
  170. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/MicroService/Tools/Common.py +0 -0
  171. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/MicroService/Tools/PycurlRucio.py +0 -0
  172. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/MicroService/Tools/__init__.py +0 -0
  173. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/MicroService/WebGui/FrontPage.py +0 -0
  174. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/MicroService/WebGui/__init__.py +0 -0
  175. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/REST/Auth.py +0 -0
  176. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/REST/CherryPyPeriodicTask.py +0 -0
  177. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/REST/Error.py +0 -0
  178. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/REST/Format.py +0 -0
  179. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/REST/HeartbeatMonitorBase.py +0 -0
  180. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/REST/Main.py +0 -0
  181. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/REST/Server.py +0 -0
  182. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/REST/Services.py +0 -0
  183. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/REST/Test.py +0 -0
  184. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/REST/Tools.py +0 -0
  185. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/REST/Validation.py +0 -0
  186. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/REST/__init__.py +0 -0
  187. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/ReqMgr/DataStructs/RequestStatus.py +0 -0
  188. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/ReqMgr/DataStructs/RequestType.py +0 -0
  189. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/ReqMgr/DataStructs/__init__.py +0 -0
  190. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/ReqMgr/__init__.py +0 -0
  191. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Services/AlertManager/AlertManagerAPI.py +0 -0
  192. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Services/AlertManager/__init__.py +0 -0
  193. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Services/CRIC/CRIC.py +0 -0
  194. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Services/CRIC/__init__.py +0 -0
  195. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Services/DBS/DBS3Reader.py +0 -0
  196. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Services/DBS/DBSConcurrency.py +0 -0
  197. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Services/DBS/DBSErrors.py +0 -0
  198. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Services/DBS/DBSReader.py +0 -0
  199. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Services/DBS/DBSUtils.py +0 -0
  200. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Services/DBS/DBSWriterObjects.py +0 -0
  201. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Services/DBS/ProdException.py +0 -0
  202. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Services/DBS/__init__.py +0 -0
  203. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Services/FWJRDB/FWJRDBAPI.py +0 -0
  204. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Services/FWJRDB/__init__.py +0 -0
  205. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Services/HTTPS/HTTPSAuthHandler.py +0 -0
  206. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Services/HTTPS/__init__.py +0 -0
  207. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Services/LogDB/LogDB.py +0 -0
  208. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Services/LogDB/LogDBBackend.py +0 -0
  209. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Services/LogDB/LogDBExceptions.py +0 -0
  210. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Services/LogDB/LogDBReport.py +0 -0
  211. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Services/LogDB/__init__.py +0 -0
  212. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Services/MSPileup/MSPileupUtils.py +0 -0
  213. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Services/MSPileup/__init__.py +0 -0
  214. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Services/McM/McM.py +0 -0
  215. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Services/McM/__init__.py +0 -0
  216. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Services/MonIT/Grafana.py +0 -0
  217. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Services/MonIT/__init__.py +0 -0
  218. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Services/PyCondor/PyCondorAPI.py +0 -0
  219. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Services/PyCondor/PyCondorUtils.py +0 -0
  220. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Services/PyCondor/__init__.py +0 -0
  221. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Services/ReqMgr/ReqMgr.py +0 -0
  222. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Services/ReqMgr/__init__.py +0 -0
  223. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Services/ReqMgrAux/ReqMgrAux.py +0 -0
  224. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Services/ReqMgrAux/__init__.py +0 -0
  225. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Services/RequestDB/RequestDBReader.py +0 -0
  226. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Services/RequestDB/RequestDBWriter.py +0 -0
  227. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Services/RequestDB/__init__.py +0 -0
  228. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Services/Requests.py +0 -0
  229. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Services/Rucio/Rucio.py +0 -0
  230. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Services/Rucio/RucioUtils.py +0 -0
  231. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Services/Rucio/__init__.py +0 -0
  232. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Services/RucioConMon/RucioConMon.py +0 -0
  233. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Services/RucioConMon/__init__.py +0 -0
  234. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Services/Service.py +0 -0
  235. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Services/StompAMQ/__init__.py +0 -0
  236. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Services/TagCollector/TagCollector.py +0 -0
  237. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Services/TagCollector/XMLUtils.py +0 -0
  238. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Services/TagCollector/__init__.py +0 -0
  239. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Services/UUIDLib.py +0 -0
  240. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Services/UserFileCache/UserFileCache.py +0 -0
  241. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Services/UserFileCache/__init__.py +0 -0
  242. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Services/WMAgent/WMAgent.py +0 -0
  243. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Services/WMAgent/__init__.py +0 -0
  244. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Services/WMArchive/CMSSWMetrics.py +0 -0
  245. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Services/WMArchive/DataMap.py +0 -0
  246. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Services/WMArchive/WMArchive.py +0 -0
  247. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Services/WMArchive/__init__.py +0 -0
  248. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Services/WMBS/WMBS.py +0 -0
  249. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Services/WMBS/__init__.py +0 -0
  250. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Services/WMStats/DataStruct/RequestInfoCollection.py +0 -0
  251. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Services/WMStats/DataStruct/__init__.py +0 -0
  252. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Services/WMStats/WMStatsWriter.py +0 -0
  253. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Services/WMStats/__init__.py +0 -0
  254. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Services/WMStatsServer/WMStatsServer.py +0 -0
  255. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Services/WMStatsServer/__init__.py +0 -0
  256. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Services/WorkQueue/WorkQueue.py +0 -0
  257. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Services/WorkQueue/__init__.py +0 -0
  258. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Services/__init__.py +0 -0
  259. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Services/pycurl_manager.py +0 -0
  260. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/WMBase.py +0 -0
  261. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/WMConnectionBase.py +0 -0
  262. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/WMException.py +0 -0
  263. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/WMExceptions.py +0 -0
  264. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/WMFactory.py +0 -0
  265. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/WMInit.py +0 -0
  266. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/WMLogging.py +0 -0
  267. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Wrappers/JsonWrapper/JSONThunker.py +0 -0
  268. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Wrappers/JsonWrapper/__init__.py +0 -0
  269. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/WMCore/Wrappers/__init__.py +0 -0
  270. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/reqmgr2ms_monitor.egg-info/dependency_links.txt +0 -0
  271. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/reqmgr2ms_monitor.egg-info/requires.txt +0 -0
  272. {reqmgr2ms-monitor-2.3.2rc2 → reqmgr2ms-monitor-2.3.2rc4}/src/python/reqmgr2ms_monitor.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 1.2
2
2
  Name: reqmgr2ms-monitor
3
- Version: 2.3.2rc2
3
+ Version: 2.3.2rc4
4
4
  Summary: UNKNOWN
5
5
  Home-page: https://github.com/dmwm/WMCore
6
6
  Maintainer: CMS DMWM Group
@@ -223,7 +223,8 @@ dependencies = {
223
223
  'packages': ['WMCore.Credential', 'WMCore.Algorithms+', 'WMCore.WMSpec+',
224
224
  'WMCore.JobSplitting', 'WMCore.Services+', 'Utils+'],
225
225
  'systems': ['wmc-database', 'wmc-runtime'],
226
- 'modules': ['WMCore.WMBS.File', 'WMCore.WMBS.WMBSBase', 'WMCore.WMBS.__init__'],
226
+ 'modules': ['WMCore.WMBS.File', 'WMCore.WMBS.WMBSBase', 'WMCore.WMBS.__init__',
227
+ 'WMCore.BossAir.Plugins.BasePlugin', 'WMCore.BossAir.Plugins.__init__'],
227
228
  },
228
229
  'wmclient': {
229
230
  'systems': ['wmc-runtime', 'wmc-database']
@@ -26,7 +26,7 @@ from WMCore.WMException import WMException, WMEXCEPTION_START_STR, WMEXCEPTION_E
26
26
  # i.e production should end with v[number]
27
27
  PRIMARY_DS = {'re': '^[a-zA-Z][a-zA-Z0-9\-_]*$', 'maxLength': 99}
28
28
  PROCESSED_DS = {'re': '[a-zA-Z0-9\.\-_]+', 'maxLength': 199}
29
- TIER = {'re': '[A-Z\-_]+', 'maxLength': 99}
29
+ TIER = {'re': '[A-Z0-9\-_]+', 'maxLength': 99}
30
30
  BLOCK_STR = {'re': '#[a-zA-Z0-9\.\-_]+', 'maxLength': 100}
31
31
 
32
32
  lfnParts = {
@@ -103,7 +103,7 @@ def searchblock(candidate):
103
103
  return check(regexp, candidate)
104
104
 
105
105
 
106
- SEARCHDATASET_RE = r'^/(\*|[a-zA-Z\*][a-zA-Z0-9_\*\-]{0,100})(/(\*|[a-zA-Z0-9_\.\-\*]{1,199})){0,1}(/(\*|[A-Z\-\*]{1,50})){0,1}$'
106
+ SEARCHDATASET_RE = r'^/(\*|[a-zA-Z\*][a-zA-Z0-9_\*\-]{0,100})(/(\*|[a-zA-Z0-9_\.\-\*]{1,199})){0,1}(/(\*|[A-Z0-9\-\*]{1,99})){0,1}$'
107
107
 
108
108
 
109
109
  def searchdataset(candidate):
@@ -202,7 +202,7 @@ def globalTag(candidate):
202
202
  return check(r'[a-zA-Z0-9\s\.\-_:]{1,100}$', candidate)
203
203
 
204
204
 
205
- DATASET_RE = r'^/[a-zA-Z0-9\-_]{1,99}/[a-zA-Z0-9\.\-_]{1,199}/[A-Z\-]{1,50}$'
205
+ DATASET_RE = r'^/[a-zA-Z0-9\-_]{1,99}/[a-zA-Z0-9\.\-_]{1,199}/[A-Z0-9\-]{1,99}$'
206
206
 
207
207
 
208
208
  def dataset(candidate):
@@ -0,0 +1,145 @@
1
+ """
2
+ This module provides some functions to create concurrent HTTP requests
3
+ for CouchDB, as an alternative to the sequential modules available under:
4
+ * WMCore/Services/WMStats/WMStatsReader.getTaskJobSummaryByRequest
5
+ * WMCore/Services/WMStats/WMStatsReader.jobDetailByTasks
6
+
7
+ Documentation for the parameters supported in views query can be found at:
8
+ https://docs.couchdb.org/en/stable/api/ddoc/views.html#get--db-_design-ddoc-_view-view
9
+ """
10
+ import json
11
+
12
+ from urllib.parse import urljoin, urlencode
13
+ from Utils.CertTools import ckey, cert
14
+ from WMCore.Services.pycurl_manager import getdata as multi_getdata
15
+
16
+
17
+ def getTaskJobSummaryByRequestPycurl(rowsSummary, sampleSize, serviceOpts):
18
+ """
19
+ Pycurl-based implementation of WMStatsReader.getTaskJobSummaryByRequest
20
+ :param rowsSummary: a dictionary with rows from CouchDB
21
+ :param sampleSize: integer with number of documents to retrieve
22
+ :param serviceOpts: dictionary with CouchDB options (url, db name and couchapp name)
23
+ :return: a dictionary with job detail
24
+ """
25
+ paramQueries = []
26
+ for row in rowsSummary['rows']:
27
+ thisQuery = {"startkey": [], "endkey": [], "numOfError": 0}
28
+ # row["key"] = ['workflow', 'task', 'jobstatus', 'exitCode', 'site']
29
+ thisQuery["startkey"] = row["key"][:4]
30
+ if row["key"][4]:
31
+ thisQuery["startkey"].append(row["key"][4]) # site
32
+
33
+ thisQuery["endkey"] = []
34
+ thisQuery["endkey"].extend(thisQuery["startkey"])
35
+ thisQuery["endkey"].append({})
36
+ # append amount of errors matching the 5 keys above
37
+ thisQuery["numOfError"] = row["value"]
38
+ # add query to the pool
39
+ paramQueries.append(thisQuery)
40
+
41
+ return jobDetailByTasksPycurl(paramQueries, sampleSize, serviceOpts)
42
+
43
+
44
+ def jobDetailByTasksPycurl(queries, limit, serviceOpts):
45
+ """
46
+ Pycurl-based implementation of WMStatsReader.jobDetailByTasks.
47
+ In short, for each tuple of errors, it returns "limit" number of documents.
48
+ :param queries: list of CouchDB query parameters
49
+ :param limit: number of documents to retrieve from CouchDB
50
+ :param serviceOpts: dictionary with CouchDB options (url, db name and couchapp name)
51
+ :return: dictionary with job detail information, in a format like:
52
+ {"WORKFLOW_NAME":
53
+ {"/WORKFLOW_NAME/TASK_NAME":
54
+ {"JOB_STATE":
55
+ {"EXIT_CODE":
56
+ {"SITE_NAME":
57
+ "samples": [
58
+ {"_id": "123abc",
59
+ "_rev": "12-abc",
60
+ "wmbsid": 2006208,
61
+ "type": "jobsummary",
62
+ "retrycount": 3,
63
+ "errors": {"JobSubmit": [{
64
+ "type": "SubmitFailed",
65
+ "details": "The job can blah blah",
66
+ "exitCode": 71103}]
67
+ },
68
+ "timestamp": 1698749157,
69
+ ... etc etc}],
70
+ "errorCount": 1}
71
+ }
72
+ }
73
+ },
74
+ {"/WORKFLOW_NAME/TASK_NAME-2":
75
+ {"JOB_STATE": {... etc etc
76
+
77
+ A decoded example of this query would be:
78
+ scurl "https://cmsweb-test9.cern.ch/couchdb/wmstats/_design/WMStatsErl3/_view/jobsByStatusWorkflow?reduce=false&include_docs=true&startkey=["WORKFLOW_NAME","/WORKFLOW_NAME/TASK_NAME","JOB_STATE",EXIT_CODE,"SITE_NAME"]&endkey=["WORKFLOW_NAME","/WORKFLOW_NAME/TASK_NAME","JOB_STATE",EXIT_CODE,"SITE_NAME",{}]&limit=1&stale=update_after"
79
+ while encoding the url would result in:
80
+ scurl "https://****.cern.ch/couchdb/wmstats/_design/WMStatsErl3/_view/jobsByStatusWorkflow?reduce=false&include_docs=true&startkey=%5B%22WORKFLOW_NAME%22%2C+%22%2FWORKFLOW_NAME%2FTASK_NAME%22%2C+%22JOB_STATE%22%2C+EXIT_CODE%2C+%22SITE_NAME%22%5D&endkey=%5B%22WORKFLOW_NAME%22%2C+%22%2FWORKFLOW_NAME%2FTASK_NAME%22%2C+%22JOB_STATE%22%2C+EXIT_CODE%2C+%22SITE_NAME%22%2C+%7B%7D%5D&limit=1&stale=update_after"
81
+
82
+ Example of output is:
83
+ {"total_rows":4764135,"offset":4056263,"rows":[
84
+ {"id":"12703ce5-xxx","key":["WORKFLOW_NAME","/WORKFLOW_NAME/TASK_NAME","jobfailed",8006,"SITE_NAME","https://xxx.cern.ch/couchdb/acdcserver","vocms0255.cern.ch",["Fatal Exception"]],
85
+ "value":{"id":"12703ce5-xxx","rev":"4-xxx"},
86
+ "doc":{"_id":"12703ce5-xx","_rev":"4-xxx","wmbsid":2709786,"type":"jobsummary", ...
87
+
88
+ where (for the examples above):
89
+ WORKFLOW_NAME is, e.g.: pdmvserv_Run2017G_DoubleMuon_UL2017_MiniAODv2_BParking_230917_124108_9876
90
+ TASK_NAME is, e.g.: DataProcessing
91
+ SITE_NAME is, e.g.: T2_US_Wisconsin
92
+ JOB_STATE is, e.g.: jobfailed
93
+ EXIT_CODE is, e.g.: 8006
94
+ """
95
+ uri = f"couchdb/{serviceOpts['dbName']}/_design/{serviceOpts['couchapp']}/_view/jobsByStatusWorkflow"
96
+ baseUrl = urljoin(serviceOpts['couchURL'], uri)
97
+
98
+ encoder = json.JSONEncoder()
99
+ urlsPool = []
100
+ for query in queries:
101
+ options = {'include_docs': encoder.encode(True),
102
+ 'reduce': encoder.encode(False),
103
+ 'startkey': encoder.encode(query["startkey"]),
104
+ 'endkey': encoder.encode(query["endkey"]),
105
+ 'limit': encoder.encode(limit)}
106
+ # we cannot encode the 'stale' parameter
107
+ options.setdefault("stale", "update_after")
108
+ # encode url data for the GET request
109
+ thisUrl = f"{baseUrl}?{urlencode(options, doseq=True)}"
110
+ urlsPool.append(thisUrl)
111
+
112
+ jobInfoDoc = {}
113
+ # now run all of these calls in parallel
114
+ for response in multi_getdata(urlsPool, ckey(), cert()):
115
+ if 'error' in response:
116
+ raise RuntimeError(f"Unexpected error in HTTP call. Details: {response}")
117
+ data = json.loads(response.get('data', ''))
118
+ if 'error' in data:
119
+ raise RuntimeError(f"CouchDB query failed. Details: {data}")
120
+
121
+ for row in data.get('rows', []):
122
+ keys = row['key']
123
+ workflow = keys[0]
124
+ task = keys[1]
125
+ jobStatus = keys[2]
126
+ exitCode = keys[3]
127
+ site = keys[4]
128
+
129
+ jobInfoDoc.setdefault(workflow, {})
130
+ jobInfoDoc[workflow].setdefault(task, {})
131
+ jobInfoDoc[workflow][task].setdefault(jobStatus, {})
132
+ jobInfoDoc[workflow][task][jobStatus].setdefault(exitCode, {})
133
+ jobInfoDoc[workflow][task][jobStatus][exitCode].setdefault(site, {})
134
+ finalStruct = jobInfoDoc[workflow][task][jobStatus][exitCode][site]
135
+ finalStruct.setdefault("samples", [])
136
+ finalStruct["samples"].append(row["doc"])
137
+ # now painfully find out the number of errors based on the original query
138
+ finalStruct.setdefault("errorCount", 0)
139
+ keysJson = json.dumps(keys[:5])
140
+ for query in queries:
141
+ if json.dumps(query["startkey"]) in keysJson:
142
+ finalStruct["errorCount"] = query["numOfError"]
143
+ break
144
+
145
+ return jobInfoDoc
@@ -1,15 +1,20 @@
1
1
  from __future__ import division, print_function
2
2
 
3
+ import time
4
+
3
5
  from builtins import object
4
6
  from future.utils import viewitems
5
7
 
6
8
  import logging
9
+
7
10
  from Utils.IteratorTools import nestedDictUpdate, grouper
8
11
  from WMCore.Database.CMSCouch import CouchServer
9
12
  from WMCore.Lexicon import splitCouchServiceURL, sanitizeURL
10
13
  from WMCore.Services.RequestDB.RequestDBReader import RequestDBReader
11
14
  from WMCore.Services.WMStats.DataStruct.RequestInfoCollection import RequestInfo
12
- from WMCore.ReqMgr.DataStructs.RequestStatus import T0_ACTIVE_STATUS, WMSTATS_JOB_INFO, WMSTATS_NO_JOB_INFO
15
+ from WMCore.ReqMgr.DataStructs.RequestStatus import T0_ACTIVE_STATUS
16
+ from WMCore.Services.WMStats.WMStatsPycurl import getTaskJobSummaryByRequestPycurl
17
+
13
18
 
14
19
  REQUEST_PROPERTY_MAP = {
15
20
  "_id": "_id",
@@ -70,6 +75,9 @@ class WMStatsReader(object):
70
75
  else:
71
76
  self.reqDB = None
72
77
  self.logger = logger if logger else logging.getLogger()
78
+ self.serviceOpts = {"couchURL": self.couchURL,
79
+ "dbName": self.dbName,
80
+ "couchapp": self.couchapp}
73
81
 
74
82
  def _sanitizeURL(self, couchURL):
75
83
  return sanitizeURL(couchURL)['url']
@@ -370,26 +378,35 @@ class WMStatsReader(object):
370
378
  reqInfoInstance = RequestInfo(requestInfo[requestName])
371
379
  return reqInfoInstance.isWorkflowFinished()
372
380
 
373
- def getTaskJobSummaryByRequest(self, requestName, sampleSize=1):
374
-
381
+ def getTaskJobSummaryByRequest(self, requestName, sampleSize=1, usePycurl=True):
382
+ reqStart = time.time()
375
383
  options = {'reduce': True, 'group_level': 5, 'startkey': [requestName],
376
384
  'endkey': [requestName, {}]}
377
385
  results = self._getCouchView("jobsByStatusWorkflow", options)
386
+
378
387
  jobDetails = {}
379
- for row in results['rows']:
380
- # row["key"] = ['workflow', 'task', 'jobstatus', 'exitCode', 'site']
381
- startKey = row["key"][:4]
382
- endKey = []
383
- site = row["key"][4]
384
- if site:
385
- startKey.append(site)
386
-
387
- endKey.extend(startKey)
388
- endKey.append({})
389
- numOfError = row["value"]
390
-
391
- jobInfo = self.jobDetailByTasks(startKey, endKey, numOfError, sampleSize)
392
- jobDetails = nestedDictUpdate(jobDetails, jobInfo)
388
+ if usePycurl is True:
389
+ jobDetails = getTaskJobSummaryByRequestPycurl(results, sampleSize, self.serviceOpts)
390
+ else:
391
+ # then it is sequential
392
+ for row in results['rows']:
393
+ # row["key"] = ['workflow', 'task', 'jobstatus', 'exitCode', 'site']
394
+ startKey = row["key"][:4]
395
+ endKey = []
396
+ site = row["key"][4]
397
+ if site:
398
+ startKey.append(site)
399
+
400
+ endKey.extend(startKey)
401
+ endKey.append({})
402
+ numOfError = row["value"]
403
+
404
+ jobInfo = self.jobDetailByTasks(startKey, endKey, numOfError, sampleSize)
405
+ jobDetails = nestedDictUpdate(jobDetails, jobInfo)
406
+ callRuntime = round((time.time() - reqStart), 3)
407
+ msg = f"Retrieved job details (pycurl mode: {usePycurl}) for {requestName} in "
408
+ msg += f"{callRuntime} seconds, with a total of {len(results['rows']) + 1} CouchDB calls"
409
+ print(msg)
393
410
  return jobDetails
394
411
 
395
412
  def jobDetailByTasks(self, startKey, endKey, numOfError, limit=1):
@@ -6,5 +6,5 @@ Core libraries for Workload Management Packages
6
6
 
7
7
  """
8
8
 
9
- __version__ = '2.3.2rc2'
9
+ __version__ = '2.3.2rc4'
10
10
  __all__ = []
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 1.2
2
2
  Name: reqmgr2ms-monitor
3
- Version: 2.3.2rc2
3
+ Version: 2.3.2rc4
4
4
  Summary: UNKNOWN
5
5
  Home-page: https://github.com/dmwm/WMCore
6
6
  Maintainer: CMS DMWM Group
@@ -251,6 +251,7 @@ src/python/WMCore/Services/WMArchive/WMArchive.py
251
251
  src/python/WMCore/Services/WMArchive/__init__.py
252
252
  src/python/WMCore/Services/WMBS/WMBS.py
253
253
  src/python/WMCore/Services/WMBS/__init__.py
254
+ src/python/WMCore/Services/WMStats/WMStatsPycurl.py
254
255
  src/python/WMCore/Services/WMStats/WMStatsReader.py
255
256
  src/python/WMCore/Services/WMStats/WMStatsWriter.py
256
257
  src/python/WMCore/Services/WMStats/__init__.py