Source code for idmtools_platform_slurm.platform_operations.simulation_operations
"""
Here we implement the SlurmPlatform simulation operations.
Copyright 2025, Gates Foundation. All rights reserved.
"""
from dataclasses import dataclass
from typing import TYPE_CHECKING, Any
from idmtools.core import ItemType, EntityStatus
from idmtools_platform_file.platform_operations.simulation_operations import FilePlatformSimulationOperations
from logging import getLogger
logger = getLogger(__name__)
user_logger = getLogger('user')
if TYPE_CHECKING:
from idmtools_platform_slurm.slurm_platform import SlurmPlatform
logger = getLogger(__name__)
[docs]@dataclass
class SlurmPlatformSimulationOperations(FilePlatformSimulationOperations):
platform: 'SlurmPlatform' # noqa: F821
[docs] def platform_cancel(self, sim_id: str, force: bool = False) -> Any:
"""
Cancel platform simulation's slurm job.
Args:
sim_id: simulation id
force: bool, True/False
Returns:
Any
"""
sim = self.platform.get_item(sim_id, ItemType.SIMULATION, raw=False)
if force or sim.status == EntityStatus.RUNNING:
logger.debug(f"cancel slurm job for simulation: {sim_id}...")
job_id = self.platform.get_job_id(sim_id, ItemType.SIMULATION)
if job_id is None:
logger.debug(f"Slurm job for simulation: {sim_id} is not available!")
return
else:
result = self.platform._op_client.cancel_job(job_id)
user_logger.info(f"Cancel Simulation: {sim_id}: {result}")
return result
else:
user_logger.info(f"Simulation {sim_id} is not running, no cancel needed...")