Merge pull request #1047 from pikasTech/fix/1020-quickverify-report-index
修复 #1020 quick-verify report 索引记录
This commit is contained in:
@@ -2021,6 +2021,18 @@ function finalizeQuickVerifyFailure(state: SentinelCicdState, input: {
|
||||
}
|
||||
|
||||
function recordQuickVerify(state: SentinelCicdState, payload: Record<string, unknown>): Record<string, unknown> {
|
||||
const views = compactQuickVerifyRecordViews(record(payload.views));
|
||||
const summary = {
|
||||
reason: payload.reason,
|
||||
status: payload.status,
|
||||
elapsedMs: payload.elapsedMs,
|
||||
failure: payload.failure,
|
||||
warnings: Array.isArray(payload.warnings) ? payload.warnings : [],
|
||||
analysis: payload.analysis,
|
||||
promptSource: payload.promptSource,
|
||||
steps: Array.isArray(payload.steps) ? payload.steps.map(compactQuickVerifyRecordStep) : [],
|
||||
valuesRedacted: true,
|
||||
};
|
||||
const recordResult = callSentinelService(state, "POST", "/api/runs/record", {
|
||||
runId: payload.runId,
|
||||
scenarioId: payload.scenarioId,
|
||||
@@ -2030,25 +2042,62 @@ function recordQuickVerify(state: SentinelCicdState, payload: Record<string, unk
|
||||
reportJsonSha256: payload.reportJsonSha256,
|
||||
findingCount: payload.findingCount,
|
||||
artifactCount: payload.artifactCount,
|
||||
summary: {
|
||||
reason: payload.reason,
|
||||
status: payload.status,
|
||||
elapsedMs: payload.elapsedMs,
|
||||
failure: payload.failure,
|
||||
warnings: Array.isArray(payload.warnings) ? payload.warnings : [],
|
||||
analysis: payload.analysis,
|
||||
promptSource: payload.promptSource,
|
||||
steps: payload.steps,
|
||||
valuesRedacted: true,
|
||||
},
|
||||
summary,
|
||||
findings: payload.findings,
|
||||
views: payload.views,
|
||||
views,
|
||||
screenshot: payload.screenshot,
|
||||
publicOrigin: payload.publicOrigin ?? stringAt(state.publicExposure, "publicBaseUrl"),
|
||||
maintenance: payload.reason === "maintenance-stop",
|
||||
valuesRedacted: true,
|
||||
}, 60);
|
||||
return { ...payload, recordResult, valuesRedacted: true };
|
||||
return withWarnings({ ...payload, views, recordResult, valuesRedacted: true }, recordResult.ok === true ? [] : ["quick verify completed but sentinel report index record failed; report/dashboard may lag until record payload is reduced or retried."]);
|
||||
}
|
||||
|
||||
function compactQuickVerifyRecordViews(views: Record<string, unknown>): Record<string, unknown> {
|
||||
const compacted: Record<string, unknown> = {};
|
||||
for (const [key, value] of Object.entries(views)) {
|
||||
const item = record(value);
|
||||
compacted[key] = {
|
||||
...item,
|
||||
renderedText: boundQuickVerifyRecordText(item.renderedText, key === "summary" ? 12_000 : 16_000),
|
||||
valuesRedacted: true,
|
||||
};
|
||||
}
|
||||
return compacted;
|
||||
}
|
||||
|
||||
function compactQuickVerifyRecordStep(value: unknown): Record<string, unknown> {
|
||||
const item = record(value);
|
||||
return {
|
||||
phase: stringAtNullable(item, "phase"),
|
||||
ok: item.ok === true ? true : item.ok === false ? false : null,
|
||||
promptIndex: numberAtNullable(item, "promptIndex"),
|
||||
checkId: stringAtNullable(item, "checkId"),
|
||||
failure: stringAtNullable(item, "failure"),
|
||||
result: compactQuickVerifyRecordStepResult(record(item.result)),
|
||||
valuesRedacted: true,
|
||||
};
|
||||
}
|
||||
|
||||
function compactQuickVerifyRecordStepResult(value: Record<string, unknown>): Record<string, unknown> {
|
||||
return {
|
||||
ok: value.ok === true ? true : value.ok === false ? false : null,
|
||||
status: stringAtNullable(value, "status"),
|
||||
view: stringAtNullable(value, "view"),
|
||||
exitCode: numberAtNullable(value, "exitCode"),
|
||||
timedOut: value.timedOut === true ? true : value.timedOut === false ? false : null,
|
||||
stdoutBytes: numberAtNullable(value, "stdoutBytes"),
|
||||
stderrBytes: numberAtNullable(value, "stderrBytes"),
|
||||
stdoutPreview: boundQuickVerifyRecordText(value.stdoutPreview, 500),
|
||||
stderrPreview: boundQuickVerifyRecordText(value.stderrPreview, 500),
|
||||
valuesRedacted: true,
|
||||
};
|
||||
}
|
||||
|
||||
function boundQuickVerifyRecordText(value: unknown, maxChars: number): string | null {
|
||||
if (typeof value !== "string") return null;
|
||||
if (value.length <= maxChars) return value;
|
||||
return `${value.slice(0, maxChars)}\n[truncated ${value.length - maxChars} chars]`;
|
||||
}
|
||||
|
||||
function callSentinelService(state: SentinelCicdState, method: "GET" | "POST", pathWithQuery: string, body: Record<string, unknown> | null, timeoutSeconds: number): Record<string, unknown> {
|
||||
|
||||
Reference in New Issue
Block a user