Commit graph

2,039 commits

Author SHA1 Message Date
5115ed1993 web: replace Prometheus metrics copy button with explanatory modal
The previous click-to-copy behavior wasn't obvious to users. Show the
URL in a modal with an explicit copy button and a brief scrape_configs
example so users understand what the endpoint is for.
2026-05-24 17:25:34 +08:00
0a120a6d97 web: reset checker state on navigation to avoid stale enabled/options
When switching between checkers via the sidebar, plan.enabled retained
the previous checker's values because the guard condition prevented
re-initialization. Reset all derived state eagerly on checkerId change
and always repopulate plan.enabled from fresh status.
2026-05-24 17:25:34 +08:00
3eca2f3800 web: redesign CheckerScheduleCard with autosave and improved UX
- Move enable/disable toggle to card header (inverted to "Enable scheduling")
- Replace Save button with debounced autosave (700ms) with inline status indicator
- Show interval controls only when enabled; paused hint when disabled
- Remove obsolete no-schedule-yet alert and save button translation keys
2026-05-24 17:25:34 +08:00
31ecf89624 web: mask secret field placeholders when hidden
The HTML placeholder attribute is rendered in plaintext even on
type="password" inputs, so an inherited secret value injected as a
placeholder was visible without toggling the eye button. Replace the
placeholder with bullets of the same length while the secret is hidden, and
reveal the real value only when the user explicitly toggles visibility.
2026-05-24 17:25:34 +08:00
f8c6eb8a88 web: hide rules behind advanced options and show rule descriptions
Rules are now collapsed under the Advanced options toggle instead of
being always visible, and each rule's description is displayed as
helper text below the checkbox when available.
2026-05-24 17:25:34 +08:00
b18c9dc918 web: exclude auto-fill positional from current-scope split
The GetCheckerOptions controller appends a synthetic positional carrying
resolved auto-fill values (consumed by RunCheckModal). splitPositionalOptions
was treating that last entry as the current scope, pushing actual stored
options into inheritedValues — they then showed as placeholders, broke
<select> value matching, and were sent as nil overrides on save. Callers now
pass the auto-fill key set so the synthetic positional is filtered out before
splitting.
2026-05-24 17:25:34 +08:00
3ae7366b00 checker: add plan-level disable toggle to pause scheduling
Adds an explicit Disabled field on CheckPlan so users can pause a
checker's automatic execution without clearing per-rule state. The
scheduler skips Disabled plans alongside fully-disabled ones, and the
schedule card exposes a switch bound through the existing save path.
2026-05-24 17:25:34 +08:00
10c10bc846 web: treat checker All toggle as on when any rule is enabled
Switch the bulk toggle from every-enabled to some-enabled so the
"All" switch reflects an OR across rules: on when at least one is
active, off only when all are disabled.
2026-05-24 17:25:34 +08:00
d8f542a829 web: show distinct toast when toggling checker rules enabled/disabled
Rule toggle switches now call a dedicated handleSavePlan() wrapper with
"rules-updated"/"rules-update-failed" messages, separate from the schedule
card's "Schedule saved" toast. CheckerScheduleCard.save() is split into a
raw export (no toasts) and an internal handleSave() used by its own button.
2026-05-24 17:25:34 +08:00
6983e097ba web: move save toast feedback into checker card/panel components
Each component now owns its success/error toast UX via a handleSave()
wrapper, removing duplicate toast logic from parent saveOptions functions.
2026-05-24 17:25:34 +08:00
3c03bb1306 checker: surface per-rule precheck failures on scoped status
The SDK's new POST /definition returns per-rule precheck errors for the
current options. happyDomain now calls it (or the in-process equivalent
when no remote endpoint is configured) while building each
CheckerStatus, exposes the result as CheckerStatus.PrecheckFailures,
and the rules card in the UI disables the toggle and shows the reason
for any rule whose prerequisites are unmet.
2026-05-24 17:25:34 +08:00
d828aff11d api-admin: add route to create auth account for an existing user
Adds POST /users/:uid/new_auth so admins can provision a UserAuth for an
existing User without retyping the email; a fresh password is generated
server-side and returned in the response.
2026-05-24 17:25:34 +08:00
004f09f07b checker: forward EnabledRules to Collect and gate the observation cache
The engine now builds the rule-enable map up front, attaches it to the
ctx via sdk.WithEnabledRules so remote providers can skip optional work
for disabled rules, and fingerprints it as ObservationCacheEntry.
EnabledRulesHash. ObservationContext compares that hash against the
current execution's and bypasses the freshness window on mismatch, so a
re-enabled rule never reuses observations collected while it was off.
HTTPObservationProvider forwards the map onto ExternalCollectRequest so
out-of-process checkers see it on /collect.
2026-05-24 17:25:34 +08:00
7cfc0ff7e0 web: Display rules page when no observations exists 2026-05-24 17:25:34 +08:00
0d0e220c06 web: use ClassValue from svelte/elements for class props
Replace class?: string with class?: ClassValue across Svelte components,
adopting the idiomatic Svelte 5 array syntax (class={["base", className]})
instead of string interpolation for combining static and dynamic classes.
2026-05-24 17:25:34 +08:00
98ceb57175 web: Improve sidebar in domain/services/checks 2026-05-24 17:25:34 +08:00
7cb67c452f web: Fix sidebar button hell 2026-05-24 17:25:34 +08:00
056ceb1778 checkers: poll execution status while running instead of fetching empty data
When opening an execution detail page while the execution is still
pending or running, defer fetching observations/results/metrics and
poll the execution status every 3s until it reaches a terminal state.
The loading view shows a "Running" label in the meantime.
2026-05-24 17:25:34 +08:00
ff6dbc1f7a checkers: prefer HTML report over metrics as default view
HTML reports typically provide a richer summary than raw metrics, so
when both are available we open the HTML tab first.
2026-05-24 17:25:34 +08:00
20de284c25 checkers: default to rules view when execution failed
Surfaces error details immediately instead of opening metrics or HTML
report tabs that may be empty or misleading for failed runs.
2026-05-24 17:25:34 +08:00
cc2b75ea6e notifier: show service FQDN in email subject instead of zone domain
When a check targets a specific service, resolve its subdomain from the
current zone and display the full hostname (e.g. www.example.com) in
the email subject rather than the bare zone domain (example.com).
2026-05-24 17:25:34 +08:00
d2bf3af9b0 notifier: improve email subject with checker ID and transition direction
Subject now reads "[happyDomain] example.com (dns-check) degraded: WARNING"
so recipients can triage by checker and direction without opening the email.
2026-05-24 17:25:34 +08:00
5ab69f3888 Add a local resolver useful for some testers + permit to deploy without checker build 2026-05-24 17:25:34 +08:00
075448ef67 web: silence isAuthUser errors on settings page for OIDC users 2026-05-24 17:25:34 +08:00
f6699dba1d mailer: Ensure trailing whitespace needed for signature is not kept 2026-05-24 17:25:34 +08:00
347687442e mailer: fix closure capture bug causing text/plain to render HTML template
Both writer closures captured `t` by reference; reassigning `t` to the
HTML template before either closure executed made the text/plain part
render the HTML template. Also copy tplData into htmlData before setting
the HTML Content, preventing shared-map mutation between the two writers.
2026-05-24 17:25:34 +08:00
1c1c38346f backup: include observation snapshots in backup/restore
Snapshots were silently omitted from the backup export and never
restored, causing GetSnapshot lookups to fail after a restore.

