smlflg's picture
Initial public upload from Projekte/agent-process-dashboard
06357e7 verified
Raw History Blame Contribute Delete
1.35 kB
from __future__ import annotations
import os
import time
from pathlib import Path
from typing import Mapping
from .classifier import classify_all
from .dryrun import build_dry_run
from .models import DashboardSnapshot, ProcessSample
from .procfs import scan_processes
from .risk import assess_groups
from .tree import build_groups, build_nodes
def build_snapshot(
proc_root: str | Path = "/proc",
*,
previous: Mapping[str, ProcessSample] | None = None,
exclude_self: bool = True,
) -> DashboardSnapshot:
exclude_pids = {os.getpid()} if exclude_self else set()
processes = scan_processes(
proc_root,
previous=previous,
current_uid_only=True,
exclude_pids=exclude_pids,
)
classifications = classify_all(processes)
nodes = build_nodes(processes, classifications)
groups = build_groups(nodes)
stats, warnings = assess_groups(groups)
dry_run = build_dry_run(groups)
return DashboardSnapshot(
sample_ts=time.time(),
processes=processes,
classifications=classifications,
nodes=nodes,
groups=groups,
dry_run=dry_run,
stats=stats,
warnings=warnings,
)
def samples_by_key(snapshot: DashboardSnapshot) -> dict[str, ProcessSample]:
return {sample.process_key: sample for sample in snapshot.processes}