Working with logs
Filtering, editing, and organising logs after the first import.
Filtering#
| Level | Where | Scope | Effect |
|---|---|---|---|
| Column filter | Events tab | The log | Persisted, and re-runs the modules you have already opened on commit; the rest compute when opened. |
| Board filter | Dashboard filter bar | One board | Scopes every card without touching module caches. |
| Card options | Card inspector | One card | Options the widget or dataset declares. |
Operators are deliberately few: contains, equals, gte, lte, is_null, is_not_null, in. Time ranges apply to the timestamp column.
A committed filter is part of the analysis: a bottleneck ranking after excluding a resource is genuinely a ranking of what remains. Clearing it restores the full view and re-runs the modules again.
Editing#
| Action | How | Effect |
|---|---|---|
| Edit a cell | Events tab → Edit mode → click a cell (Enter commits, Esc cancels) | Rewrites the value in events.parquet and appends to the edit history. |
| Bulk fill | Select rows → Bulk fill | One value across many rows. |
| Rename an activity | Activities tab → Display name | Changes the label across the app without touching the data. |
| Rename a column | Log settings → Source & schema | Sets a display label for a column. |
Every change is recorded in the log's Edit history. Re-running the import from the original discards edits — the source file is the only truth.
Data quality#
The quality view reports per-column completeness, and the events table can be restricted to rows with missing values. Both answer one question: whether a module can run on this log. The module card already names any unmet requirement:
| Reason | Fix |
|---|---|
| Missing required column | Remap the column roles. |
Below min_events / min_cases | Nothing to fix — the module needs more data. |
| Log model mismatch | Use a module that declares your log's model. |
| Optional module missing | Nothing; the card is marked Limited and the module runs with less context. |
Folders#
Folders nest freely; moving one refuses to move it into its own descendant. Deleting a folder cascades to its subfolders and logs, after a confirmation that names the count. The tree supports drag-and-drop reordering and a Move to row action.
The list reads ?q= and ?status= from the URL, so a filtered view is a shareable link.
Watched folders#
A watched folder turns a directory — or an S3 prefix — into an import source.
| Aspect | Behaviour |
|---|---|
| Trigger | A poller compares the source against its ledger every 30 s (60 s in continuous mode). |
| Modes | manual (scan on demand), interval (every N seconds), continuous. |
| Deduplication | watched_folder_files records size plus mtime (local) or ETag (S3), so each file imports once. |
| Source files | Never moved, renamed, or deleted. |
| Mapping | A per-format default mapping is required — there is no wizard for an unattended file. |
The card per folder shows mode, interval, last scan, and a status badge (active, paused, error), with scan, pause/resume, and delete actions. For a local path, the directory must exist inside the API container — bind-mount it.
Log settings#
| Section | Holds |
|---|---|
| General | Display name and description. |
| Column roles | Required and optional roles with confidence hints; remap re-runs the import. |
| Data quality | Completeness per column. |
| Source & schema | Original filename, format, import time, time bounds, per-column labels. |
| Edit history | Every cell edit with its timestamp. |
| Maintenance | Re-run import, delete. |