4.1 KiB
052 — Allow clearing all params, then re-extract them from already-ingested logs
Summary
There is no bulk "clear params" action. The engine already supports
removing a single param declaration internally —
EngineMessage::RemoveParamDeclaration { name, respond_to }
(src/engine.rs:85-92), handled at src/engine.rs:190-197 by removing
the IndexKey::ParamDeclaration entry — but it is only ever invoked from
reload_engine_declarations (src/api.rs:664-682), a profile-switch
cleanup path that filters out auto-derived params (comment at
src/api.rs:665-668) and removes the rest one at a time. There is no
route exposing this to the user, no persistence-side removal method
(src/profile.rs has record_param_declaration at profile.rs:606 but
nothing to un-record it), and no webapp affordance
(webapp/src/lib/api.ts:283-287 only exposes getParams/declareParam).
The harder half of this request — "logs get re-iterated to extract
params from them" — is not just a rewording of auto_declare_params.
That function runs once, at ingest time, against each incoming line
(src/engine.rs:154, auto_declare_params defined at
src/engine.rs:307-325, backed by extract_pairs in src/logfmt.rs) and
is never replayed. Re-extraction after a clear means running that same
logic again, after the fact, against lines already sitting in the index.
This is structurally possible: raw ingested text is retained as
IndexKey::IngestedLog { sequence, timestamp } -> DataValue::LogLiteral
in the same BTreeMap (src/engine.rs:148-152), occupying the index
range between IndexKey::Start and IndexKey::LogParamSplit
(iterated at src/engine.rs:1166, 1181) — but only for lines that
haven't already been evicted by max_logs/evict_excess_logs
(src/engine.rs:151-156). Lines evicted before a clear+re-extract cannot
regain their params; this bound should be surfaced to the user, not
silently ignored.
Note main.rs:75-96's profile::load_into_engine replay path is not
directly reusable here — it replays declarations into a fresh engine
before ingest starts, whereas this feature must re-run extraction
against logs the engine already holds.
Scope
- Add a bulk "clear params"
EngineMessage(or reuseRemoveParamDeclarationin a loop, mirroringreload_engine_declarations's existing pattern atsrc/api.rs:664-682) that removes all declared params — deciding whether auto-derived and manually-declared params are both cleared or only one category, and stating that choice in the PR (the existingreload_engine_declarationsprecedent excludes auto-derived ones for a reason worth re-reading before copying it here). - Add a persisted-removal counterpart in
src/profile.rs/src/settings.rsso cleared params don't reappear fromsettings.jsonon next load. - After clearing, re-run
auto_declare_paramsagainst every retainedIndexKey::IngestedLogentry still in the index (oldest to newest, to preserve declaration-order semantics), producing a fresh param set from currently-available log text. - Expose this as a single user-facing action (
DELETE /api/paramsor similar insrc/api.rs, plus a button in whatever webapp component hosts the params list) — not a per-param loop the user has to drive from the UI. - Surface to the user (via response body or UI copy) that re-extraction
only covers logs still retained in memory, not lines already evicted by
max_logs.
Acceptance criteria
- Triggering "clear params" removes all param declarations from
GET /api/paramsand they do not reappear after a restart. - Immediately after clearing, params re-appear derived from the log text still held in the engine's index, without requiring new lines to be ingested, verified with a seeded fixture where params are cleared and re-extracted from a fixed set of already-ingested lines.
- If some lines have been evicted before the clear, the re-extracted param set reflects only the retained subset, and this is not reported as an error.
Depends on
None (touches the same RemoveParamDeclaration/reload_engine_declarations
seam used by profile switching).