Hermes 284313f908
Some checks are pending
Bidi Control Character Guard / bidi-control-guard (push) Waiting to run
Circular Dependency Check / Check for new circular dependencies (push) Waiting to run
Citus Migration Smoke / Combined migrations on single-node Citus (push) Waiting to run
E2E Fresh Install Tests / fresh-install-e2e (push) Waiting to run
ext-v2 guardrails / Run ext-v2 guard and ESLint (push) Waiting to run
Integration Tests / Check for relevant changes (push) Waiting to run
Integration Tests / ${{ (github.event_name == 'schedule' || github.event.inputs.suite == 'full') && 'Full integration suite' || 'Tier-1 integration subset' }} (push) Blocked by required conditions
Mobile checks / Mobile lint + typecheck (push) Waiting to run
Mobile checks / Mobile unit tests (push) Waiting to run
Mobile checks / Mobile dependency audit (report) (push) Waiting to run
Mobile checks / Mobile reproducibility checks (push) Waiting to run
Secrets guard (env backups) / Ensure no tracked env backup files (push) Waiting to run
Temporal Readiness / fast-readiness (push) Waiting to run
Temporal Readiness / docker-parity (push) Waiting to run
TypeScript Type Check / Nx affected typecheck (push) Waiting to run
Unit Tests / Skipped-test budget (push) Waiting to run
Unit Tests / Nx affected unit tests (push) Waiting to run
Unit Tests / Server unit coverage (informational) (push) Waiting to run
Validate Tenant Management Schema / Check for relevant changes (push) Waiting to run
Validate Tenant Management Schema / Validate Tenant Management Schema (push) Blocked by required conditions
EE Workflows Build Guard / ee-workflows-build-guard (push) Waiting to run
Initial import of AlgaPSA codebase from PSA server
Excluded: .git, node_modules, secrets/, compose.env, assemblyscript tgz

Source: /opt/alga-psa on psa.joliet.tech
2026-06-22 16:12:17 -05:00

135 lines
4.8 KiB
JavaScript

export function printSection(title, lines = []) {
process.stdout.write(`\n${title}\n`);
process.stdout.write(`${'-'.repeat(title.length)}\n`);
for (const line of lines) {
process.stdout.write(`${line}\n`);
}
}
export function formatStatusSummary(status) {
if (!status) {
return [
'Site: unknown',
'Node IP: unknown',
'Connectivity: unknown',
'Selected release: unknown',
];
}
const lines = [
`Site: ${status.siteId}`,
`Node IP: ${status.nodeIp || 'unknown'}`,
`Connectivity: ${status.connectivityMode}`,
`Selected release: ${status.release.selectedReleaseVersion || 'unknown'}`,
];
if (status.canonical?.rollup?.state) {
lines.push(`Rollup: ${status.canonical.rollup.state}`);
}
return lines;
}
export function formatStatusReport(status) {
if (!status) {
return {
summary: [
'Site: unknown',
'Node IP: unknown',
'Connectivity: unknown',
'Top blocker: status unavailable',
'Blocker detail: Unable to collect appliance status yet.',
'Next action: Verify site selection and cluster connectivity, then refresh status.',
],
host: [
'Status: unknown',
'Detail: Talos status not collected',
],
cluster: [
'API reachable: false',
'Status: unavailable',
],
flux: [
'Flux status: unavailable',
'Helm status: unavailable',
],
workloads: [
'Workload status: unavailable',
],
release: [
'Selected release: unknown',
'App URL: unknown',
'Release app version: unknown',
'Release branch: unknown',
'Desired server image: unknown',
'Actual server image: unknown',
],
paths: [
'Config dir: unknown',
'kubeconfig: unknown',
'talosconfig: unknown',
],
};
}
return {
summary: [
`Site: ${status.siteId}`,
`Node IP: ${status.nodeIp || 'unknown'}`,
`Connectivity: ${status.connectivityMode}`,
...(status.canonical?.rollup?.state ? [`Rollup: ${status.canonical.rollup.state}`] : []),
...(status.canonical?.rollup?.message ? [`Rollup detail: ${status.canonical.rollup.message}`] : []),
`Top blocker: ${status.topBlocker.layer}`,
`Blocker detail: ${status.topBlocker.reason}`,
`Next action: ${status.topBlocker.nextAction}`,
],
host: [
`Status: ${status.host.status}`,
`Detail: ${status.host.details || 'n/a'}`,
],
cluster: [
`API reachable: ${status.cluster.apiReachable}`,
`Status: ${status.cluster.status}`,
...status.cluster.nodeReadiness.map((node) =>
`Node ${node.name}: ${node.ready ? 'Ready' : 'NotReady'} ${node.message || ''}`.trim(),
),
],
flux: [
`Flux status: ${status.flux.status}`,
`Helm status: ${status.flux.helmStatus}`,
...status.flux.sources.map((entry) => `Flux source ${entry.name}: ${entry.status}`),
...status.flux.kustomizations.map((entry) => `Kustomization ${entry.name}: ${entry.status}`),
...status.flux.helmReleases.map((entry) => `HelmRelease ${entry.name}: ${entry.status}`),
],
workloads: [
`Workload status: ${status.workloads.status}`,
...(status.canonical?.tiers
? [
`Tier platform: ${status.canonical.tiers.platform.ready ? 'ready' : 'not-ready'}`,
`Tier core: ${status.canonical.tiers.core.ready ? 'ready' : 'not-ready'}`,
`Tier bootstrap: ${status.canonical.tiers.bootstrap.ready ? 'ready' : 'not-ready'}`,
`Tier login: ${status.canonical.tiers.login.ready ? 'ready' : 'not-ready'}`,
`Tier background: ${status.canonical.tiers.background.ready ? 'ready' : 'not-ready'}`,
`Tier fullHealth: ${status.canonical.tiers.fullHealth.ready ? 'ready' : 'not-ready'}`,
]
: []),
...status.workloads.components.map((entry) =>
`${entry.name}: ${entry.status} (${entry.ready})${entry.message ? ` - ${entry.message}` : ''}`,
),
],
release: [
`Selected channel: ${status.release.selectedChannel || 'none'}`,
`Selected release: ${status.release.selectedReleaseVersion || 'unknown'}`,
`App URL: ${status.release.appUrl || 'unknown'}`,
`Release app version: ${status.release.appVersion || 'unknown'}`,
`Release manifest: ${status.release.manifestDigest || 'unknown'}`,
`Desired server image: ${status.release.desiredImages?.serverImage || 'unknown'}`,
`Actual server image: ${status.release.actualImages?.serverImage || 'unknown'}`,
...(status.release.imageDrift?.detected ? ['Release drift: desired and actual alga-core images differ'] : []),
],
paths: [
`Config dir: ${status.configPaths.configDir}`,
`kubeconfig: ${status.configPaths.kubeconfig}`,
`talosconfig: ${status.configPaths.talosconfig}`,
],
};
}