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>
53 lines
2.1 KiB
Markdown
53 lines
2.1 KiB
Markdown
# 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:
|
|
|
|
```java
|
|
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 |
|