Skip to main content

Applications

Every running Warp process, grouped by application. This page was called Servers until applications landed; /servers still redirects here.

The roster merges two kinds of process, because every server is an instance but not every instance is a server:

  • Servers — processes running AddWarpServer, with worker groups and background tasks.
  • Application instances — AddWarp-only processes (publishers, APIs, dashboards) that never run a server. They appear once WarpConfiguration.ApplicationName is set, and only then.

Set the identity a process reports:

builder.Services.AddWarp<AppDbContext>(options =>
{
options.ApplicationName = "orders-api"; // cluster-wide identity; groups instances together
options.ApplicationVersion = "1.4.2"; // per-instance, may differ mid rolling-deploy
options.ApplicationEnvironment = "prod";
});

ApplicationName gates all of it: leave it null and the behaviour is exactly as before — only servers appear, and nothing new is written.

Liveness​

Each instance carries a status dot: green live, amber paused, red silent. Liveness is ApplicationInstanceStaleGrace (2 minutes by default) — the same threshold that decides when a stale instance row is swept and an InstanceDown notification fires.

The API computes it once per read and also publishes the threshold itself, so the browser re-derives the same answer every second: an instance that stops checking in while you are looking at the roster goes red on its own, and the headline 3/4 live instances count drops with it. That holds for the flat server list this page falls back to when no ApplicationName is set, and for a server's own detail page, which used to apply a tighter rule of its own. The 15-second refresh is still there for everything that is not liveness — CPU, memory, and instances that started after you opened the page.

See Status dots for what the dashboard does against a backend too old to send the threshold.

A server's own detail page asks a tighter question and answers it in the browser: silent for more than 30 seconds (six missed heartbeats at the default 5-second HealthCheckInterval) turns the dot red and adds an Inactive badge, without waiting for a refetch. The two can therefore disagree for up to that grace: "should I worry?" is not the same question as "should this row be deleted?".

Click an application to see its instances, and an instance to see its detail.

Background tasks​

Each Warp server runs a set of background tasks for orchestration and maintenance. A service-only server (opt.DisableWorker()) runs only the shared ones — Heartbeat, ServerCleanup, ExpirationCleanup.

TaskDefault intervalPurpose
Heartbeat5s (HealthCheckInterval)Updates the server heartbeat so other servers know it is alive; renews singleton background-service leases
ScheduledJobActivation10s (ScheduledActivationInterval)Flips due Scheduled jobs to Enqueued — the worst-case latency between a schedule time and pickup eligibility
MessageRouting10s (MessageRoutingInterval) + signalRoutes IMessage jobs to their handlers by creating child jobs
Orchestration10s (OrchestrationInterval) + signalFinalizes parent jobs when all children complete, activates continuations
RecurringJobScheduler15s (RecurringJobSchedulerInterval)Creates job instances when a recurring cron expression fires
StaleJobRecovery30s (StaleJobRecoveryInterval)Requeues jobs stuck in Processing after a worker crash, and recovers stuck webhook deliveries
ServerCleanup30s (ServerCleanupInterval)Removes dead servers that stopped sending heartbeats
AggregateCounters1m (CounterAggregationInterval)Rolls write-optimized Counter rows into Statistic rows for the dashboard
BacklogSampler60s (BacklogSampleInterval)Samples per-queue backlog depth and oldest age off the worker hot path
AggregateErrorGroups60s (ErrorGroupingInterval)Drains the error-occurrence inbox into ErrorGroup issues
EvaluateSlos1m (SloEvaluationInterval)Computes attainment, error budget and burn rate for each objective
ExpirationCleanup5m (ExpirationCleanupInterval)Deletes expired jobs, call logs, deliveries and other retention-capped rows
RollupStatistics10m (StatisticRollupInterval)Downsamples time-bucketed statistics fine → hourly → daily

Every interval is configurable — see Configuration. Setting one to null disables that task.

The server detail page shows each task's last status, duration and run time, alongside its worker groups:

Individual workers have their own page — see Workers.

See also​