squidient 3.0.3__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 (174) hide show
  1. {squidient-3.0.3 → squidient-3.0.4}/PKG-INFO +1 -1
  2. {squidient-3.0.3 → squidient-3.0.4}/pyproject.toml +1 -1
  3. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/definitions.py +1 -0
  4. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/monitoring/monitoring.py +19 -2
  5. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/testing/benchmarks/failure_notifier.py +10 -5
  6. {squidient-3.0.3 → squidient-3.0.4}/.gitignore +0 -0
  7. {squidient-3.0.3 → squidient-3.0.4}/LICENSE.txt +0 -0
  8. {squidient-3.0.3 → squidient-3.0.4}/README.md +0 -0
  9. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/__init__.py +0 -0
  10. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/builds/benchmark_build_execution.py +0 -0
  11. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/builds/benchmark_build_orchestrator.py +0 -0
  12. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/builds/build_definition.py +0 -0
  13. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/builds/build_execution.py +0 -0
  14. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/builds/build_orchestrator.py +0 -0
  15. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/builds/build_presets.py +0 -0
  16. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/cli/__init__.py +0 -0
  17. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/cli/__main__.py +0 -0
  18. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/cli/main.py +0 -0
  19. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/cli/monitoring.py +0 -0
  20. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/cli/staging.py +0 -0
  21. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/code_coverage/code_coverage.py +0 -0
  22. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/code_coverage/gcovr_code_coverage.py +0 -0
  23. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/code_coverage/intel_code_coverage.py +0 -0
  24. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/compare/compare.py +0 -0
  25. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/compare/compare_with_diff_table.py +0 -0
  26. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/compare/methods/absolute.py +0 -0
  27. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/compare/methods/close.py +0 -0
  28. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/compare/methods/diff.py +0 -0
  29. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/compare/methods/l1_norm.py +0 -0
  30. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/compare/methods/l1_relative.py +0 -0
  31. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/compare/methods/l2_norm.py +0 -0
  32. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/compare/methods/l2_relative.py +0 -0
  33. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/compare/methods/linf_norm.py +0 -0
  34. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/compare/methods/linf_relative.py +0 -0
  35. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/compare/methods/power.py +0 -0
  36. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/compare/methods/relative.py +0 -0
  37. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/compare/methods/scalar_tolerance.py +0 -0
  38. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/compare/methods/tolerance.py +0 -0
  39. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/compare/methods/vector_tolerance.py +0 -0
  40. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/compilation/cmake_options.py +0 -0
  41. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/configuration/__init__.py +0 -0
  42. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/configuration/generator.py +0 -0
  43. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/configuration/prompts.py +0 -0
  44. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/configure.py +0 -0
  45. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/connection/job.py +0 -0
  46. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/connection/ssh.py +0 -0
  47. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/connection/ssh_config_checker.py +0 -0
  48. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/data/.squidient-initialized +0 -0
  49. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/data/alya-config/cmake-alamak.json +0 -0
  50. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/data/alya-config/cmake-chemint.json +0 -0
  51. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/data/alya-config/cmake-clang.json +0 -0
  52. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/data/alya-config/cmake-commdom.json +0 -0
  53. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/data/alya-config/cmake-gnu.json +0 -0
  54. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/data/alya-config/cmake-intel.json +0 -0
  55. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/data/alya-config/cmake-mumps.json +0 -0
  56. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/data/alya-config/cmake-nvhpc.json +0 -0
  57. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/data/alya-config/cmake-talp.json +0 -0
  58. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/data/benchmarks/benchmarks.json +0 -0
  59. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/data/builds/builds.json +0 -0
  60. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/data/builds/cc.json +0 -0
  61. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/data/builds/defaults.json +0 -0
  62. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/data/builds/predefined-old.json +0 -0
  63. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/data/builds/predefined.json +0 -0
  64. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/data/configurations/projects.json +0 -0
  65. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/data/configurations/systems.json +0 -0
  66. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/data/configurations/tests.json +0 -0
  67. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/data/email/report.html +0 -0
  68. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/data/icons/big.png +0 -0
  69. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/data/icons/small.png +0 -0
  70. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/data/index.html +0 -0
  71. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/data/terraform/.gitignore +0 -0
  72. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/data/terraform/aws-ec2-t3.small/.gitignore +0 -0
  73. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/data/terraform/aws-ec2-t3.small/t3.small/cloud-init-slurm-fedora.sh +0 -0
  74. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/data/terraform/aws-ec2-t3.small/t3.small/t3.small.tf +0 -0
  75. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/data/terraform/aws-ec2-t3.small/t3.small/terraform.tfvars +0 -0
  76. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/data/terraform/aws-ec2-t3.small-x2/t3.small/.gitignore +0 -0
  77. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/data/terraform/aws-ec2-t3.small-x2/t3.small/cloud-init-slurm-fedora.sh +0 -0
  78. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/data/terraform/aws-ec2-t3.small-x2/t3.small/replace-var.sh +0 -0
  79. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/data/terraform/aws-ec2-t3.small-x2/t3.small/t3.small.tf +0 -0
  80. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/data/terraform/aws-ec2-t3.small-x2/t3.small/terraform.tfvars +0 -0
  81. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/data/terraform/aws-ec2-t3.small-x3/t3.small/.gitignore +0 -0
  82. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/data/terraform/aws-ec2-t3.small-x3/t3.small/cloud-init-slurm-fedora.sh +0 -0
  83. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/data/terraform/aws-ec2-t3.small-x3/t3.small/t3.small.tf +0 -0
  84. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/data/terraform/aws-ec2-t3.small-x3/t3.small/terraform.tfvars +0 -0
  85. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/data/version/version.json +0 -0
  86. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/data/web/btest.html +0 -0
  87. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/data/web/cc-gcovr.html +0 -0
  88. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/data/web/cc-intel.html +0 -0
  89. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/data/web/files.html +0 -0
  90. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/data/web/img/png/canceled.png +0 -0
  91. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/data/web/img/png/created.png +0 -0
  92. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/data/web/img/png/failed.png +0 -0
  93. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/data/web/img/png/failed_black.png +0 -0
  94. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/data/web/img/png/failed_green.png +0 -0
  95. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/data/web/img/png/file_cloud.png +0 -0
  96. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/data/web/img/png/file_config.png +0 -0
  97. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/data/web/img/png/file_ko.png +0 -0
  98. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/data/web/img/png/file_ok.png +0 -0
  99. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/data/web/img/png/skipped.png +0 -0
  100. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/data/web/img/png/squidient_logo.png +0 -0
  101. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/data/web/img/png/success.png +0 -0
  102. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/data/web/img/png/success_black.png +0 -0
  103. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/data/web/img/png/timeout.png +0 -0
  104. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/data/web/img/png/tolerance.png +0 -0
  105. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/data/web/img/png/warning.png +0 -0
  106. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/data/web/img/png/warning_black.png +0 -0
  107. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/data/web/img/png/warning_green.png +0 -0
  108. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/data/web/img/svg/canceled.svg +0 -0
  109. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/data/web/img/svg/created.svg +0 -0
  110. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/data/web/img/svg/failed.svg +0 -0
  111. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/data/web/img/svg/failed_black.svg +0 -0
  112. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/data/web/img/svg/failed_green.svg +0 -0
  113. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/data/web/img/svg/manual.svg +0 -0
  114. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/data/web/img/svg/running.svg +0 -0
  115. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/data/web/img/svg/skipped.svg +0 -0
  116. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/data/web/img/svg/success.svg +0 -0
  117. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/data/web/img/svg/success_black.svg +0 -0
  118. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/data/web/img/svg/warning.svg +0 -0
  119. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/data/web/img/svg/warning_black.svg +0 -0
  120. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/data/web/img/svg/warning_green.svg +0 -0
  121. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/data/web/index.html +0 -0
  122. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/data/web/jquery.dynatable.css +0 -0
  123. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/data/web/jquery.dynatable.js +0 -0
  124. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/data/web/monitoring.html +0 -0
  125. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/data/web/monitoring_build.html +0 -0
  126. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/data/web/monitoring_test.html +0 -0
  127. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/data/web/perf.html +0 -0
  128. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/data/web/staging_build.html +0 -0
  129. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/data/web/staging_test.html +0 -0
  130. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/data/web/test.html +0 -0
  131. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/data/web/testsuite.css +0 -0
  132. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/data/web/testsuite.js +0 -0
  133. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/deployment/initialization.py +0 -0
  134. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/deployment/module_generator.py +0 -0
  135. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/monitoring/monitoring_db.py +0 -0
  136. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/reports/__init__.py +0 -0
  137. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/reports/cases/__init__.py +0 -0
  138. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/reports/cases/base.py +0 -0
  139. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/reports/cases/case.py +0 -0
  140. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/reports/cases/detailed.py +0 -0
  141. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/reports/cases/full.py +0 -0
  142. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/reports/monitoring/__init__.py +0 -0
  143. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/reports/monitoring/report.py +0 -0
  144. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/reports/report.py +0 -0
  145. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/staging/staging.py +0 -0
  146. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/systems/partition.py +0 -0
  147. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/systems/platform.py +0 -0
  148. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/systems/qos.py +0 -0
  149. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/systems/queue_tester.py +0 -0
  150. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/systems/reservation.py +0 -0
  151. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/systems/system.py +0 -0
  152. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/systems/system_manager.py +0 -0
  153. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/terraform/terraform.py +0 -0
  154. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/testing/benchmarks/__init__.py +0 -0
  155. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/testing/benchmarks/instance.py +0 -0
  156. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/testing/benchmarks/test_case.py +0 -0
  157. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/testing/benchmarks/test_orchestrator.py +0 -0
  158. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/testing/cases/__init__.py +0 -0
  159. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/testing/cases/instance.py +0 -0
  160. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/testing/cases/instance_merger.py +0 -0
  161. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/testing/cases/test_case.py +0 -0
  162. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/testing/test_orchestrator.py +0 -0
  163. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/timers/__init__.py +0 -0
  164. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/timers/timer.py +0 -0
  165. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/utils/arguments.py +0 -0
  166. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/utils/gitlab.py +0 -0
  167. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/utils/lock.py +0 -0
  168. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/utils/log.py +0 -0
  169. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/utils/message.py +0 -0
  170. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/utils/package.py +0 -0
  171. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/utils/utils.py +0 -0
  172. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/utils/watchdog.py +0 -0
  173. {squidient-3.0.3 → squidient-3.0.4}/src/squidient/version_control/__init__.py +0 -0
  174. {squidient-3.0.3 → 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.3
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.3"
7
+ version = "3.0.4"
8
8
  authors = [
9
9
  { name="Damien Dosimont", email="damien.dosimont@gmail.com" },
10
10
  ]
@@ -66,6 +66,7 @@ max_advised_builds = 2
66
66
  database_name = {"test": "rooster_test", "production": "rooster"}
67
67
  benchmark_failure_sender = "damien.dosimont@bsc.es"
68
68
  benchmark_failure_copy = ["damien.dosimont@bsc.es"]
69
+ benchmark_notification_failure_log = "log/benchmark_notification_failures.log"
69
70
  benchmark_failure_log_files = [
70
71
  "sbatch.out",
71
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)
@@ -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)
File without changes
File without changes
File without changes