simstack.core.services package

Submodules

simstack.core.services.base_service module

class simstack.core.services.base_service.BaseService(name: str, resource: Resource, interval: int, shutdown_event: Event = None)[source]

Bases: ABC

A managed periodic service that can be stopped gracefully

abstractmethod async execute()[source]
start()[source]
async stop()[source]
async write_node_event(event: RunnerEventEnum, node_id: ObjectId, message: str = None)[source]
async write_resource_event(event: RunnerEventEnum, message: str = None)[source]
class simstack.core.services.base_service.RestartService(name: str, resource: Resource, interval: int)[source]

Bases: BaseService, ABC

Intermediate abstract class for services that can trigger a runner restart.

async trigger_restart()[source]

Spawns an independent process to kill current PID and start new one

simstack.core.services.file_transfer_service module

class simstack.core.services.file_transfer_service.FileTransferService(resource: Resource, interval: int = 10, max_concurrent: int = 2, shutdown_event: Event | None = None)[source]

Bases: BaseService

Poll the SimStack server for hidden file transfer uploads assigned to this runner.

async execute() None[source]

simstack.core.services.git_restart_service module

class simstack.core.services.git_restart_service.GitRestartService(resource: Resource, interval)[source]

Bases: BaseService

Service that runs an external script to check git/restart the runner

execute()[source]

simstack.core.services.git_uv_update_service module

class simstack.core.services.git_uv_update_service.GitUvUpdateService(resource: Resource, interval)[source]

Bases: RestartService

Advanced service that performs git pull and uv lock upgrades. If changes are detected, it restarts the runner.

async execute()[source]
simstack.core.services.git_uv_update_service.get_file_checksum(filepath: Path) str[source]

Calculate SHA256 checksum of a file

simstack.core.services.node_execution_service module

class simstack.core.services.node_execution_service.NodeExecutionService(resource: Resource, interval: int, max_concurrent: int, shutdown_event: Event | None, detach: bool = True, is_default: bool = False)[source]

Bases: BaseService

async execute() None[source]
async run_node(registry_entry: NodeRegistry) bool[source]

Run a single node by its ID from the database

async simstack.core.services.node_execution_service.run_node_from_registry(registry_entry: NodeRegistry) bool[source]

simstack.core.services.resource_branch_monitor_service module

class simstack.core.services.resource_branch_monitor_service.ResourceBranchMonitorService(resource: Resource, interval: int)[source]

Bases: RestartService

Monitors the ResourceDefinition for the current resource. If the git_branch field changes, it stashes, switches branch, syncs, and restarts.

async execute()[source]

simstack.core.services.runner_cleanup_service module

class simstack.core.services.runner_cleanup_service.RunnerCleanupService(resource: Resource, interval: int = 300)[source]

Bases: BaseService

Service that cleans up old RunnerEvent logs and expired local file cache copies for the current resource.

async execute() None[source]

simstack.core.services.runner_manager module

class simstack.core.services.runner_manager.RunnerManager(resource: Resource, detach: bool = True, no_pull: bool = False, is_default: bool = False, with_file_transfer: bool = True)[source]

Bases: object

async run_nodes_for_resource(polling_interval: int = 5, max_concurrent: int = 10, timeout: int | None = None) None[source]

Orchestrates multiple independent services

async stop_all_services() None[source]

Gracefully stop all registered services

simstack.core.services.runner_status_service module

class simstack.core.services.runner_status_service.RunnerStatusService(resource: Resource, interval)[source]

Bases: BaseService

async execute()[source]

simstack.core.services.slurm_status_service module

class simstack.core.services.slurm_status_service.SlurmStatusService(resource: Resource, interval: int)[source]

Bases: BaseService

async execute() None[source]

simstack.core.services.stop_check_service module

class simstack.core.services.stop_check_service.StopCheckService(resource: Resource, interval: int, shutdown_event: Event)[source]

Bases: BaseService

Service that checks for STOP file and triggers shutdown

async execute()[source]

simstack.core.services.timeout_restart_service module

class simstack.core.services.timeout_restart_service.TimeoutRestartService(resource: Resource, timeout_minutes: int)[source]

Bases: RestartService

Service that restarts the runner after a specified timeout

async execute()[source]

Module contents