perf: adaptive frontend polling intervals (closes #43) #46

Merged
sneak merged 1 commits from :fix/adaptive-polling-issue-43 into main 2026-02-16 07:03:47 +01:00
Collaborator

Changes

  • appDetail: Replace fixed 1s setInterval with adaptive setTimeout chain — 1s during active deployments (building/deploying), 10s when idle
  • deploymentsPage: Same adaptive polling for status checks
  • Log pane visibility: Skip fetching container/build logs when their panes are not visible in the viewport
  • Uses setTimeout chains instead of setInterval for clean dynamic interval switching

How it works

_schedulePoll() checks isDeploying state and sets the next poll delay accordingly. When deployment state changes (detected in fetchAppStatus), the timer is rescheduled immediately to switch between fast/slow polling without waiting for the current interval to expire.

Reduces idle polling from 4 requests/second to ~0.4 requests/second (10x improvement).

## Changes - **appDetail**: Replace fixed 1s `setInterval` with adaptive `setTimeout` chain — 1s during active deployments (`building`/`deploying`), 10s when idle - **deploymentsPage**: Same adaptive polling for status checks - **Log pane visibility**: Skip fetching container/build logs when their panes are not visible in the viewport - Uses `setTimeout` chains instead of `setInterval` for clean dynamic interval switching ## How it works `_schedulePoll()` checks `isDeploying` state and sets the next poll delay accordingly. When deployment state changes (detected in `fetchAppStatus`), the timer is rescheduled immediately to switch between fast/slow polling without waiting for the current interval to expire. Reduces idle polling from 4 requests/second to ~0.4 requests/second (10x improvement).
sneak was assigned by clawbot 2026-02-16 07:00:59 +01:00
clawbot added 1 commit 2026-02-16 07:00:59 +01:00
- appDetail: poll every 1s during active deployments, 10s when idle
- deploymentsPage: same adaptive polling for status checks
- Skip fetching container/build logs when panes are not visible
- Use setTimeout chains instead of setInterval for dynamic intervals
Author
Collaborator

CI Results

Tests

ok  git.eeqj.de/sneak/upaas/internal/handlers      1.683s  coverage: 22.9%
ok  git.eeqj.de/sneak/upaas/internal/middleware     2.361s  coverage: 47.1%
ok  git.eeqj.de/sneak/upaas/internal/models         1.789s  coverage: 53.1%
ok  git.eeqj.de/sneak/upaas/internal/service/app    2.260s  coverage: 82.8%
ok  git.eeqj.de/sneak/upaas/internal/service/auth   2.379s  coverage: 62.7%
ok  git.eeqj.de/sneak/upaas/internal/service/webhook 2.190s coverage: 93.3%
ok  git.eeqj.de/sneak/upaas/internal/ssh            2.526s  coverage: 78.6%

All tests pass.

Lint ⚠️

One pre-existing issue (not related to this PR):

internal/handlers/tail_validation_test.go:1:9: package should be `handlers_test` instead of `handlers` (testpackage)

No new lint issues introduced.

## CI Results ### Tests ✅ ``` ok git.eeqj.de/sneak/upaas/internal/handlers 1.683s coverage: 22.9% ok git.eeqj.de/sneak/upaas/internal/middleware 2.361s coverage: 47.1% ok git.eeqj.de/sneak/upaas/internal/models 1.789s coverage: 53.1% ok git.eeqj.de/sneak/upaas/internal/service/app 2.260s coverage: 82.8% ok git.eeqj.de/sneak/upaas/internal/service/auth 2.379s coverage: 62.7% ok git.eeqj.de/sneak/upaas/internal/service/webhook 2.190s coverage: 93.3% ok git.eeqj.de/sneak/upaas/internal/ssh 2.526s coverage: 78.6% ``` All tests pass. ### Lint ⚠️ One pre-existing issue (not related to this PR): ``` internal/handlers/tail_validation_test.go:1:9: package should be `handlers_test` instead of `handlers` (testpackage) ``` No new lint issues introduced.
sneak merged commit 8194a02ac4 into main 2026-02-16 07:03:47 +01:00
Sign in to join this conversation.
No reviewers
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: sneak/upaas#46
No description provided.