squidient 3.0.2__tar.gz → 3.0.4__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (175) hide show
  1. {squidient-3.0.2 → squidient-3.0.4}/PKG-INFO +1 -1
  2. {squidient-3.0.2 → squidient-3.0.4}/pyproject.toml +1 -1
  3. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/builds/build_definition.py +0 -3
  4. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/builds/build_execution.py +8 -3
  5. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/builds/build_orchestrator.py +0 -1
  6. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/cli/staging.py +1 -1
  7. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/code_coverage/gcovr_code_coverage.py +2 -2
  8. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/connection/job.py +2 -15
  9. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/definitions.py +1 -4
  10. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/monitoring/monitoring.py +19 -2
  11. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/reports/cases/base.py +0 -1
  12. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/staging/staging.py +0 -1
  13. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/systems/platform.py +0 -1
  14. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/testing/benchmarks/failure_notifier.py +10 -5
  15. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/testing/cases/instance_merger.py +0 -3
  16. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/testing/test_orchestrator.py +0 -2
  17. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/utils/watchdog.py +0 -1
  18. squidient-3.0.2/src/squidient/connection/build_lock.py +0 -32
  19. {squidient-3.0.2 → squidient-3.0.4}/.gitignore +0 -0
  20. {squidient-3.0.2 → squidient-3.0.4}/LICENSE.txt +0 -0
  21. {squidient-3.0.2 → squidient-3.0.4}/README.md +0 -0
  22. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/__init__.py +0 -0
  23. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/builds/benchmark_build_execution.py +0 -0
  24. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/builds/benchmark_build_orchestrator.py +0 -0
  25. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/builds/build_presets.py +0 -0
  26. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/cli/__init__.py +0 -0
  27. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/cli/__main__.py +0 -0
  28. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/cli/main.py +0 -0
  29. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/cli/monitoring.py +0 -0
  30. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/code_coverage/code_coverage.py +0 -0
  31. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/code_coverage/intel_code_coverage.py +0 -0
  32. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/compare/compare.py +0 -0
  33. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/compare/compare_with_diff_table.py +0 -0
  34. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/compare/methods/absolute.py +0 -0
  35. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/compare/methods/close.py +0 -0
  36. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/compare/methods/diff.py +0 -0
  37. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/compare/methods/l1_norm.py +0 -0
  38. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/compare/methods/l1_relative.py +0 -0
  39. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/compare/methods/l2_norm.py +0 -0
  40. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/compare/methods/l2_relative.py +0 -0
  41. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/compare/methods/linf_norm.py +0 -0
  42. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/compare/methods/linf_relative.py +0 -0
  43. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/compare/methods/power.py +0 -0
  44. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/compare/methods/relative.py +0 -0
  45. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/compare/methods/scalar_tolerance.py +0 -0
  46. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/compare/methods/tolerance.py +0 -0
  47. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/compare/methods/vector_tolerance.py +0 -0
  48. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/compilation/cmake_options.py +0 -0
  49. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/configuration/__init__.py +0 -0
  50. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/configuration/generator.py +0 -0
  51. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/configuration/prompts.py +0 -0
  52. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/configure.py +0 -0
  53. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/connection/ssh.py +0 -0
  54. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/connection/ssh_config_checker.py +0 -0
  55. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/data/.squidient-initialized +0 -0
  56. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/data/alya-config/cmake-alamak.json +0 -0
  57. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/data/alya-config/cmake-chemint.json +0 -0
  58. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/data/alya-config/cmake-clang.json +0 -0
  59. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/data/alya-config/cmake-commdom.json +0 -0
  60. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/data/alya-config/cmake-gnu.json +0 -0
  61. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/data/alya-config/cmake-intel.json +0 -0
  62. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/data/alya-config/cmake-mumps.json +0 -0
  63. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/data/alya-config/cmake-nvhpc.json +0 -0
  64. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/data/alya-config/cmake-talp.json +0 -0
  65. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/data/benchmarks/benchmarks.json +0 -0
  66. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/data/builds/builds.json +0 -0
  67. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/data/builds/cc.json +0 -0
  68. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/data/builds/defaults.json +0 -0
  69. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/data/builds/predefined-old.json +0 -0
  70. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/data/builds/predefined.json +0 -0
  71. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/data/configurations/projects.json +0 -0
  72. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/data/configurations/systems.json +0 -0
  73. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/data/configurations/tests.json +0 -0
  74. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/data/email/report.html +0 -0
  75. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/data/icons/big.png +0 -0
  76. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/data/icons/small.png +0 -0
  77. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/data/index.html +0 -0
  78. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/data/terraform/.gitignore +0 -0
  79. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/data/terraform/aws-ec2-t3.small/.gitignore +0 -0
  80. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/data/terraform/aws-ec2-t3.small/t3.small/cloud-init-slurm-fedora.sh +0 -0
  81. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/data/terraform/aws-ec2-t3.small/t3.small/t3.small.tf +0 -0
  82. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/data/terraform/aws-ec2-t3.small/t3.small/terraform.tfvars +0 -0
  83. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/data/terraform/aws-ec2-t3.small-x2/t3.small/.gitignore +0 -0
  84. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/data/terraform/aws-ec2-t3.small-x2/t3.small/cloud-init-slurm-fedora.sh +0 -0
  85. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/data/terraform/aws-ec2-t3.small-x2/t3.small/replace-var.sh +0 -0
  86. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/data/terraform/aws-ec2-t3.small-x2/t3.small/t3.small.tf +0 -0
  87. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/data/terraform/aws-ec2-t3.small-x2/t3.small/terraform.tfvars +0 -0
  88. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/data/terraform/aws-ec2-t3.small-x3/t3.small/.gitignore +0 -0
  89. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/data/terraform/aws-ec2-t3.small-x3/t3.small/cloud-init-slurm-fedora.sh +0 -0
  90. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/data/terraform/aws-ec2-t3.small-x3/t3.small/t3.small.tf +0 -0
  91. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/data/terraform/aws-ec2-t3.small-x3/t3.small/terraform.tfvars +0 -0
  92. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/data/version/version.json +0 -0
  93. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/data/web/btest.html +0 -0
  94. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/data/web/cc-gcovr.html +0 -0
  95. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/data/web/cc-intel.html +0 -0
  96. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/data/web/files.html +0 -0
  97. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/data/web/img/png/canceled.png +0 -0
  98. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/data/web/img/png/created.png +0 -0
  99. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/data/web/img/png/failed.png +0 -0
  100. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/data/web/img/png/failed_black.png +0 -0
  101. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/data/web/img/png/failed_green.png +0 -0
  102. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/data/web/img/png/file_cloud.png +0 -0
  103. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/data/web/img/png/file_config.png +0 -0
  104. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/data/web/img/png/file_ko.png +0 -0
  105. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/data/web/img/png/file_ok.png +0 -0
  106. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/data/web/img/png/skipped.png +0 -0
  107. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/data/web/img/png/squidient_logo.png +0 -0
  108. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/data/web/img/png/success.png +0 -0
  109. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/data/web/img/png/success_black.png +0 -0
  110. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/data/web/img/png/timeout.png +0 -0
  111. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/data/web/img/png/tolerance.png +0 -0
  112. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/data/web/img/png/warning.png +0 -0
  113. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/data/web/img/png/warning_black.png +0 -0
  114. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/data/web/img/png/warning_green.png +0 -0
  115. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/data/web/img/svg/canceled.svg +0 -0
  116. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/data/web/img/svg/created.svg +0 -0
  117. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/data/web/img/svg/failed.svg +0 -0
  118. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/data/web/img/svg/failed_black.svg +0 -0
  119. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/data/web/img/svg/failed_green.svg +0 -0
  120. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/data/web/img/svg/manual.svg +0 -0
  121. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/data/web/img/svg/running.svg +0 -0
  122. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/data/web/img/svg/skipped.svg +0 -0
  123. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/data/web/img/svg/success.svg +0 -0
  124. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/data/web/img/svg/success_black.svg +0 -0
  125. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/data/web/img/svg/warning.svg +0 -0
  126. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/data/web/img/svg/warning_black.svg +0 -0
  127. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/data/web/img/svg/warning_green.svg +0 -0
  128. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/data/web/index.html +0 -0
  129. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/data/web/jquery.dynatable.css +0 -0
  130. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/data/web/jquery.dynatable.js +0 -0
  131. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/data/web/monitoring.html +0 -0
  132. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/data/web/monitoring_build.html +0 -0
  133. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/data/web/monitoring_test.html +0 -0
  134. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/data/web/perf.html +0 -0
  135. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/data/web/staging_build.html +0 -0
  136. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/data/web/staging_test.html +0 -0
  137. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/data/web/test.html +0 -0
  138. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/data/web/testsuite.css +0 -0
  139. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/data/web/testsuite.js +0 -0
  140. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/deployment/initialization.py +0 -0
  141. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/deployment/module_generator.py +0 -0
  142. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/monitoring/monitoring_db.py +0 -0
  143. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/reports/__init__.py +0 -0
  144. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/reports/cases/__init__.py +0 -0
  145. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/reports/cases/case.py +0 -0
  146. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/reports/cases/detailed.py +0 -0
  147. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/reports/cases/full.py +0 -0
  148. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/reports/monitoring/__init__.py +0 -0
  149. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/reports/monitoring/report.py +0 -0
  150. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/reports/report.py +0 -0
  151. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/systems/partition.py +0 -0
  152. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/systems/qos.py +0 -0
  153. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/systems/queue_tester.py +0 -0
  154. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/systems/reservation.py +0 -0
  155. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/systems/system.py +0 -0
  156. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/systems/system_manager.py +0 -0
  157. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/terraform/terraform.py +0 -0
  158. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/testing/benchmarks/__init__.py +0 -0
  159. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/testing/benchmarks/instance.py +0 -0
  160. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/testing/benchmarks/test_case.py +0 -0
  161. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/testing/benchmarks/test_orchestrator.py +0 -0
  162. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/testing/cases/__init__.py +0 -0
  163. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/testing/cases/instance.py +0 -0
  164. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/testing/cases/test_case.py +0 -0
  165. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/timers/__init__.py +0 -0
  166. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/timers/timer.py +0 -0
  167. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/utils/arguments.py +0 -0
  168. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/utils/gitlab.py +0 -0
  169. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/utils/lock.py +0 -0
  170. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/utils/log.py +0 -0
  171. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/utils/message.py +0 -0
  172. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/utils/package.py +0 -0
  173. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/utils/utils.py +0 -0
  174. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/version_control/__init__.py +0 -0
  175. {squidient-3.0.2 → squidient-3.0.4}/src/squidient/version_control/git_repository.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: squidient
