squidient 2.7.0__tar.gz → 3.0.0__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 (181) hide show
  1. {squidient-2.7.0 → squidient-3.0.0}/PKG-INFO +1 -1
  2. {squidient-2.7.0 → squidient-3.0.0}/pyproject.toml +3 -3
  3. squidient-2.7.0/src/squidient/builds/benchmarkbuild.py → squidient-3.0.0/src/squidient/builds/benchmark_build_execution.py +7 -10
  4. squidient-2.7.0/src/squidient/builds/benchmarkbuilder.py → squidient-3.0.0/src/squidient/builds/benchmark_build_orchestrator.py +21 -19
  5. squidient-2.7.0/src/squidient/builds/build.py → squidient-3.0.0/src/squidient/builds/build_definition.py +12 -15
  6. squidient-2.7.0/src/squidient/builds/executablebuild.py → squidient-3.0.0/src/squidient/builds/build_execution.py +44 -100
  7. squidient-2.7.0/src/squidient/builds/builder.py → squidient-3.0.0/src/squidient/builds/build_orchestrator.py +92 -88
  8. squidient-2.7.0/src/squidient/builds/predefinedbuild.py → squidient-3.0.0/src/squidient/builds/build_presets.py +20 -25
  9. squidient-3.0.0/src/squidient/cli/__init__.py +1 -0
  10. squidient-3.0.0/src/squidient/cli/__main__.py +7 -0
  11. squidient-2.7.0/src/squidient/cli.py → squidient-3.0.0/src/squidient/cli/main.py +16 -16
  12. squidient-2.7.0/src/squidient/squidientmonitor.py → squidient-3.0.0/src/squidient/cli/monitoring.py +34 -35
  13. squidient-2.7.0/src/squidient/squidient.py → squidient-3.0.0/src/squidient/cli/staging.py +17 -17
  14. squidient-2.7.0/src/squidient/codecoverage/codecoverage.py → squidient-3.0.0/src/squidient/code_coverage/code_coverage.py +18 -19
  15. squidient-2.7.0/src/squidient/codecoverage/gcovrcodecoverage.py → squidient-3.0.0/src/squidient/code_coverage/gcovr_code_coverage.py +9 -9
  16. squidient-2.7.0/src/squidient/codecoverage/intelcodecoverage.py → squidient-3.0.0/src/squidient/code_coverage/intel_code_coverage.py +82 -81
  17. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/compare/compare.py +14 -15
  18. squidient-2.7.0/src/squidient/compare/comparewithdifftable.py → squidient-3.0.0/src/squidient/compare/compare_with_diff_table.py +23 -23
  19. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/compare/methods/absolute.py +6 -7
  20. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/compare/methods/close.py +8 -11
  21. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/compare/methods/diff.py +2 -3
  22. squidient-2.7.0/src/squidient/compare/methods/l1norm.py → squidient-3.0.0/src/squidient/compare/methods/l1_norm.py +6 -5
  23. squidient-2.7.0/src/squidient/compare/methods/l1relative.py → squidient-3.0.0/src/squidient/compare/methods/l1_relative.py +6 -5
  24. squidient-2.7.0/src/squidient/compare/methods/l2norm.py → squidient-3.0.0/src/squidient/compare/methods/l2_norm.py +6 -5
  25. squidient-2.7.0/src/squidient/compare/methods/l2relative.py → squidient-3.0.0/src/squidient/compare/methods/l2_relative.py +6 -5
  26. squidient-2.7.0/src/squidient/compare/methods/linfnorm.py → squidient-3.0.0/src/squidient/compare/methods/linf_norm.py +6 -5
  27. squidient-2.7.0/src/squidient/compare/methods/linfrelative.py → squidient-3.0.0/src/squidient/compare/methods/linf_relative.py +6 -5
  28. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/compare/methods/power.py +11 -11
  29. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/compare/methods/relative.py +6 -7
  30. squidient-2.7.0/src/squidient/compare/methods/scalartolerance.py → squidient-3.0.0/src/squidient/compare/methods/scalar_tolerance.py +16 -19
  31. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/compare/methods/tolerance.py +36 -37
  32. squidient-2.7.0/src/squidient/compare/methods/vectortolerance.py → squidient-3.0.0/src/squidient/compare/methods/vector_tolerance.py +25 -24
  33. squidient-2.7.0/src/squidient/compilation/cmakeoptions.py → squidient-3.0.0/src/squidient/compilation/cmake_options.py +35 -37
  34. squidient-3.0.0/src/squidient/configuration/__init__.py +1 -0
  35. squidient-3.0.0/src/squidient/configuration/generator.py +78 -0
  36. squidient-3.0.0/src/squidient/configuration/prompts.py +51 -0
  37. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/configure.py +138 -205
  38. squidient-2.7.0/src/squidient/connection/buildlock.py → squidient-3.0.0/src/squidient/connection/build_lock.py +0 -7
  39. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/connection/job.py +56 -56
  40. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/connection/ssh.py +54 -55
  41. squidient-2.7.0/src/squidient/connection/sshconfigchecker.py → squidient-3.0.0/src/squidient/connection/ssh_config_checker.py +5 -6
  42. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/web/btest.html +2 -3
  43. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/web/cc-intel.html +2 -3
  44. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/web/files.html +0 -1
  45. squidient-3.0.0/src/squidient/data/web/index.html +156 -0
  46. squidient-3.0.0/src/squidient/data/web/monitoring.html +101 -0
  47. squidient-3.0.0/src/squidient/data/web/monitoring_build.html +113 -0
  48. squidient-3.0.0/src/squidient/data/web/monitoring_test.html +130 -0
  49. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/web/perf.html +2 -3
  50. squidient-3.0.0/src/squidient/data/web/staging_build.html +113 -0
  51. squidient-3.0.0/src/squidient/data/web/staging_test.html +130 -0
  52. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/web/test.html +0 -1
  53. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/definitions.py +2 -2
  54. squidient-2.7.0/src/squidient/init.py → squidient-3.0.0/src/squidient/deployment/initialization.py +5 -5
  55. squidient-2.7.0/src/squidient/deployment/modulegenerator.py → squidient-3.0.0/src/squidient/deployment/module_generator.py +18 -24
  56. squidient-2.7.0/src/squidient/monitor/monitor.py → squidient-3.0.0/src/squidient/monitoring/monitoring.py +104 -95
  57. squidient-2.7.0/src/squidient/monitor/monitordb.py → squidient-3.0.0/src/squidient/monitoring/monitoring_db.py +27 -18
  58. squidient-3.0.0/src/squidient/reports/__init__.py +1 -0
  59. squidient-2.7.0/src/squidient/sqreport/squidientbasereport.py → squidient-3.0.0/src/squidient/reports/cases/base.py +9 -6
  60. squidient-2.7.0/src/squidient/sqreport/squidientcasereport.py → squidient-3.0.0/src/squidient/reports/cases/case.py +8 -10
  61. squidient-2.7.0/src/squidient/sqreport/squidientdetailedreport.py → squidient-3.0.0/src/squidient/reports/cases/detailed.py +26 -24
  62. squidient-2.7.0/src/squidient/sqreport/squidientfullreport.py → squidient-3.0.0/src/squidient/reports/cases/full.py +76 -78
  63. squidient-3.0.0/src/squidient/reports/monitoring/__init__.py +1 -0
  64. squidient-2.7.0/src/squidient/reports/monitorreport.py → squidient-3.0.0/src/squidient/reports/monitoring/report.py +8 -4
  65. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/reports/report.py +3 -6
  66. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/staging/staging.py +190 -137
  67. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/systems/partition.py +1 -3
  68. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/systems/platform.py +41 -45
  69. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/systems/qos.py +2 -3
  70. squidient-2.7.0/src/squidient/systems/queuetester.py → squidient-3.0.0/src/squidient/systems/queue_tester.py +15 -13
  71. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/systems/reservation.py +2 -4
  72. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/systems/system.py +14 -14
  73. squidient-2.7.0/src/squidient/systems/systemmanager.py → squidient-3.0.0/src/squidient/systems/system_manager.py +3 -4
  74. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/terraform/terraform.py +18 -17
  75. squidient-3.0.0/src/squidient/testing/benchmarks/__init__.py +4 -0
  76. squidient-2.7.0/src/squidient/testing/benchmarkfailurenotifier.py → squidient-3.0.0/src/squidient/testing/benchmarks/failure_notifier.py +3 -3
  77. squidient-2.7.0/src/squidient/testing/benchmarkinstance.py → squidient-3.0.0/src/squidient/testing/benchmarks/instance.py +6 -10
  78. squidient-2.7.0/src/squidient/testing/benchmarktest.py → squidient-3.0.0/src/squidient/testing/benchmarks/test_case.py +13 -20
  79. squidient-2.7.0/src/squidient/testing/benchmarktester.py → squidient-3.0.0/src/squidient/testing/benchmarks/test_orchestrator.py +39 -40
  80. squidient-3.0.0/src/squidient/testing/cases/__init__.py +3 -0
  81. {squidient-2.7.0/src/squidient/testing → squidient-3.0.0/src/squidient/testing/cases}/instance.py +106 -91
  82. squidient-2.7.0/src/squidient/testing/instancemerger.py → squidient-3.0.0/src/squidient/testing/cases/instance_merger.py +33 -34
  83. squidient-2.7.0/src/squidient/testing/test.py → squidient-3.0.0/src/squidient/testing/cases/test_case.py +67 -72
  84. squidient-2.7.0/src/squidient/testing/tester.py → squidient-3.0.0/src/squidient/testing/test_orchestrator.py +89 -86
  85. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/timers/timer.py +6 -6
  86. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/utils/arguments.py +1 -4
  87. squidient-3.0.0/src/squidient/utils/gitlab.py +138 -0
  88. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/utils/lock.py +3 -7
  89. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/utils/log.py +1 -1
  90. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/utils/message.py +2 -2
  91. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/utils/package.py +1 -1
  92. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/utils/utils.py +27 -29
  93. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/utils/watchdog.py +13 -11
  94. squidient-3.0.0/src/squidient/version_control/__init__.py +1 -0
  95. squidient-2.7.0/src/squidient/git.py → squidient-3.0.0/src/squidient/version_control/git_repository.py +22 -23
  96. squidient-2.7.0/src/squidient/data/web/bb.html +0 -104
  97. squidient-2.7.0/src/squidient/data/web/benchmarks.html +0 -93
  98. squidient-2.7.0/src/squidient/data/web/btests.html +0 -125
  99. squidient-2.7.0/src/squidient/data/web/builds.html +0 -104
  100. squidient-2.7.0/src/squidient/data/web/index.html +0 -146
  101. squidient-2.7.0/src/squidient/data/web/tests.html +0 -125
  102. {squidient-2.7.0 → squidient-3.0.0}/.gitignore +0 -0
  103. {squidient-2.7.0 → squidient-3.0.0}/LICENSE.txt +0 -0
  104. {squidient-2.7.0 → squidient-3.0.0}/README.md +0 -0
  105. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/__init__.py +0 -0
  106. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/.squidient-initialized +0 -0
  107. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/alya-config/cmake-alamak.json +0 -0
  108. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/alya-config/cmake-chemint.json +0 -0
  109. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/alya-config/cmake-clang.json +0 -0
  110. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/alya-config/cmake-commdom.json +0 -0
  111. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/alya-config/cmake-gnu.json +0 -0
  112. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/alya-config/cmake-intel.json +0 -0
  113. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/alya-config/cmake-mumps.json +0 -0
  114. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/alya-config/cmake-nvhpc.json +0 -0
  115. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/alya-config/cmake-talp.json +0 -0
  116. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/benchmarks/benchmarks.json +0 -0
  117. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/builds/builds.json +0 -0
  118. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/builds/cc.json +0 -0
  119. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/builds/defaults.json +0 -0
  120. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/builds/predefined-old.json +0 -0
  121. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/builds/predefined.json +0 -0
  122. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/configurations/projects.json +0 -0
  123. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/configurations/systems.json +0 -0
  124. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/configurations/tests.json +0 -0
  125. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/email/report.html +0 -0
  126. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/icons/big.png +0 -0
  127. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/icons/small.png +0 -0
  128. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/index.html +0 -0
  129. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/terraform/.gitignore +0 -0
  130. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/terraform/aws-ec2-t3.small/.gitignore +0 -0
  131. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/terraform/aws-ec2-t3.small/t3.small/cloud-init-slurm-fedora.sh +0 -0
  132. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/terraform/aws-ec2-t3.small/t3.small/t3.small.tf +0 -0
  133. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/terraform/aws-ec2-t3.small/t3.small/terraform.tfvars +0 -0
  134. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/terraform/aws-ec2-t3.small-x2/t3.small/.gitignore +0 -0
  135. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/terraform/aws-ec2-t3.small-x2/t3.small/cloud-init-slurm-fedora.sh +0 -0
  136. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/terraform/aws-ec2-t3.small-x2/t3.small/replace-var.sh +0 -0
  137. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/terraform/aws-ec2-t3.small-x2/t3.small/t3.small.tf +0 -0
  138. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/terraform/aws-ec2-t3.small-x2/t3.small/terraform.tfvars +0 -0
  139. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/terraform/aws-ec2-t3.small-x3/t3.small/.gitignore +0 -0
  140. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/terraform/aws-ec2-t3.small-x3/t3.small/cloud-init-slurm-fedora.sh +0 -0
  141. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/terraform/aws-ec2-t3.small-x3/t3.small/t3.small.tf +0 -0
  142. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/terraform/aws-ec2-t3.small-x3/t3.small/terraform.tfvars +0 -0
  143. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/version/version.json +0 -0
  144. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/web/cc-gcovr.html +0 -0
  145. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/web/img/png/canceled.png +0 -0
  146. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/web/img/png/created.png +0 -0
  147. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/web/img/png/failed.png +0 -0
  148. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/web/img/png/failed_black.png +0 -0
  149. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/web/img/png/failed_green.png +0 -0
  150. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/web/img/png/file_cloud.png +0 -0
  151. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/web/img/png/file_config.png +0 -0
  152. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/web/img/png/file_ko.png +0 -0
  153. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/web/img/png/file_ok.png +0 -0
  154. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/web/img/png/skipped.png +0 -0
  155. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/web/img/png/squidient_logo.png +0 -0
  156. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/web/img/png/success.png +0 -0
  157. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/web/img/png/success_black.png +0 -0
  158. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/web/img/png/timeout.png +0 -0
  159. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/web/img/png/tolerance.png +0 -0
  160. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/web/img/png/warning.png +0 -0
  161. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/web/img/png/warning_black.png +0 -0
  162. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/web/img/png/warning_green.png +0 -0
  163. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/web/img/svg/canceled.svg +0 -0
  164. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/web/img/svg/created.svg +0 -0
  165. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/web/img/svg/failed.svg +0 -0
  166. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/web/img/svg/failed_black.svg +0 -0
  167. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/web/img/svg/failed_green.svg +0 -0
  168. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/web/img/svg/manual.svg +0 -0
  169. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/web/img/svg/running.svg +0 -0
  170. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/web/img/svg/skipped.svg +0 -0
  171. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/web/img/svg/success.svg +0 -0
  172. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/web/img/svg/success_black.svg +0 -0
  173. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/web/img/svg/warning.svg +0 -0
  174. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/web/img/svg/warning_black.svg +0 -0
  175. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/web/img/svg/warning_green.svg +0 -0
  176. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/web/jquery.dynatable.css +0 -0
  177. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/web/jquery.dynatable.js +0 -0
  178. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/web/testsuite.css +0 -0
  179. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/web/testsuite.js +0 -0
  180. {squidient-2.7.0/src/squidient/sqreport → squidient-3.0.0/src/squidient/reports/cases}/__init__.py +0 -0
  181. {squidient-2.7.0 → squidient-3.0.0}/src/squidient/timers/__init__.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: squidient
