reqmgr2ms-monitor 2.3.8rc9__tar.gz → 2.3.8rc11__tar.gz

Sign up to get free protection for your applications and to get access to all the features.
Files changed (278) hide show
  1. {reqmgr2ms-monitor-2.3.8rc9/src/python/reqmgr2ms_monitor.egg-info → reqmgr2ms-monitor-2.3.8rc11}/PKG-INFO +1 -1
  2. reqmgr2ms-monitor-2.3.8rc11/bin/patchCluster.sh +259 -0
  3. reqmgr2ms-monitor-2.3.8rc11/bin/patchComponent.sh +366 -0
  4. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/MicroService/MSCore/MSManager.py +5 -0
  5. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/MicroService/Service/RestApiHub.py +4 -0
  6. reqmgr2ms-monitor-2.3.8rc11/src/python/WMCore/Services/MSUtils/MSUtils.py +54 -0
  7. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/Services/WorkQueue/WorkQueue.py +34 -28
  8. reqmgr2ms-monitor-2.3.8rc11/src/python/WMCore/Services/WorkQueue/__init__.py +0 -0
  9. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/__init__.py +1 -1
  10. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11/src/python/reqmgr2ms_monitor.egg-info}/PKG-INFO +1 -1
  11. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/reqmgr2ms_monitor.egg-info/SOURCES.txt +3 -1
  12. reqmgr2ms-monitor-2.3.8rc9/bin/patchComponent.sh +0 -74
  13. reqmgr2ms-monitor-2.3.8rc9/src/python/WMCore/Services/MSPileup/MSPileupUtils.py +0 -31
  14. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/LICENSE +0 -0
  15. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/MANIFEST.in +0 -0
  16. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/NOTICE +0 -0
  17. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/README.md +0 -0
  18. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/bin/HWMon/wmcore-SysStat +0 -0
  19. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/bin/acdcserver-tools +0 -0
  20. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/bin/adhoc-scripts/ParseSpecCmsswdist.py +0 -0
  21. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/bin/adhoc-scripts/adjustMongoDocs.py +0 -0
  22. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/bin/adhoc-scripts/checkDsetFileCount.py +0 -0
  23. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/bin/adhoc-scripts/checkStuckLQE.py +0 -0
  24. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/bin/adhoc-scripts/createPileupObjects.py +0 -0
  25. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/bin/adhoc-scripts/drainAgent.py +0 -0
  26. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/bin/adhoc-scripts/fixWorkflowParentage.py +0 -0
  27. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/bin/adhoc-scripts/getWQStatusByWorkflow.py +0 -0
  28. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/bin/adhoc-scripts/injectUnified.py +0 -0
  29. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/bin/adhoc-scripts/mongoInit.py +0 -0
  30. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/bin/adhoc-scripts/parseUnifiedCampaigns.py +0 -0
  31. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/bin/adhoc-scripts/setrequeststatus.py +0 -0
  32. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/bin/adhoc-scripts/summaryWMStatsFailures.py +0 -0
  33. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/bin/adhoc-scripts/updatePileupObjects.py +0 -0
  34. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/bin/adhoc-scripts/updateTotalStats.py +0 -0
  35. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/bin/adhoc-scripts/workflowCompletion.py +0 -0
  36. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/bin/attempt-to-patch.sh +0 -0
  37. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/bin/buildrelease.sh +0 -0
  38. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/bin/check-ACDC-parentage +0 -0
  39. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/bin/check-phedex-dbs-status +0 -0
  40. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/bin/check-request-wq-status +0 -0
  41. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/bin/clean-oracle +0 -0
  42. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/bin/combineMinifyWMStats.py +0 -0
  43. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/bin/couch-thrash.py +0 -0
  44. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/bin/couch_archiver.py +0 -0
  45. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/bin/create-iam-token.sh +0 -0
  46. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/bin/createStoreResults.py +0 -0
  47. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/bin/dbsbuffer-file-fix.py +0 -0
  48. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/bin/deploy-rpm-to-jenkins.sh +0 -0
  49. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/bin/docker.sh +0 -0
  50. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/bin/fix-dbs-parentage +0 -0
  51. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/bin/inject-to-config-cache +0 -0
  52. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/bin/kill-workflow-in-agent +0 -0
  53. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/bin/kill-workflow-in-global +0 -0
  54. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/bin/make-local-clones.sh +0 -0
  55. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/bin/outputmodules-from-config +0 -0
  56. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/bin/paused-jobs +0 -0
  57. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/bin/purgeDeletedCouchDoc.py +0 -0
  58. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/bin/reqmgr-put-default-config +0 -0
  59. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/bin/reqmgr-sw-update +0 -0
  60. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/bin/vaildateCMSSWMergeVersion +0 -0
  61. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/bin/wmagent-component-standalone +0 -0
  62. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/bin/wmagent-couchapp-init +0 -0
  63. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/bin/wmagent-delete-couchdb-workflow +0 -0
  64. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/bin/wmagent-mod-config +0 -0
  65. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/bin/wmagent-resource-control +0 -0
  66. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/bin/wmagent-unregister-wmstats +0 -0
  67. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/bin/wmagent-upload-config +0 -0
  68. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/bin/wmagent-workqueue +0 -0
  69. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/bin/wmc-dist-patch +0 -0
  70. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/bin/wmc-dist-unpatch +0 -0
  71. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/bin/wmc-httpd +0 -0
  72. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/bin/wmcore-db-init +0 -0
  73. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/bin/wmcore-new-config +0 -0
  74. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/bin/wmcore-new-flow +0 -0
  75. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/bin/wmcoreD +0 -0
  76. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/requirements.txt +0 -0
  77. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/setup.cfg +0 -0
  78. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/setup.py +0 -0
  79. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/setup_build.py +0 -0
  80. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/setup_dependencies.py +0 -0
  81. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/Utils/CPMetrics.py +0 -0
  82. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/Utils/CertTools.py +0 -0
  83. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/Utils/EmailAlert.py +0 -0
  84. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/Utils/ExtendedUnitTestCase.py +0 -0
  85. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/Utils/FileTools.py +0 -0
  86. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/Utils/IteratorTools.py +0 -0
  87. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/Utils/MathUtils.py +0 -0
  88. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/Utils/MemoryCache.py +0 -0
  89. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/Utils/Patterns.py +0 -0
  90. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/Utils/Pipeline.py +0 -0
  91. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/Utils/PortForward.py +0 -0
  92. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/Utils/ProcessStats.py +0 -0
  93. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/Utils/PythonVersion.py +0 -0
  94. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/Utils/Signals.py +0 -0
  95. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/Utils/TemporaryEnvironment.py +0 -0
  96. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/Utils/Throttled.py +0 -0
  97. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/Utils/Timers.py +0 -0
  98. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/Utils/Timestamps.py +0 -0
  99. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/Utils/TokenManager.py +0 -0
  100. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/Utils/Tracing.py +0 -0
  101. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/Utils/TwPrint.py +0 -0
  102. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/Utils/Utilities.py +0 -0
  103. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/Utils/__init__.py +0 -0
  104. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/Algorithms/Alarm.py +0 -0
  105. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/Algorithms/MathAlgos.py +0 -0
  106. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/Algorithms/MiscAlgos.py +0 -0
  107. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/Algorithms/ParseXMLFile.py +0 -0
  108. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/Algorithms/Permissions.py +0 -0
  109. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/Algorithms/Singleton.py +0 -0
  110. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/Algorithms/SubprocessAlgos.py +0 -0
  111. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/Algorithms/__init__.py +0 -0
  112. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/Cache/GenericDataCache.py +0 -0
  113. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/Cache/WMConfigCache.py +0 -0
  114. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/Cache/__init__.py +0 -0
  115. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/Configuration.py +0 -0
  116. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/DAOFactory.py +0 -0
  117. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/DataStructs/File.py +0 -0
  118. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/DataStructs/Fileset.py +0 -0
  119. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/DataStructs/Job.py +0 -0
  120. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/DataStructs/JobGroup.py +0 -0
  121. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/DataStructs/JobPackage.py +0 -0
  122. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/DataStructs/LumiList.py +0 -0
  123. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/DataStructs/Mask.py +0 -0
  124. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/DataStructs/MathStructs/ContinuousSummaryHistogram.py +0 -0
  125. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/DataStructs/MathStructs/DiscreteSummaryHistogram.py +0 -0
  126. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/DataStructs/MathStructs/SummaryHistogram.py +0 -0
  127. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/DataStructs/MathStructs/__init__.py +0 -0
  128. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/DataStructs/Pickleable.py +0 -0
  129. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/DataStructs/Run.py +0 -0
  130. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/DataStructs/Subscription.py +0 -0
  131. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/DataStructs/WMObject.py +0 -0
  132. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/DataStructs/WorkUnit.py +0 -0
  133. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/DataStructs/Workflow.py +0 -0
  134. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/DataStructs/__init__.py +0 -0
  135. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/Database/CMSCouch.py +0 -0
  136. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/Database/ConfigDBMap.py +0 -0
  137. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/Database/CouchUtils.py +0 -0
  138. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/Database/DBCore.py +0 -0
  139. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/Database/DBCreator.py +0 -0
  140. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/Database/DBExceptionHandler.py +0 -0
  141. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/Database/DBFactory.py +0 -0
  142. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/Database/DBFormatter.py +0 -0
  143. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/Database/Dialects.py +0 -0
  144. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/Database/ExecuteDAO.py +0 -0
  145. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/Database/MongoDB.py +0 -0
  146. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/Database/MySQL/Destroy.py +0 -0
  147. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/Database/MySQL/ListUserContent.py +0 -0
  148. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/Database/MySQL/__init__.py +0 -0
  149. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/Database/MySQLCore.py +0 -0
  150. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/Database/Oracle/Destroy.py +0 -0
  151. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/Database/Oracle/ListUserContent.py +0 -0
  152. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/Database/Oracle/__init__.py +0 -0
  153. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/Database/ResultSet.py +0 -0
  154. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/Database/Transaction.py +0 -0
  155. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/Database/__init__.py +0 -0
  156. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/Database/ipy_profile_couch.py +0 -0
  157. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/GroupUser/CouchObject.py +0 -0
  158. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/GroupUser/Decorators.py +0 -0
  159. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/GroupUser/Group.py +0 -0
  160. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/GroupUser/Interface.py +0 -0
  161. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/GroupUser/User.py +0 -0
  162. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/GroupUser/__init__.py +0 -0
  163. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/Lexicon.py +0 -0
  164. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/MicroService/CherryPyThreads/HeartbeatMonitor.py +0 -0
  165. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/MicroService/CherryPyThreads/__init__.py +0 -0
  166. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/MicroService/DataStructs/DefaultStructs.py +0 -0
  167. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/MicroService/DataStructs/__init__.py +0 -0
  168. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/MicroService/MSCore/MSAuth.py +0 -0
  169. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/MicroService/MSCore/MSCore.py +0 -0
  170. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/MicroService/MSCore/TaskManager.py +0 -0
  171. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/MicroService/MSCore/__init__.py +0 -0
  172. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/MicroService/MSMonitor/MSMonitor.py +0 -0
  173. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/MicroService/MSMonitor/__init__.py +0 -0
  174. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/MicroService/Service/Data.py +0 -0
  175. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/MicroService/Service/__init__.py +0 -0
  176. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/MicroService/Tools/Common.py +0 -0
  177. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/MicroService/Tools/PycurlRucio.py +0 -0
  178. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/MicroService/Tools/__init__.py +0 -0
  179. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/MicroService/WebGui/FrontPage.py +0 -0
  180. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/MicroService/WebGui/__init__.py +0 -0
  181. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/REST/Auth.py +0 -0
  182. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/REST/CherryPyPeriodicTask.py +0 -0
  183. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/REST/Error.py +0 -0
  184. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/REST/Format.py +0 -0
  185. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/REST/HeartbeatMonitorBase.py +0 -0
  186. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/REST/Main.py +0 -0
  187. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/REST/Server.py +0 -0
  188. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/REST/Services.py +0 -0
  189. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/REST/Test.py +0 -0
  190. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/REST/Tools.py +0 -0
  191. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/REST/Validation.py +0 -0
  192. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/REST/__init__.py +0 -0
  193. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/ReqMgr/DataStructs/RequestStatus.py +0 -0
  194. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/ReqMgr/DataStructs/RequestType.py +0 -0
  195. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/ReqMgr/DataStructs/__init__.py +0 -0
  196. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/ReqMgr/__init__.py +0 -0
  197. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/Services/AlertManager/AlertManagerAPI.py +0 -0
  198. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/Services/AlertManager/__init__.py +0 -0
  199. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/Services/CRIC/CRIC.py +0 -0
  200. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/Services/CRIC/__init__.py +0 -0
  201. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/Services/DBS/DBS3Reader.py +0 -0
  202. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/Services/DBS/DBSConcurrency.py +0 -0
  203. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/Services/DBS/DBSErrors.py +0 -0
  204. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/Services/DBS/DBSReader.py +0 -0
  205. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/Services/DBS/DBSUtils.py +0 -0
  206. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/Services/DBS/DBSWriterObjects.py +0 -0
  207. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/Services/DBS/ProdException.py +0 -0
  208. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/Services/DBS/__init__.py +0 -0
  209. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/Services/FWJRDB/FWJRDBAPI.py +0 -0
  210. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/Services/FWJRDB/__init__.py +0 -0
  211. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/Services/HTTPS/HTTPSAuthHandler.py +0 -0
  212. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/Services/HTTPS/__init__.py +0 -0
  213. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/Services/LogDB/LogDB.py +0 -0
  214. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/Services/LogDB/LogDBBackend.py +0 -0
  215. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/Services/LogDB/LogDBExceptions.py +0 -0
  216. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/Services/LogDB/LogDBReport.py +0 -0
  217. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/Services/LogDB/__init__.py +0 -0
  218. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/Services/MSPileup/__init__.py +0 -0
  219. {reqmgr2ms-monitor-2.3.8rc9/src/python/WMCore/Services/MonIT → reqmgr2ms-monitor-2.3.8rc11/src/python/WMCore/Services/MSUtils}/__init__.py +0 -0
  220. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/Services/McM/McM.py +0 -0
  221. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/Services/McM/__init__.py +0 -0
  222. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/Services/MonIT/Grafana.py +0 -0
  223. {reqmgr2ms-monitor-2.3.8rc9/src/python/WMCore/Services/PyCondor → reqmgr2ms-monitor-2.3.8rc11/src/python/WMCore/Services/MonIT}/__init__.py +0 -0
  224. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/Services/PyCondor/PyCondorAPI.py +0 -0
  225. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/Services/PyCondor/PyCondorUtils.py +0 -0
  226. {reqmgr2ms-monitor-2.3.8rc9/src/python/WMCore/Services/ReqMgr → reqmgr2ms-monitor-2.3.8rc11/src/python/WMCore/Services/PyCondor}/__init__.py +0 -0
  227. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/Services/ReqMgr/ReqMgr.py +0 -0
  228. {reqmgr2ms-monitor-2.3.8rc9/src/python/WMCore/Services/ReqMgrAux → reqmgr2ms-monitor-2.3.8rc11/src/python/WMCore/Services/ReqMgr}/__init__.py +0 -0
  229. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/Services/ReqMgrAux/ReqMgrAux.py +0 -0
  230. {reqmgr2ms-monitor-2.3.8rc9/src/python/WMCore/Services/RequestDB → reqmgr2ms-monitor-2.3.8rc11/src/python/WMCore/Services/ReqMgrAux}/__init__.py +0 -0
  231. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/Services/RequestDB/RequestDBReader.py +0 -0
  232. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/Services/RequestDB/RequestDBWriter.py +0 -0
  233. {reqmgr2ms-monitor-2.3.8rc9/src/python/WMCore/Services/Rucio → reqmgr2ms-monitor-2.3.8rc11/src/python/WMCore/Services/RequestDB}/__init__.py +0 -0
  234. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/Services/Requests.py +0 -0
  235. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/Services/Rucio/Rucio.py +0 -0
  236. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/Services/Rucio/RucioUtils.py +0 -0
  237. {reqmgr2ms-monitor-2.3.8rc9/src/python/WMCore/Services/RucioConMon → reqmgr2ms-monitor-2.3.8rc11/src/python/WMCore/Services/Rucio}/__init__.py +0 -0
  238. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/Services/RucioConMon/RucioConMon.py +0 -0
  239. {reqmgr2ms-monitor-2.3.8rc9/src/python/WMCore/Services/StompAMQ → reqmgr2ms-monitor-2.3.8rc11/src/python/WMCore/Services/RucioConMon}/__init__.py +0 -0
  240. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/Services/Service.py +0 -0
  241. {reqmgr2ms-monitor-2.3.8rc9/src/python/WMCore/Services/TagCollector → reqmgr2ms-monitor-2.3.8rc11/src/python/WMCore/Services/StompAMQ}/__init__.py +0 -0
  242. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/Services/TagCollector/TagCollector.py +0 -0
  243. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/Services/TagCollector/XMLUtils.py +0 -0
  244. {reqmgr2ms-monitor-2.3.8rc9/src/python/WMCore/Services/WMAgent → reqmgr2ms-monitor-2.3.8rc11/src/python/WMCore/Services/TagCollector}/__init__.py +0 -0
  245. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/Services/UUIDLib.py +0 -0
  246. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/Services/UserFileCache/UserFileCache.py +0 -0
  247. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/Services/UserFileCache/__init__.py +0 -0
  248. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/Services/WMAgent/WMAgent.py +0 -0
  249. {reqmgr2ms-monitor-2.3.8rc9/src/python/WMCore/Services/WMArchive → reqmgr2ms-monitor-2.3.8rc11/src/python/WMCore/Services/WMAgent}/__init__.py +0 -0
  250. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/Services/WMArchive/CMSSWMetrics.py +0 -0
  251. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/Services/WMArchive/DataMap.py +0 -0
  252. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/Services/WMArchive/WMArchive.py +0 -0
  253. {reqmgr2ms-monitor-2.3.8rc9/src/python/WMCore/Services/WMBS → reqmgr2ms-monitor-2.3.8rc11/src/python/WMCore/Services/WMArchive}/__init__.py +0 -0
  254. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/Services/WMBS/WMBS.py +0 -0
  255. {reqmgr2ms-monitor-2.3.8rc9/src/python/WMCore/Services/WMStats/DataStruct → reqmgr2ms-monitor-2.3.8rc11/src/python/WMCore/Services/WMBS}/__init__.py +0 -0
  256. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/Services/WMStats/DataStruct/RequestInfoCollection.py +0 -0
  257. {reqmgr2ms-monitor-2.3.8rc9/src/python/WMCore/Services/WMStats → reqmgr2ms-monitor-2.3.8rc11/src/python/WMCore/Services/WMStats/DataStruct}/__init__.py +0 -0
  258. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/Services/WMStats/WMStatsPycurl.py +0 -0
  259. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/Services/WMStats/WMStatsReader.py +0 -0
  260. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/Services/WMStats/WMStatsWriter.py +0 -0
  261. {reqmgr2ms-monitor-2.3.8rc9/src/python/WMCore/Services/WMStatsServer → reqmgr2ms-monitor-2.3.8rc11/src/python/WMCore/Services/WMStats}/__init__.py +0 -0
  262. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/Services/WMStatsServer/WMStatsServer.py +0 -0
  263. {reqmgr2ms-monitor-2.3.8rc9/src/python/WMCore/Services/WorkQueue → reqmgr2ms-monitor-2.3.8rc11/src/python/WMCore/Services/WMStatsServer}/__init__.py +0 -0
  264. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/Services/__init__.py +0 -0
  265. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/Services/pycurl_manager.py +0 -0
  266. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/WMBase.py +0 -0
  267. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/WMConnectionBase.py +0 -0
  268. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/WMException.py +0 -0
  269. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/WMExceptions.py +0 -0
  270. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/WMFactory.py +0 -0
  271. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/WMInit.py +0 -0
  272. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/WMLogging.py +0 -0
  273. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/Wrappers/JsonWrapper/JSONThunker.py +0 -0
  274. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/Wrappers/JsonWrapper/__init__.py +0 -0
  275. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/WMCore/Wrappers/__init__.py +0 -0
  276. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/reqmgr2ms_monitor.egg-info/dependency_links.txt +0 -0
  277. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/src/python/reqmgr2ms_monitor.egg-info/requires.txt +0 -0
  278. {reqmgr2ms-monitor-2.3.8rc9 → reqmgr2ms-monitor-2.3.8rc11}/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.8rc9