3
- Version: 3.0.2
3
+ Version: 3.0.4
4
4
  Summary: CI/CD framework for alya
5
5
  Project-URL: Homepage, https://alya.gitlab.bsc.es/alya/ci-cd/squidient
6
6
  Project-URL: Bug Tracker, https://alya.gitlab.bsc.es/alya/ci-cd/squidient/issues
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "squidient"
7
- version = "3.0.2"
7
+ version = "3.0.4"
8
8
  authors = [
9
9
  { name="Damien Dosimont", email="damien.dosimont@gmail.com" },
10
10
  ]
@@ -46,7 +46,6 @@ class BuildDefinition:
46
46
  self._file = ""
47
47
  self._job_config = ""
48
48
  self._platform = ""
49
- self._lock = ""
50
49
  self._runnable = ""
51
50
  self._timeout = ""
52
51
  self._timeoffset = ""
@@ -119,8 +118,6 @@ class BuildDefinition:
119
118
  self._system = build["system"]
120
119
  if self._platform == "" and "platform" in build:
121
120
  self._platform = build["platform"]
122
- if self._lock == "" and "lock" in build:
123
- self._lock = build["lock"]
124
121
  if self._runnable == "" and "runnable" in build:
125
122
  self._runnable = build["runnable"]
126
123
  if self._threads == "" and "threads" in build:
@@ -286,9 +286,14 @@ class BuildExecution(BuildDefinition):
286
286
  self._ssh.scp_send(system=self._system, local=self._report_dir + "/*", remote=self._build_path + "/", server_path=True, critical=True)
287
287
 
288
288
  def launch_job(self):
289
- self._job_id = self._job_manager.launch_job(internal_job_id=self._build_id, path=self._build_path + "/JOB.SB",
290
- system=self._system, platform=self._platform,
291
- server_path=True, key_lock=self._lock, max_jobs=self._max_jobs)
289
+ self._job_id = self._job_manager.launch_job(
290
+ internal_job_id=self._build_id,
291
+ path=self._build_path + "/JOB.SB",
292
+ system=self._system,
293
+ platform=self._platform,
294
+ server_path=True,
295
+ max_jobs=self._max_jobs,
296
+ )
292
297
  return self._job_id
293
298
 
294
299
  def get_job_id(self):
@@ -51,7 +51,6 @@ class BuildOrchestrator:
51
51
  self._pending_builds = {}
52
52
  self._consumed_builds = {}
53
53
  self._unlaunched_builds = {}
54
- self._platform_ready = {}
55
54
  self._ssh = ssh
56
55
  self._job_manager = job
57
56
  self._password = password
@@ -42,7 +42,7 @@ class IgnoredInterrupts(object):
42
42
  for sig in [signal.SIGINT, signal.SIGTERM]:
43
43
  self._old_handlers[sig] = signal.signal(sig, self.handler)
44
44
 
45
- def handler(self, sig, frame):
45
+ def handler(self, sig, _frame):
46
46
  logging.debug('Interrupt signal received. Delaying KeyboardInterrupt.')
47
47
 
48
48
  def __exit__(self, type, value, traceback):
@@ -33,7 +33,7 @@ def read_base_xml(filename):
33
33
  return cobertura
34
34
 
35
35
 
36
- def create_package_file(cobertura, package, destination_path):
36
+ def create_package_file(cobertura, package):
37
37
  filename = "cobertura-{}.xml".format(package.attrib['name'])
38
38
  console.step("Creating package file {}".format(filename))
39
39
  xml_to_write = copy.deepcopy(cobertura)
@@ -132,5 +132,5 @@ class GcovrCodeCoverage(CodeCoverage):
132
132
  current_dir = os.getcwd()
133
133
  os.chdir(xml_report_dir)
134
134
  for package in cobertura_xml.find('packages'):
135
- create_package_file(cobertura_xml, package, xml_report_dir)
135
+ create_package_file(cobertura_xml, package)
136
136
  os.chdir(current_dir)
@@ -25,7 +25,6 @@ import re
25
25
  import threading
26
26
  import time
27
27
 
28
- from ..connection.build_lock import BuildLock
29
28
  from ..definitions import actualize_time, check_jobs_every_normal, max_jobs_staging
30
29
  from ..utils.log import logger
31
30
  from ..utils.message import console
@@ -127,7 +126,6 @@ class Job:
127
126
  self._run_id = run_id
128
127
  self._ssh = ssh
129
128
  self._time = -1
130
- self._build_lock = BuildLock()
131
129
  self._jobs = {}
132
130
  self._jobs_not_actualized = {}
133
131
  self._jobs_launched = {}
@@ -154,16 +152,7 @@ class Job:
154
152
  shutil.rmtree("squeue", ignore_errors=True)
155
153
  os.makedirs("squeue", exist_ok=True)
156
154
 
157
- def launch_job(self, internal_job_id, path, system, platform, server_path=False, key_lock="", asynchronous=False, max_jobs=max_jobs_staging):
158
- dep = ""
159
- if key_lock != "":
160
- if asynchronous:
161
- console.section("Job submission")
162
- console.error("You cannot launch an asynchronous job with a dependency", level=1)
163
- raise RuntimeError
164
- lock_id = self._build_lock.get_lock(key_lock)
165
- if lock_id != -1:
166
- dep = "--dependency=afterany:" + str(lock_id) + " "
155
+ def launch_job(self, internal_job_id, path, system, platform, server_path=False, asynchronous=False, max_jobs=max_jobs_staging):
167
156
  if platform not in self._job_threads[system]:
168
157
  self._input_queues[system][platform] = queue.Queue()
169
158
  self._output_queues[system][platform] = queue.Queue()
@@ -187,7 +176,7 @@ class Job:
187
176
  job = {}
188
177
  job["id"] = internal_job_id
189
178
  job["launched"] = False
190
- job["command"] = "sbatch " + dep + path
179
+ job["command"] = "sbatch " + path
191
180
  job["server_path"] = server_path
192
181
  self._input_queues[system][platform].put(job)
193
182
  self._jobs_not_launched[system][platform][internal_job_id] = job
@@ -195,8 +184,6 @@ class Job:
195
184
  while not self.is_launched(system, platform, internal_job_id):
196
185
  time.sleep(1)
197
186
  job_id = self.get_job_id(system, platform, internal_job_id)
198
- if key_lock != "":
199
- self._build_lock.set_lock(key_lock, job_id)
200
187
  return job_id
201
188
  else:
202
189
  return -1
@@ -22,7 +22,6 @@ test_default_timeout = "00:01:00"
22
22
  test_max_timeout = "00:05:00"
23
23
  merged_max_timeout = "02:00:00"
24
24
  queue_max_timeout = "02:00:00"
25
- max_waiting_time = 2 # 2 hours
26
25
  queue_test_sleep_before_get_launch_time = 30 # seconds
27
26
  test_max_retry = 3
28
27
  report_dir = "reports"