3
- Version: 2.7.0
3
+ Version: 3.0.0
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 = "2.7.0"
7
+ version = "3.0.0"
8
8
  authors = [
9
9
  { name="Damien Dosimont", email="damien.dosimont@gmail.com" },
10
10
  ]
@@ -29,8 +29,8 @@ Homepage = "https://alya.gitlab.bsc.es/alya/ci-cd/squidient"
29
29
 
30
30
  [project.scripts]
31
31
  squidient = "squidient.cli:main"
32
- sqreport = "squidient.sqreport.squidientcasereport:main"
33
- sqdetails = "squidient.sqreport.squidientdetailedreport:main"
32
+ sqcase = "squidient.reports.cases.case:main"
33
+ sqdetails = "squidient.reports.cases.detailed:main"
34
34
 
35
35
  [tool.hatch.build.targets.wheel]
36
36
  packages = ["src/squidient"]
@@ -21,19 +21,17 @@
21
21
 
22
22
  # -*- coding: utf-8 -*-
23
23
 
24
- from .executablebuild import *
25
- from ..utils.log import *
24
+ from .build_execution import BuildExecution
25
+ from ..definitions import max_jobs_monitoring
26
26
 
27
- logger = logging.getLogger(logging_context)
28
27
 
28
+ class BenchmarkBuildExecution(BuildExecution):
29
29
 