3
+ Version: 2.3.8rc11
4
4
  Summary: UNKNOWN
5
5
  Home-page: https://github.com/dmwm/WMCore
6
6
  Maintainer: CMS DMWM Group
@@ -0,0 +1,259 @@
1
+ #!/bin/bash
2
+
3
+ usage()
4
+ {
5
+ echo -e "\nA simple script to be used for patching all Running backends in"
6
+ echo -e "a WMCore central services K8 cluster with a patch based on:"
7
+ echo -e " * A list of upstream PRs (the order of applying them matters) or "
8
+ echo -e " * A patch file provided or"
9
+ echo -e " * A patch created from StdIn"
10
+ echo -e ""
11
+ echo -e "Usage: ./patchCluster.sh [-n] [-z] [-f <patchFile>] [-p <\"SpaceSepListOfPods\">] [-s <serviceName>] 12077 12120 ..."
12
+ echo -e ""
13
+ echo -e " -p - Space separated list of pods to be patched (Mind the quotation marks)"
14
+ echo -e " -s - Service name whose pods to be patched (if found)"
15
+ echo -e " -d - Deployment name whose pods to be patched (if found)"
16
+ echo -e " -z - Only zero the code base to the currently deployed tag for the files changed in the patch - no actual patches will be applied"
17
+ echo -e " -f - Apply the specified patch file. No multiple files supported. If opt is repeated only the last one will be considered."
18
+ echo -e " -n - Do not zero the code base neither from TAG nor from Master branch, just apply the patch"
19
+ echo -e " -o - One go - Apply the patch only through a single attempt starting from the tag deployed at the destination and avoid the second attempt upon syncing to master."
20
+ echo -e ""
21
+ echo -e "NOTE: We do not support patching from file and patching from command line simultaneously"
22
+ echo -e " If both provided at the command line patching from command line takes precedence"
23
+ echo -e ""
24
+ echo -e "Examples: \n"
25
+ echo -e " ./patchCluster.sh -s reqmgr2 11270 12120 \n"
26
+ echo -e " ./patchCluster.sh -p pod/reqmgr2-bcdccd8c6-hsmlj -f /tmp/11270.patch \n"
27
+ echo -e " git diff --no-color | ./patchCluster.sh -s reqmgr2 -n \n"
28
+ echo -e " curl https://patch-diff.githubusercontent.com/raw/dmwm/WMCore/pull/11270.patch | ./patchCluster.sh -s reqmgr2 \n"
29
+
30
+ }
31
+
32
+ # Set defaults
33
+ currPods=""
34
+ currService=""
35
+ currDeployment=""
36
+ zeroOnly=false
37
+ zeroCodeBase=true
38
+ oneGo=false
39
+ extPatchFile=""
40
+ while getopts ":f:p:s:d:znh" opt; do
41
+ case ${opt} in
42
+ p)
43
+ currPods=$OPTARG
44
+ ;;
45
+ s)
46
+ currService=$OPTARG
47
+ ;;
48
+ d)
49
+ currDeployment=$OPTARG
50
+ ;;
51
+ f)
52
+ extPatchFile=$OPTARG
53
+ ;;
54
+ z)
55
+ zeroOnly=true
56
+ ;;
57
+ n)
58
+ zeroCodeBase=false
59
+ ;;
60
+ o)
61
+ oneGo=true
62
+ ;;
63
+ h)
64
+ usage
65
+ exit 0 ;;
66
+ \? )
67
+ echo -e "\nERROR: Invalid Option: -$OPTARG\n"
68
+ usage
69
+ exit 1 ;;
70
+ : )
71
+ echo -e "\nERROR: Invalid Option: -$OPTARG requires an argument\n"
72
+ usage
73
+ exit 1 ;;
74
+ esac
75
+ done
76
+
77
+ # shift to the last parsed option, so we can consume the patchList with a regular shift
78
+ shift $(expr $OPTIND - 1 )
79
+
80
+
81
+ # if fd 0 (stdin) is open and refers to a terminal - then we are running the script directly, without a pipe
82
+ # if fd 0 (stdin) is open but does not refer to the terminal - then we are running the script through a pipe
83
+ if [ -t 0 ] ; then pipe=false; else pipe=true ; fi
84
+
85
+ patchList=$*
86
+
87
+ which kubectl || { echo "ERROR: Missing 'kubectl'. Cannot continue! EXIT!"; exit 1 ;}
88
+
89
+ currCluster=`kubectl config get-clusters |grep -v NAME`
90
+ nameSpace=dmwm
91
+
92
+ echo
93
+ echo
94
+ echo
95
+ echo ========================================================
96
+ echo "INFO: CLUSTER: $currCluster"
97
+ echo --------------------------------------------------------
98
+
99
+ if $zeroOnly; then
100
+ echo "INFO: Only Zeroing the code base No patches will be applied"
101
+ echo "INFO: Source files affected to be taken from patches: $patchList"
102
+ elif $pipe ;then
103
+ echo "INFO: Patching from StdIn"
104
+ elif [[ -n $extPatchFile ]]; then
105
+ echo "INFO: Patching from file: $extPatchFile"
106
+ elif [[ -z $patchList ]] ; then
107
+ echo "ERROR: Neither patchList provided nor patchFile nor patching from StdIn"
108
+ exit
109
+ else
110
+ echo "INFO: Applying patches: $patchList"
111
+ fi
112
+
113
+
114
+ # -----------------------------------------------------------
115
+ # Build patchComponent.sh script command to be executed at the pod:
116
+
117
+ # NOTE: We do not support patching from file and patching from command line simultaneously
118
+ # If both provided at the command line patching from command line takes precedence
119
+
120
+ podCmdActions="sudo -v && /data/manage help && which curl && curl https://raw.githubusercontent.com/dmwm/WMCore/master/bin/patchComponent.sh -o /data/patchComponent.sh && chmod 755 /data/patchComponent.sh "
121
+ podCmdOpts=""
122
+ patchFile=""
123
+ $zeroOnly && podCmdOpts="$podCmdOpts -z"
124
+ $oneGo && podCmdOpts="$podCmdOpts -o"
125
+ $zeroCodeBase || podCmdOpts="$podCmdOpts -n"
126
+
127
+ [[ -n $extPatchFile ]] && { patchFile="/tmp/`basename $extPatchFile`"
128
+ podCmdOpts="$podCmdOpts -f $patchFile" ;}
129
+
130
+ # NOTE: We are about to create the pipeTmp_****.patch file from stdIn here
131
+ # And we are about to call `patchComponent.sh` through -f option, but we must
132
+ # explicitly break the redirection from the pipe command, because otherwise
133
+ # it will be kept through out the call to `patchComponent.sh` and will cause
134
+ # the $pipe flag to take precedence over the -f flag inside `patchComponent.sh`
135
+ # Then the so sent file will be ignored. What we need to do here is, once we create
136
+ # the temporary patch file from stdin (currently redirected through the pipe)
137
+ # to open again fd 0 (stdin) and redirect it to a tty terminal.
138
+ $pipe && { patchFile="/tmp/pipeTmp_$(id -u).patch"
139
+ extPatchFile=$patchFile
140
+ podCmdOpts="$podCmdOpts -f $patchFile"
141
+ echo "INFO: Creating a temporary patchFile from stdin at: $patchFile"
142
+ cat <&0 > $patchFile
143
+ exec 0<>/dev/tty
144
+ # The flag bellow is just for debugging purposes, never used after the printout
145
+ [[ -t 0 ]] && newPipeFlag=false || newPipeFlag=true
146
+ echo
147
+ echo "DEBUG: newPipeFlag=$newPipeFlag"
148
+ }
149
+
150
+ podCmd="$podCmdActions && sudo /data/patchComponent.sh $podCmdOpts $patchList "
151
+ restartCmd="/data/manage restart && sleep 1 && /data/manage status"
152
+
153
+ echo
154
+ echo "DEBUG: podCmd: $podCmd"
155
+ echo
156
+ # -----------------------------------------------------------
157
+
158
+ echo --------------------------------------------------------
159
+ # First try to find any pod from the service name provided and then extend the list in currPods:
160
+ if [[ -n $currService ]]; then
161
+ servicePods=`kubectl -n $nameSpace get ep $currService -o=jsonpath='{.subsets[*].addresses[*].ip}' | tr ' ' '\n' | xargs -I % kubectl -n $nameSpace get pods -o=name --field-selector=status.podIP=%`
162
+ [[ $? -eq 0 ]] || { echo "WARNING: could not find service: $currService at cluster: $currCluster"; exit ;}
163
+
164
+ # We need to trim the `pod/` prefix from every pod's name produced with the above command
165
+ if [[ -n $servicePods ]] ; then
166
+ for pod in $servicePods; do
167
+ currPods="$currPods ${pod#pod/}"
168
+ done
169
+ echo "INFO: Found the following pods for SERVICE: $currService: "
170
+ echo "$servicePods "
171
+ else
172
+ echo "WARNING: No pods found for SERVICE: $currService"
173
+ exit
174
+ fi
175
+ fi
176
+
177
+ # Second try to find any pod from the deployment name provided and then extend the list in currPods:
178
+ if [[ -n $currDeployment ]]; then
179
+ deploymentPods=`kubectl get --raw "/apis/apps/v1/namespaces/dmwm/deployments/$currDeployment/scale"|jq -r .status.selector | xargs -I % kubectl -n $nameSpace get pods -o=name --selector=%`
180
+ [[ $? -eq 0 ]] || { echo "WARNING: could not find deployment: $currDeployment at cluster: $currCluster"; exit ;}
181
+
182
+ # We need to trim the `pod/` prefix from every pod's name produced with the above command
183
+ if [[ -n $deploymentPods ]] ; then
184
+ for pod in $deploymentPods; do
185
+ currPods="$currPods ${pod#pod/}"
186
+ done
187
+ echo "INFO: Found the following pods for DEPLOYMENT: $currDeployment: "
188
+ echo "$deploymentPods "
189
+ else
190
+ echo "WARNING: No pods found for DEPLOYMENT: $currDeployment"
191
+ exit
192
+ fi
193
+ fi
194
+
195
+
196
+
197
+ if [[ -n $currPods ]] ; then
198
+ echo ========================================================
199
+ echo WARNING: We are about to patch backend pods: $currPods
200
+ echo WARNING: at k8 CLUSTER: $currCluster !!!!
201
+ else
202
+ echo ========================================================
203
+ echo WARNING: We are about to patch ANY running backend pod
204
+ echo WARNING: at k8 CLUSTER: $currCluster !!!!
205
+ fi
206
+
207
+ echo WARNING: Are you sure you want to continue?
208
+ echo -n "[y/n](Default n): "
209
+ read x && [[ $x =~ (y|yes|Yes|YES) ]] || { echo WARNING: Exit on user request!; exit 101 ;}
210
+ echo ========================================================
211
+
212
+
213
+ if [[ -n $currPods ]] ; then
214
+ runningPods=$currPods
215
+ else
216
+ # # check if any service name was actually provided at the command line and if not only then search for all running pods for the whole cluster:
217
+ # if [[ -n $currService ]] ; then
218
+ # echo "WARNING: Requested to patch: $currService at: $currCluster but NO pods were found."
219
+ # echo "WARNING: Will not patch the whole cluster. Nothing to do here, giving up now."
220
+ # exit
221
+ # else
222
+ runningPods=`kubectl get pods --no-headers -o custom-columns=":metadata.name" -n $nameSpace --field-selector=status.phase=Running`
223
+ # fi
224
+ fi
225
+
226
+ for pod in $runningPods
227
+ do
228
+ echo
229
+ echo --------------------------------------------------------
230
+ echo INFO: $pod:
231
+
232
+ if $pipe || [[ -n $extPatchFile ]]; then
233
+ echo INFO: Copying any external patchFiles provided: $extPatchFile
234
+ echo INFO: Executing: kubectl -n $nameSpace cp $extPatchFile $pod:$patchFile
235
+ kubectl -n $nameSpace cp $extPatchFile $pod:$patchFile || {
236
+ echo ERROR: While copying patch files to pod:$pod
237
+ echo ERROR: Skipping it!
238
+ continue
239
+ }
240
+ fi
241
+ echo
242
+ echo --------------------------------------------------------
243
+ echo INFO: Patching the services at pod: $pod:
244
+ echo INFO: Executing: kubectl exec -it $pod -n $nameSpace -- /bin/bash -c \"$podCmd\"
245
+ kubectl exec -it $pod -n $nameSpace -- /bin/bash -c "$podCmd" || {
246
+ echo ERROR: While patching the pod:$pod
247
+ echo ERROR: Skipping it!
248
+ continue
249
+ }
250
+ echo
251
+ echo --------------------------------------------------------
252
+ echo INFO: Restarting the services at pod: $pod:
253
+ echo INFO: Executing: kubectl exec $pod -n $nameSpace -- /bin/bash -c \"$restartCmd\"
254
+ kubectl exec $pod -n $nameSpace -- /bin/bash -c "$restartCmd" || {
255
+ echo ERROR: While restarting the service at pod:$pod
256
+ echo ERROR: Skipping it!
257
+ continue
258
+ }
259
+ done
@@ -0,0 +1,366 @@
1
+ #!/bin/bash
2
+
3
+ usage()
4
+ {
5
+ echo -e "\nA simple script to facilitate component patching"
6
+ echo -e "and to decrease the development && testing turnaround time."
7
+ echo -e " * A list of upstream PRs (the order of applying them matters) or "
8
+ echo -e " * A patch file provided or"
9
+ echo -e " * A patch created from StdIn"
10
+ echo -e ""
11
+ echo -e "Usage: ./patchComponent [-n] [-z] [-f <patchFile>] <patchNum> <patchNum> ..."
12
+ echo -e " -z - Only zero the code base to the currently deployed tag for the files changed in the patch - no actual patches will be applied"
13
+ echo -e " -f - Apply the specified patch file. No multiple files supported. If opt is repeated only the last one will be considered."
14
+ echo -e " -n - Do not zero the code base neither from TAG nor from Master branch, just apply the patch"
15
+ echo -e " -o - One go - Apply the patch only through a single attempt starting from the tag deployed at the destination and avoid the second attempt upon syncing to master."
16
+ echo -e ""
17
+ echo -e "NOTE: We do not support patching from file and patching from command line simultaneously"
18
+ echo -e " If both provided at the command line patching from command line takes precedence"
19
+ echo -e ""
20
+ echo -e "Examples: \n"
21
+ echo -e " sudo ./patchComponent.sh 11270 12120"
22
+ echo -e " sudo ./patchComponent.sh -f /tmp/11270.patch"
23
+ echo -e " git diff --no-color | sudo ./patchComponent.sh"
24
+ echo -e " curl https://patch-diff.githubusercontent.com/raw/dmwm/WMCore/pull/11270.patch | sudo ./patchComponent.sh \n"
25
+ }
26
+
27
+
28
+
29
+ # Add default value for zeroOnly option
30
+ zeroOnly=false
31
+ zeroCodeBase=true
32
+ oneGo=false
33
+ extPatchFile=""
34
+ while getopts ":f:znoh" opt; do
35
+ case ${opt} in
36
+ f)
37
+ extPatchFile=$OPTARG
38
+ ;;
39
+ z)
40
+ zeroOnly=true
41
+ ;;
42
+ n)
43
+ zeroCodeBase=false
44
+ ;;
45
+ o)
46
+ oneGo=true
47
+ ;;
48
+ h)
49
+ usage
50
+ exit 0 ;;
51
+ \? )
52
+ echo -e "\nERROR: Invalid Option: -$OPTARG\n"
53
+ usage
54
+ exit 1 ;;
55
+ : )
56
+ echo -e "\nERROR: Invalid Option: -$OPTARG requires an argument\n"
57
+ usage
58
+ exit 1 ;;
59
+ esac
60
+ done
61
+ # shift to the last parsed option, so we can consume the patchNum with a regular shift
62
+ shift $(expr $OPTIND - 1 )
63
+
64
+
65
+ # if fd 0 (stdin) is open and refers to a terminal - then we are running the script directly, without a pipe
66
+ # if fd 0 (stdin) is open but does not refer to the terminal - then we are running the script through a pipe
67
+ if [ -t 0 ] ; then pipe=false; else pipe=true ; fi
68
+
69
+ patchList=$*
70
+ # [[ -z $patchList ]] && patchList="temp"
71
+
72
+ currTag=$(python -c "from WMCore import __version__ as WMCoreVersion; print(WMCoreVersion)")
73
+
74
+ echo
75
+ echo
76
+ echo
77
+ echo ========================================================
78
+ echo "INFO: Current WMCoreTag: $currTag"
79
+
80
+ # Find all possible locations for the component source
81
+ # NOTE: We always consider PYTHONPATH first
82
+ pythonLibPaths=$(echo $PYTHONPATH |sed -e "s/\:/ /g")
83
+ pythonLibPaths="$pythonLibPaths $(python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")"
84
+
85
+ for path in $pythonLibPaths
86
+ do
87
+ [[ -d $path/WMCore ]] && { pythonLibPath=$path; echo "INFO: Source code found at: $path"; break ;}
88
+ done
89
+
90
+ [[ -z $pythonLibPath ]] && { echo "ERROR: Could not find WMCore source to patch"; exit 1 ;}
91
+ echo "INFO: Current PythonLibPath: $pythonLibPath"
92
+ echo --------------------------------------------------------
93
+ echo
94
+
95
+ # Set patch command parameters
96
+ stripLevel=3
97
+ patchCmd="patch -t --verbose -b --version-control=numbered -d $pythonLibPath -p$stripLevel"
98
+
99
+ # Define Auxiliary functions
100
+ _createTestFilesDst() {
101
+ # A simple function to create test files destination for not breaking the patches
102
+ # because of a missing destination:
103
+ # :param $1: The source branch to be used for checking the files: could be TAG or Master
104
+ # :param $2-*: The list of files to be checked out
105
+ local srcBranch=$1
106
+ shift
107
+ local testFileList=$*
108
+ for file in $testFileList
109
+ do
110
+ # file=${file#a\/test\/python\/}
111
+ fileName=`basename $file`
112
+ fileDir=`dirname $file`
113
+ # Create the file path if missing
114
+ mkdir -p $pythonLibPath/$fileDir
115
+ echo INFO: orig: https://raw.githubusercontent.com/dmwm/WMCore/$srcBranch/test/python/$file
116
+ echo INFO: dest: $pythonLibPath/$file
117
+ curl -f https://raw.githubusercontent.com/dmwm/WMCore/$srcBranch/test/python/$file -o $pythonLibPath/$file || {
118
+ echo INFO: file: $file missing at the origin.
119
+ echo INFO: Seems to be a new file for the curren patch.
120
+ echo INFO: Removing it from the destination as well!
121
+ rm -f $pythonLibPath/$file
122
+ }
123
+ done
124
+ }
125
+
126
+ _zeroCodeBase() {
127
+ # A simple function to zero the code base for a set of files starting from
128
+ # a given tag or branch at the origin
129
+ # :param $1: The source branch to be used for checking the files: could be TAG or Master
130
+ # :param $2-*: The list of files to be checked out
131
+ local srcBranch=$1
132
+ shift
133
+ local srcFileList=$*
134
+ for file in $srcFileList
135
+ do
136
+ # file=${file#a\/src\/python\/}
137
+ fileName=`basename $file`
138
+ fileDir=`dirname $file`
139
+ # Create the file path if missing
140
+ mkdir -p $pythonLibPath/$fileDir
141
+ echo INFO: orig: https://raw.githubusercontent.com/dmwm/WMCore/$srcBranch/src/python/$file
142
+ echo INFO: dest: $pythonLibPath/$file
143
+ curl -f https://raw.githubusercontent.com/dmwm/WMCore/$srcBranch/src/python/$file -o $pythonLibPath/$file || {
144
+ echo INFO: file: $file missing at the origin.
145
+ echo INFO: Seems to be a new file for the curren patch.
146
+ echo INFO: Removing it from the destination as well!
147
+ rm -f $pythonLibPath/$file
148
+ }
149
+ done
150
+ }
151
+
152
+
153
+ # DONE: ....HERE TO START ITERATING THROUGH THE PATCH LIST
154
+
155
+ # Create the full list of patch files to be applied - keeping the order
156
+ # from the original patch list as provided at the command line
157
+ patchFileList=""
158
+ _createPatchFiles(){
159
+ local patchFile
160
+
161
+ # Check if we are running from a pipe
162
+ $pipe && {
163
+ if $zeroOnly ;then
164
+ echo "INFO: Zeroing WMCore code base from StdIn"
165
+ else
166
+ echo "INFO: Patching WMCore code from StdIn"
167
+ fi
168
+ patchFile="/tmp/pipeTmp_$(id -u).patch"
169
+ patchFileList=$patchFile
170
+ echo "INFO: Creating a temporary patchFile from stdin at: $patchFile"
171
+ cat <&0 > $patchFile
172
+ return
173
+ }
174
+
175
+ # Check if we were sent a file to patch from
176
+ [[ -n $extPatchFile ]] && {
177
+ if $zeroOnly ;then
178
+ echo "INFO: Zeroing WMCore code base with file: $extPatchFile"
179
+ else
180
+ echo "INFO: Patching WMCore code with file: $extPatchFile"
181
+ fi
182
+ patchFile=$extPatchFile
183
+ patchFileList=$patchFile
184
+ echo "INFO: Using command line provided patch file: $patchFile"
185
+ return
186
+ }
187
+
188
+ # Finally, if none of the above, build the list of patch files to be applied from the patchNums provided at the command line
189
+ if $zeroOnly ; then
190
+ echo "INFO: Zeroing WMCore code base with PRs: $patchList"
191
+ else
192
+ echo "INFO: Patching WMCore code with PRs: $patchList"
193
+ fi
194
+ for patchNum in $patchList
195
+ do
196
+ patchFile=/tmp/$patchNum.patch
197
+ patchFileList="$patchFileList $patchFile"
198
+ echo "INFO: Downloading a temporary patchFile at: $patchFile"
199
+ curl https://patch-diff.githubusercontent.com/raw/dmwm/WMCore/pull/$patchNum.patch -o $patchFile
200
+ done
201
+ }
202
+
203
+ _warnFilelist(){
204
+ echo WARNING: Please consider checking the follwoing list of files for eventual code conflicts:
205
+ for file in $srcFileList $testFileList
206
+ do
207
+ echo WARNING: $pythonLibPath/$file
208
+ done
209
+ }
210
+
211
+ _createPatchFiles
212
+
213
+ echo "DEBUG: patchFileList: $patchFileList"
214
+
215
+ # Build full lists of files altered by the given set of patch files to be applied
216
+ srcFileList=""
217
+ testFileList=""
218
+ for patchFile in $patchFileList
219
+ do
220
+ # Parse a list of files changed only by the current patch
221
+ srcFileListTemp=`grep diff $patchFile |grep "a/src/python" |awk '{print $3}' |sort |uniq`
222
+ testFileListTemp=`grep diff $patchFile |grep "a/test/python" |awk '{print $3}' |sort |uniq`
223
+
224
+ # Reduce paths for both src and test file lists to the path depth known to
225
+ # the WMCore modules/packages and add them to the global scope file lists
226
+ for file in $srcFileListTemp
227
+ do
228
+ file=${file#a\/src\/python\/} && srcFileList="$srcFileList $file"
229
+ done
230
+
231
+ for file in $testFileListTemp
232
+ do
233
+ file=${file#a\/test\/python\/} && testFileList="$testFileList $file"
234
+ done
235
+ done
236
+
237
+
238
+ $zeroCodeBase && {
239
+ echo
240
+ echo --------------------------------------------------------
241
+ echo "INFO: Refreshing all files which are to be patched from the origin and TAG: $currTag"
242
+ echo
243
+
244
+ # First create destination for test files from currTag if missing
245
+ _createTestFilesDst $currTag $testFileList
246
+
247
+
248
+ # Then zero code base for source files from currTag
249
+ _zeroCodeBase $currTag $srcFileList
250
+ }
251
+
252
+ # exit if the user has requested to only zero the code base
253
+ $zeroOnly && { _warnFilelist; exit ;}
254
+
255
+ err=0
256
+ echo
257
+ echo
258
+ echo --------------------------------------------------------
259
+ echo "INFO: Patching all files starting from the $($zeroCodeBase && echo original version of TAG: $currTag || echo current version of files)"
260
+ for patchFile in $patchFileList
261
+ do
262
+ echo
263
+ echo
264
+ echo --------------------------------------------------------
265
+ echo "INFO: ----------------- Currently applying patch: $patchNum -----------------"
266
+ echo "INFO: cat $patchFile | $patchCmd"
267
+ cat $patchFile | $patchCmd
268
+ let err+=$?
269
+ done
270
+
271
+ echo
272
+ echo +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
273
+ echo
274
+ if [[ $err -eq 0 ]]; then
275
+ echo INFO: First patch attempt exit status: $err
276
+ echo INFO: ALL GOOD
277
+ echo +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
278
+ exit
279
+ else
280
+ echo WARNING: First patch attempt exit status: $err
281
+ echo
282
+ echo
283
+ echo WARNING: There were errors while patching from TAG: $currTag
284
+ echo WARNING: Most probably some of the files from the current patch were having changes
285
+ echo WARNING: between the current PR and the tag deployed at the host/container.
286
+ echo
287
+ echo
288
+
289
+ # exit at this stage if the user has requested to patch without zeroing the code base
290
+ $zeroCodeBase || { _warnFilelist ; exit 1 ;}
291
+
292
+ # exit at this stage if the user has requested to do the patch only in one go
293
+ # without a second attempt from master. Restore files to their version at TAG
294
+ $oneGo && {
295
+ echo WARNING: Restoring all files to their original version at TAG: $currTag
296
+ echo
297
+ echo
298
+ _createTestFilesDst $currTag $testFileList
299
+ _zeroCodeBase $currTag $srcFileList
300
+ echo
301
+ echo
302
+ echo WARNING: All files have been rolled back to their original version at TAG: $currTag
303
+ _warnFilelist
304
+ exit 1
305
+ }
306
+ echo WARNING: TRYING TO START FROM ORIGIN/MASTER BRANCH INSTEAD:
307
+ echo
308
+ echo
309
+ fi
310
+
311
+
312
+ # If we are here it means something went wrong while patching some of the files.
313
+ # Most probably some of the files are having changes between the current PR and the tag deployed.
314
+ # What we can do in such cases is to try to fetch and zero the code base for those files
315
+ # to be patched from master and hope there are no conflicts in the PR.
316
+
317
+ echo
318
+ echo --------------------------------------------------------
319
+ echo "WARNING: Refreshing all files which are to be patched from origin/master branch:"
320
+ echo
321
+
322
+ # First create destination for test files from master if missing
323
+ _createTestFilesDst "master" $testFileList
324
+
325
+ # Then zero code base for source files from master
326
+ _zeroCodeBase "master" $srcFileList
327
+
328
+ err=0
329
+ echo
330
+ echo
331
+ echo --------------------------------------------------------
332
+ echo "WARNING: Patching all files starting from origin/master branch"
333
+ for patchFile in $patchFileList
334
+ do
335
+ echo
336
+ echo
337
+ echo "WARNING: --------------- Currently applying patch: $patchNum ---------------"
338
+ echo "WARNING: cat $patchFile | $patchCmd"
339
+ cat $patchFile | $patchCmd
340
+ let err+=$?
341
+ done
342
+
343
+
344
+ echo
345
+ echo +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
346
+ echo WARNING: Second patch attempt exit status: $err
347
+ echo
348
+ echo
349
+
350
+ [[ $err -eq 0 ]] || {
351
+
352
+ _createTestFilesDst $currTag $testFileList
353
+ _zeroCodeBase $currTag $srcFileList
354
+
355
+ echo
356
+ echo +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
357
+ echo WARNING: There were errors while patching from master branch as well
358
+ echo WARNING: All files have been rolled back to their original version at TAG: $currTag
359
+ echo
360
+ echo
361
+ }
362
+ echo +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
363
+
364
+ _warnFilelist
365
+
366
+ exit $err
@@ -29,6 +29,9 @@ from builtins import object
29
29
  from time import sleep
30
30
  from datetime import datetime
31
31
 
32
+ # 3rd party modules
33
+ from cherrypy import HTTPError
34
+
32
35
  # WMCore modules
33
36
  from WMCore.MicroService.Tools.Common import getMSLogger
34
37
  from WMCore.MicroService.MSCore.TaskManager import start_new_thread
@@ -410,6 +413,8 @@ class MSManager(object):
410
413
  elif 'transferor' in self.services:
411
414
  if 'workflow' in doc:
412
415
  res = self.msTransferor.updateSites(doc)
416
+ else:
417
+ raise HTTPError(400, 'invalid payload %s to MSTransferor REST API, expecting {"workflow": <workflow>}' % doc)
413
418
  return res
414
419
 
415
420
  def update(self, doc):
@@ -39,4 +39,8 @@ class RestApiHub(RESTApi):
39
39
  # the mount point should match service configuration, e.g. in MSPileup we define
40
40
  # mount point as /ms-pileup/data, e.g. http://.../ms-pileup/data
41
41
  if 'ms-pileup' in mount:
42
+ # add new API "pileup" and it will be accessible as /ms-pileup/data/pileup
42
43
  self._add({"pileup": Data(app, self, config, mount)})
44
+ elif 'ms-transferor' in mount:
45
+ # add new API "transferor" and it will be accessible as /ms-transferor/data/transferor
46
+ self._add({"transferor": Data(app, self, config, mount)})