@@ -36,13 +35,10 @@ queue_report_dir = report_dir + "/queues"
36
35
  terraform_dir = "terraform"
37
36
  mpio2txt_bin = "mpio2txt"
38
37
  actualize_time = 60
39
- enable_svn = False
40
38
  max_async_threads = 8
41
39
  max_jobs_staging = 100
42
40
  max_jobs_monitoring = 50
43
- max_jobs_debug = 10
44
41
  check_jobs_every_normal = 30
45
- check_jobs_every_debug = 10
46
42
  config_file = "configuration.json"
47
43
  build_file = "builds/builds.json"
48
44
  default_file = "builds/defaults.json"
@@ -70,6 +66,7 @@ max_advised_builds = 2
70
66
  database_name = {"test": "rooster_test", "production": "rooster"}
71
67
  benchmark_failure_sender = "damien.dosimont@bsc.es"
72
68
  benchmark_failure_copy = ["damien.dosimont@bsc.es"]
69
+ benchmark_notification_failure_log = "log/benchmark_notification_failures.log"
73
70
  benchmark_failure_log_files = [
74
71
  "sbatch.out",
75
72
  "sbatch.err",
@@ -19,10 +19,11 @@
19
19
 
20
20
 
21
21
  import logging
22
+ import os
22
23
 
23
24
  from ..builds.benchmark_build_execution import BenchmarkBuildExecution
24
25
  from ..builds.benchmark_build_orchestrator import BenchmarkBuildOrchestrator
25
- from ..definitions import benchmark_build_report_dir
26
+ from ..definitions import benchmark_build_report_dir, benchmark_notification_failure_log
26
27
  from ..reports.monitoring import MonitoringReport
27
28
  from ..staging.staging import Staging, WorkflowFailure
28
29
  from ..testing.benchmarks.test_orchestrator import BenchmarkTestOrchestrator
@@ -122,6 +123,7 @@ class Monitoring(Staging):
122
123
  return
123
124
  failures = self._test_orchestrator.get_notification_failures()
124
125
  if len(failures) > 0:
126
+ self.write_notification_failure_log(failures)
125
127
  self._report.write_notification_failures(failures)
126
128
 
127
129
  def validate(self):
@@ -130,12 +132,27 @@ class Monitoring(Staging):
130
132
  failures = self._report.get_notification_failures()
131
133
  if len(failures) > 0:
132
134
  console.section("Notification failures")
135
+ self.write_notification_failure_log(failures)
133
136
  for failure in failures:
134
- console.error(failure.get("message", str(failure)), level=1)
137
+ message = failure.get("message", str(failure))
138
+ log_path = failure.get("log", benchmark_notification_failure_log)
139
+ console.error(message + "\nDetails written to " + log_path, level=1)
135
140
  if len(failures) > 0:
136
141
  raise WorkflowFailure("Benchmark notification email could not be sent")
137
142
  super().validate()
138
143
 
144
+ def write_notification_failure_log(self, failures):
145
+ log_dir = os.path.dirname(benchmark_notification_failure_log)
146
+ if log_dir != "":
147
+ os.makedirs(log_dir, exist_ok=True)
148
+ with open(benchmark_notification_failure_log, "w", encoding="utf-8") as log:
149
+ for index, failure in enumerate(failures, start=1):
150
+ failure["log"] = benchmark_notification_failure_log
151
+ log.write("Notification failure " + str(index) + "\n")
152
+ log.write("=" * 80 + "\n")
153
+ log.write(failure.get("details", failure.get("message", str(failure))))
154
+ log.write("\n\n")
155
+
139
156
  def build(self, terraform):
140
157
  with self.timer("monitoring.build"):
141
158
  self._monitoring_db = MonitoringDB(self._config, enable=False)
@@ -25,7 +25,6 @@ class BaseCaseReport:
25
25
  # _____________________________________
26
26
  def __init__(self, case):
27
27
 
28
- self._case = case
29
28
  self._file = case + ".json"
30
29
 
31
30
  self._json = None
@@ -72,7 +72,6 @@ class Staging:
72
72
  self._arguments = arguments
73
73
  self._test_list = arguments.get_test_list()
74
74
  self._test_directories = arguments.get_test_directories()
75
- self._generic_arguments = arguments.get_generic_arg()
76
75
  self._gitlab = arguments.get_gitlab()
77
76
  self._config = open_critical_json(config_file)
78
77
  self._benchmarks = open_critical_json(benchmark_file)
@@ -59,7 +59,6 @@ class Platform(System):
59
59
  self._platform_type = architecture["type"]
60
60
 
61
61
  self._gpus_per_node = 0
62
- self._gpu_sbatch = {}
63
62
  if "gpu" in architecture:
64
63
  self._gpu = architecture["gpu"]
65
64
  if "gpus_per_node" in self._gpu:
@@ -39,12 +39,12 @@ class BenchmarkFailureNotificationError(Exception):
39
39
  "Benchmark failure email could not be sent.\n"
40
40
  "Recipients: " + ", ".join(self.recipients) + "\n"
41
41
  "Subject: " + self.subject + "\n"
42
- "Transport error: " + self.error + "\n"
43
- "\n"
44
- "Mail body:\n"
45
- + self.body
42
+ "Transport error: " + self.error
46
43
  )
