stormlog.derived_fields
Registry-driven derived-field layer for Stormlog telemetry.
Centralises the common investigation formulas (allocator gap, utilisation %,
fragmentation ratio, degraded-collector state) so that diagnose.py,
gap_analysis.py, and future TUI surfaces all use a single, tested source
of truth instead of copy-pasting the same arithmetic.
Usage:
from stormlog.derived_fields import compute_event_fields, enrich_event
fields = compute_event_fields(event)
# fields["allocator_gap_bytes"] always present
# fields["utilization_ratio"] is None when device_total_bytes is unknown
enriched = enrich_event(event)
# {"allocator_allocated_bytes": ..., ..., "allocator_gap_bytes": ..., ...}
Functions
|
Compute row-scoped derived fields from a single telemetry event. |
|
Compute session-scoped rollups across an ordered sequence of events. |
|
Return a flat dict merging raw event fields with derived fields. |
Classes
Computed fields derived from a single telemetry event. |
|
Session-scoped rollups computed across a sequence of events. |
- class stormlog.derived_fields.DerivedFields[source]
Bases:
TypedDictComputed fields derived from a single telemetry event.
allocator_gap_bytesis always present. All other fields are present only when the underlying raw counters are available; their absence is encoded asNonein the returned dict rather than a missing key.- allocator_gap_bytes: int
- utilization_ratio: None | float
- fragmentation_ratio: None | float
- is_degraded_collector: bool
- class stormlog.derived_fields.SessionDerivedFields[source]
Bases:
TypedDictSession-scoped rollups computed across a sequence of events.
- peak_utilization_ratio: None | float
- avg_fragmentation_ratio: None | float
- is_session_interrupted: bool
- stormlog.derived_fields.compute_event_fields(event)[source]
Compute row-scoped derived fields from a single telemetry event.
eventmay be aTelemetryEventV2,TelemetryEventV3, or any object / mapping that exposes the standard allocator counter attributes.allocator_gap_bytesis always present in the returned dict. Fields that require raw counters which may be absent (e.g.device_total_bytes) are returned asNonerather than being omitted.- Parameters:
event (Any) – A telemetry event object or mapping.
- Returns:
A
DerivedFieldsdict.- Return type:
- stormlog.derived_fields.compute_session_fields(events)[source]
Compute session-scoped rollups across an ordered sequence of events.
- Parameters:
events (Sequence[Any]) – Ordered sequence of telemetry event objects or mappings.
- Returns:
peak_utilization_ratio- highest per-event utilization seen; orNoneifdevice_total_byteswas unavailable in every event.avg_fragmentation_ratio- mean fragmentation ratio across events whereallocator_reserved_bytes > 0;Noneif none qualify.is_session_interrupted-Truewhen the last event is not a"stop"event.
- Return type:
A
SessionDerivedFieldsdict with
- stormlog.derived_fields.enrich_event(event)[source]
Return a flat dict merging raw event fields with derived fields.
Derived fields are nested under a
"derived"key so that raw and computed fields never collide.- Parameters:
event (Any) – A telemetry event object or mapping.
- Returns:
{"schema_version": ..., ..., "derived": {"allocator_gap_bytes": ..., ...}}- Return type:
Dict[str, Any]