Files
cameleer-saas/docs/superpowers/specs/2026-04-10-fleet-health-design.md
hsiegeln 63c194dab7
Some checks failed
CI / build (push) Failing after 18s
CI / docker (push) Has been skipped
chore: rename cameleer3 to cameleer
Rename Java packages from net.siegeln.cameleer3 to net.siegeln.cameleer,
update all references in workflows, Docker configs, docs, and bootstrap.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-15 15:28:44 +02:00

2.1 KiB

Fleet Health at a Glance (#44)

Context

The vendor tenant list at /vendor/tenants shows basic tenant info (name, slug, tier, status, server state, license expiry) but lacks live usage data. The vendor needs to see agent and environment counts per tenant to understand fleet utilization without clicking into each tenant.

Design

Backend

Extend VendorTenantSummary record in VendorTenantController.java with three fields:

int agentCount, int environmentCount, int agentLimit

In the list endpoint mapping: for each ACTIVE tenant with a server endpoint, call serverApiClient.getAgentCount(endpoint) and serverApiClient.getEnvironmentCount(endpoint). Agent limit comes from the tenant's license limits.agents field (-1 for unlimited). Use CompletableFuture to parallelize the N HTTP calls.

Tenants that are PROVISIONING/SUSPENDED/DELETED get zeroes — skip the HTTP calls.

Frontend

Add two columns to the DataTable in VendorTenantsPage.tsx:

Column Key Display
Agents agentCount "3 / 10" or "0 / ∞" (uses agentCount + agentLimit)
Envs environmentCount "1"

Place them after the Server column, before License.

Update VendorTenantSummary type in ui/src/types/api.ts to include agentCount: number, environmentCount: number, agentLimit: number.

Existing infrastructure reused

  • ServerApiClient.getAgentCount() and getEnvironmentCount() — already implemented for tenant dashboard
  • LicenseService.getActiveLicense() — already used in the list endpoint for license expiry
  • 30-second refetch interval on useVendorTenants() — already in place

No changes to

  • ServerStatusBadge column — kept as-is
  • License column — kept as-is
  • Detail page — already has its own health data

Files to modify

File Change
VendorTenantController.java Extend summary record + parallel health fetch in list endpoint
VendorTenantsPage.tsx Add Agents and Envs columns
ui/src/types/api.ts Add fields to VendorTenantSummary type