(payload = {}, parentTraceContext = null)
| 320 | } |
| 321 | |
| 322 | async function startRun(payload = {}, parentTraceContext = null) { |
| 323 | const baseContext = cloneTraceContext(parentTraceContext); |
| 324 | const traceId = payload.traceId || createTraceId(); |
| 325 | const rootTraceId = payload.rootTraceId || baseContext.rootTraceId || traceId; |
| 326 | const startedAt = payload.startedAt || new Date(); |
| 327 | |
| 328 | const context = { |
| 329 | ...baseContext, |
| 330 | traceId, |
| 331 | rootTraceId, |
| 332 | parentRunId: payload.parentRunId !== undefined ? payload.parentRunId : baseContext.runId, |
| 333 | triggerType: payload.triggerType || baseContext.triggerType || "unknown", |
| 334 | entityType: payload.entityType || baseContext.entityType || "unknown", |
| 335 | teamId: payload.teamId !== undefined ? payload.teamId : baseContext.teamId, |
| 336 | projectId: payload.projectId !== undefined ? payload.projectId : baseContext.projectId, |
| 337 | chartId: payload.chartId !== undefined ? payload.chartId : baseContext.chartId, |
| 338 | datasetId: payload.datasetId !== undefined ? payload.datasetId : baseContext.datasetId, |
| 339 | dataRequestId: payload.dataRequestId !== undefined |
| 340 | ? payload.dataRequestId |
| 341 | : baseContext.dataRequestId, |
| 342 | connectionId: payload.connectionId !== undefined |
| 343 | ? payload.connectionId |
| 344 | : baseContext.connectionId, |
| 345 | queueName: payload.queueName !== undefined ? payload.queueName : baseContext.queueName, |
| 346 | jobId: payload.jobId !== undefined ? payload.jobId : baseContext.jobId, |
| 347 | nextSequence: 1, |
| 348 | startedAt, |
| 349 | }; |
| 350 | |
| 351 | const createValues = { |
| 352 | traceId: context.traceId, |
| 353 | rootTraceId: context.rootTraceId, |
| 354 | parentRunId: context.parentRunId, |
| 355 | triggerType: context.triggerType, |
| 356 | entityType: context.entityType, |
| 357 | teamId: context.teamId, |
| 358 | projectId: context.projectId, |
| 359 | chartId: context.chartId, |
| 360 | datasetId: context.datasetId, |
| 361 | dataRequestId: context.dataRequestId, |
| 362 | connectionId: context.connectionId, |
| 363 | queueName: context.queueName, |
| 364 | jobId: context.jobId, |
| 365 | status: payload.status || "running", |
| 366 | startedAt, |
| 367 | summary: sanitizePayload(payload.summary), |
| 368 | }; |
| 369 | |
| 370 | try { |
| 371 | if (db.UpdateRun) { |
| 372 | const run = await db.UpdateRun.create(createValues); |
| 373 | context.runId = run.id; |
| 374 | } |
| 375 | } catch (error) { |
| 376 | emitAuditInternalError("[updateAudit] failed to create run", error); |
| 377 | } |
| 378 | |
| 379 | emitStructuredAuditLog("run_started", { |
no test coverage detected