---
title: prefactor_core.monitoring package
editUrl: true
head: []
template: doc
sidebar:
  hidden: false
  attrs: {}
pagefind: true
draft: false
---

# prefactor_core.monitoring package

### *class* prefactor_core.monitoring.TerminationMonitor(fetch_instance: Callable, poll_interval: float = 30.0)

Bases: `object`

Monitors an agent instance for termination.

Thread-safety note: detect_termination and get_termination_event().is_set()
are safe to call from sync worker threads — they only read/write a bool under
the GIL (asyncio.Event._value is a plain bool).

#### destroy() → None

Permanently shut down the monitor (no further events will fire).

#### detect_termination(reason: str | None) → None

Signal that the instance has been terminated.

No-op if already terminated, destroyed, or fenced (post-reset stale call).

#### get_termination_event() → Event

#### reset() → None

Prepare monitor for the next agent run.

- Creates a fresh (unset) event
- Clears the termination reason
- Cancels any in-flight poll
- Sets fence so stale callbacks from the dying run are ignored
- Increments generation so stale polls self-discard

#### subscribe(callback: Callable[[], None]) → Callable[[], None]

Register a callback invoked on termination. Returns an unsubscribe fn.

#### sync(instance_id: str | None) → None

Update the tracked instance ID and start/stop the fallback poll.

Idempotent: calling with the same non-None ID when a poll is already
running does not restart it (preserving the sleep interval).

#### *property* termination_reason *: str | None*

## Submodules

* [prefactor_core.monitoring.termination_monitor module](prefactor_core.monitoring.termination_monitor.md)
  * [`TerminationMonitor`](prefactor_core.monitoring.termination_monitor.md#prefactor_core.monitoring.termination_monitor.TerminationMonitor)
    * [`TerminationMonitor.destroy()`](prefactor_core.monitoring.termination_monitor.md#prefactor_core.monitoring.termination_monitor.TerminationMonitor.destroy)
    * [`TerminationMonitor.detect_termination()`](prefactor_core.monitoring.termination_monitor.md#prefactor_core.monitoring.termination_monitor.TerminationMonitor.detect_termination)
    * [`TerminationMonitor.get_termination_event()`](prefactor_core.monitoring.termination_monitor.md#prefactor_core.monitoring.termination_monitor.TerminationMonitor.get_termination_event)
    * [`TerminationMonitor.reset()`](prefactor_core.monitoring.termination_monitor.md#prefactor_core.monitoring.termination_monitor.TerminationMonitor.reset)
    * [`TerminationMonitor.subscribe()`](prefactor_core.monitoring.termination_monitor.md#prefactor_core.monitoring.termination_monitor.TerminationMonitor.subscribe)
    * [`TerminationMonitor.sync()`](prefactor_core.monitoring.termination_monitor.md#prefactor_core.monitoring.termination_monitor.TerminationMonitor.sync)
    * [`TerminationMonitor.termination_reason`](prefactor_core.monitoring.termination_monitor.md#prefactor_core.monitoring.termination_monitor.TerminationMonitor.termination_reason)