31 Commits
Author SHA1 Message Date
mrhid6 ffc6853142 fix(web): metric monitor edit keeps for_sec 0 and allows 0 minutes 2026-09-17 09:25:02 +00:00
mrhid6 4158696388 feat(web): metric monitor rule builder and per-server state table 2026-09-17 09:11:23 +00:00
mrhid6 8bd0d790dd fix: Fixed modal overflow issue
Chart Release / chart (push) Successful in 11s
Server Deploy / deploy (push) Successful in 42s
2026-09-10 12:51:37 +00:00
mrhid6 333d729026 feat: Updated go deps
Chart Release / chart (push) Successful in 19s
Server Deploy / deploy (push) Failing after 1m20s
2026-09-08 14:44:45 +00:00
mrhid6 28f746c7e2 feat: Compact vitals 2026-09-07 08:26:07 +00:00
mrhid6 9d218cb19f feat: Reduce server vitials panel height 2026-09-07 08:14:47 +00:00
mrhid6 049e005873 feat: Updated monitor chart 2026-08-25 15:02:04 +00:00
mrhid6 c440b59b93 feat: Updated affected components on status page incidents 2026-08-25 14:56:50 +00:00
mrhid6 3e4ccc9720 feat: Added more debug logging 2026-08-25 13:26:23 +00:00
mrhid6 ac61015cc0 fix: Fixed incorrect openapi doc 2026-08-13 13:04:44 +00:00
mrhid6 675689a458 feat(audit): server-side paging, search and category filter; one event format
The page rendered a map of eleven event types to labels and seven to colours.
The server emits forty-seven. Everything unmapped fell through to its raw
string, so "Key Assigned" in green sat above "workflow.schedule_updated" in
grey — the same kind of fact in two formats, which made the column look like it
carried a meaning it did not.

Presentation is now derived rather than enumerated. Event types are named
<category>.<action> by every call site, so the category becomes a chip, the
action is humanised, and the tone comes from the verb. A type added to the
server tomorrow gets a sensible label and colour with no second list to update;
the override table holds only the dozen the rule reads badly for. Every row is
one treatment, and colour never carries meaning alone — the sentence beside it
says the same thing in words.

Paging and filtering are server-side, unlike the fleet lists that answer with
everything and slice in the browser. audit_retention_days is a licensed
entitlement measured in months, and this log is read to answer questions about
the past, so a browser filtering the most recent page would report "no results"
for events that exist. GET /api/audit now takes q, category, limit and skip and
answers {events, total} — a short page is not evidence of the end of the log,
which is why the total is counted rather than inferred.

audit_logs had no indexes at all: every read was a collection scan with an
in-memory sort over an append-only collection. Adds (instance_id, created_at)
and warns rather than failing, matching EnsureSecretIndexes.

Two bugs found by running the deriver over all forty-seven real types rather
than eyeballing it: the tone rules matched only past-tense verbs, leaving
auth_provider.delete drawn as neutral beside key.deleted in red; and
"unaccepted" matched "accepted", so withdrawing an acceptance read as the same
caution as granting one.
2026-08-10 15:25:48 +01:00
mrhid6 42f3f3e640 feat(web): typed confirmation for deleting an SSH key
The last of the inline two-step deletes, and the one with the most reach: a
key delete revokes it from every server at once, and for a generated key the
stored private half goes with it. That copy is the only one Vantage holds, so
unlike an uploaded key this cannot be undone by pasting the public half back.

Body names how many servers lose access, and says the private key is destroyed
only when there is one to destroy.

The delete error moves out of the toast and into the dialog, which stays open
on failure, matching the server and monitor deletes.
2026-08-10 15:07:52 +01:00
mrhid6 21238fe707 feat(web): typed confirmations on destructive actions; toasts for API outcomes
Destructive actions were confirmed by a second danger button rendered where
the first one had been, so a double click on Remove deleted the thing without
the operator ever reading which thing it was. Servers, monitors, secret keys
and sign-in providers now go through ConfirmDialog with requireTyped, matching
the secret-group delete that already worked this way. Notification channels and
vulnerability alert rules get an untyped dialog: both are a name and a URL and
are rebuilt in a minute, but neither had any confirmation at all, and both
silently stop alerts that nobody misses until an incident goes unannounced.

Mutations otherwise succeeded in silence, or reported into whatever inline
banner the page happened to own. Two failure modes came of that: a modal that
closed on error left the message nowhere to land, and a save that was rejected
left the old values on screen looking exactly like a save that worked
(/settings had no error path at all). Every mutation now reports through the
existing toast context.

Errors stay inline where the surface that raised them is still on screen and
the message is a correction to make in it: form validation, the cron field,
the tag rows, a rejected licence blob, and the workflow designer's autosave,
which is a standing condition rather than an event. Everything else toasts.

Ad-hoc feedback removed in favour of it: the "Sent!" button labels on the
server maintenance tab, the settings "Saved!" flag, the channel test line, and
the steps page's notice/error pair.
2026-08-10 14:26:02 +01:00
mrhid6 d559cccd44 feat: Updated server page 2026-08-07 16:21:17 +01:00
mrhid6 e28238191d feat: Added vuln filter 2026-08-07 11:58:42 +01:00
mrhid6 0c21765da3 feat: Added pagination 2026-08-07 09:59:50 +01:00
mrhid6 d1769fc886 feat: Updated vuln style 2026-08-06 16:35:04 +01:00
mrhid6 80f0afb28b feat: Updated monitors pages 2026-08-04 12:19:15 +01:00
mrhid6 1f08e90009 feat: Removed email alert settings 2026-08-03 14:40:15 +01:00
mrhid6 1eb98ef962 feat: Better debugging for console 2026-07-31 15:51:26 +01:00
mrhid6 31e0000306 feat: default steps are read only 2026-07-28 13:34:08 +01:00
mrhid6 8626898e5e feat(web): licence banner, settings page and feature gating 2026-07-24 15:25:29 +01:00
mrhid6 b70ccc97d4 refactor(web): rename Organisation to Instance 2026-07-24 14:01:19 +01:00
mrhid6 460b4afb22 fix: FIxed compile error 2026-07-24 11:18:14 +01:00
mrhid6 accf7493e9 feat: Updated login bg 2026-07-24 11:02:44 +01:00
mrhid6 bea545e873 feat: More verbose logging on workflow logs 2026-07-20 17:35:58 +01:00
mrhid6 397016ad68 feat: Updated workflow runs page 2026-07-20 16:00:41 +01:00
domrichardson 73a06227ba fix: Fixed endpoint 2026-07-03 11:56:49 +01:00
domrichardson 7c30d26878 feat: Updated secret group yaml view 2026-07-03 11:33:20 +01:00
domrichardson 19596ff2a3 feat: Secret management 2026-07-03 10:37:43 +01:00
domrichardson c3c16083f7 feat: Audit and settings 2026-06-25 11:30:26 +01:00