diff --git a/.github/workflows/commitlint.yml b/.github/workflows/commitlint.yml new file mode 100644 index 0000000000..8e08ce865c --- /dev/null +++ b/.github/workflows/commitlint.yml @@ -0,0 +1,13 @@ +name: Lint Commit Messages +on: [pull_request] + +permissions: + contents: read + pull-requests: read + +jobs: + commitlint: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: wagoid/commitlint-github-action@v5 diff --git a/antarest/launcher/service.py b/antarest/launcher/service.py index 4c4ea9aa15..023296188b 100644 --- a/antarest/launcher/service.py +++ b/antarest/launcher/service.py @@ -657,7 +657,8 @@ def get_load(self) -> LauncherLoadDTO: for job in self.job_result_repository.get_running() ) - cluster_load_approx = min(1.0, local_used_cpus / (os.cpu_count() or 1)) + # The cluster load is approximated by the percentage of used CPUs. + cluster_load_approx = min(100.0, 100 * local_used_cpus / (os.cpu_count() or 1)) return LauncherLoadDTO( allocated_cpu_rate=cluster_load_approx, diff --git a/antarest/launcher/ssh_client.py b/antarest/launcher/ssh_client.py index 7337a308ac..e52cb0072c 100644 --- a/antarest/launcher/ssh_client.py +++ b/antarest/launcher/ssh_client.py @@ -32,7 +32,7 @@ def execute_command(ssh_config: SSHConfigDTO, args: List[str]) -> Any: command = " ".join(args) try: with ssh_client(ssh_config) as client: # type: ignore - stdin, stdout, stderr = client.exec_command(command, timeout=10) + _, stdout, stderr = client.exec_command(command, timeout=10) output = stdout.read().decode("utf-8").strip() error = stderr.read().decode("utf-8").strip() except ( @@ -77,6 +77,15 @@ def parse_cpu_load(sinfo_output: str) -> float: def calculates_slurm_load(ssh_config: SSHConfigDTO, partition: str) -> Tuple[float, float, int]: """ Returns the used/oad of the SLURM cluster or local machine in percentage and the number of queued jobs. + + Args: + ssh_config: SSH configuration to connect to the SLURM server. + partition: Name of the partition to query, or empty string to query all partitions. + + Returns: + - percentage of used CPUs in the cluster, in range [0, 100] + - percentage of CPU load in the cluster, in range [0, 100] + - number of queued jobs """ partition_arg = f"--partition={partition}" if partition else "" diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 2e75ee1611..e137d6bf1c 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -6,6 +6,7 @@ v2.16.7 (2024-03-04) ### Bug Fixes +* **desktop:** correct configuration and launcher load indicator for Antares Web Desktop [`#1969`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/1969) v2.16.6 (2024-03-04) diff --git a/resources/deploy/config.yaml b/resources/deploy/config.yaml index 3eaaf891b6..6f3fdf595f 100644 --- a/resources/deploy/config.yaml +++ b/resources/deploy/config.yaml @@ -48,5 +48,10 @@ debug: false root_path: "api" +server: + worker_threadpool_size: 12 + services: + - watcher + logging: logfile: ./tmp/antarest.log diff --git a/scripts/package_antares_web.sh b/scripts/package_antares_web.sh index 885ec09ccf..21008c15f8 100755 --- a/scripts/package_antares_web.sh +++ b/scripts/package_antares_web.sh @@ -9,7 +9,7 @@ set -e ANTARES_SOLVER_VERSION="8.8" -ANTARES_SOLVER_FULL_VERSION="8.8.2" +ANTARES_SOLVER_FULL_VERSION="8.8.3" ANTARES_SOLVER_VERSION_INT="880" SCRIPT_DIR=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &>/dev/null && pwd -P) @@ -30,6 +30,10 @@ LINK="https://github.com/AntaresSimulatorTeam/Antares_Simulator/releases/downloa echo "INFO: Preparing the Git Commit ID..." git log -1 HEAD --format=%H > ${RESOURCES_DIR}/commit_id +echo "INFO: Remove the previous build if any..." +# Avoid the accumulation of files from previous builds (in development). +rm -rf ${DIST_DIR} + echo "INFO: Generating the Desktop version of the Web Application..." if [[ "$OSTYPE" == "msys"* ]]; then pushd ${PROJECT_DIR} @@ -49,9 +53,13 @@ popd echo "INFO: Creating destination directory '${ANTARES_SOLVER_DIR}'..." mkdir -p "${ANTARES_SOLVER_DIR}" -echo "INFO: Downloading '$ANTARES_SOLVER_ZIPFILE_NAME' in '$ANTARES_SOLVER_DIR'..." -cd "$ANTARES_SOLVER_DIR" || exit -wget $LINK +if [ -f "$ANTARES_SOLVER_ZIPFILE_NAME" ]; then + echo "INFO: Using existing '$ANTARES_SOLVER_ZIPFILE_NAME' in '$ANTARES_SOLVER_DIR'..." +else + echo "INFO: Downloading '$ANTARES_SOLVER_ZIPFILE_NAME' in '$ANTARES_SOLVER_DIR'..." + cd "$ANTARES_SOLVER_DIR" || exit + wget $LINK +fi echo "INFO: Uncompressing '$ANTARES_SOLVER_ZIPFILE_NAME'..." if [[ "$OSTYPE" == "msys"* ]]; then diff --git a/tests/integration/test_integration.py b/tests/integration/test_integration.py index ffa4d4a91d..8065039c92 100644 --- a/tests/integration/test_integration.py +++ b/tests/integration/test_integration.py @@ -299,8 +299,8 @@ def test_main(client: TestClient, admin_access_token: str, study_id: str) -> Non res = client.get("/v1/launcher/load", headers=admin_headers) assert res.status_code == 200, res.json() launcher_load = LauncherLoadDTO.parse_obj(res.json()) - assert launcher_load.allocated_cpu_rate == 1 / (os.cpu_count() or 1) - assert launcher_load.cluster_load_rate == 1 / (os.cpu_count() or 1) + assert launcher_load.allocated_cpu_rate == 100 / (os.cpu_count() or 1) + assert launcher_load.cluster_load_rate == 100 / (os.cpu_count() or 1) assert launcher_load.nb_queued_jobs == 0 assert launcher_load.launcher_status == "SUCCESS" diff --git a/tests/launcher/test_service.py b/tests/launcher/test_service.py index 72f95a782f..9095673070 100644 --- a/tests/launcher/test_service.py +++ b/tests/launcher/test_service.py @@ -937,8 +937,8 @@ def test_save_solver_stats(self, tmp_path: Path) -> None: ), ], { - "allocated_cpu_rate": min(1.0, 8.0 / (os.cpu_count() or 1)), - "cluster_load_rate": min(1.0, 8.0 / (os.cpu_count() or 1)), + "allocated_cpu_rate": min(100.0, 800 / (os.cpu_count() or 1)), + "cluster_load_rate": min(100.0, 800 / (os.cpu_count() or 1)), "nb_queued_jobs": 0, "launcher_status": "SUCCESS", },