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 instancesAddWarp-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.

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