@elaraai/e3-api-server 1.0.84 → 1.0.86
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +88 -11
- package/dist/src/errors.d.ts +15 -0
- package/dist/src/errors.d.ts.map +1 -1
- package/dist/src/errors.js +22 -1
- package/dist/src/errors.js.map +1 -1
- package/dist/src/handlers/dataflow.d.ts +89 -18
- package/dist/src/handlers/dataflow.d.ts.map +1 -1
- package/dist/src/handlers/dataflow.js +198 -123
- package/dist/src/handlers/dataflow.js.map +1 -1
- package/dist/src/handlers/dataflow.spec.js +257 -7
- package/dist/src/handlers/dataflow.spec.js.map +1 -1
- package/dist/src/handlers/datasets.d.ts +56 -15
- package/dist/src/handlers/datasets.d.ts.map +1 -1
- package/dist/src/handlers/datasets.js +200 -122
- package/dist/src/handlers/datasets.js.map +1 -1
- package/dist/src/handlers/datasets.spec.js +92 -2
- package/dist/src/handlers/datasets.spec.js.map +1 -1
- package/dist/src/handlers/functions.d.ts +11 -2
- package/dist/src/handlers/functions.d.ts.map +1 -1
- package/dist/src/handlers/functions.js +50 -20
- package/dist/src/handlers/functions.js.map +1 -1
- package/dist/src/handlers/functions.spec.js +12 -1
- package/dist/src/handlers/functions.spec.js.map +1 -1
- package/dist/src/handlers/index.d.ts +2 -2
- package/dist/src/handlers/index.d.ts.map +1 -1
- package/dist/src/handlers/index.js +2 -2
- package/dist/src/handlers/index.js.map +1 -1
- package/dist/src/handlers/packages.d.ts +1 -1
- package/dist/src/handlers/packages.d.ts.map +1 -1
- package/dist/src/handlers/packages.js +1 -1
- package/dist/src/handlers/packages.js.map +1 -1
- package/dist/src/handlers/records.d.ts +27 -7
- package/dist/src/handlers/records.d.ts.map +1 -1
- package/dist/src/handlers/records.js +36 -16
- package/dist/src/handlers/records.js.map +1 -1
- package/dist/src/handlers/records.spec.js +160 -26
- package/dist/src/handlers/records.spec.js.map +1 -1
- package/dist/src/handlers/repository.d.ts +9 -1
- package/dist/src/handlers/repository.d.ts.map +1 -1
- package/dist/src/handlers/repository.js +14 -5
- package/dist/src/handlers/repository.js.map +1 -1
- package/dist/src/handlers/tasks.d.ts +18 -6
- package/dist/src/handlers/tasks.d.ts.map +1 -1
- package/dist/src/handlers/tasks.js +31 -22
- package/dist/src/handlers/tasks.js.map +1 -1
- package/dist/src/handlers/tasks.spec.js +61 -12
- package/dist/src/handlers/tasks.spec.js.map +1 -1
- package/dist/src/handlers/workspaces.d.ts +11 -6
- package/dist/src/handlers/workspaces.d.ts.map +1 -1
- package/dist/src/handlers/workspaces.js +14 -8
- package/dist/src/handlers/workspaces.js.map +1 -1
- package/dist/src/handlers/workspaces.spec.js +24 -8
- package/dist/src/handlers/workspaces.spec.js.map +1 -1
- package/dist/src/identity.d.ts +22 -0
- package/dist/src/identity.d.ts.map +1 -0
- package/dist/src/identity.js +6 -0
- package/dist/src/identity.js.map +1 -0
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +3 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/local-dataflow.d.ts +14 -1
- package/dist/src/local-dataflow.d.ts.map +1 -1
- package/dist/src/local-dataflow.js +12 -7
- package/dist/src/local-dataflow.js.map +1 -1
- package/dist/src/middleware/auth.d.ts +1 -11
- package/dist/src/middleware/auth.d.ts.map +1 -1
- package/dist/src/middleware/auth.js.map +1 -1
- package/dist/src/middleware/repository.d.ts +1 -1
- package/dist/src/middleware/repository.d.ts.map +1 -1
- package/dist/src/middleware/repository.js +4 -10
- package/dist/src/middleware/repository.js.map +1 -1
- package/dist/src/middleware/repository.spec.js +7 -6
- package/dist/src/middleware/repository.spec.js.map +1 -1
- package/dist/src/portable.d.ts +47 -0
- package/dist/src/portable.d.ts.map +1 -0
- package/dist/src/portable.js +79 -0
- package/dist/src/portable.js.map +1 -0
- package/dist/src/portable.spec.d.ts +6 -0
- package/dist/src/portable.spec.d.ts.map +1 -0
- package/dist/src/portable.spec.js +325 -0
- package/dist/src/portable.spec.js.map +1 -0
- package/dist/src/routes/dataset-path.d.ts +28 -0
- package/dist/src/routes/dataset-path.d.ts.map +1 -0
- package/dist/src/routes/dataset-path.js +52 -0
- package/dist/src/routes/dataset-path.js.map +1 -0
- package/dist/src/routes/datasets.d.ts +7 -1
- package/dist/src/routes/datasets.d.ts.map +1 -1
- package/dist/src/routes/datasets.js +5 -11
- package/dist/src/routes/datasets.js.map +1 -1
- package/dist/src/routes/executions.d.ts +4 -2
- package/dist/src/routes/executions.d.ts.map +1 -1
- package/dist/src/routes/executions.js +31 -10
- package/dist/src/routes/executions.js.map +1 -1
- package/dist/src/routes/functions.d.ts +16 -8
- package/dist/src/routes/functions.d.ts.map +1 -1
- package/dist/src/routes/functions.js +21 -11
- package/dist/src/routes/functions.js.map +1 -1
- package/dist/src/routes/index.d.ts +4 -3
- package/dist/src/routes/index.d.ts.map +1 -1
- package/dist/src/routes/index.js +1 -0
- package/dist/src/routes/index.js.map +1 -1
- package/dist/src/routes/objects.d.ts +4 -2
- package/dist/src/routes/objects.d.ts.map +1 -1
- package/dist/src/routes/objects.js +5 -8
- package/dist/src/routes/objects.js.map +1 -1
- package/dist/src/routes/package-transfer.d.ts +1 -1
- package/dist/src/routes/package-transfer.d.ts.map +1 -1
- package/dist/src/routes/package-transfer.js +19 -22
- package/dist/src/routes/package-transfer.js.map +1 -1
- package/dist/src/routes/packages.d.ts +1 -1
- package/dist/src/routes/packages.d.ts.map +1 -1
- package/dist/src/routes/query.d.ts +53 -0
- package/dist/src/routes/query.d.ts.map +1 -0
- package/dist/src/routes/query.js +86 -0
- package/dist/src/routes/query.js.map +1 -0
- package/dist/src/routes/query.spec.d.ts +6 -0
- package/dist/src/routes/query.spec.d.ts.map +1 -0
- package/dist/src/routes/query.spec.js +49 -0
- package/dist/src/routes/query.spec.js.map +1 -0
- package/dist/src/routes/records.d.ts +32 -3
- package/dist/src/routes/records.d.ts.map +1 -1
- package/dist/src/routes/records.js +34 -7
- package/dist/src/routes/records.js.map +1 -1
- package/dist/src/routes/repositories.d.ts +1 -1
- package/dist/src/routes/repositories.d.ts.map +1 -1
- package/dist/src/routes/repository.d.ts +6 -1
- package/dist/src/routes/repository.d.ts.map +1 -1
- package/dist/src/routes/repository.js +5 -0
- package/dist/src/routes/repository.js.map +1 -1
- package/dist/src/routes/repository.spec.d.ts +6 -0
- package/dist/src/routes/repository.spec.d.ts.map +1 -0
- package/dist/src/routes/repository.spec.js +84 -0
- package/dist/src/routes/repository.spec.js.map +1 -0
- package/dist/src/routes/tasks.d.ts +1 -1
- package/dist/src/routes/tasks.d.ts.map +1 -1
- package/dist/src/routes/tasks.js +16 -4
- package/dist/src/routes/tasks.js.map +1 -1
- package/dist/src/routes/transfer.d.ts +1 -1
- package/dist/src/routes/transfer.d.ts.map +1 -1
- package/dist/src/routes/transfer.js +7 -27
- package/dist/src/routes/transfer.js.map +1 -1
- package/dist/src/routes/workspaces.d.ts +1 -1
- package/dist/src/routes/workspaces.d.ts.map +1 -1
- package/dist/src/routes/workspaces.js +34 -22
- package/dist/src/routes/workspaces.js.map +1 -1
- package/dist/src/server.js +1 -1
- package/dist/src/server.js.map +1 -1
- package/dist/src/types.d.ts +63 -5
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/types.js +7 -5
- package/dist/src/types.js.map +1 -1
- package/package.json +8 -4
|
@@ -2,11 +2,12 @@
|
|
|
2
2
|
* Copyright (c) 2025 Elara AI Pty Ltd
|
|
3
3
|
* Licensed under BSL 1.1. See LICENSE for details.
|
|
4
4
|
*/
|
|
5
|
-
import { NullType, OptionType, some, none, variant } from '@elaraai/east';
|
|
6
|
-
import {
|
|
5
|
+
import { IntegerType, NullType, OptionType, lessFor, some, none, variant } from '@elaraai/east';
|
|
6
|
+
import { DATAFLOW_POLL_EVENTS_MAX } from '@elaraai/e3-types';
|
|
7
|
+
import { dataflowGetGraph, workspaceStatus, workspaceGetTaskHash, executionFindCurrent, executionReadLog, checkName, ExecutionNotFoundError, coreEventToApiEvent, coreStatusToApiStatus, } from '@elaraai/e3-core/portable';
|
|
7
8
|
import { sendSuccess, sendError, sendSuccessWithStatus } from '../beast2.js';
|
|
8
9
|
import { errorToVariant } from '../errors.js';
|
|
9
|
-
import { WorkspaceStatusResultType, DataflowGraphType,
|
|
10
|
+
import { WorkspaceStatusResultType, DataflowGraphType, TaskLogChunkType, DataflowExecutionStateType, DataflowBudgetType, } from '../types.js';
|
|
10
11
|
/**
|
|
11
12
|
* Convert core DatasetStatusInfo to API type.
|
|
12
13
|
*/
|
|
@@ -79,6 +80,7 @@ function convertTaskStatus(info) {
|
|
|
79
80
|
output: info.output,
|
|
80
81
|
dependsOn: info.dependsOn,
|
|
81
82
|
peakBytes: info.peakBytes === null ? none : some(BigInt(info.peakBytes)),
|
|
83
|
+
stopped: info.stopped === null ? none : some(info.stopped),
|
|
82
84
|
};
|
|
83
85
|
}
|
|
84
86
|
/** A budget as the API serves it: its capacity, and what its runners hold of
|
|
@@ -139,18 +141,28 @@ function convertWorkspaceStatus(result) {
|
|
|
139
141
|
* where it starts the run — a local one in its own process — so this never
|
|
140
142
|
* waits on it.
|
|
141
143
|
*
|
|
144
|
+
* The workspace's name is checked before the orchestrator is asked, so a name
|
|
145
|
+
* no workspace can have is refused alike whichever orchestrator runs the
|
|
146
|
+
* repository's dataflows, and no lock named for it is taken.
|
|
147
|
+
*
|
|
142
148
|
* @param storage - Storage backend
|
|
143
149
|
* @param orchestrator - The orchestrator that runs the repository's dataflows
|
|
144
150
|
* @param repoPath - The repository's path
|
|
145
151
|
* @param workspace - The workspace whose dataflow runs
|
|
146
152
|
* @param options - The runner the run's tasks and units run on, which holds
|
|
147
153
|
* the server's budget; the tasks and units the loop keeps in flight, the
|
|
148
|
-
* orchestrator's own default when absent;
|
|
149
|
-
* verbosity
|
|
150
|
-
* @returns 202 once the run has started, or the error that stopped it
|
|
154
|
+
* orchestrator's own default when absent; what the run forces — `true` for
|
|
155
|
+
* every task, or the tasks' names — its filter and its verbosity
|
|
156
|
+
* @returns 202 once the run has started, or the error that stopped it: a name
|
|
157
|
+
* no workspace can have is `invalid_name`, a forced task the graph does not
|
|
158
|
+
* have `task_not_found`, and one the filter's run set leaves out
|
|
159
|
+
* `dataflow_error`
|
|
151
160
|
*/
|
|
152
161
|
export async function startDataflow(storage, orchestrator, repoPath, workspace, options) {
|
|
153
162
|
try {
|
|
163
|
+
// A host's own orchestrator may take a lock named for whatever it is
|
|
164
|
+
// given, and a lock's name may hold the `#` and `~` no workspace's may.
|
|
165
|
+
checkName('workspace', workspace);
|
|
154
166
|
// Start execution via orchestrator (acquires lock internally). The loop
|
|
155
167
|
// keeps `width` tasks and units in flight, and the runner decides which
|
|
156
168
|
// of them spawn.
|
|
@@ -208,138 +220,197 @@ export async function getDataflowGraph(storage, repoPath, workspace) {
|
|
|
208
220
|
}
|
|
209
221
|
}
|
|
210
222
|
/**
|
|
211
|
-
*
|
|
223
|
+
* The execution of a task's a request names, by its inputs hash and id, with
|
|
224
|
+
* its status; `null` when the task records no such execution.
|
|
225
|
+
*/
|
|
226
|
+
async function namedExecution(storage, repoPath, workspace, taskName, { inputsHash, executionId }) {
|
|
227
|
+
const taskHash = await workspaceGetTaskHash(storage, repoPath, workspace, taskName);
|
|
228
|
+
const status = await storage.refs.executionGet(repoPath, taskHash, inputsHash, executionId);
|
|
229
|
+
return status === null ? null : { taskHash, inputsHash, executionId, status };
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Get a chunk of a task's log: of its current execution — the latest over its
|
|
233
|
+
* current inputs, or its latest run ({@link executionFindCurrent}) — or of the
|
|
234
|
+
* execution the request names. The chunk names the execution it was read from
|
|
235
|
+
* and whether it has ended, so a client polling the log reads on from its
|
|
236
|
+
* offset, starts over when the execution changes, and stops reading once it
|
|
237
|
+
* has ended and its log is read. A poll costs the same however long the task
|
|
238
|
+
* has run.
|
|
239
|
+
*
|
|
240
|
+
* @param storage - Storage backend
|
|
241
|
+
* @param repoPath - The repository's path
|
|
242
|
+
* @param workspace - The workspace
|
|
243
|
+
* @param taskName - The task
|
|
244
|
+
* @param stream - The log stream
|
|
245
|
+
* @param offset - The byte the chunk starts at
|
|
246
|
+
* @param limit - The most bytes it holds
|
|
247
|
+
* @param execution - The execution to read, by its inputs hash and id; the
|
|
248
|
+
* task's current execution when absent
|
|
249
|
+
* @returns The chunk, or `execution_not_found` when the task records none
|
|
212
250
|
*/
|
|
213
|
-
export async function getTaskLogs(storage, repoPath, workspace, taskName, stream, offset, limit) {
|
|
251
|
+
export async function getTaskLogs(storage, repoPath, workspace, taskName, stream, offset, limit, execution) {
|
|
214
252
|
try {
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
253
|
+
const read = execution === undefined
|
|
254
|
+
? await executionFindCurrent(storage, repoPath, workspace, taskName)
|
|
255
|
+
: await namedExecution(storage, repoPath, workspace, taskName, execution);
|
|
256
|
+
if (read === null) {
|
|
218
257
|
throw new ExecutionNotFoundError(taskName);
|
|
219
258
|
}
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
return sendSuccess(LogChunkType, {
|
|
259
|
+
const chunk = await executionReadLog(storage, repoPath, read.taskHash, read.inputsHash, read.executionId, stream, { offset, limit });
|
|
260
|
+
return sendSuccess(TaskLogChunkType, {
|
|
223
261
|
data: chunk.data,
|
|
224
262
|
offset: BigInt(chunk.offset),
|
|
225
263
|
size: BigInt(chunk.size),
|
|
226
264
|
totalSize: BigInt(chunk.totalSize),
|
|
227
265
|
complete: chunk.complete,
|
|
266
|
+
inputsHash: read.inputsHash,
|
|
267
|
+
executionId: read.executionId,
|
|
268
|
+
ended: read.status.type !== 'running',
|
|
228
269
|
});
|
|
229
270
|
}
|
|
230
271
|
catch (err) {
|
|
231
|
-
return sendError(
|
|
272
|
+
return sendError(TaskLogChunkType, errorToVariant(err));
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
/** An API-visible event as the poll serves it. */
|
|
276
|
+
function apiEventValue(apiEvent) {
|
|
277
|
+
switch (apiEvent.type) {
|
|
278
|
+
case 'start':
|
|
279
|
+
return variant('start', {
|
|
280
|
+
task: apiEvent.task,
|
|
281
|
+
timestamp: apiEvent.timestamp,
|
|
282
|
+
});
|
|
283
|
+
case 'complete':
|
|
284
|
+
return variant('complete', {
|
|
285
|
+
task: apiEvent.task,
|
|
286
|
+
timestamp: apiEvent.timestamp,
|
|
287
|
+
duration: apiEvent.duration ?? 0,
|
|
288
|
+
peakBytes: apiEvent.peakBytes === undefined ? none : some(apiEvent.peakBytes),
|
|
289
|
+
});
|
|
290
|
+
case 'cached':
|
|
291
|
+
return variant('cached', {
|
|
292
|
+
task: apiEvent.task,
|
|
293
|
+
timestamp: apiEvent.timestamp,
|
|
294
|
+
});
|
|
295
|
+
case 'failed':
|
|
296
|
+
return variant('failed', {
|
|
297
|
+
task: apiEvent.task,
|
|
298
|
+
timestamp: apiEvent.timestamp,
|
|
299
|
+
duration: apiEvent.duration ?? 0,
|
|
300
|
+
exitCode: apiEvent.exitCode ?? BigInt(-1),
|
|
301
|
+
});
|
|
302
|
+
case 'error':
|
|
303
|
+
return variant('error', {
|
|
304
|
+
task: apiEvent.task,
|
|
305
|
+
timestamp: apiEvent.timestamp,
|
|
306
|
+
message: apiEvent.message ?? 'Unknown error',
|
|
307
|
+
});
|
|
308
|
+
case 'input_unavailable':
|
|
309
|
+
return variant('input_unavailable', {
|
|
310
|
+
task: apiEvent.task,
|
|
311
|
+
timestamp: apiEvent.timestamp,
|
|
312
|
+
reason: apiEvent.reason ?? 'Upstream task failed',
|
|
313
|
+
});
|
|
314
|
+
case 'requeued':
|
|
315
|
+
// coreEventToApiEvent gives a requeue each of these.
|
|
316
|
+
return variant('requeued', {
|
|
317
|
+
task: apiEvent.task,
|
|
318
|
+
timestamp: apiEvent.timestamp,
|
|
319
|
+
unit: apiEvent.unit,
|
|
320
|
+
reason: variant(apiEvent.requeueReason, null),
|
|
321
|
+
peak: apiEvent.peak,
|
|
322
|
+
reserves: apiEvent.reserves,
|
|
323
|
+
});
|
|
232
324
|
}
|
|
233
325
|
}
|
|
326
|
+
/** Whether one event sequence number comes before another. */
|
|
327
|
+
const seqBefore = lessFor(IntegerType);
|
|
328
|
+
/** The most pages of a run's events a poll reads, each of its limit. */
|
|
329
|
+
const POLL_PAGES = 8;
|
|
234
330
|
/**
|
|
235
331
|
* Get dataflow execution state (for polling).
|
|
236
332
|
*
|
|
237
333
|
* Returns the state of the workspace's latest run, as the state store keeps
|
|
238
|
-
* it,
|
|
239
|
-
* process runs it, or the last to end.
|
|
240
|
-
*
|
|
241
|
-
*
|
|
242
|
-
*
|
|
334
|
+
* it, and its events past the poll's cursor: the run in flight, whichever
|
|
335
|
+
* process runs it, or the last to end. While the run is in flight, it carries
|
|
336
|
+
* the tasks and units waiting for room and each split task's progress, which
|
|
337
|
+
* the orchestrator running it keeps in memory; and it carries the server's
|
|
338
|
+
* budget when it has one.
|
|
339
|
+
*
|
|
340
|
+
* @remarks
|
|
341
|
+
* The poll reads the run's summary, not its whole state, and reads its events
|
|
342
|
+
* only when the summary's last is past the cursor, so a poll that has every
|
|
343
|
+
* event, or asks for none (`limit` 0), reads none. It reads them from the
|
|
344
|
+
* run's events, which the store keeps apart from its state, a page of `limit`
|
|
345
|
+
* at a time until it has served `limit`, and at most eight pages, so a poll
|
|
346
|
+
* costs what it serves and the events between. The cursor is the stored
|
|
347
|
+
* sequence number of the last event the client has (`since`, 0 for none). The
|
|
348
|
+
* response's `nextSeq` is the cursor past what the poll went through: the API
|
|
349
|
+
* events it served and the events the API does not show between them, or
|
|
350
|
+
* `since` when it went through none. The waits and the split tasks' progress
|
|
351
|
+
* come from the orchestrator's memory, which holds none of a run another
|
|
352
|
+
* process or instance runs.
|
|
353
|
+
*
|
|
354
|
+
* A poll is served at most `limit` events, and never more than
|
|
355
|
+
* {@link DATAFLOW_POLL_EVENTS_MAX}, which is its limit when it names none, so
|
|
356
|
+
* an answer stays within what a host's response may hold however long the
|
|
357
|
+
* run. The response names the run (`runId`) and the sequence number of its
|
|
358
|
+
* last event (`lastSeq`) as its summary read them, and goes through no event
|
|
359
|
+
* past that one: a poll whose `nextSeq` is before `lastSeq` left events for
|
|
360
|
+
* the next.
|
|
243
361
|
*
|
|
244
362
|
* @param stateStore - The store the repository's runs keep their state in
|
|
245
363
|
* @param orchestrator - The orchestrator that runs the repository's dataflows
|
|
246
364
|
* @param repoPath - The repository's path
|
|
247
365
|
* @param workspace - The workspace
|
|
248
|
-
* @param options - The
|
|
366
|
+
* @param options - The poll's cursor, and the most events it is served
|
|
249
367
|
* @param budget - The server's budget, which its runners hold, if any
|
|
250
368
|
* @returns The execution state, or `execution_not_found`
|
|
251
369
|
*/
|
|
252
370
|
export async function getDataflowExecution(stateStore, orchestrator, repoPath, workspace, options = {}, budget) {
|
|
253
|
-
|
|
371
|
+
const since = BigInt(options.since ?? 0);
|
|
372
|
+
const limit = Math.min(options.limit ?? DATAFLOW_POLL_EVENTS_MAX, DATAFLOW_POLL_EVENTS_MAX);
|
|
373
|
+
// The API's events past the cursor, at most `limit` of them, up to the
|
|
374
|
+
// summary's last: one the run recorded after the summary was read is the
|
|
375
|
+
// next poll's. The cursor moves past each event served, and past each the
|
|
376
|
+
// API does not show — a run's start and end, a split task's stages — up to
|
|
377
|
+
// the next served. The run's events are read a page of `limit` at a time,
|
|
378
|
+
// at most POLL_PAGES of them, so a poll reads what it serves and the events
|
|
379
|
+
// between, and a run of events the API does not show is served over polls.
|
|
380
|
+
let run;
|
|
381
|
+
const apiEvents = [];
|
|
382
|
+
let nextSeq = since;
|
|
254
383
|
try {
|
|
255
|
-
|
|
384
|
+
run = await stateStore.readLatestSummary(repoPath, workspace);
|
|
385
|
+
if (run !== null && limit !== 0) {
|
|
386
|
+
paging: for (let page = 0; page < POLL_PAGES && apiEvents.length < limit && seqBefore(nextSeq, run.lastSeq); page++) {
|
|
387
|
+
const stored = await stateStore.getEventsSince(repoPath, workspace, run.id, Number(nextSeq), limit);
|
|
388
|
+
if (stored.length === 0)
|
|
389
|
+
break;
|
|
390
|
+
for (const event of stored) {
|
|
391
|
+
if (seqBefore(run.lastSeq, event.value.seq))
|
|
392
|
+
break paging;
|
|
393
|
+
const apiEvent = coreEventToApiEvent(event);
|
|
394
|
+
if (apiEvent !== null) {
|
|
395
|
+
if (apiEvents.length >= limit)
|
|
396
|
+
break paging;
|
|
397
|
+
apiEvents.push(apiEventValue(apiEvent));
|
|
398
|
+
}
|
|
399
|
+
nextSeq = event.value.seq;
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
}
|
|
256
403
|
}
|
|
257
404
|
catch (err) {
|
|
258
405
|
return sendError(DataflowExecutionStateType, errorToVariant(err));
|
|
259
406
|
}
|
|
260
|
-
if (
|
|
407
|
+
if (run === null) {
|
|
261
408
|
return sendError(DataflowExecutionStateType, variant('execution_not_found', {
|
|
262
409
|
task: workspace,
|
|
263
410
|
}));
|
|
264
411
|
}
|
|
265
|
-
// Filter to API-visible events FIRST, then slice: the client advances its
|
|
266
|
-
// offset by API events RECEIVED, so slicing the unfiltered core list would
|
|
267
|
-
// re-serve part of the window every time a core-only event (execution
|
|
268
|
-
// lifecycle, reactive invalidation) sits inside it.
|
|
269
|
-
const offset = options.offset ?? 0;
|
|
270
|
-
const visibleEvents = [];
|
|
271
|
-
for (const event of coreState.events) {
|
|
272
|
-
const apiEvent = coreEventToApiEvent(event);
|
|
273
|
-
if (apiEvent !== null)
|
|
274
|
-
visibleEvents.push(apiEvent);
|
|
275
|
-
}
|
|
276
|
-
const totalApiEvents = visibleEvents.length;
|
|
277
|
-
// Apply offset and limit over the API-visible sequence
|
|
278
|
-
let events = visibleEvents.slice(offset);
|
|
279
|
-
if (options.limit !== undefined) {
|
|
280
|
-
events = events.slice(0, options.limit);
|
|
281
|
-
}
|
|
282
|
-
// Convert page events to East variant format
|
|
283
|
-
const apiEvents = [];
|
|
284
|
-
for (const apiEvent of events) {
|
|
285
|
-
switch (apiEvent.type) {
|
|
286
|
-
case 'start':
|
|
287
|
-
apiEvents.push(variant('start', {
|
|
288
|
-
task: apiEvent.task,
|
|
289
|
-
timestamp: apiEvent.timestamp,
|
|
290
|
-
}));
|
|
291
|
-
break;
|
|
292
|
-
case 'complete':
|
|
293
|
-
apiEvents.push(variant('complete', {
|
|
294
|
-
task: apiEvent.task,
|
|
295
|
-
timestamp: apiEvent.timestamp,
|
|
296
|
-
duration: apiEvent.duration ?? 0,
|
|
297
|
-
peakBytes: apiEvent.peakBytes === undefined ? none : some(apiEvent.peakBytes),
|
|
298
|
-
}));
|
|
299
|
-
break;
|
|
300
|
-
case 'cached':
|
|
301
|
-
apiEvents.push(variant('cached', {
|
|
302
|
-
task: apiEvent.task,
|
|
303
|
-
timestamp: apiEvent.timestamp,
|
|
304
|
-
}));
|
|
305
|
-
break;
|
|
306
|
-
case 'failed':
|
|
307
|
-
apiEvents.push(variant('failed', {
|
|
308
|
-
task: apiEvent.task,
|
|
309
|
-
timestamp: apiEvent.timestamp,
|
|
310
|
-
duration: apiEvent.duration ?? 0,
|
|
311
|
-
exitCode: apiEvent.exitCode ?? BigInt(-1),
|
|
312
|
-
}));
|
|
313
|
-
break;
|
|
314
|
-
case 'error':
|
|
315
|
-
apiEvents.push(variant('error', {
|
|
316
|
-
task: apiEvent.task,
|
|
317
|
-
timestamp: apiEvent.timestamp,
|
|
318
|
-
message: apiEvent.message ?? 'Unknown error',
|
|
319
|
-
}));
|
|
320
|
-
break;
|
|
321
|
-
case 'input_unavailable':
|
|
322
|
-
apiEvents.push(variant('input_unavailable', {
|
|
323
|
-
task: apiEvent.task,
|
|
324
|
-
timestamp: apiEvent.timestamp,
|
|
325
|
-
reason: apiEvent.reason ?? 'Upstream task failed',
|
|
326
|
-
}));
|
|
327
|
-
break;
|
|
328
|
-
case 'requeued':
|
|
329
|
-
// coreEventToApiEvent gives a requeue each of these.
|
|
330
|
-
apiEvents.push(variant('requeued', {
|
|
331
|
-
task: apiEvent.task,
|
|
332
|
-
timestamp: apiEvent.timestamp,
|
|
333
|
-
unit: apiEvent.unit,
|
|
334
|
-
reason: variant(apiEvent.requeueReason, null),
|
|
335
|
-
peak: apiEvent.peak,
|
|
336
|
-
reserves: apiEvent.reserves,
|
|
337
|
-
}));
|
|
338
|
-
break;
|
|
339
|
-
}
|
|
340
|
-
}
|
|
341
412
|
// Convert status to API format
|
|
342
|
-
const apiStatus = coreStatusToApiStatus(
|
|
413
|
+
const apiStatus = coreStatusToApiStatus(run.status);
|
|
343
414
|
let status;
|
|
344
415
|
switch (apiStatus) {
|
|
345
416
|
case 'running':
|
|
@@ -356,16 +427,16 @@ export async function getDataflowExecution(stateStore, orchestrator, repoPath, w
|
|
|
356
427
|
break;
|
|
357
428
|
}
|
|
358
429
|
// The run's duration, from its own times: until now while it runs
|
|
359
|
-
const endTime =
|
|
360
|
-
const duration = endTime -
|
|
430
|
+
const endTime = run.completedAt.type === 'some' ? run.completedAt.value.getTime() : Date.now();
|
|
431
|
+
const duration = endTime - run.startedAt.getTime();
|
|
361
432
|
// Build summary if not running
|
|
362
433
|
let summary;
|
|
363
|
-
if (
|
|
434
|
+
if (run.status !== 'running') {
|
|
364
435
|
summary = some({
|
|
365
|
-
executed:
|
|
366
|
-
cached:
|
|
367
|
-
failed:
|
|
368
|
-
skipped:
|
|
436
|
+
executed: run.executed,
|
|
437
|
+
cached: run.cached,
|
|
438
|
+
failed: run.failed,
|
|
439
|
+
skipped: run.skipped,
|
|
369
440
|
duration,
|
|
370
441
|
});
|
|
371
442
|
}
|
|
@@ -373,28 +444,30 @@ export async function getDataflowExecution(stateStore, orchestrator, repoPath, w
|
|
|
373
444
|
summary = none;
|
|
374
445
|
}
|
|
375
446
|
// Get completedAt value (handle Option type)
|
|
376
|
-
const completedAtValue =
|
|
377
|
-
? some(
|
|
447
|
+
const completedAtValue = run.completedAt.type === 'some'
|
|
448
|
+
? some(run.completedAt.value.toISOString())
|
|
378
449
|
: none;
|
|
379
450
|
// The waits and each split task's progress, while the run is in flight:
|
|
380
|
-
// nothing stores them, so the orchestrator answers them
|
|
381
|
-
//
|
|
451
|
+
// nothing stores them, so the orchestrator answers them from its memory
|
|
452
|
+
// where it runs the run, and has none of a run it does not hold.
|
|
382
453
|
let live = null;
|
|
383
|
-
if (
|
|
454
|
+
if (run.status === 'running') {
|
|
384
455
|
try {
|
|
385
|
-
live = await orchestrator.
|
|
456
|
+
live = await orchestrator.getProgress({ id: run.id, repo: repoPath, workspace });
|
|
386
457
|
}
|
|
387
458
|
catch {
|
|
388
|
-
//
|
|
459
|
+
// Nothing is waiting that the poll can say.
|
|
389
460
|
}
|
|
390
461
|
}
|
|
391
462
|
const state = {
|
|
463
|
+
runId: run.id,
|
|
392
464
|
status,
|
|
393
|
-
startedAt:
|
|
465
|
+
startedAt: run.startedAt.toISOString(),
|
|
394
466
|
completedAt: completedAtValue,
|
|
395
467
|
summary,
|
|
396
468
|
events: apiEvents,
|
|
397
|
-
|
|
469
|
+
nextSeq,
|
|
470
|
+
lastSeq: run.lastSeq,
|
|
398
471
|
budget: budgetView(budget),
|
|
399
472
|
waiting: live?.waiting ?? [],
|
|
400
473
|
splits: live?.splits ?? [],
|
|
@@ -414,23 +487,25 @@ export function getDataflowBudget(budget) {
|
|
|
414
487
|
}
|
|
415
488
|
/**
|
|
416
489
|
* Cancel a running dataflow execution: the workspace's latest run, when its
|
|
417
|
-
*
|
|
490
|
+
* summary says it is running.
|
|
418
491
|
*
|
|
419
492
|
* @param stateStore - The store the repository's runs keep their state in
|
|
420
493
|
* @param orchestrator - The orchestrator that runs the repository's dataflows
|
|
421
494
|
* @param repoPath - The repository's path
|
|
422
495
|
* @param workspace - The workspace
|
|
423
|
-
* @returns The response: null once the run is cancelled
|
|
496
|
+
* @returns The response: null once the run is cancelled; `dataflow_error`
|
|
497
|
+
* when no run is running, the request meeting the workspace's state rather
|
|
498
|
+
* than a fault of the server's; or why else it is not
|
|
424
499
|
*/
|
|
425
500
|
export async function cancelDataflow(stateStore, orchestrator, repoPath, workspace) {
|
|
426
501
|
try {
|
|
427
|
-
const
|
|
428
|
-
if (
|
|
429
|
-
return sendError(NullType, variant('
|
|
502
|
+
const run = await stateStore.readLatestSummary(repoPath, workspace);
|
|
503
|
+
if (run === null || run.status !== 'running') {
|
|
504
|
+
return sendError(NullType, variant('dataflow_error', {
|
|
430
505
|
message: 'No active execution for this workspace',
|
|
431
506
|
}));
|
|
432
507
|
}
|
|
433
|
-
await orchestrator.cancel({ id:
|
|
508
|
+
await orchestrator.cancel({ id: run.id, repo: repoPath, workspace });
|
|
434
509
|
return sendSuccess(NullType, null);
|
|
435
510
|
}
|
|
436
511
|
catch (err) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dataflow.js","sourceRoot":"","sources":["../../../src/handlers/dataflow.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"dataflow.js","sourceRoot":"","sources":["../../../src/handlers/dataflow.ts"],"names":[],"mappings":"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"}
|