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.
- {squidient-2.7.0 → squidient-3.0.0}/PKG-INFO +1 -1
- {squidient-2.7.0 → squidient-3.0.0}/pyproject.toml +3 -3
- squidient-2.7.0/src/squidient/builds/benchmarkbuild.py → squidient-3.0.0/src/squidient/builds/benchmark_build_execution.py +7 -10
- squidient-2.7.0/src/squidient/builds/benchmarkbuilder.py → squidient-3.0.0/src/squidient/builds/benchmark_build_orchestrator.py +21 -19
- squidient-2.7.0/src/squidient/builds/build.py → squidient-3.0.0/src/squidient/builds/build_definition.py +12 -15
- squidient-2.7.0/src/squidient/builds/executablebuild.py → squidient-3.0.0/src/squidient/builds/build_execution.py +44 -100
- squidient-2.7.0/src/squidient/builds/builder.py → squidient-3.0.0/src/squidient/builds/build_orchestrator.py +92 -88
- squidient-2.7.0/src/squidient/builds/predefinedbuild.py → squidient-3.0.0/src/squidient/builds/build_presets.py +20 -25
- squidient-3.0.0/src/squidient/cli/__init__.py +1 -0
- squidient-3.0.0/src/squidient/cli/__main__.py +7 -0
- squidient-2.7.0/src/squidient/cli.py → squidient-3.0.0/src/squidient/cli/main.py +16 -16
- squidient-2.7.0/src/squidient/squidientmonitor.py → squidient-3.0.0/src/squidient/cli/monitoring.py +34 -35
- squidient-2.7.0/src/squidient/squidient.py → squidient-3.0.0/src/squidient/cli/staging.py +17 -17
- squidient-2.7.0/src/squidient/codecoverage/codecoverage.py → squidient-3.0.0/src/squidient/code_coverage/code_coverage.py +18 -19
- squidient-2.7.0/src/squidient/codecoverage/gcovrcodecoverage.py → squidient-3.0.0/src/squidient/code_coverage/gcovr_code_coverage.py +9 -9
- squidient-2.7.0/src/squidient/codecoverage/intelcodecoverage.py → squidient-3.0.0/src/squidient/code_coverage/intel_code_coverage.py +82 -81
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/compare/compare.py +14 -15
- squidient-2.7.0/src/squidient/compare/comparewithdifftable.py → squidient-3.0.0/src/squidient/compare/compare_with_diff_table.py +23 -23
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/compare/methods/absolute.py +6 -7
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/compare/methods/close.py +8 -11
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/compare/methods/diff.py +2 -3
- squidient-2.7.0/src/squidient/compare/methods/l1norm.py → squidient-3.0.0/src/squidient/compare/methods/l1_norm.py +6 -5
- squidient-2.7.0/src/squidient/compare/methods/l1relative.py → squidient-3.0.0/src/squidient/compare/methods/l1_relative.py +6 -5
- squidient-2.7.0/src/squidient/compare/methods/l2norm.py → squidient-3.0.0/src/squidient/compare/methods/l2_norm.py +6 -5
- squidient-2.7.0/src/squidient/compare/methods/l2relative.py → squidient-3.0.0/src/squidient/compare/methods/l2_relative.py +6 -5
- squidient-2.7.0/src/squidient/compare/methods/linfnorm.py → squidient-3.0.0/src/squidient/compare/methods/linf_norm.py +6 -5
- squidient-2.7.0/src/squidient/compare/methods/linfrelative.py → squidient-3.0.0/src/squidient/compare/methods/linf_relative.py +6 -5
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/compare/methods/power.py +11 -11
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/compare/methods/relative.py +6 -7
- squidient-2.7.0/src/squidient/compare/methods/scalartolerance.py → squidient-3.0.0/src/squidient/compare/methods/scalar_tolerance.py +16 -19
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/compare/methods/tolerance.py +36 -37
- squidient-2.7.0/src/squidient/compare/methods/vectortolerance.py → squidient-3.0.0/src/squidient/compare/methods/vector_tolerance.py +25 -24
- squidient-2.7.0/src/squidient/compilation/cmakeoptions.py → squidient-3.0.0/src/squidient/compilation/cmake_options.py +35 -37
- squidient-3.0.0/src/squidient/configuration/__init__.py +1 -0
- squidient-3.0.0/src/squidient/configuration/generator.py +78 -0
- squidient-3.0.0/src/squidient/configuration/prompts.py +51 -0
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/configure.py +138 -205
- squidient-2.7.0/src/squidient/connection/buildlock.py → squidient-3.0.0/src/squidient/connection/build_lock.py +0 -7
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/connection/job.py +56 -56
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/connection/ssh.py +54 -55
- squidient-2.7.0/src/squidient/connection/sshconfigchecker.py → squidient-3.0.0/src/squidient/connection/ssh_config_checker.py +5 -6
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/web/btest.html +2 -3
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/web/cc-intel.html +2 -3
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/web/files.html +0 -1
- squidient-3.0.0/src/squidient/data/web/index.html +156 -0
- squidient-3.0.0/src/squidient/data/web/monitoring.html +101 -0
- squidient-3.0.0/src/squidient/data/web/monitoring_build.html +113 -0
- squidient-3.0.0/src/squidient/data/web/monitoring_test.html +130 -0
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/web/perf.html +2 -3
- squidient-3.0.0/src/squidient/data/web/staging_build.html +113 -0
- squidient-3.0.0/src/squidient/data/web/staging_test.html +130 -0
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/web/test.html +0 -1
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/definitions.py +2 -2
- squidient-2.7.0/src/squidient/init.py → squidient-3.0.0/src/squidient/deployment/initialization.py +5 -5
- squidient-2.7.0/src/squidient/deployment/modulegenerator.py → squidient-3.0.0/src/squidient/deployment/module_generator.py +18 -24
- squidient-2.7.0/src/squidient/monitor/monitor.py → squidient-3.0.0/src/squidient/monitoring/monitoring.py +104 -95
- squidient-2.7.0/src/squidient/monitor/monitordb.py → squidient-3.0.0/src/squidient/monitoring/monitoring_db.py +27 -18
- squidient-3.0.0/src/squidient/reports/__init__.py +1 -0
- squidient-2.7.0/src/squidient/sqreport/squidientbasereport.py → squidient-3.0.0/src/squidient/reports/cases/base.py +9 -6
- squidient-2.7.0/src/squidient/sqreport/squidientcasereport.py → squidient-3.0.0/src/squidient/reports/cases/case.py +8 -10
- squidient-2.7.0/src/squidient/sqreport/squidientdetailedreport.py → squidient-3.0.0/src/squidient/reports/cases/detailed.py +26 -24
- squidient-2.7.0/src/squidient/sqreport/squidientfullreport.py → squidient-3.0.0/src/squidient/reports/cases/full.py +76 -78
- squidient-3.0.0/src/squidient/reports/monitoring/__init__.py +1 -0
- squidient-2.7.0/src/squidient/reports/monitorreport.py → squidient-3.0.0/src/squidient/reports/monitoring/report.py +8 -4
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/reports/report.py +3 -6
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/staging/staging.py +190 -137
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/systems/partition.py +1 -3
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/systems/platform.py +41 -45
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/systems/qos.py +2 -3
- squidient-2.7.0/src/squidient/systems/queuetester.py → squidient-3.0.0/src/squidient/systems/queue_tester.py +15 -13
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/systems/reservation.py +2 -4
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/systems/system.py +14 -14
- squidient-2.7.0/src/squidient/systems/systemmanager.py → squidient-3.0.0/src/squidient/systems/system_manager.py +3 -4
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/terraform/terraform.py +18 -17
- squidient-3.0.0/src/squidient/testing/benchmarks/__init__.py +4 -0
- squidient-2.7.0/src/squidient/testing/benchmarkfailurenotifier.py → squidient-3.0.0/src/squidient/testing/benchmarks/failure_notifier.py +3 -3
- squidient-2.7.0/src/squidient/testing/benchmarkinstance.py → squidient-3.0.0/src/squidient/testing/benchmarks/instance.py +6 -10
- squidient-2.7.0/src/squidient/testing/benchmarktest.py → squidient-3.0.0/src/squidient/testing/benchmarks/test_case.py +13 -20
- squidient-2.7.0/src/squidient/testing/benchmarktester.py → squidient-3.0.0/src/squidient/testing/benchmarks/test_orchestrator.py +39 -40
- squidient-3.0.0/src/squidient/testing/cases/__init__.py +3 -0
- {squidient-2.7.0/src/squidient/testing → squidient-3.0.0/src/squidient/testing/cases}/instance.py +106 -91
- squidient-2.7.0/src/squidient/testing/instancemerger.py → squidient-3.0.0/src/squidient/testing/cases/instance_merger.py +33 -34
- squidient-2.7.0/src/squidient/testing/test.py → squidient-3.0.0/src/squidient/testing/cases/test_case.py +67 -72
- squidient-2.7.0/src/squidient/testing/tester.py → squidient-3.0.0/src/squidient/testing/test_orchestrator.py +89 -86
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/timers/timer.py +6 -6
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/utils/arguments.py +1 -4
- squidient-3.0.0/src/squidient/utils/gitlab.py +138 -0
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/utils/lock.py +3 -7
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/utils/log.py +1 -1
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/utils/message.py +2 -2
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/utils/package.py +1 -1
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/utils/utils.py +27 -29
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/utils/watchdog.py +13 -11
- squidient-3.0.0/src/squidient/version_control/__init__.py +1 -0
- squidient-2.7.0/src/squidient/git.py → squidient-3.0.0/src/squidient/version_control/git_repository.py +22 -23
- squidient-2.7.0/src/squidient/data/web/bb.html +0 -104
- squidient-2.7.0/src/squidient/data/web/benchmarks.html +0 -93
- squidient-2.7.0/src/squidient/data/web/btests.html +0 -125
- squidient-2.7.0/src/squidient/data/web/builds.html +0 -104
- squidient-2.7.0/src/squidient/data/web/index.html +0 -146
- squidient-2.7.0/src/squidient/data/web/tests.html +0 -125
- {squidient-2.7.0 → squidient-3.0.0}/.gitignore +0 -0
- {squidient-2.7.0 → squidient-3.0.0}/LICENSE.txt +0 -0
- {squidient-2.7.0 → squidient-3.0.0}/README.md +0 -0
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/__init__.py +0 -0
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/.squidient-initialized +0 -0
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/alya-config/cmake-alamak.json +0 -0
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/alya-config/cmake-chemint.json +0 -0
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/alya-config/cmake-clang.json +0 -0
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/alya-config/cmake-commdom.json +0 -0
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/alya-config/cmake-gnu.json +0 -0
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/alya-config/cmake-intel.json +0 -0
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/alya-config/cmake-mumps.json +0 -0
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/alya-config/cmake-nvhpc.json +0 -0
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/alya-config/cmake-talp.json +0 -0
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/benchmarks/benchmarks.json +0 -0
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/builds/builds.json +0 -0
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/builds/cc.json +0 -0
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/builds/defaults.json +0 -0
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/builds/predefined-old.json +0 -0
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/builds/predefined.json +0 -0
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/configurations/projects.json +0 -0
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/configurations/systems.json +0 -0
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/configurations/tests.json +0 -0
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/email/report.html +0 -0
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/icons/big.png +0 -0
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/icons/small.png +0 -0
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/index.html +0 -0
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/terraform/.gitignore +0 -0
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/terraform/aws-ec2-t3.small/.gitignore +0 -0
- {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
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/terraform/aws-ec2-t3.small/t3.small/t3.small.tf +0 -0
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/terraform/aws-ec2-t3.small/t3.small/terraform.tfvars +0 -0
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/terraform/aws-ec2-t3.small-x2/t3.small/.gitignore +0 -0
- {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
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/terraform/aws-ec2-t3.small-x2/t3.small/replace-var.sh +0 -0
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/terraform/aws-ec2-t3.small-x2/t3.small/t3.small.tf +0 -0
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/terraform/aws-ec2-t3.small-x2/t3.small/terraform.tfvars +0 -0
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/terraform/aws-ec2-t3.small-x3/t3.small/.gitignore +0 -0
- {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
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/terraform/aws-ec2-t3.small-x3/t3.small/t3.small.tf +0 -0
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/terraform/aws-ec2-t3.small-x3/t3.small/terraform.tfvars +0 -0
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/version/version.json +0 -0
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/web/cc-gcovr.html +0 -0
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/web/img/png/canceled.png +0 -0
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/web/img/png/created.png +0 -0
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/web/img/png/failed.png +0 -0
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/web/img/png/failed_black.png +0 -0
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/web/img/png/failed_green.png +0 -0
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/web/img/png/file_cloud.png +0 -0
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/web/img/png/file_config.png +0 -0
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/web/img/png/file_ko.png +0 -0
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/web/img/png/file_ok.png +0 -0
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/web/img/png/skipped.png +0 -0
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/web/img/png/squidient_logo.png +0 -0
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/web/img/png/success.png +0 -0
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/web/img/png/success_black.png +0 -0
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/web/img/png/timeout.png +0 -0
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/web/img/png/tolerance.png +0 -0
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/web/img/png/warning.png +0 -0
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/web/img/png/warning_black.png +0 -0
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/web/img/png/warning_green.png +0 -0
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/web/img/svg/canceled.svg +0 -0
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/web/img/svg/created.svg +0 -0
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/web/img/svg/failed.svg +0 -0
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/web/img/svg/failed_black.svg +0 -0
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/web/img/svg/failed_green.svg +0 -0
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/web/img/svg/manual.svg +0 -0
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/web/img/svg/running.svg +0 -0
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/web/img/svg/skipped.svg +0 -0
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/web/img/svg/success.svg +0 -0
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/web/img/svg/success_black.svg +0 -0
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/web/img/svg/warning.svg +0 -0
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/web/img/svg/warning_black.svg +0 -0
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/web/img/svg/warning_green.svg +0 -0
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/web/jquery.dynatable.css +0 -0
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/web/jquery.dynatable.js +0 -0
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/web/testsuite.css +0 -0
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/data/web/testsuite.js +0 -0
- {squidient-2.7.0/src/squidient/sqreport → squidient-3.0.0/src/squidient/reports/cases}/__init__.py +0 -0
- {squidient-2.7.0 → squidient-3.0.0}/src/squidient/timers/__init__.py +0 -0
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "squidient"
|
|
7
|
-
version = "
|
|
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
|
-
|
|
33
|
-
sqdetails = "squidient.
|
|
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 .
|
|
25
|
-
from ..
|
|
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
|
-
|
|
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 =
|
|
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.
|
|
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
|
|
29
|
+
class BenchmarkBuildOrchestrator(BuildOrchestrator):
|
|
28
30
|
|
|
29
|
-
def __init__(self,
|
|
30
|
-
super().__init__(
|
|
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
|
|
34
|
-
self.
|
|
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
|
|
44
|
-
|
|
45
|
+
return BenchmarkBuildExecution(system_manager=self._system_manager,
|
|
46
|
+
run_id=self._run_id,
|
|
45
47
|
build_id=build,
|
|
46
|
-
job=self.
|
|
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
|
|
57
|
-
console.group("Build " +
|
|
58
|
-
self.
|
|
59
|
-
report[
|
|
60
|
-
|
|
61
|
-
save_json(report,
|
|
62
|
-
json2js("benchmark_builds",
|
|
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
|
-
|
|
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
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
|
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.
|
|
120
|
-
self.
|
|
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.
|
|
132
|
-
self.
|
|
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.
|
|
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 .
|
|
21
|
+
from .build_definition import BuildDefinition
|
|
22
22
|
# -*- coding: utf-8 -*-
|
|
23
23
|
import os
|
|
24
24
|
|
|
25
|
-
from ..compilation.
|
|
26
|
-
from ..
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
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
|
|
51
|
+
class BuildExecution(BuildDefinition):
|
|
45
52
|
|
|
46
|
-
def __init__(self,
|
|
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.
|
|
56
|
-
self.
|
|
57
|
-
self.
|
|
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.
|
|
70
|
+
self._system_platform = system_manager.get_platform(self._system, self._platform)
|
|
64
71
|
|
|
65
72
|
#Merge
|
|
66
|
-
self._merge = self.
|
|
73
|
+
self._merge = self._system_platform.get_merge()
|
|
67
74
|
|
|
68
75
|
#Server, installation and module directories
|
|
69
|
-
install_dir = self.
|
|
70
|
-
module_dir = self.
|
|
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.
|
|
84
|
+
self._server_path = self._system_platform.get_path()
|
|
78
85
|
|
|
79
|
-
self._sjobexitmod = self.
|
|
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.
|
|
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
|
-
|
|
95
|
-
self._queue, self._slurm_flag, self._exclusive =
|
|
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.
|
|
170
|
-
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.
|
|
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.
|
|
125
|
+
tasks_per_node = self._system_platform.get_tasks_per_node()
|
|
182
126
|
try:
|
|
183
|
-
node_cpus = int(self.
|
|
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.
|
|
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
|
|
247
|
-
script.write(
|
|
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
|
-
|
|
308
|
-
script.write(
|
|
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.
|
|
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.
|
|
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
|
-
|
|
389
|
-
start = int(
|
|
390
|
-
end = int(
|
|
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):
|