diff --git a/antarest/__init__.py b/antarest/__init__.py index d91081051d..29054100d1 100644 --- a/antarest/__init__.py +++ b/antarest/__init__.py @@ -7,9 +7,9 @@ # Standard project metadata -__version__ = "2.16.6" +__version__ = "2.16.7" __author__ = "RTE, Antares Web Team" -__date__ = "2024-03-04" +__date__ = "2024-03-05" # noinspection SpellCheckingInspection __credits__ = "(c) Réseau de Transport de l’Électricité (RTE)" diff --git a/antarest/launcher/service.py b/antarest/launcher/service.py index 3165df48c7..d3a439e17c 100644 --- a/antarest/launcher/service.py +++ b/antarest/launcher/service.py @@ -661,7 +661,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 d93ac70454..fc42446272 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -1,6 +1,14 @@ Antares Web Changelog ===================== +v2.16.7 (2024-03-05) +-------------------- + +### 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/setup.py b/setup.py index 1446416f8d..c3ec3c3060 100644 --- a/setup.py +++ b/setup.py @@ -6,7 +6,7 @@ setup( name="AntaREST", - version="2.16.6", + version="2.16.7", description="Antares Server", long_description=Path("README.md").read_text(encoding="utf-8"), long_description_content_type="text/markdown", diff --git a/sonar-project.properties b/sonar-project.properties index 643d9b727e..972bef9399 100644 --- a/sonar-project.properties +++ b/sonar-project.properties @@ -6,5 +6,5 @@ sonar.exclusions=antarest/gui.py,antarest/main.py sonar.python.coverage.reportPaths=coverage.xml sonar.python.version=3.8 sonar.javascript.lcov.reportPaths=webapp/coverage/lcov.info -sonar.projectVersion=2.16.6 +sonar.projectVersion=2.16.7 sonar.coverage.exclusions=antarest/gui.py,antarest/main.py,antarest/singleton_services.py,antarest/worker/archive_worker_service.py,webapp/**/* \ No newline at end of file diff --git a/tests/integration/test_integration.py b/tests/integration/test_integration.py index c927e576af..8000a80ab3 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", }, diff --git a/webapp/package-lock.json b/webapp/package-lock.json index 48e281133d..2c81f56aa3 100644 --- a/webapp/package-lock.json +++ b/webapp/package-lock.json @@ -1,12 +1,12 @@ { "name": "antares-web", - "version": "2.16.6", + "version": "2.16.7", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "antares-web", - "version": "2.16.6", + "version": "2.16.7", "dependencies": { "@emotion/react": "11.11.1", "@emotion/styled": "11.11.0", diff --git a/webapp/package.json b/webapp/package.json index 4ea77417ac..e21bd5dd7e 100644 --- a/webapp/package.json +++ b/webapp/package.json @@ -1,6 +1,6 @@ { "name": "antares-web", - "version": "2.16.6", + "version": "2.16.7", "private": true, "type": "module", "scripts": {