47
44
 
45
+ def details(self):
46
+ return self.message() + "\n\nMail body:\n" + self.body
47
+
48
48
  def as_dict(self):
49
49
  return {
50
50
  "recipients": self.recipients,
@@ -52,6 +52,7 @@ class BenchmarkFailureNotificationError(Exception):
52
52
  "body": self.body,
53
53
  "error": self.error,
54
54
  "message": self.message(),
55
+ "details": self.details(),
55
56
  }
56
57
 
57
58
 
@@ -140,7 +141,11 @@ class BenchmarkFailureNotifier:
140
141
  message.set_content(body)
141
142
  sendmail = shutil.which("sendmail")
142
143
  if sendmail is not None:
143
- subprocess.run([sendmail, "-t"], input=message.as_string(), text=True, check=True)
144
+ command = [sendmail]
145
+ if self._from_address is not None:
146
+ command.extend(["-f", self._from_address])
147
+ command.append("-t")
148
+ subprocess.run(command, input=message.as_string(), text=True, check=True)
144
149
  return
145
150
  with smtplib.SMTP("localhost") as smtp:
146
151
  smtp.send_message(message)
@@ -57,7 +57,6 @@ class InstanceMerger:
57
57
  self._job_launched = False
58
58
  self._job_id = 0
59
59
  self._job_submission = {}
60
- self._waiting_job_id = False
61
60
  self._exec_modules = []
62
61
 
63
62
  self._queue = ""
@@ -102,8 +101,6 @@ class InstanceMerger:
102
101
  self.generate_job()
103
102
 
104
103
  def generate_job(self):
105
- gpu = False
106
- gpus = 0
107
104
  tasks = 0
108
105
  self.set_queue()
109
106
  spath = self._server_path + "/"
@@ -33,8 +33,6 @@ from ..utils.message import LiveOutput, console, jump
33
33
  from ..utils.utils import json2js, open_json, save_json
34
34
  from .cases.test_case import TestCase
35
35
 
36
- alya_tests = "alya/tests"
37
-
38
36
 
39
37
  class TestOrchestrator:
40
38
 
@@ -33,7 +33,6 @@ class Watchdog(threading.Thread):
33
33
  def __init__(self, ts_pid, tokens, pipelines, api):
34
34
  threading.Thread.__init__(self)
35
35
  self._ts_pid = ts_pid
36
- self._thread_id = 1
37
36
  self.name = "watchdog"
38
37
  self._pipeline_list = pipelines
39
38
  self._pipelines = {}
@@ -1,32 +0,0 @@
1
- #########################################################################
2
- # #
3
- # This file is part of squidient. #
4
- # #
5
- # squidient is free software: you can redistribute it and/or modify #
6
- # it under the terms of the GNU General Public License as published by #
7
- # the Free Software Foundation, either version 3 of the License, or #
8
- # (at your option) any later version. #
9
- # #
10
- # squidient is distributed in the hope that it will be useful, #
11
- # but WITHOUT ANY WARRANTY; without even the implied warranty of #
12
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
13
- # GNU General Public License for more details. #
14
- # #
15
- # You should have received a copy of the GNU General Public License #
16
- # along with squidient. If not, see <https://www.gnu.org/licenses/>. #
17
- # #
18
- #########################################################################
19
-
20
- class BuildLock:
21
-
22
- def __init__(self):
23
- self._locks = {}
24
-
25
- def get_lock(self, key):
26
- if key in self._locks:
27
- return self._locks[key]
28
- else:
29
- return -1
30
-
31
- def set_lock(self, key, value):
32
- self._locks[key] = value
File without changes
File without changes
File without changes