Commit Graph

750 Commits

Author SHA1 Message Date
Raj Nandan Sharma bbc85deea7 fix(ui): wrap affected-monitor badges inside event cards
Maintenance and incident cards rendered affected monitors in a
non-wrapping flex row; with many monitors the badges overflowed the
card (maintenance) or hid behind a horizontal scrollbar (incident).
Badge text was also nowrap, so a single long monitor name could still
bleed past the card edge on narrow viewports.

Apply one rule to both components: badges wrap within the box, and
badge text itself wraps when a name exceeds the row width.

Fixes #794

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-18 23:01:09 +05:30
Raj Nandan Sharma a937727d62 Merge pull request #789 from 123FLO321/feat/test-setup
test: add Vitest projects, CI workflow, and new frontend/backend test suites
2026-07-18 22:36:54 +05:30
Ahmet Deniz VARLI 65e346be6d Update Turkish translations for various terms 2026-07-17 06:59:41 +03:00
Florian Kostenzer 3fc1d750fd test: use extends: true for Vitest projects, guard clipboard spy target 2026-07-14 06:21:40 +02:00
Florian Kostenzer ae1586cde7 test: pin test timezone to UTC, document test commands 2026-07-13 23:31:44 +02:00
Florian Kostenzer 2dc46ab007 test: add StatusBarCalendar browser-mode component test 2026-07-13 23:02:11 +02:00
Florian Kostenzer e8008671d9 test: add Vitest browser-mode client project with CopyButton test 2026-07-13 22:52:18 +02:00
Florian Kostenzer 048518f2a8 test: cover tool.ts validation and string helpers 2026-07-13 22:29:55 +02:00
Florian Kostenzer 180c963b67 test: cover tool.ts uptime math (ParseUptime, formulas, UptimeCalculator) 2026-07-13 22:24:26 +02:00
Florian Kostenzer fca7624252 test: add Vitest server project with tool.ts timestamp tests 2026-07-13 22:18:03 +02:00
Raj Nandan Sharma fd1f21cad4 Create changelog for version 4.1.2 with new features, improvements, and bug fixes 2026-07-13 11:00:40 +05:30
Raj Nandan Sharma 6c47ba4d9a Merge pull request #780 from garadar/feature-follow-redirects
Handle follow rediretc or not
2026-07-13 10:53:06 +05:30
Logesh K 7c297fce41 Refactor chartId to use $derived for reactive updates 2026-07-12 19:02:35 +05:30
lokiee0 4e593ec86d Guard favicon resolution when favicon is undefined 2026-07-11 12:34:24 +05:30
lokiee0 0f171fb8e6 Fix favicon resolution for KENER_BASE_PATH 2026-07-11 02:24:07 +05:30
alberta 86490909ec fixe max and step value 2026-07-10 11:46:37 +02:00
alberta 329cbccf75 Handle follow rediretc or not 2026-07-09 16:09:05 +02:00
Phi ND 6292fe05ae Fix Vietnamese translation for Unknown impact 2026-07-09 15:20:38 +07:00
Phi Nguyen 88c6d3f76e Update src/lib/locales/vi.json
Agreed. ĐANG XÁC MINH is closer to “verifying/confirming” and can imply that the cause is already being checked. In this incident-management context, INVESTIGATING refers to the earlier phase where the team is still looking into the issue, so ĐANG ĐIỀU TRA is more accurate and clearer for Vietnamese users.

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
2026-07-09 15:12:35 +07:00
Phi ND 70d4578a87 fix: Vietnamese translation 2026-07-09 15:03:34 +07:00
Raj Nandan Sharma 7c35d0ce66 Merge branch 'main' into fix/774 2026-07-07 23:05:57 +05:30
Raj Nandan Sharma e7a5b1df39 fix: address review comments on incident comment notifications
- Import GetAllSiteData directly from siteDataController instead of the
  controller barrel, which re-exports incidentController and creates a
  circular import (risk of partially-initialized modules at runtime).
- Pass a stable per-comment deduplication id to subscriberQueue.push so a
  retried/double push notifies once; without it the queue falls back to a
  Date.now()-suffixed id that never deduplicates.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-07 22:53:58 +05:30
