duron 0.3.0-beta.10 → 0.3.0-beta.11
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/dist/action-job.d.ts +31 -0
- package/dist/action-job.d.ts.map +1 -1
- package/dist/action-job.js +59 -0
- package/dist/action-manager.d.ts +42 -0
- package/dist/action-manager.d.ts.map +1 -1
- package/dist/action-manager.js +61 -0
- package/dist/action.d.ts +143 -0
- package/dist/action.d.ts.map +1 -1
- package/dist/action.js +131 -0
- package/dist/adapters/adapter.d.ts +359 -0
- package/dist/adapters/adapter.d.ts.map +1 -1
- package/dist/adapters/adapter.js +208 -0
- package/dist/adapters/postgres/base.d.ts +166 -0
- package/dist/adapters/postgres/base.d.ts.map +1 -1
- package/dist/adapters/postgres/base.js +268 -17
- package/dist/adapters/postgres/pglite.d.ts +37 -0
- package/dist/adapters/postgres/pglite.d.ts.map +1 -1
- package/dist/adapters/postgres/pglite.js +38 -0
- package/dist/adapters/postgres/postgres.d.ts +35 -0
- package/dist/adapters/postgres/postgres.d.ts.map +1 -1
- package/dist/adapters/postgres/postgres.js +42 -0
- package/dist/adapters/postgres/schema.js +11 -1
- package/dist/adapters/schemas.d.ts +9 -0
- package/dist/adapters/schemas.d.ts.map +1 -1
- package/dist/adapters/schemas.js +73 -1
- package/dist/client.d.ts +224 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +311 -1
- package/dist/constants.js +6 -0
- package/dist/errors.d.ts +119 -0
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +111 -0
- package/dist/server.d.ts +44 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +56 -0
- package/dist/step-manager.d.ts +83 -0
- package/dist/step-manager.d.ts.map +1 -1
- package/dist/step-manager.js +237 -5
- package/dist/telemetry/adapter.d.ts +322 -0
- package/dist/telemetry/adapter.d.ts.map +1 -1
- package/dist/telemetry/adapter.js +145 -0
- package/dist/telemetry/index.js +1 -0
- package/dist/telemetry/local.d.ts +48 -0
- package/dist/telemetry/local.d.ts.map +1 -1
- package/dist/telemetry/local.js +102 -0
- package/dist/telemetry/noop.d.ts +10 -0
- package/dist/telemetry/noop.d.ts.map +1 -1
- package/dist/telemetry/noop.js +43 -0
- package/dist/telemetry/opentelemetry.d.ts +23 -0
- package/dist/telemetry/opentelemetry.d.ts.map +1 -1
- package/dist/telemetry/opentelemetry.js +39 -0
- package/dist/utils/p-retry.d.ts +5 -0
- package/dist/utils/p-retry.d.ts.map +1 -1
- package/dist/utils/p-retry.js +8 -0
- package/dist/utils/wait-for-abort.d.ts +1 -0
- package/dist/utils/wait-for-abort.d.ts.map +1 -1
- package/dist/utils/wait-for-abort.js +1 -0
- package/package.json +1 -1
- package/src/adapters/postgres/base.ts +40 -17
- package/src/adapters/schemas.ts +11 -1
|
@@ -1011,26 +1011,38 @@ export class PostgresBaseAdapter<Database extends DrizzleDatabase, Connection> e
|
|
|
1011
1011
|
* Internal method to get a job by its ID. Does not include step information.
|
|
1012
1012
|
*/
|
|
1013
1013
|
protected async _getJobById(jobId: string): Promise<Job | null> {
|
|
1014
|
+
const jobsTable = this.tables.jobsTable
|
|
1015
|
+
|
|
1016
|
+
// Calculate duration as a SQL expression (finishedAt - startedAt in milliseconds)
|
|
1017
|
+
const durationMs = sql<number | null>`
|
|
1018
|
+
CASE
|
|
1019
|
+
WHEN ${jobsTable.started_at} IS NOT NULL AND ${jobsTable.finished_at} IS NOT NULL
|
|
1020
|
+
THEN EXTRACT(EPOCH FROM (${jobsTable.finished_at} - ${jobsTable.started_at})) * 1000
|
|
1021
|
+
ELSE NULL
|
|
1022
|
+
END
|
|
1023
|
+
`.as('duration_ms')
|
|
1024
|
+
|
|
1014
1025
|
const [job] = await this.db
|
|
1015
1026
|
.select({
|
|
1016
|
-
id:
|
|
1017
|
-
actionName:
|
|
1018
|
-
groupKey:
|
|
1019
|
-
input:
|
|
1020
|
-
output:
|
|
1021
|
-
error:
|
|
1022
|
-
status:
|
|
1023
|
-
timeoutMs:
|
|
1024
|
-
expiresAt:
|
|
1025
|
-
startedAt:
|
|
1026
|
-
finishedAt:
|
|
1027
|
-
createdAt:
|
|
1028
|
-
updatedAt:
|
|
1029
|
-
concurrencyLimit:
|
|
1030
|
-
clientId:
|
|
1027
|
+
id: jobsTable.id,
|
|
1028
|
+
actionName: jobsTable.action_name,
|
|
1029
|
+
groupKey: jobsTable.group_key,
|
|
1030
|
+
input: jobsTable.input,
|
|
1031
|
+
output: jobsTable.output,
|
|
1032
|
+
error: jobsTable.error,
|
|
1033
|
+
status: jobsTable.status,
|
|
1034
|
+
timeoutMs: jobsTable.timeout_ms,
|
|
1035
|
+
expiresAt: jobsTable.expires_at,
|
|
1036
|
+
startedAt: jobsTable.started_at,
|
|
1037
|
+
finishedAt: jobsTable.finished_at,
|
|
1038
|
+
createdAt: jobsTable.created_at,
|
|
1039
|
+
updatedAt: jobsTable.updated_at,
|
|
1040
|
+
concurrencyLimit: jobsTable.concurrency_limit,
|
|
1041
|
+
clientId: jobsTable.client_id,
|
|
1042
|
+
durationMs,
|
|
1031
1043
|
})
|
|
1032
|
-
.from(
|
|
1033
|
-
.where(eq(
|
|
1044
|
+
.from(jobsTable)
|
|
1045
|
+
.where(eq(jobsTable.id, jobId))
|
|
1034
1046
|
.limit(1)
|
|
1035
1047
|
|
|
1036
1048
|
return job ?? null
|
|
@@ -1194,6 +1206,15 @@ export class PostgresBaseAdapter<Database extends DrizzleDatabase, Connection> e
|
|
|
1194
1206
|
}
|
|
1195
1207
|
}
|
|
1196
1208
|
|
|
1209
|
+
// Calculate duration as a SQL expression (finishedAt - startedAt in milliseconds)
|
|
1210
|
+
const durationMs = sql<number | null>`
|
|
1211
|
+
CASE
|
|
1212
|
+
WHEN ${jobsTable.started_at} IS NOT NULL AND ${jobsTable.finished_at} IS NOT NULL
|
|
1213
|
+
THEN EXTRACT(EPOCH FROM (${jobsTable.finished_at} - ${jobsTable.started_at})) * 1000
|
|
1214
|
+
ELSE NULL
|
|
1215
|
+
END
|
|
1216
|
+
`.as('duration_ms')
|
|
1217
|
+
|
|
1197
1218
|
const sortFieldMap: Record<JobSort['field'], any> = {
|
|
1198
1219
|
createdAt: jobsTable.created_at,
|
|
1199
1220
|
startedAt: jobsTable.started_at,
|
|
@@ -1201,6 +1222,7 @@ export class PostgresBaseAdapter<Database extends DrizzleDatabase, Connection> e
|
|
|
1201
1222
|
status: jobsTable.status,
|
|
1202
1223
|
actionName: jobsTable.action_name,
|
|
1203
1224
|
expiresAt: jobsTable.expires_at,
|
|
1225
|
+
duration: durationMs,
|
|
1204
1226
|
}
|
|
1205
1227
|
|
|
1206
1228
|
const jobs = await this.db
|
|
@@ -1220,6 +1242,7 @@ export class PostgresBaseAdapter<Database extends DrizzleDatabase, Connection> e
|
|
|
1220
1242
|
updatedAt: jobsTable.updated_at,
|
|
1221
1243
|
concurrencyLimit: jobsTable.concurrency_limit,
|
|
1222
1244
|
clientId: jobsTable.client_id,
|
|
1245
|
+
durationMs,
|
|
1223
1246
|
})
|
|
1224
1247
|
.from(jobsTable)
|
|
1225
1248
|
.where(where)
|
package/src/adapters/schemas.ts
CHANGED
|
@@ -46,6 +46,8 @@ export const JobSchema = z.object({
|
|
|
46
46
|
updatedAt: DateSchema,
|
|
47
47
|
concurrencyLimit: z.coerce.number(),
|
|
48
48
|
clientId: z.string().nullable().optional(),
|
|
49
|
+
/** Duration in milliseconds (finishedAt - startedAt). Null if job hasn't finished. */
|
|
50
|
+
durationMs: z.coerce.number().nullable().default(null),
|
|
49
51
|
})
|
|
50
52
|
|
|
51
53
|
// ============================================================================
|
|
@@ -85,7 +87,15 @@ export const JobStepWithoutOutputSchema = JobStepSchema.omit({ output: true })
|
|
|
85
87
|
|
|
86
88
|
export const SortOrderSchema = z.enum(['asc', 'desc'])
|
|
87
89
|
|
|
88
|
-
export const JobSortFieldSchema = z.enum([
|
|
90
|
+
export const JobSortFieldSchema = z.enum([
|
|
91
|
+
'createdAt',
|
|
92
|
+
'startedAt',
|
|
93
|
+
'finishedAt',
|
|
94
|
+
'status',
|
|
95
|
+
'actionName',
|
|
96
|
+
'expiresAt',
|
|
97
|
+
'duration',
|
|
98
|
+
])
|
|
89
99
|
|
|
90
100
|
export const JobSortSchema = z.object({
|
|
91
101
|
field: JobSortFieldSchema,
|