feat: standardize algorithm measurement results
This commit is contained in:
@@ -21,6 +21,12 @@ import { setTimeout as sleep } from 'node:timers/promises';
|
||||
|
||||
import * as db from './db.js';
|
||||
import { getPlugin, adaptersDir, fixturesDir } from './plugins/registry.js';
|
||||
import {
|
||||
inspectionObjectContextFromName,
|
||||
logCompatibilityWarnings,
|
||||
normalizeMeasurements,
|
||||
type InspectionObjectContext,
|
||||
} from './measurementCompatibility.js';
|
||||
import type {
|
||||
PluginManifest,
|
||||
PluginProgressEvent,
|
||||
@@ -111,7 +117,12 @@ async function gatherInputs(
|
||||
}
|
||||
}
|
||||
|
||||
return { task, pointCloudRecords, pointCloudPaths, cadPath };
|
||||
const inspectionObject = task.inspectionObjectId
|
||||
? await db.getInspectionObjectById(task.inspectionObjectId)
|
||||
: undefined;
|
||||
const inspectionContext = inspectionObjectContextFromName(inspectionObject?.name);
|
||||
|
||||
return { task, pointCloudRecords, pointCloudPaths, cadPath, inspectionContext };
|
||||
}
|
||||
|
||||
async function writeInputJson(
|
||||
@@ -124,6 +135,7 @@ async function writeInputJson(
|
||||
cadPath: string | null,
|
||||
inputPointCloudFileIds: number[],
|
||||
inputCadFileIds: number[],
|
||||
inspectionContext: InspectionObjectContext,
|
||||
) {
|
||||
const inputJson = {
|
||||
schemaVersion: 1,
|
||||
@@ -133,6 +145,7 @@ async function writeInputJson(
|
||||
taskId,
|
||||
workDir,
|
||||
outDir: workDir,
|
||||
context: inspectionContext,
|
||||
inputs: {
|
||||
pointCloudPaths,
|
||||
pointCloudFileIds: inputPointCloudFileIds,
|
||||
@@ -330,7 +343,7 @@ export async function runAlgorithmJob(
|
||||
|
||||
try {
|
||||
await patchProgress(resultId, pluginId, 0.02, '准备输入');
|
||||
const { pointCloudRecords, pointCloudPaths, cadPath } = await gatherInputs(
|
||||
const { pointCloudRecords, pointCloudPaths, cadPath, inspectionContext } = await gatherInputs(
|
||||
taskId,
|
||||
manifest,
|
||||
pointCloudFileIds,
|
||||
@@ -349,6 +362,7 @@ export async function runAlgorithmJob(
|
||||
cadPath,
|
||||
inputPointCloudFileIds,
|
||||
inputCadFileIds,
|
||||
inspectionContext,
|
||||
);
|
||||
|
||||
let exitCode: number | null = 0;
|
||||
@@ -367,6 +381,17 @@ export async function runAlgorithmJob(
|
||||
: 'error';
|
||||
|
||||
const demoFlowResultData = await readDemoFlowResultData(resultId);
|
||||
const normalized = normalizeMeasurements({
|
||||
pluginId,
|
||||
measurements: result?.measurements,
|
||||
extra: result?.extra,
|
||||
context: inspectionContext,
|
||||
algorithmProtocolVersion: result?.schemaVersion ?? manifest.schemaVersion,
|
||||
});
|
||||
logCompatibilityWarnings(resultId, normalized.warnings);
|
||||
const normalizedMeasurements = Array.isArray(result?.measurements)
|
||||
? normalized.measurements
|
||||
: undefined;
|
||||
const resultData: PluginResultData = {
|
||||
kind: 'plugin',
|
||||
pluginId,
|
||||
@@ -378,12 +403,12 @@ export async function runAlgorithmJob(
|
||||
// 把 result.json 内容平展到 resultData 里,方便前端直接使用
|
||||
schemaVersion: result?.schemaVersion ?? manifest.schemaVersion,
|
||||
message: result?.message,
|
||||
measurements: result?.measurements,
|
||||
measurements: normalizedMeasurements,
|
||||
errorStats: result?.errorStats,
|
||||
overlay3d: result?.overlay3d,
|
||||
images: result?.images,
|
||||
files: result?.files,
|
||||
extra: result?.extra,
|
||||
extra: normalized.extra,
|
||||
error: finalStatus === 'error'
|
||||
? result?.message ?? `子进程退出码 ${exitCode}`
|
||||
: undefined,
|
||||
@@ -393,7 +418,7 @@ export async function runAlgorithmJob(
|
||||
await db.updateTaskAnalysisResult(resultId, {
|
||||
status: finalStatus,
|
||||
errorStats: result?.errorStats ?? null,
|
||||
measurements: result?.measurements ?? null,
|
||||
measurements: normalizedMeasurements ?? null,
|
||||
resultData,
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user