30
- class BenchmarkBuild(ExecutableBuild):
31
-
32
- def __init__(self, systemManager, hash, build_id, job, ssh, config, report_directory, db):
33
- super().__init__(systemManager, hash, build_id, job, ssh, config, report_directory)
30
+ def __init__(self, system_manager, run_id, build_id, job, ssh, config, report_directory, db):
31
+ super().__init__(system_manager, run_id, build_id, job, ssh, config, report_directory)
34
32
  self._queue_type = "benchmarks"
35
33
  self._db = db
36
- self._max_jobs = max_jobs_monitor
34
+ self._max_jobs = max_jobs_monitoring
37
35
 
38
36
  def add_to_db(self):
39
37
  db_build = {}
@@ -46,7 +44,7 @@ class BenchmarkBuild(ExecutableBuild):
46
44
  db_build["codeCoverage"] = self._code_coverage
47
45
  db_build["system"] = self._system
48
46
  db_build["platform"] = self._platform
49
- db_build["type"] = self._type
47
+ db_build["type"] = self._build_type
50
48
  db_build["ctest"] = self._ctest
51
49
  db_configuration = self._options.get_configuration()
52
50
  self._db.add_build(name=self._build_id, compiler=self._compiler, version=self._version,
@@ -55,4 +53,3 @@ class BenchmarkBuild(ExecutableBuild):
55
53
  def launch_job(self):
56
54
  self.add_to_db()
57
55
  return super().launch_job()
58
-
@@ -17,21 +17,23 @@
17
17
  # #
18
18
  #########################################################################
19
19
 
20
-
21
-
22
- from .builder import *
23
- from .benchmarkbuild import BenchmarkBuild
20
+ from .build_orchestrator import BuildOrchestrator
21
+ from .benchmark_build_execution import BenchmarkBuildExecution
24
22
  import shutil
25
23
 
24
+ from ..definitions import benchmark_build_report_dir
25
+ from ..utils.message import console
26
+ from ..utils.utils import json2js, save_json
27
+
26
28
 
27
- class BenchmarkBuilder(Builder):
29
+ class BenchmarkBuildOrchestrator(BuildOrchestrator):
28
30
 
29
- def __init__(self, systemManager, hash, job, ssh, config, db, password=""):
30
- super().__init__(systemManager, hash, job, ssh, config, password)
31
+ def __init__(self, system_manager, run_id, job, ssh, config, db, password=""):
32
+ super().__init__(system_manager, run_id, job, ssh, config, password)
31
33
  self._db = db
32
34
 
33
- def set_build_list(self):
34
- self._build_list = self._config["benchmarks"]["builds"]
35
+ def set_requested_build_ids(self):
36
+ self._requested_build_ids = self._config["benchmarks"]["builds"]
35
37
 
36
38
  def set_report_dir(self):
37
39
  self._report_dir = benchmark_build_report_dir
@@ -40,10 +42,10 @@ class BenchmarkBuilder(Builder):
40
42
  shutil.rmtree(benchmark_build_report_dir, ignore_errors=True)
41
43
 
42
44
  def create_build(self, build):
43
- return BenchmarkBuild(systemManager=self._systemManager,
44
- hash=self._hash,
45
+ return BenchmarkBuildExecution(system_manager=self._system_manager,
46
+ run_id=self._run_id,
45
47
  build_id=build,
46
- job=self._job,
48
+ job=self._job_manager,
47
49
  ssh=self._ssh,
48
50
  config=self._config,
49
51
  report_directory=self._report_dir,
@@ -53,10 +55,10 @@ class BenchmarkBuilder(Builder):
53
55
  console.section("Building benchmark build report")
54
56
  report = {}
55
57
  console.step("Building per-build reports")
56
- for b in self._builds:
57
- console.group("Build " + b, level=2)
58
- self._builds[b].build_report()
59
- report[b] = self._builds[b].get_report()
60
- f = self._report_dir+"/benchmark_builds.json"
61
- save_json(report, f)
62
- json2js("benchmark_builds", f)
58
+ for build_id in self._launched_builds:
59
+ console.group("Build " + build_id, level=2)
60
+ self._launched_builds[build_id].build_report()
61
+ report[build_id] = self._launched_builds[build_id].get_report()
62
+ report_file = self._report_dir+"/benchmark_builds.json"
63
+ save_json(report, report_file)
64
+ json2js("benchmark_builds", report_file)
@@ -23,17 +23,14 @@
23
23
 
24
24
  from ..utils.utils import open_critical_json
25
25
  from ..definitions import build_file, default_file
26
- from ..utils.log import *
27
26
 
28
- logger = logging.getLogger(logging_context)
29
-
30
- class Build:
27
+ class BuildDefinition:
31
28
 
32
29
  def __init__(self, build_id):
33
30
 
34
31
  self._build_id = build_id
35
32
 
36
- #These variables propagates
33
+ #These variables propagate
37
34
 
38
35
  self._pre_modules = []
39
36
  self._modules = []
@@ -47,13 +44,13 @@ class Build:
47
44
  self._exclusive_tests = ""
48
45
  self._flex = ""
49
46
  self._file = ""
50
- self._job = ""
47
+ self._job_config = ""
51
48
  self._platform = ""
52
49
  self._lock = ""
53
50
  self._runnable = ""
54
51
  self._timeout = ""
55
52
  self._timeoffset = ""
56
- self._type = ""
53
+ self._build_type = ""
57
54
  self._ctest = ""
58
55
  self._threads = ""
59
56
  self._version = ""
@@ -67,12 +64,12 @@ class Build:
67
64
 
68
65
  #Configure build
69
66
  self._builds = open_critical_json(build_file)
70
- self.fill(build_id)
67
+ self.load_build_definition(build_id)
71
68
 
72
69
  # configure default
73
70
  try:
74
71
  self._alias_default = open_critical_json(default_file)[self._system][self._platform]
75
- except:
72
+ except KeyError:
76
73
  self._alias_default = None
77
74
 
78
75
  if self._timeout == "":
@@ -86,7 +83,7 @@ class Build:
86
83
  if type(self._exclusive_tests) != bool:
87
84
  self._exclusive_tests = False
88
85
 
89
- def fill(self, build_id):
86
+ def load_build_definition(self, build_id):
90
87
  build = self._builds[build_id]
91
88
  if len(self._modules) == 0 and "modules" in build:
92
89
  self._modules = build["modules"]
@@ -116,8 +113,8 @@ class Build:
116
113
  self._file = build["file"]
117
114
  if self._flex == "" and "flex" in build:
118
115
  self._flex = build["flex"]
119
- if self._job == "" and "job" in build:
120
- self._job = build["job"]
116
+ if self._job_config == "" and "job" in build:
117
+ self._job_config = build["job"]
121
118
  if self._system == "" and "system" in build:
122
119
  self._system = build["system"]
123
120
  if self._platform == "" and "platform" in build:
@@ -128,8 +125,8 @@ class Build:
128
125
  self._runnable = build["runnable"]
129
126
  if self._threads == "" and "threads" in build:
130
127
  self._threads = build["threads"]
131
- if self._type == "" and "type" in build:
132
- self._type = build["type"]
128
+ if self._build_type == "" and "type" in build:
129
+ self._build_type = build["type"]
133
130
  if self._ctest == "" and "ctest" in build:
134
131
  self._ctest = build["ctest"]
135
132
  if self._timeout == "" and "timeout" in build:
@@ -149,7 +146,7 @@ class Build:
149
146
  else:
150
147
  self._installable = False
151
148
  if "from" in build:
152
- self.fill(build["from"])
149
+ self.load_build_definition(build["from"])
153
150
 
154
151
 
155
152
  def get_tags(self):
@@ -18,15 +18,22 @@
18
18
  #########################################################################
19
19
 
20
20
 
21
- from .build import Build
21
+ from .build_definition import BuildDefinition
22
22
  # -*- coding: utf-8 -*-
23
23
  import os
24
24
 
25
- from ..compilation.cmakeoptions import *
26
- from ..deployment.modulegenerator import *
27
- from ..systems.queuetester import *
28
-
29
- logger = logging.getLogger(logging_context)
25
+ from ..compilation.cmake_options import CMakeOptions
26
+ from ..definitions import (
27
+ alya_dir,
28
+ cmake_link_dir,
29
+ max_jobs_staging,
30
+ remote_bin_dir,
31
+ remote_build_dir,
32
+ remote_cc_dir,
33
+ )
34
+ from ..deployment.module_generator import ModuleGenerator
35
+ from ..systems.queue_tester import QueueTester
36
+ from ..utils.utils import duration2str, jtitle, read_text_file, save_json
30
37
 
31
38
  time_file = "time.out"
32
39
  env_file = "env.out"
@@ -41,9 +48,9 @@ clean_string = "find . -name 'CMakeCache.txt' -print0 -o -name '*.cmake' -print0
41
48
  "-o -name '*.build' -print0 | xargs -0 rm -fr && "
42
49
 
43
50
 
44
- class ExecutableBuild(Build):
51
+ class BuildExecution(BuildDefinition):
45
52
 
46
- def __init__(self, systemManager, hash, build_id, job, ssh, config, report_directory):
53
+ def __init__(self, system_manager, run_id, build_id, job, ssh, config, report_directory):
47
54
  super().__init__(build_id)
48
55
  self._queue_type = "builds"
49
56
 
@@ -52,36 +59,36 @@ class ExecutableBuild(Build):
52
59
  os.makedirs(self._report_dir, exist_ok=True)
53
60
 
54
61
  #class configuration
55
- self._hash = hash
56
- self._systemManager = systemManager
57
- self._jobm = job
62
+ self._run_id = run_id
63
+ self._system_manager = system_manager
64
+ self._job_manager = job
58
65
  self._ssh = ssh
59
66
  self._config = config
60
67
  self._build_path = remote_build_dir + "/" + build_id
61
68
 
62
69
  #System/platform
63
- self._sys = systemManager.get_platform(self._system, self._platform)
70
+ self._system_platform = system_manager.get_platform(self._system, self._platform)
64
71
 
65
72
  #Merge
66
- self._merge = self._sys.get_merge()
73
+ self._merge = self._system_platform.get_merge()
67
74
 
68
75
  #Server, installation and module directories
69
- install_dir = self._sys.get_application_path()
70
- module_dir = self._sys.get_module_path()
76
+ install_dir = self._system_platform.get_application_path()
77
+ module_dir = self._system_platform.get_module_path()
71
78
  self._install_path = install_dir + "/" + self._alias
72
79
  self._install = self._config["installation"] and self._installable
73
80
  if self._install:
74
81
  self._queue_type = "install"
75
82
  self._module_path = module_dir + "/" + self._alias
76
83
  self._module_dir = module_dir
77
- self._server_path = self._sys.get_path()
84
+ self._server_path = self._system_platform.get_path()
78
85
 
79
- self._sjobexitmod = self._sys.get_sjobexitmod()
86
+ self._sjobexitmod = self._system_platform.get_sjobexitmod()
80
87
 
81
88
  self._queue = ""
82
89
  self._slurm_flag = ""
83
90
  self._exclusive = False
84
- self._account = self._sys.get_account()
91
+ self._account = self._system_platform.get_account()
85
92
 
86
93
  self._options = None
87
94
  self._job_id = ""
@@ -91,96 +98,33 @@ class ExecutableBuild(Build):
91
98
  self._max_jobs = max_jobs_staging
92
99
 
93
100
  def set_queue(self):
94
- queueTester = QueueTester(self._ssh, self._sys, self._hash, self._jobm)
95
- self._queue, self._slurm_flag, self._exclusive = queueTester.which_qos(
101
+ queue_tester = QueueTester(self._ssh, self._system_platform, self._run_id, self._job_manager)
102
+ self._queue, self._slurm_flag, self._exclusive = queue_tester.which_qos(
96
103
  queue_type=self._queue_type,
97
104
  cpus=self._threads,
98
105
  timeout=self._timeout,
99
106
  flex=self._flex)
100
107
 
101
- def fill(self, build_id):
102
- build = self._builds[build_id]
103
- if len(self._modules) == 0 and "modules" in build:
104
- self._modules = build["modules"]
105
- if len(self._env) == 0 and "environment" in build:
106
- self._env = build["environment"]
107
- if len(self._pre_exec) == 0 and "preExec" in build:
108
- self._pre_exec = build["preExec"]
109
- if len(self._pre_modules) == 0 and "preModules" in build:
110
- self._pre_modules = build["preModules"]
111
- if len(self._post_modules) == 0 and "postModules" in build:
112
- self._post_modules = build["postModules"]
113
- if len(self._tags) == 0 and "tags" in build:
114
- self._tags = build["tags"]
115
- if len(self._sbatch) == 0 and "sbatch" in build:
116
- self._sbatch = build["sbatch"]
117
- if self._cc_tool == "" and "cc_tool" in build:
118
- self._cc_tool = build["cc_tool"]
119
- if self._compiler == "" and "compiler" in build:
120
- self._compiler = build["compiler"]
121
- if self._code_coverage == "" and "codeCoverage" in build:
122
- self._code_coverage = build["codeCoverage"]
123
- if self._exclusive_tests == "" and "exclusive" in build:
124
- self._exclusive_tests = build["exclusive"]
125
- if self._configuration == "" and "configuration" in build:
126
- self._configuration = build["configuration"]
127
- if self._file == "" and "file" in build:
128
- self._file = build["file"]
129
- if self._flex == "" and "flex" in build:
130
- self._flex = build["flex"]
131
- if self._job == "" and "job" in build:
132
- self._job = build["job"]
133
- if self._system == "" and "system" in build:
134
- self._system = build["system"]
135
- if self._platform == "" and "platform" in build:
136
- self._platform = build["platform"]
137
- if self._lock == "" and "lock" in build:
138
- self._lock = build["lock"]
139
- if self._runnable == "" and "runnable" in build:
140
- self._runnable = build["runnable"]
141
- if self._threads == "" and "threads" in build:
142
- self._threads = build["threads"]
143
- if self._ctest == "" and "ctest" in build:
144
- self._ctest = build["ctest"]
145
- if self._timeout == "" and "timeout" in build:
146
- self._timeout = build["timeout"]
147
- if self._timeoffset == "" and "timeOffset" in build:
148
- self._timeoffset = build["timeOffset"]
149
- if self._version == "" and "version" in build:
150
- self._version = build["version"]
151
- if self._alias == "":
152
- if "alias" in build:
153
- self._alias = build["alias"]
154
- else:
155
- self._alias = self._build_id
156
- if self._installable == "":
157
- if "installable" in build:
158
- self._installable = build["installable"]
159
- else:
160
- self._installable = False
161
- if "from" in build:
162
- self.fill(build["from"])
163
-
164
108
  def generate_configuration(self):
165
109
  spath = self._server_path + "/"
166
110
  options = CMakeOptions(self._file, self._configuration)
167
111
  if self._link_dir == "":
168
112
  self._link_dir = spath + remote_bin_dir + "/" + self._build_id
169
- mpirun_options = self._sys.get_mpirun_options(self._modules)
170
- options.options("$" + cmake_link_dir, spath + remote_cc_dir + "/" + self._build_id, (spath + "/" + alya_dir).replace("//", "/"), mpirun_options)
113
+ mpirun_options = self._system_platform.get_mpirun_options(self._modules)
114
+ options.render_options("$" + cmake_link_dir, spath + remote_cc_dir + "/" + self._build_id, (spath + "/" + alya_dir).replace("//", "/"), mpirun_options)
171
115
  self._options = options
172
116
 
173
117
  def _resolve_slurm_resources(self):
174
- cpus_per_task = self._sbatch.get("--cpus-per-task", self._sys.get_cpus_per_task())
118
+ cpus_per_task = self._sbatch.get("--cpus-per-task", self._system_platform.get_cpus_per_task())
175
119
  if "--ntasks-per-node" in self._sbatch:
176
120
  return {
177
121
  "--cpus-per-task": cpus_per_task,
178
122
  "--ntasks-per-node": self._sbatch["--ntasks-per-node"],
179
123
  }
180
124
 
181
- tasks_per_node = self._sys.get_tasks_per_node()
125
+ tasks_per_node = self._system_platform.get_tasks_per_node()
182
126
  try:
183
- node_cpus = int(self._sys.get_cpus_per_task()) * int(self._sys.get_tasks_per_node())
127
+ node_cpus = int(self._system_platform.get_cpus_per_task()) * int(self._system_platform.get_tasks_per_node())
184
128
  requested_cpus_per_task = int(cpus_per_task)
185
129
  requested_tasks = max(1, int(self._threads))
186
130
  except (TypeError, ValueError):
@@ -213,7 +157,7 @@ class ExecutableBuild(Build):
213
157
  script.write("#SBATCH -D " + spath + self._build_path + "\n")
214
158
  script.write("#SBATCH --output=" + build_out_file + "\n")
215
159
  script.write("#SBATCH --error=" + build_err_file + "\n")
216
- script.write("#SBATCH --job-name=" + jtitle + self._hash + "\n")
160
+ script.write("#SBATCH --job-name=" + jtitle + self._run_id + "\n")
217
161
  script.write("#SBATCH --cpus-per-task=" + str(slurm_resources["--cpus-per-task"]) + "\n")
218
162
  script.write("#SBATCH --ntasks-per-node=" + str(slurm_resources["--ntasks-per-node"]) + "\n")
219
163
  script.write("#SBATCH --ntasks=" + str(self._threads)+"\n")
@@ -243,8 +187,8 @@ class ExecutableBuild(Build):
243
187
  for post_module in self._post_modules:
244
188
  script.write(post_module + "\n")
245
189
  script.write("\n")
246
- for env in self._env:
247
- script.write(env + "\n")
190
+ for environment_command in self._env:
191
+ script.write(environment_command + "\n")
248
192
  script.write("\n")
249
193
  rm_string = "rm " + spath + remote_bin_dir + "/alya_" + self._build_id + "\n"
250
194
  rm_string += "rm " + spath + remote_bin_dir + "/alya2pos_" + self._build_id + "\n"
@@ -304,8 +248,8 @@ class ExecutableBuild(Build):
304
248
  install_string += "rm -fr " + self._install_path + "\n"
305
249
  install_string += "make install -j" + str(self._threads) + "\n"
306
250
  script.write(install_string)
307
- m = ModuleGenerator(self._alias, self._modules, self._install_path, self._module_path)
308
- script.write(m.getmodule())
251
+ module_generator = ModuleGenerator(self._alias, self._modules, self._install_path, self._module_path)
252
+ script.write(module_generator.generate_module_script())
309
253
  if self._alias == self._alias_default:
310
254
  script.write("cp " + self._module_path + " " + self._module_dir + "/default\n")
311
255
  configuration = open(self._report_dir + "/config.in", 'w')
@@ -342,7 +286,7 @@ class ExecutableBuild(Build):
342
286
  self._ssh.scp_send(system=self._system, local=self._report_dir + "/*", remote=self._build_path + "/", server_path=True, critical=True)
343
287
 
344
288
  def launch_job(self):
345
- self._job_id = self._jobm.launch_job(id=self._build_id, path=self._build_path + "/JOB.SB",
289
+ self._job_id = self._job_manager.launch_job(internal_job_id=self._build_id, path=self._build_path + "/JOB.SB",
346
290
  system=self._system, platform=self._platform,
347
291
  server_path=True, key_lock=self._lock, max_jobs=self._max_jobs)
348
292
  return self._job_id
@@ -351,7 +295,7 @@ class ExecutableBuild(Build):
351
295
  return self._job_id
352
296
 
353
297
  def check_job_status(self):
354
- return self._jobm.check_job(job_id=self._job_id, system=self._system, platform=self._platform)
298
+ return self._job_manager.check_job(job_id=self._job_id, system=self._system, platform=self._platform)
355
299
 
356
300
  def check_build_status(self):
357
301
  status = True
@@ -385,17 +329,17 @@ class ExecutableBuild(Build):
385
329
  server_path=True, system=self._system, platform=self._platform).stdout.strip():
386
330
  return "timeout"
387
331
  try:
388
- t = read_text_file(self._report_dir + "/" + time_file).split("\n")
389
- start = int(t[0])
390
- end = int(t[1])
332
+ time_lines = read_text_file(self._report_dir + "/" + time_file).split("\n")
333
+ start = int(time_lines[0])
334
+ end = int(time_lines[1])
391
335
  return duration2str(start, end)
392
- except:
336
+ except (OSError, ValueError, IndexError):
393
337
  return "timeout"
394
338
 
395
339
  def find_hostname(self):
396
340
  try:
397
341
  return read_text_file(self._report_dir + "/" + env_file).strip().replace("HOSTNAME=", "")
398
- except:
342
+ except OSError:
399
343
  return "unknown"
400
344
 
401
345
  def get_report(self):