Source code for punchpipe.control.health

from datetime import datetime

import psutil
from prefect import flow

from punchpipe.control.db import Health
from punchpipe.control.util import get_database_session, load_pipeline_configuration


[docs] @flow def health_monitor(pipeline_config_path: str = None): config = load_pipeline_configuration(pipeline_config_path) now = datetime.now() cpu_usage = psutil.cpu_percent(interval=5) memory_usage = psutil.virtual_memory().used / 1E9 # store in GB memory_percentage = psutil.virtual_memory().percent disk_usage = psutil.disk_usage(config.get("root", "/")).used / 1E9 # store in GB disk_percentage = psutil.disk_usage(config.get("root", "/")).percent num_pids = len(psutil.pids()) with get_database_session() as session: new_health_entry = Health(datetime=now, cpu_usage=cpu_usage, memory_usage=memory_usage, memory_percentage=memory_percentage, disk_usage=disk_usage, disk_percentage=disk_percentage, num_pids=num_pids) session.add(new_health_entry) session.commit()
# TODO add zombie monitor!