Add ObservationSnapshots to the Backup model, wire ListAllSnapshots in
Backup() and RestoreSnapshot (new method that preserves the existing ID,
unlike CreateSnapshot) in Restore(). The observation cache is not
serialised — it is rebuilt from the restored snapshots by keeping the
most-recent snapshot per (target, key) pair.
2026-05-24 17:25:34 +08:00
ed80de9e71 web: Prioritize HTML report view over metrics as default 2026-05-24 17:25:34 +08:00
6cf60bf17f web: sort checker list alphabetically in sidebar 2026-05-24 17:25:34 +08:00
763e607722 fix(deps): update module golang.org/x/crypto to v0.52.0
All checks were successful
continuous-integration/drone/push Build is passing
2026-05-22 01:10:35 +00:00
acc2a60f62 fix(deps): update module git.happydns.org/checker-happydeliver to v0.3.0
Some checks failed
continuous-integration/drone/push Build is failing
2026-05-21 11:10:20 +00:00
3b833b856d fix(deps): update module git.happydns.org/checker-blacklist to v0.4.0
All checks were successful
continuous-integration/drone/push Build is passing
2026-05-20 07:10:21 +00:00
d2f39e52f8 fix(deps): update module git.happydns.org/checker-blacklist to v0.3.0
All checks were successful
continuous-integration/drone/push Build is passing
2026-05-19 16:13:15 +00:00
a194d2d33f fix(deps): update module git.happydns.org/checker-dnssec to v0.1.1
All checks were successful
continuous-integration/drone/push Build is passing
2026-05-19 15:10:15 +00:00
cf76fd8ef7 fix(deps): update module git.happydns.org/checker-srv to v0.2.0
All checks were successful
continuous-integration/drone/push Build is passing
2026-05-18 06:13:30 +00:00
9eae157e8b fix(deps): update module git.happydns.org/checker-ping to v0.2.0
All checks were successful
continuous-integration/drone/push Build is passing
2026-05-18 05:13:29 +00:00
bd5a9fec13 fix(deps): update module git.happydns.org/checker-email-keys to v0.3.0
All checks were successful
continuous-integration/drone/push Build is passing
2026-05-18 04:10:38 +00:00
fdc375bad4 chore(deps): lock file maintenance
All checks were successful
continuous-integration/drone/push Build is passing
2026-05-18 00:12:18 +00:00
3cbd7ca0ab fix(deps): update module git.happydns.org/checker-delegation to v0.2.0
All checks were successful
continuous-integration/drone/push Build is passing
2026-05-16 18:13:49 +00:00
e65c53c6dc fix(deps): update module git.happydns.org/checker-dangling to v0.2.0
All checks were successful
continuous-integration/drone/push Build is passing
2026-05-16 17:13:25 +00:00
6a38fc64b1 fix(deps): update module git.happydns.org/checker-authoritative-consistency to v0.2.0
All checks were successful
continuous-integration/drone/push Build is passing
2026-05-16 16:13:26 +00:00
802eaa4534 fix(deps): update module git.happydns.org/checker-alias to v0.3.0
All checks were successful
continuous-integration/drone/push Build is passing
2026-05-16 15:10:24 +00:00
3f3f47c49a fix(deps): update module git.happydns.org/checker-blacklist to v0.2.0
All checks were successful
continuous-integration/drone/push Build is passing
2026-05-16 06:10:24 +00:00
a729d4f784 fix(deps): update module git.happydns.org/checker-caa to v0.2.2
All checks were successful
continuous-integration/drone/push Build is passing
2026-05-15 15:10:20 +00:00
8127d9e99a fix(deps): update module git.happydns.org/checker-ssh to v0.2.0
All checks were successful
continuous-integration/drone/push Build is passing
2026-05-15 12:13:26 +00:00
50290338de fix(deps): update module git.happydns.org/checker-caa to v0.2.1
All checks were successful
continuous-integration/drone/push Build is passing
2026-05-15 11:10:20 +00:00
a5f3338c14 fix(deps): update module git.happydns.org/checker-stun-turn to v0.2.0
All checks were successful
continuous-integration/drone/push Build is passing
2026-05-14 18:13:30 +00:00
b9c6dbf4c7 fix(deps): update module git.happydns.org/checker-http to v0.2.0
All checks were successful
continuous-integration/drone/push Build is passing
2026-05-14 17:13:49 +00:00
a57033d1cf fix(deps): update module git.happydns.org/checker-happydeliver to v0.2.0
All checks were successful
continuous-integration/drone/push Build is passing
2026-05-14 16:13:29 +00:00
c32d6efada fix(deps): update module git.happydns.org/checker-email-autoconfig to v0.3.0
All checks were successful
continuous-integration/drone/push Build is passing
2026-05-14 15:13:33 +00:00