TTurletti 2d330b82de fix: pass defaultMode to ModeWatcher so site theme is respected on first visit 2026-07-06 13:42:53 +02:00
Raj Nandan Sharma f2f58e6b87 fix: notify subscribers when incident comments are posted
Manually created/updated incidents never reached the subscriber
notification workflow (#774): only alertingQueue pushed to
subscriberQueue, so dashboard and API incidents stayed silent.

Make AddIncidentComment the single notification choke point: posting a
comment on an INCIDENT-type incident notifies "incidents" subscribers,
regardless of source (alert, dashboard, or API). Remove the two bespoke
pushes in alertingQueue — alert-driven incidents now notify through the
same path via their auto-created comments, instead of twice.

The dedup id is now the comment id (previously the incident id with a
Date.now() suffix, which never deduplicated anything). Alert-created
incident emails now carry the incident state (INVESTIGATING) instead of
the alert status (TRIGGERED) in the subject; body content is unchanged.

Also drop the dead commented-out queueController blocks left from the
old notification system.

Fixes #774

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 11:17:21 +05:30
phatlet c92c9ec273 fix: use rejectUnauthorized and checkServerIdentity for gRPC insecure TLS 2026-06-29 15:20:04 +07:00
phatlet 4470346e23 fix: address review feedback for gRPC insecure TLS and DNS-over-TLS 2026-06-29 15:07:32 +07:00
phatlet 29fcd22e20 feat: enhance grpc, dns monitoring 2026-06-29 14:51:34 +07:00
Jorge Hermes 1889f86e01 feat(api): expose external_url in monitors POST and PATCH endpoints
The field was already stored in the DB, mapped through the controller,
and present on MonitorRecordTyped — but missing from CreateMonitorRequest
and UpdateMonitorRequest, so the API silently dropped it.
2026-06-24 09:19:22 -03:00
Crazy Computer 9fc16187ca Add Traditional Chinese (Macau) locale file 2026-06-21 12:22:34 +08:00
Crazy Computer 32c36bfc52 Add Traditional Chinese (Hong Kong) localization 2026-06-21 12:20:58 +08:00
Crazy Computer 9ad4ca50fb Update Traditional Chinese translations in zh-TW.json 2026-06-21 12:17:54 +08:00
Crazy Computer 2aa83b01c2 Update Chinese translations in zh-CN.json 2026-06-21 12:14:00 +08:00
Raj Nandan Sharma c43b4ef863 chore(docs): include v4.1.1 changelog with new features and improvements 2026-06-19 23:23:22 +05:30
Raj Nandan Sharma a925791671 refactor(layout): update main class for embed and status pages 2026-06-19 22:34:03 +05:30
Raj Nandan Sharma ba1d0079de address PR #765 review comments
- layoutController/site-configurations: use strict boolean check instead of
  Boolean() coercion for showInlineEvents so persisted "false" strings don't
  flip the toggle
- (kener)/+page.svelte: collapse confusing triple negation !!! to single !
- NotificationsList: add aria-label/title to the icon-only events button
  (+ "Open events page" en locale key)
- move NotificationEvent into shared $lib/types/notifications so client code
  no longer imports from the server dashboardController; controller re-exports
  it for backwards compatibility
- [page_path] and monitor pages: pass hideNotificationsPopover={showInlineEvents}
  to ThemePlus so inline and popover event surfaces stay mutually exclusive

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 22:28:22 +05:30
Raj Nandan Sharma 3503e73f56 ensure newline at end of file in notifications-client.ts 2026-06-19 11:24:09 +05:30
Raj Nandan Sharma 5021e01018 implement event display settings and notifications list component
implements #665
2026-06-19 11:23:57 +05:30
Raj Nandan Sharma e69fcdfd71 fix(database): isolate web and worker connection pools
GET / was throwing KnexTimeoutError ("Timeout acquiring a connection")
in production. Root cause was the connection pool, not the database:
the single process (SvelteKit + cron scheduler + BullMQ workers) shared
one pool capped at 10, while one GET / fans out ~6 queries. A couple of
concurrent page loads, or a per-minute monitor burst overlapping a load,
exceeded 10 and queued acquires blew past the 15s timeout. Postgres
itself had 97 free slots the whole time and no leak.

Split into two pools so background work can't starve page loads:
- web pool (DATABASE_POOL_MAX, default 10) serves HTTP requests
- worker pool (DATABASE_WORKER_POOL_MAX, default 5) serves background jobs

Routing is by execution context via AsyncLocalStorage: q.createWorker
(the single chokepoint all workers/schedulers flow through) runs each
processor inside a worker-pool context, and BaseRepository.knex resolves
the pool from that context, defaulting to the web pool. This keeps shared
controllers correct whether they run in a request or a job. SQLite has no
real pool and reuses a single connection, so the split is a no-op there.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 11:39:10 +05:30
Raj Nandan Sharma 8833b7e410 refactor: update incident table to include start date and improve date formatting 2026-06-16 09:16:21 +05:30
Raj Nandan Sharma 4536bceef6 refactor: improve incident management page structure and enhance data fetching logic 2026-06-15 23:22:25 +05:30
Raj Nandan Sharma 734b062626 refactor: update heartbeat URL format to use path segments and implement legacy URL rewriting 2026-06-15 23:19:24 +05:30
Raj Nandan Sharma f257cdc2c4 create heartbeat route handler for GET and POST requests 2026-06-15 23:19:17 +05:30
Raj Nandan Sharma 1362d06b20 Merge pull request #731 from Kukks/feat/rss-feed
Add public RSS 2.0 feed for incidents and scheduled maintenance
2026-06-15 10:30:59 +05:30
Raj Nandan Sharma 663ce52c4e Merge pull request #711 from phatlet/fix/add-redis-reconnect
Fix Redis writes after replica failover by reconnecting on `READONLY`
2026-06-15 09:48:37 +05:30
Raj Nandan Sharma 3f4df5faa7 fix(redis): use named RedisOptions type so npm run check passes
ioredis v5 dropped the namespace merge on the default export, so
`Redis.RedisOptions` resolves to TS2702 (type used as a namespace).
Import the `RedisOptions` type by name instead.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-15 09:43:12 +05:30
Raj Nandan Sharma 2501875406 refactor: update link to include rel="external" for better SEO 2026-06-14 11:55:30 +05:30
Raj Nandan Sharma a3ec81af20 chore(docs): include v4.1.0 changelog and update navigation 2026-06-13 22:18:07 +05:30
Raj Nandan Sharma 8bbafe4c8a fix(confirmation): make unhealthy backfill atomic via a transaction (#757 review)
The per-row status+note backfill is one logical confirmation flip; wrap the
read+updates in a knex transaction so a mid-loop failure can't leave the window
half-confirmed/half-held (coderabbit out-of-diff finding).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-13 21:00:16 +05:30
Raj Nandan Sharma 4589568405 fix(confirmation): address PR #757 review comments
- PATCH: confirmation_threshold:null resets to 1 (off); undefined keeps existing (Copilot)
- backfill note is per-row severity-aware: 'Down'/'Degraded confirmed after N…' (Copilot)
- enforce 1–60 at the data layer via clampConfirmationThreshold on insert/update,
  covering all app write paths incl. the manage API (coderabbit)
- anchor via dedicated getLastObservedStatus query so a long incident/maintenance
  window can no longer push the anchor out of the lookback and bypass damping (coderabbit)
- overlays fetched AFTER execute() and keyed by job ts, making the freeze gate
  timestamp-safe and catching mid-check overlays (coderabbit + greptile)
- use Array.includes over indexOf!==-1 (greptile); refresh pendingHold doc (coderabbit)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-13 20:57:18 +05:30
Raj Nandan Sharma e8fb4126a8 docs(v4): add Grace Period (Confirmation Threshold) monitor docs (#756)
New v4/monitors/grace-period.md covering behavior, config, API, interactions
(alerts/maintenance/NO_DATA/groups/heartbeat), and verification; linked from the
Monitors sidebar and the Monitors Overview related-docs.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-13 20:40:02 +05:30