fix: keep all follower status compact
This commit is contained in:
@@ -42,6 +42,8 @@ Target-side state summaries used by `status`, `events`, `logs` and `debug-step s
|
||||
|
||||
Follower-scoped commands such as `status --follower`, `events --follower`, `logs --follower` and `debug-step --follower` must ask the target summary helper for only that follower's state. Do not fetch every follower and filter locally at the operator side; multi-follower summaries have different size budgets and should use lower per-follower stage limits.
|
||||
|
||||
Multi-follower status summaries should omit per-follower `command.payload`/native drill-down payloads entirely; those belong to follower-scoped `events`/`logs`/`debug-step` queries. Default all-follower status must remain parseable below the transport stdout limit.
|
||||
|
||||
`scripts/src/cicd.ts` should stay a thin branch-follower route/orchestration entry, not a catch-all implementation file. Rendering, debug steps, controller manifests, native K8s helpers, adapter-specific trigger/status logic and large data compactors must live in responsibility-specific modules before `cicd.ts` approaches the 3000-line hard split point.
|
||||
|
||||
`status-read`, `events`, `logs` and debug summaries must expose compact closeout gate details when a follower is not aligned: git-mirror readiness, Tekton PipelineRun condition, Argo sync/health, runtime target sha/readiness and short errors. Repeating only phase/observed/target/message is a visibility defect and must be fixed before further rollout tuning.
|
||||
|
||||
@@ -71,7 +71,7 @@ function readConfigMapViaKubectl() {
|
||||
}
|
||||
}
|
||||
|
||||
function compactStateText(text) {
|
||||
function compactStateText(text, includeCommand) {
|
||||
if (typeof text !== "string" || text.length === 0) return null;
|
||||
let state;
|
||||
try {
|
||||
@@ -79,7 +79,7 @@ function compactStateText(text) {
|
||||
} catch {
|
||||
return null;
|
||||
}
|
||||
return {
|
||||
const compact = {
|
||||
id: stringOrNull(state.id),
|
||||
adapter: stringOrNull(state.adapter),
|
||||
enabled: state.enabled === true,
|
||||
@@ -97,8 +97,9 @@ function compactStateText(text) {
|
||||
timings: compactTimings(state.timings),
|
||||
warnings: arrayStrings(state.warnings).slice(0, 6),
|
||||
stateFormat: stringOrNull(state.stateFormat),
|
||||
command: compactCommand(state.command),
|
||||
};
|
||||
if (includeCommand) compact.command = compactCommand(state.command);
|
||||
return compact;
|
||||
}
|
||||
|
||||
function compactCommand(command) {
|
||||
@@ -335,11 +336,12 @@ const valueBytes = {};
|
||||
|
||||
if (result.ok && result.present) {
|
||||
const data = recordOrNull(result.object?.data) || {};
|
||||
const includeCommand = followerIds.length === 1;
|
||||
for (const id of followerIds) {
|
||||
const text = typeof data[id] === "string" ? data[id] : "";
|
||||
if (text.length === 0) continue;
|
||||
valueBytes[id] = Buffer.byteLength(text, "utf8");
|
||||
const compact = compactStateText(text);
|
||||
const compact = compactStateText(text, includeCommand);
|
||||
if (compact === null) errors.push(`${id}: invalid state json`);
|
||||
else stateByFollower[id] = compact;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user