feat(history): show event context with online simulation and SCADA
This commit is contained in:
@@ -11,6 +11,66 @@ export type AnalysisRun = {
|
||||
parameters: Record<string, unknown>;
|
||||
};
|
||||
|
||||
export type AnalysisHistoryContext = {
|
||||
simulationRunId?: string;
|
||||
eventRange: { start: string; end: string } | null;
|
||||
};
|
||||
|
||||
const SIMULATION_RUN_TYPES = new Set([
|
||||
"burst_analysis",
|
||||
"flushing_analysis",
|
||||
"contaminant_analysis",
|
||||
"valve_close_analysis",
|
||||
"pressure_regulation",
|
||||
]);
|
||||
|
||||
export const getAnalysisHistoryContext = (
|
||||
run: AnalysisRun,
|
||||
): AnalysisHistoryContext => {
|
||||
const parameters = normalizeParameters(run.parameters);
|
||||
if (SIMULATION_RUN_TYPES.has(run.run_type)) {
|
||||
const start = Date.parse(run.started_at);
|
||||
const duration = parameters.modify_total_duration ?? parameters.duration;
|
||||
const end = new Date(
|
||||
typeof duration === "number" ? start + duration * 1000 : NaN,
|
||||
).getTime();
|
||||
return {
|
||||
simulationRunId: run.run_id,
|
||||
eventRange:
|
||||
Number.isFinite(start) && Number.isFinite(end) && end > start
|
||||
? {
|
||||
start: new Date(start).toISOString(),
|
||||
end: new Date(end).toISOString(),
|
||||
}
|
||||
: null,
|
||||
};
|
||||
}
|
||||
|
||||
const payload = normalizeParameters(parameters.result_payload);
|
||||
const window = normalizeParameters(
|
||||
parameters.scada_window ?? payload.scada_window,
|
||||
);
|
||||
const start = window.burst_start ?? window.start ?? parameters.scada_start;
|
||||
const end = window.burst_end ?? window.end ?? parameters.scada_end;
|
||||
const simulation = normalizeParameters(
|
||||
payload.simulation_run ?? payload.simulation_scheme,
|
||||
);
|
||||
const simulationRunId = parameters.simulation_run_id ?? simulation.run_id;
|
||||
return {
|
||||
simulationRunId:
|
||||
typeof simulationRunId === "string" && simulationRunId.trim()
|
||||
? simulationRunId.trim()
|
||||
: undefined,
|
||||
eventRange:
|
||||
typeof start === "string" &&
|
||||
typeof end === "string" &&
|
||||
Number.isFinite(Date.parse(start)) &&
|
||||
Date.parse(end) > Date.parse(start)
|
||||
? { start, end }
|
||||
: null,
|
||||
};
|
||||
};
|
||||
|
||||
export type AnalysisResult = {
|
||||
result_id: string;
|
||||
run_id: string;
|
||||
|
||||
Reference in New Issue
Block a user