@convex-dev/workpool 0.2.0-beta.0 → 0.2.1
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 +87 -18
- package/dist/commonjs/client/index.d.ts +33 -8
- package/dist/commonjs/client/index.d.ts.map +1 -1
- package/dist/commonjs/client/index.js +37 -7
- package/dist/commonjs/client/index.js.map +1 -1
- package/dist/commonjs/component/complete.d.ts +89 -0
- package/dist/commonjs/component/complete.d.ts.map +1 -0
- package/dist/commonjs/component/complete.js +82 -0
- package/dist/commonjs/component/complete.js.map +1 -0
- package/dist/commonjs/component/kick.d.ts +3 -3
- package/dist/commonjs/component/kick.d.ts.map +1 -1
- package/dist/commonjs/component/kick.js +17 -12
- package/dist/commonjs/component/kick.js.map +1 -1
- package/dist/commonjs/component/lib.d.ts +6 -6
- package/dist/commonjs/component/lib.d.ts.map +1 -1
- package/dist/commonjs/component/lib.js +53 -24
- package/dist/commonjs/component/lib.js.map +1 -1
- package/dist/commonjs/component/logging.d.ts +3 -2
- package/dist/commonjs/component/logging.d.ts.map +1 -1
- package/dist/commonjs/component/logging.js +34 -16
- package/dist/commonjs/component/logging.js.map +1 -1
- package/dist/commonjs/component/loop.d.ts +1 -14
- package/dist/commonjs/component/loop.d.ts.map +1 -1
- package/dist/commonjs/component/loop.js +216 -179
- package/dist/commonjs/component/loop.js.map +1 -1
- package/dist/commonjs/component/recovery.d.ts +45 -0
- package/dist/commonjs/component/recovery.d.ts.map +1 -1
- package/dist/commonjs/component/recovery.js +88 -65
- package/dist/commonjs/component/recovery.js.map +1 -1
- package/dist/commonjs/component/schema.d.ts +17 -13
- package/dist/commonjs/component/schema.d.ts.map +1 -1
- package/dist/commonjs/component/schema.js +5 -3
- package/dist/commonjs/component/schema.js.map +1 -1
- package/dist/commonjs/component/shared.d.ts +24 -15
- package/dist/commonjs/component/shared.d.ts.map +1 -1
- package/dist/commonjs/component/shared.js +20 -7
- package/dist/commonjs/component/shared.js.map +1 -1
- package/dist/commonjs/component/stats.d.ts +36 -29
- package/dist/commonjs/component/stats.d.ts.map +1 -1
- package/dist/commonjs/component/stats.js +110 -52
- package/dist/commonjs/component/stats.js.map +1 -1
- package/dist/commonjs/component/worker.d.ts +4 -14
- package/dist/commonjs/component/worker.d.ts.map +1 -1
- package/dist/commonjs/component/worker.js +23 -36
- package/dist/commonjs/component/worker.js.map +1 -1
- package/dist/esm/client/index.d.ts +33 -8
- package/dist/esm/client/index.d.ts.map +1 -1
- package/dist/esm/client/index.js +37 -7
- package/dist/esm/client/index.js.map +1 -1
- package/dist/esm/component/complete.d.ts +89 -0
- package/dist/esm/component/complete.d.ts.map +1 -0
- package/dist/esm/component/complete.js +82 -0
- package/dist/esm/component/complete.js.map +1 -0
- package/dist/esm/component/kick.d.ts +3 -3
- package/dist/esm/component/kick.d.ts.map +1 -1
- package/dist/esm/component/kick.js +17 -12
- package/dist/esm/component/kick.js.map +1 -1
- package/dist/esm/component/lib.d.ts +6 -6
- package/dist/esm/component/lib.d.ts.map +1 -1
- package/dist/esm/component/lib.js +53 -24
- package/dist/esm/component/lib.js.map +1 -1
- package/dist/esm/component/logging.d.ts +3 -2
- package/dist/esm/component/logging.d.ts.map +1 -1
- package/dist/esm/component/logging.js +34 -16
- package/dist/esm/component/logging.js.map +1 -1
- package/dist/esm/component/loop.d.ts +1 -14
- package/dist/esm/component/loop.d.ts.map +1 -1
- package/dist/esm/component/loop.js +216 -179
- package/dist/esm/component/loop.js.map +1 -1
- package/dist/esm/component/recovery.d.ts +45 -0
- package/dist/esm/component/recovery.d.ts.map +1 -1
- package/dist/esm/component/recovery.js +88 -65
- package/dist/esm/component/recovery.js.map +1 -1
- package/dist/esm/component/schema.d.ts +17 -13
- package/dist/esm/component/schema.d.ts.map +1 -1
- package/dist/esm/component/schema.js +5 -3
- package/dist/esm/component/schema.js.map +1 -1
- package/dist/esm/component/shared.d.ts +24 -15
- package/dist/esm/component/shared.d.ts.map +1 -1
- package/dist/esm/component/shared.js +20 -7
- package/dist/esm/component/shared.js.map +1 -1
- package/dist/esm/component/stats.d.ts +36 -29
- package/dist/esm/component/stats.d.ts.map +1 -1
- package/dist/esm/component/stats.js +110 -52
- package/dist/esm/component/stats.js.map +1 -1
- package/dist/esm/component/worker.d.ts +4 -14
- package/dist/esm/component/worker.d.ts.map +1 -1
- package/dist/esm/component/worker.js +23 -36
- package/dist/esm/component/worker.js.map +1 -1
- package/package.json +12 -12
- package/src/client/index.ts +82 -43
- package/src/component/README.md +15 -15
- package/src/component/_generated/api.d.ts +10 -5
- package/src/component/complete.test.ts +508 -0
- package/src/component/complete.ts +109 -0
- package/src/component/kick.test.ts +29 -19
- package/src/component/kick.ts +25 -17
- package/src/component/lib.test.ts +262 -17
- package/src/component/lib.ts +68 -30
- package/src/component/logging.test.ts +16 -0
- package/src/component/logging.ts +45 -24
- package/src/component/loop.test.ts +1158 -0
- package/src/component/loop.ts +292 -224
- package/src/component/recovery.test.ts +536 -0
- package/src/component/recovery.ts +100 -75
- package/src/component/schema.ts +6 -4
- package/src/component/shared.ts +23 -8
- package/src/component/stats.test.ts +345 -0
- package/src/component/stats.ts +149 -56
- package/src/component/worker.ts +25 -38
|
@@ -15,27 +15,27 @@ export declare const enqueue: import("convex/server").RegisteredMutation<"public
|
|
|
15
15
|
runAt: number;
|
|
16
16
|
config: {
|
|
17
17
|
maxParallelism: number;
|
|
18
|
-
logLevel: "DEBUG" | "INFO" | "WARN" | "ERROR";
|
|
18
|
+
logLevel: "DEBUG" | "INFO" | "REPORT" | "WARN" | "ERROR";
|
|
19
19
|
};
|
|
20
20
|
}, Promise<import("convex/values").GenericId<"work">>>;
|
|
21
21
|
export declare const cancel: import("convex/server").RegisteredMutation<"public", {
|
|
22
22
|
id: import("convex/values").GenericId<"work">;
|
|
23
|
-
logLevel: "DEBUG" | "INFO" | "WARN" | "ERROR";
|
|
23
|
+
logLevel: "DEBUG" | "INFO" | "REPORT" | "WARN" | "ERROR";
|
|
24
24
|
}, Promise<void>>;
|
|
25
25
|
export declare const cancelAll: import("convex/server").RegisteredMutation<"public", {
|
|
26
26
|
before?: number | undefined;
|
|
27
|
-
logLevel: "DEBUG" | "INFO" | "WARN" | "ERROR";
|
|
27
|
+
logLevel: "DEBUG" | "INFO" | "REPORT" | "WARN" | "ERROR";
|
|
28
28
|
}, Promise<void>>;
|
|
29
29
|
export declare const status: import("convex/server").RegisteredQuery<"public", {
|
|
30
30
|
id: import("convex/values").GenericId<"work">;
|
|
31
31
|
}, Promise<{
|
|
32
32
|
readonly state: "finished";
|
|
33
|
-
readonly
|
|
33
|
+
readonly previousAttempts?: undefined;
|
|
34
34
|
} | {
|
|
35
35
|
readonly state: "pending";
|
|
36
|
-
readonly
|
|
36
|
+
readonly previousAttempts: number;
|
|
37
37
|
} | {
|
|
38
38
|
readonly state: "running";
|
|
39
|
-
readonly
|
|
39
|
+
readonly previousAttempts: number;
|
|
40
40
|
}>>;
|
|
41
41
|
//# sourceMappingURL=lib.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lib.d.ts","sourceRoot":"","sources":["../../../src/component/lib.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"lib.d.ts","sourceRoot":"","sources":["../../../src/component/lib.ts"],"names":[],"mappings":"AAoBA,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;;sDAkClB,CAAC;AAEH,eAAO,MAAM,MAAM;;;iBAejB,CAAC;AAGH,eAAO,MAAM,SAAS;;;iBAmCpB,CAAC;AAEH,eAAO,MAAM,MAAM;;;;;;;;;;;GAyBjB,CAAC"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { v } from "convex/values";
|
|
2
|
+
import { api } from "./_generated/api.js";
|
|
2
3
|
import { mutation, query } from "./_generated/server.js";
|
|
3
|
-
import { nextSegment, onComplete, retryBehavior, config, status as statusValidator, toSegment, boundScheduledTime, } from "./shared.js";
|
|
4
|
-
import { logLevel } from "./logging.js";
|
|
5
4
|
import { kickMainLoop } from "./kick.js";
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
5
|
+
import { createLogger, logLevel } from "./logging.js";
|
|
6
|
+
import { boundScheduledTime, config, getNextSegment, max, onComplete, retryBehavior, status as statusValidator, toSegment, } from "./shared.js";
|
|
7
|
+
import { recordEnqueued } from "./stats.js";
|
|
8
8
|
const MAX_POSSIBLE_PARALLELISM = 100;
|
|
9
9
|
export const enqueue = mutation({
|
|
10
10
|
args: {
|
|
@@ -32,12 +32,12 @@ export const enqueue = mutation({
|
|
|
32
32
|
...workArgs,
|
|
33
33
|
attempts: 0,
|
|
34
34
|
});
|
|
35
|
+
const limit = await kickMainLoop(ctx, "enqueue", config);
|
|
35
36
|
await ctx.db.insert("pendingStart", {
|
|
36
37
|
workId,
|
|
37
|
-
segment: toSegment(runAt),
|
|
38
|
+
segment: max(toSegment(runAt), limit),
|
|
38
39
|
});
|
|
39
|
-
|
|
40
|
-
// TODO: stats event
|
|
40
|
+
recordEnqueued(console, { workId, fnName: workArgs.fnName, runAt });
|
|
41
41
|
return workId;
|
|
42
42
|
},
|
|
43
43
|
});
|
|
@@ -47,12 +47,14 @@ export const cancel = mutation({
|
|
|
47
47
|
logLevel,
|
|
48
48
|
},
|
|
49
49
|
handler: async (ctx, { id, logLevel }) => {
|
|
50
|
-
await ctx
|
|
51
|
-
|
|
52
|
-
segment
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
50
|
+
const shouldCancel = await shouldCancelWorkItem(ctx, id, logLevel);
|
|
51
|
+
if (shouldCancel) {
|
|
52
|
+
const segment = await kickMainLoop(ctx, "cancel", { logLevel });
|
|
53
|
+
await ctx.db.insert("pendingCancelation", {
|
|
54
|
+
workId: id,
|
|
55
|
+
segment,
|
|
56
|
+
});
|
|
57
|
+
}
|
|
56
58
|
},
|
|
57
59
|
});
|
|
58
60
|
const PAGE_SIZE = 64;
|
|
@@ -60,20 +62,23 @@ export const cancelAll = mutation({
|
|
|
60
62
|
args: { logLevel, before: v.optional(v.number()) },
|
|
61
63
|
handler: async (ctx, { logLevel, before }) => {
|
|
62
64
|
const beforeTime = before ?? Date.now();
|
|
63
|
-
const segment = nextSegment();
|
|
64
65
|
const pageOfWork = await ctx.db
|
|
65
66
|
.query("work")
|
|
66
67
|
.withIndex("by_creation_time", (q) => q.lte("_creationTime", beforeTime))
|
|
67
68
|
.order("desc")
|
|
68
69
|
.take(PAGE_SIZE);
|
|
69
|
-
await Promise.all(pageOfWork.map(async ({ _id }) =>
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
70
|
+
const shouldCancel = await Promise.all(pageOfWork.map(async ({ _id }) => shouldCancelWorkItem(ctx, _id, logLevel)));
|
|
71
|
+
let segment = getNextSegment();
|
|
72
|
+
if (shouldCancel.some((c) => c)) {
|
|
73
|
+
segment = await kickMainLoop(ctx, "cancel", { logLevel });
|
|
74
|
+
}
|
|
75
|
+
await Promise.all(pageOfWork.map(({ _id }, index) => {
|
|
76
|
+
if (shouldCancel[index]) {
|
|
77
|
+
return ctx.db.insert("pendingCancelation", {
|
|
78
|
+
workId: _id,
|
|
79
|
+
segment,
|
|
80
|
+
});
|
|
75
81
|
}
|
|
76
|
-
await ctx.db.insert("pendingCancelation", { workId: _id, segment });
|
|
77
82
|
}));
|
|
78
83
|
if (pageOfWork.length === PAGE_SIZE) {
|
|
79
84
|
await ctx.scheduler.runAfter(0, api.lib.cancelAll, {
|
|
@@ -81,7 +86,6 @@ export const cancelAll = mutation({
|
|
|
81
86
|
before: pageOfWork[pageOfWork.length - 1]._creationTime,
|
|
82
87
|
});
|
|
83
88
|
}
|
|
84
|
-
await kickMainLoop(ctx, "cancel", { logLevel });
|
|
85
89
|
},
|
|
86
90
|
});
|
|
87
91
|
export const status = query({
|
|
@@ -97,12 +101,37 @@ export const status = query({
|
|
|
97
101
|
.withIndex("workId", (q) => q.eq("workId", id))
|
|
98
102
|
.unique();
|
|
99
103
|
if (pendingStart) {
|
|
100
|
-
return { state: "pending",
|
|
104
|
+
return { state: "pending", previousAttempts: work.attempts };
|
|
105
|
+
}
|
|
106
|
+
const pendingCompletion = await ctx.db
|
|
107
|
+
.query("pendingCompletion")
|
|
108
|
+
.withIndex("workId", (q) => q.eq("workId", id))
|
|
109
|
+
.unique();
|
|
110
|
+
if (pendingCompletion?.retry) {
|
|
111
|
+
return { state: "pending", previousAttempts: work.attempts };
|
|
101
112
|
}
|
|
102
113
|
// Assume it's in progress. It could be pending cancelation
|
|
103
|
-
return { state: "running",
|
|
114
|
+
return { state: "running", previousAttempts: work.attempts };
|
|
104
115
|
},
|
|
105
116
|
});
|
|
117
|
+
async function shouldCancelWorkItem(ctx, workId, logLevel) {
|
|
118
|
+
const console = createLogger(logLevel);
|
|
119
|
+
// No-op if the work doesn't exist or has completed.
|
|
120
|
+
const work = await ctx.db.get(workId);
|
|
121
|
+
if (!work) {
|
|
122
|
+
console.warn(`[cancel] work ${workId} doesn't exist`);
|
|
123
|
+
return false;
|
|
124
|
+
}
|
|
125
|
+
const pendingCancelation = await ctx.db
|
|
126
|
+
.query("pendingCancelation")
|
|
127
|
+
.withIndex("workId", (q) => q.eq("workId", workId))
|
|
128
|
+
.unique();
|
|
129
|
+
if (pendingCancelation) {
|
|
130
|
+
console.warn(`[cancel] work ${workId} has already been canceled`);
|
|
131
|
+
return false;
|
|
132
|
+
}
|
|
133
|
+
return true;
|
|
134
|
+
}
|
|
106
135
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
107
136
|
const console = "THIS IS A REMINDER TO USE createLogger";
|
|
108
137
|
//# sourceMappingURL=lib.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lib.js","sourceRoot":"","sources":["../../../src/component/lib.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,eAAe,CAAC;AAClC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"lib.js","sourceRoot":"","sources":["../../../src/component/lib.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { Infer } from "convex/values";
|
|
2
2
|
export declare const DEFAULT_LOG_LEVEL: LogLevel;
|
|
3
|
+
export declare const logLevel: import("convex/values").VUnion<"DEBUG" | "INFO" | "REPORT" | "WARN" | "ERROR", [import("convex/values").VLiteral<"DEBUG", "required">, import("convex/values").VLiteral<"INFO", "required">, import("convex/values").VLiteral<"REPORT", "required">, import("convex/values").VLiteral<"WARN", "required">, import("convex/values").VLiteral<"ERROR", "required">], "required", never>;
|
|
4
|
+
export type LogLevel = Infer<typeof logLevel>;
|
|
3
5
|
export type Logger = {
|
|
4
6
|
debug: (...args: unknown[]) => void;
|
|
5
7
|
info: (...args: unknown[]) => void;
|
|
@@ -9,7 +11,6 @@ export type Logger = {
|
|
|
9
11
|
timeEnd: (label: string) => void;
|
|
10
12
|
event: (event: string, payload: Record<string, unknown>) => void;
|
|
11
13
|
};
|
|
14
|
+
export declare function shouldLog(config: LogLevel, level: LogLevel): boolean;
|
|
12
15
|
export declare function createLogger(level?: LogLevel): Logger;
|
|
13
|
-
export declare const logLevel: import("convex/values").VUnion<"DEBUG" | "INFO" | "WARN" | "ERROR", [import("convex/values").VLiteral<"DEBUG", "required">, import("convex/values").VLiteral<"INFO", "required">, import("convex/values").VLiteral<"WARN", "required">, import("convex/values").VLiteral<"ERROR", "required">], "required", never>;
|
|
14
|
-
export type LogLevel = Infer<typeof logLevel>;
|
|
15
16
|
//# sourceMappingURL=logging.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logging.d.ts","sourceRoot":"","sources":["../../../src/component/logging.ts"],"names":[],"mappings":"AAAA,OAAO,EAAK,KAAK,EAAE,MAAM,eAAe,CAAC;AAEzC,eAAO,MAAM,iBAAiB,EAAE,
|
|
1
|
+
{"version":3,"file":"logging.d.ts","sourceRoot":"","sources":["../../../src/component/logging.ts"],"names":[],"mappings":"AAAA,OAAO,EAAK,KAAK,EAAE,MAAM,eAAe,CAAC;AAEzC,eAAO,MAAM,iBAAiB,EAAE,QAAmB,CAAC;AAIpD,eAAO,MAAM,QAAQ,uXAMpB,CAAC;AACF,MAAM,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,QAAQ,CAAC,CAAC;AAE9C,MAAM,MAAM,MAAM,GAAG;IACnB,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACpC,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACnC,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACnC,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACpC,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9B,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,KAAK,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;CAClE,CAAC;AAUF,wBAAgB,SAAS,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,WAE1D;AAOD,wBAAgB,YAAY,CAAC,KAAK,CAAC,EAAE,QAAQ,GAAG,MAAM,CAiDrD"}
|
|
@@ -1,52 +1,70 @@
|
|
|
1
1
|
import { v } from "convex/values";
|
|
2
|
-
export const DEFAULT_LOG_LEVEL = "
|
|
2
|
+
export const DEFAULT_LOG_LEVEL = "REPORT";
|
|
3
|
+
// NOTE: the ordering here is important! A config level of "INFO" will log
|
|
4
|
+
// "INFO", "REPORT", "WARN",and "ERROR" events.
|
|
5
|
+
export const logLevel = v.union(v.literal("DEBUG"), v.literal("INFO"), v.literal("REPORT"), v.literal("WARN"), v.literal("ERROR"));
|
|
6
|
+
const logLevelOrder = logLevel.members.map((l) => l.value);
|
|
7
|
+
const logLevelByName = logLevelOrder.reduce((acc, l, i) => {
|
|
8
|
+
acc[l] = i;
|
|
9
|
+
return acc;
|
|
10
|
+
}, {});
|
|
11
|
+
export function shouldLog(config, level) {
|
|
12
|
+
return logLevelByName[config] <= logLevelByName[level];
|
|
13
|
+
}
|
|
14
|
+
const DEBUG = logLevelByName["DEBUG"];
|
|
15
|
+
const INFO = logLevelByName["INFO"];
|
|
16
|
+
const REPORT = logLevelByName["REPORT"];
|
|
17
|
+
const WARN = logLevelByName["WARN"];
|
|
18
|
+
const ERROR = logLevelByName["ERROR"];
|
|
3
19
|
export function createLogger(level) {
|
|
4
|
-
const levelIndex = [
|
|
5
|
-
if (levelIndex ===
|
|
20
|
+
const levelIndex = logLevelByName[level ?? DEFAULT_LOG_LEVEL];
|
|
21
|
+
if (levelIndex === undefined) {
|
|
6
22
|
throw new Error(`Invalid log level: ${level}`);
|
|
7
23
|
}
|
|
8
24
|
return {
|
|
9
25
|
debug: (...args) => {
|
|
10
|
-
if (levelIndex <=
|
|
26
|
+
if (levelIndex <= DEBUG) {
|
|
11
27
|
console.debug(...args);
|
|
12
28
|
}
|
|
13
29
|
},
|
|
14
30
|
info: (...args) => {
|
|
15
|
-
if (levelIndex <=
|
|
31
|
+
if (levelIndex <= INFO) {
|
|
16
32
|
console.info(...args);
|
|
17
33
|
}
|
|
18
34
|
},
|
|
19
35
|
warn: (...args) => {
|
|
20
|
-
if (levelIndex <=
|
|
36
|
+
if (levelIndex <= WARN) {
|
|
21
37
|
console.warn(...args);
|
|
22
38
|
}
|
|
23
39
|
},
|
|
24
40
|
error: (...args) => {
|
|
25
|
-
if (levelIndex <=
|
|
41
|
+
if (levelIndex <= ERROR) {
|
|
26
42
|
console.error(...args);
|
|
27
43
|
}
|
|
28
44
|
},
|
|
29
45
|
time: (label) => {
|
|
30
|
-
if (levelIndex <=
|
|
46
|
+
if (levelIndex <= DEBUG) {
|
|
31
47
|
console.time(label);
|
|
32
48
|
}
|
|
33
49
|
},
|
|
34
50
|
timeEnd: (label) => {
|
|
35
|
-
if (levelIndex <=
|
|
51
|
+
if (levelIndex <= DEBUG) {
|
|
36
52
|
console.timeEnd(label);
|
|
37
53
|
}
|
|
38
54
|
},
|
|
39
55
|
event: (event, payload) => {
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
56
|
+
const fullPayload = {
|
|
57
|
+
component: "workpool",
|
|
58
|
+
event,
|
|
59
|
+
...payload,
|
|
60
|
+
};
|
|
61
|
+
if (levelIndex === REPORT && event === "report") {
|
|
62
|
+
console.info(JSON.stringify(fullPayload));
|
|
63
|
+
}
|
|
64
|
+
else if (levelIndex <= INFO) {
|
|
46
65
|
console.info(JSON.stringify(fullPayload));
|
|
47
66
|
}
|
|
48
67
|
},
|
|
49
68
|
};
|
|
50
69
|
}
|
|
51
|
-
export const logLevel = v.union(v.literal("DEBUG"), v.literal("INFO"), v.literal("WARN"), v.literal("ERROR"));
|
|
52
70
|
//# sourceMappingURL=logging.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logging.js","sourceRoot":"","sources":["../../../src/component/logging.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAS,MAAM,eAAe,CAAC;AAEzC,MAAM,CAAC,MAAM,iBAAiB,GAAa,
|
|
1
|
+
{"version":3,"file":"logging.js","sourceRoot":"","sources":["../../../src/component/logging.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,22 +5,9 @@ export declare const main: import("convex/server").RegisteredMutation<"internal"
|
|
|
5
5
|
generation: bigint;
|
|
6
6
|
segment: bigint;
|
|
7
7
|
}, Promise<void>>;
|
|
8
|
-
export declare const complete: import("convex/server").RegisteredMutation<"internal", {
|
|
9
|
-
done: {
|
|
10
|
-
workId: import("convex/values").GenericId<"work">;
|
|
11
|
-
runResult: {
|
|
12
|
-
kind: "success";
|
|
13
|
-
returnValue: any;
|
|
14
|
-
} | {
|
|
15
|
-
kind: "failed";
|
|
16
|
-
error: string;
|
|
17
|
-
} | {
|
|
18
|
-
kind: "canceled";
|
|
19
|
-
};
|
|
20
|
-
}[];
|
|
21
|
-
}, Promise<void>>;
|
|
22
8
|
export declare const updateRunStatus: import("convex/server").RegisteredMutation<"internal", {
|
|
23
9
|
generation: bigint;
|
|
10
|
+
segment: bigint;
|
|
24
11
|
}, Promise<void>>;
|
|
25
12
|
export declare function withJitter(delay: number): number;
|
|
26
13
|
//# sourceMappingURL=loop.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loop.d.ts","sourceRoot":"","sources":["../../../src/component/loop.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"loop.d.ts","sourceRoot":"","sources":["../../../src/component/loop.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAGpD,OAAO,EAAE,GAAG,EAAM,MAAM,2BAA2B,CAAC;AA4BpD,eAAO,MAAM,aAAa,EAAE,mBAAmB,CAAC,GAAG,CAAC,eAAe,CAAC,CAanE,CAAC;AAGF,eAAO,MAAM,IAAI;;;iBAyEf,CAAC;AAEH,eAAO,MAAM,eAAe;;;iBA6H1B,CAAC;AA0WH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,UAEvC"}
|