anbaric-impl-cloud 1.58.3 → 1.60.0
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/CloudJobPersistence.d.ts +1 -0
- package/dist/CloudJobPersistence.d.ts.map +1 -1
- package/dist/CloudJobPersistence.js +4 -1
- package/dist/CloudJobPersistence.js.map +1 -1
- package/dist/PushConsumer.d.ts +10 -1
- package/dist/PushConsumer.d.ts.map +1 -1
- package/dist/PushConsumer.js +72 -11
- package/dist/PushConsumer.js.map +1 -1
- package/package.json +2 -2
|
@@ -8,6 +8,7 @@ declare class CloudJobPersistence extends JobPersistence implements AppAware {
|
|
|
8
8
|
private jobPath;
|
|
9
9
|
protected deleteInternal(id: string): Promise<void>;
|
|
10
10
|
protected listInternal(pageSize?: number, page?: number, query?: JobPersistence.Query): Promise<Array<Job>>;
|
|
11
|
+
protected heartbeatInternal(id: string, running: boolean): Promise<void>;
|
|
11
12
|
protected killInternal(id: string): Promise<void>;
|
|
12
13
|
protected killOlderThanInternal(lastUpdatedBefore: Date): Promise<number>;
|
|
13
14
|
protected countByStateInternal(): Promise<Array<JobPersistence.StateCount>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CloudJobPersistence.d.ts","sourceRoot":"","sources":["../src/CloudJobPersistence.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAE,OAAO,EAAgB,GAAG,EAAE,cAAc,EAA0E,MAAM,eAAe,CAAC;AAG5J,cAAM,mBAAoB,SAAQ,cAAe,YAAW,QAAQ;IAEhE,OAAO,CAAC,MAAM,CAAkB;IAEhC,YAAY,OAAO,GAAG,MAAwC,EAAE,OAAO,GAAG,OAA2B,EAGpG;IAED,QAAQ,IAAK,MAAM,CAElB;IAID,UAAgB,YAAY,CAAC,GAAG,EAAG,GAAG,EAAE,UAAU,CAAC,EAAG,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,GAAI,OAAO,CAAC,IAAI,CAAC,CAGtF;IAID,UAAgB,gBAAgB,CAAC,EAAE,EAAG,MAAM,EAAE,IAAI,CAAC,EAAG,KAAK,CAAC,MAAM,CAAC,GAAI,OAAO,CAAC,GAAG,CAAC,CAYlF;IAED,OAAO,CAAC,OAAO;IAKf,UAAgB,cAAc,CAAC,EAAE,EAAG,MAAM,GAAI,OAAO,CAAC,IAAI,CAAC,CAE1D;IAED,UAAgB,YAAY,CAAC,QAAQ,GAAG,MAAY,EAAE,IAAI,GAAG,MAAU,EAAE,KAAK,GAAG,cAAc,CAAC,KAAU,GAAI,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAOhI;IAED,UAAgB,YAAY,CAAC,EAAE,EAAG,MAAM,GAAI,OAAO,CAAC,IAAI,CAAC,CAExD;IAED,UAAgB,qBAAqB,CAAC,iBAAiB,EAAG,IAAI,GAAI,OAAO,CAAC,MAAM,CAAC,CAGhF;IAED,UAAgB,oBAAoB,IAAK,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAGjF;CAEJ;AAED,OAAO,EAAE,mBAAmB,EAAE,CAAA"}
|
|
1
|
+
{"version":3,"file":"CloudJobPersistence.d.ts","sourceRoot":"","sources":["../src/CloudJobPersistence.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAE,OAAO,EAAgB,GAAG,EAAE,cAAc,EAA0E,MAAM,eAAe,CAAC;AAG5J,cAAM,mBAAoB,SAAQ,cAAe,YAAW,QAAQ;IAEhE,OAAO,CAAC,MAAM,CAAkB;IAEhC,YAAY,OAAO,GAAG,MAAwC,EAAE,OAAO,GAAG,OAA2B,EAGpG;IAED,QAAQ,IAAK,MAAM,CAElB;IAID,UAAgB,YAAY,CAAC,GAAG,EAAG,GAAG,EAAE,UAAU,CAAC,EAAG,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,GAAI,OAAO,CAAC,IAAI,CAAC,CAGtF;IAID,UAAgB,gBAAgB,CAAC,EAAE,EAAG,MAAM,EAAE,IAAI,CAAC,EAAG,KAAK,CAAC,MAAM,CAAC,GAAI,OAAO,CAAC,GAAG,CAAC,CAYlF;IAED,OAAO,CAAC,OAAO;IAKf,UAAgB,cAAc,CAAC,EAAE,EAAG,MAAM,GAAI,OAAO,CAAC,IAAI,CAAC,CAE1D;IAED,UAAgB,YAAY,CAAC,QAAQ,GAAG,MAAY,EAAE,IAAI,GAAG,MAAU,EAAE,KAAK,GAAG,cAAc,CAAC,KAAU,GAAI,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAOhI;IAED,UAAgB,iBAAiB,CAAC,EAAE,EAAG,MAAM,EAAE,OAAO,EAAG,OAAO,GAAI,OAAO,CAAC,IAAI,CAAC,CAEhF;IAED,UAAgB,YAAY,CAAC,EAAE,EAAG,MAAM,GAAI,OAAO,CAAC,IAAI,CAAC,CAExD;IAED,UAAgB,qBAAqB,CAAC,iBAAiB,EAAG,IAAI,GAAI,OAAO,CAAC,MAAM,CAAC,CAGhF;IAED,UAAgB,oBAAoB,IAAK,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAGjF;CAEJ;AAED,OAAO,EAAE,mBAAmB,EAAE,CAAA"}
|
|
@@ -26,7 +26,7 @@ class CloudJobPersistence extends JobPersistence {
|
|
|
26
26
|
const more = await this.client.request("GET", this.jobPath(id, wanted));
|
|
27
27
|
return new Map(Object.entries(more.properties));
|
|
28
28
|
};
|
|
29
|
-
return new Job(whole.id, new JobProperties(whole.properties.snapshot(), loader, false), whole.state, whole.workflowId, whole.appId, whole.startedBy, whole.startedAt, whole.lastUpdated, whole.killed, whole.status, whole.awaitMetadata, whole.waitingFor);
|
|
29
|
+
return new Job(whole.id, new JobProperties(whole.properties.snapshot(), loader, false), whole.state, whole.workflowId, whole.appId, whole.startedBy, whole.startedAt, whole.lastUpdated, whole.killed, whole.status, whole.awaitMetadata, whole.waitingFor, whole.heartbeatAt);
|
|
30
30
|
}
|
|
31
31
|
jobPath(id, keys) {
|
|
32
32
|
const query = keys ? `?keys=${encodeURIComponent(keys.join(","))}` : "";
|
|
@@ -44,6 +44,9 @@ class CloudJobPersistence extends JobPersistence {
|
|
|
44
44
|
const serialized = await this.client.request("GET", `/jobs?${parameters}`);
|
|
45
45
|
return serialized.map(deserializeJob);
|
|
46
46
|
}
|
|
47
|
+
async heartbeatInternal(id, running) {
|
|
48
|
+
await this.client.request("POST", `/jobs/${encodeURIComponent(id)}/heartbeat`, { running });
|
|
49
|
+
}
|
|
47
50
|
async killInternal(id) {
|
|
48
51
|
await this.client.request("POST", `/jobs/${encodeURIComponent(id)}/kill`, {});
|
|
49
52
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CloudJobPersistence.js","sourceRoot":"","sources":["../src/CloudJobPersistence.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,YAAY,EAAE,GAAG,EAAE,cAAc,EAAE,aAAa,EAAE,WAAW,EAAiB,cAAc,EAAE,YAAY,EAAC,MAAM,eAAe,CAAC;AAC5J,OAAO,EAAC,cAAc,EAAC,MAAM,qBAAqB,CAAC;AAEnD,MAAM,mBAAoB,SAAQ,cAAc;IAEpC,MAAM,CAAkB;IAEhC,YAAY,OAAO,GAAY,cAAc,CAAC,cAAc,EAAE,EAAE,OAAO,GAAa,IAAI,WAAW,EAAE;QACjG,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,MAAM,GAAG,IAAI,cAAc,CAAC,OAAO,CAAC,CAAC;IAC9C,CAAC;IAED,QAAQ;QACJ,OAAO,YAAY,EAAE,CAAC;IAC1B,CAAC;IAED,yEAAyE;IACzE,gEAAgE;IACtD,KAAK,CAAC,YAAY,CAAC,GAAS,EAAE,UAA8B;QAClE,MAAM,UAAU,GAAG,EAAE,GAAG,YAAY,CAAC,GAAG,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,WAAW,CAAC,UAAU,IAAI,EAAE,CAAC,EAAE,CAAC;QAC9F,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,SAAS,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;IACxF,CAAC;IAED;uEACmE;IACzD,KAAK,CAAC,gBAAgB,CAAC,EAAW,EAAE,IAAqB;QAC/D,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,CAAC,CAAkB,CAAC;QAC7F,MAAM,KAAK,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;QACzC,IAAI,CAAE,IAAI;YAAE,OAAO,KAAK,CAAC;QAEzB,MAAM,MAAM,GAAG,KAAK,EAAE,MAAuB,EAAE,EAAE;YAC7C,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC,CAAkB,CAAC;YACzF,OAAO,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;QACpD,CAAC,CAAC;QACF,OAAO,IAAI,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,aAAa,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,CAAC,KAAK,EAC/F,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,MAAM,EAChG,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"CloudJobPersistence.js","sourceRoot":"","sources":["../src/CloudJobPersistence.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,YAAY,EAAE,GAAG,EAAE,cAAc,EAAE,aAAa,EAAE,WAAW,EAAiB,cAAc,EAAE,YAAY,EAAC,MAAM,eAAe,CAAC;AAC5J,OAAO,EAAC,cAAc,EAAC,MAAM,qBAAqB,CAAC;AAEnD,MAAM,mBAAoB,SAAQ,cAAc;IAEpC,MAAM,CAAkB;IAEhC,YAAY,OAAO,GAAY,cAAc,CAAC,cAAc,EAAE,EAAE,OAAO,GAAa,IAAI,WAAW,EAAE;QACjG,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,MAAM,GAAG,IAAI,cAAc,CAAC,OAAO,CAAC,CAAC;IAC9C,CAAC;IAED,QAAQ;QACJ,OAAO,YAAY,EAAE,CAAC;IAC1B,CAAC;IAED,yEAAyE;IACzE,gEAAgE;IACtD,KAAK,CAAC,YAAY,CAAC,GAAS,EAAE,UAA8B;QAClE,MAAM,UAAU,GAAG,EAAE,GAAG,YAAY,CAAC,GAAG,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,WAAW,CAAC,UAAU,IAAI,EAAE,CAAC,EAAE,CAAC;QAC9F,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,SAAS,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;IACxF,CAAC;IAED;uEACmE;IACzD,KAAK,CAAC,gBAAgB,CAAC,EAAW,EAAE,IAAqB;QAC/D,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,CAAC,CAAkB,CAAC;QAC7F,MAAM,KAAK,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;QACzC,IAAI,CAAE,IAAI;YAAE,OAAO,KAAK,CAAC;QAEzB,MAAM,MAAM,GAAG,KAAK,EAAE,MAAuB,EAAE,EAAE;YAC7C,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC,CAAkB,CAAC;YACzF,OAAO,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;QACpD,CAAC,CAAC;QACF,OAAO,IAAI,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,aAAa,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,CAAC,KAAK,EAC/F,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,MAAM,EAChG,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;IAChF,CAAC;IAEO,OAAO,CAAC,EAAW,EAAE,IAAqB;QAC9C,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,SAAS,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACxE,OAAO,SAAS,kBAAkB,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC;IACrD,CAAC;IAES,KAAK,CAAC,cAAc,CAAC,EAAW;QACtC,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,SAAS,kBAAkB,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAC3E,CAAC;IAES,KAAK,CAAC,YAAY,CAAC,QAAQ,GAAY,GAAG,EAAE,IAAI,GAAY,CAAC,EAAE,KAAK,GAA0B,EAAE;QACtG,MAAM,UAAU,GAAG,IAAI,eAAe,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC3F,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAChD,IAAI,KAAK,KAAK,SAAS;gBAAE,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACjE,CAAC;QACD,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,SAAS,UAAU,EAAE,CAAyB,CAAC;QACnG,OAAO,UAAU,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAC1C,CAAC;IAES,KAAK,CAAC,iBAAiB,CAAC,EAAW,EAAE,OAAiB;QAC5D,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,SAAS,kBAAkB,CAAC,EAAE,CAAC,YAAY,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;IAChG,CAAC;IAES,KAAK,CAAC,YAAY,CAAC,EAAW;QACpC,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,SAAS,kBAAkB,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAClF,CAAC;IAES,KAAK,CAAC,qBAAqB,CAAC,iBAAwB;QAC1D,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,gBAAgB,EAAE,EAAE,MAAM,EAAE,iBAAiB,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QAChH,OAAO,MAAM,CAAC,MAAM,CAAC;IACzB,CAAC;IAES,KAAK,CAAC,oBAAoB;QAChC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;QAC/D,OAAO,MAAM,CAAC,MAAM,CAAC;IACzB,CAAC;CAEJ;AAED,OAAO,EAAE,mBAAmB,EAAE,CAAA"}
|
package/dist/PushConsumer.d.ts
CHANGED
|
@@ -2,19 +2,28 @@ import { Consumer } from "anbaric-tsapi";
|
|
|
2
2
|
type ProcessJob = (jobId: string) => Promise<void>;
|
|
3
3
|
declare class PushConsumer implements Consumer {
|
|
4
4
|
private listenPort;
|
|
5
|
+
private drainOnSignals;
|
|
5
6
|
private subscribers;
|
|
6
7
|
private client;
|
|
7
8
|
private server?;
|
|
8
9
|
private listening?;
|
|
9
10
|
private boundPort?;
|
|
10
|
-
|
|
11
|
+
private draining;
|
|
12
|
+
private inFlightSteps;
|
|
13
|
+
constructor(baseUrl?: string, listenPort?: number, drainOnSignals?: Array<NodeJS.Signals>);
|
|
11
14
|
get port(): number | undefined;
|
|
15
|
+
get inFlight(): number;
|
|
16
|
+
get isDraining(): boolean;
|
|
12
17
|
private key;
|
|
13
18
|
subscribe(appId: string | undefined, workflowId: string, processJob: ProcessJob): void;
|
|
14
19
|
private register;
|
|
20
|
+
drain(): void;
|
|
21
|
+
drained(timeoutMs?: number): Promise<boolean>;
|
|
22
|
+
private drainThenExit;
|
|
15
23
|
cleanUp(): Promise<void>;
|
|
16
24
|
private listen;
|
|
17
25
|
private handle;
|
|
26
|
+
private health;
|
|
18
27
|
private processAll;
|
|
19
28
|
private reply;
|
|
20
29
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PushConsumer.d.ts","sourceRoot":"","sources":["../src/PushConsumer.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,QAAQ,EAAe,MAAM,eAAe,CAAC;AAGrD,KAAK,UAAU,GAAG,CAAC,KAAK,EAAG,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"PushConsumer.d.ts","sourceRoot":"","sources":["../src/PushConsumer.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,QAAQ,EAAe,MAAM,eAAe,CAAC;AAGrD,KAAK,UAAU,GAAG,CAAC,KAAK,EAAG,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAgCpD,cAAM,YAAa,YAAW,QAAQ;IAWtB,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,cAAc;IAVlC,OAAO,CAAC,WAAW,CAAiC;IACpD,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,MAAM,CAAC,CAAU;IACzB,OAAO,CAAC,SAAS,CAAC,CAAiB;IACnC,OAAO,CAAC,SAAS,CAAC,CAAU;IAC5B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,aAAa,CAAK;IAE1B,YAAY,OAAO,GAAG,MAAwC,EAC1C,UAAU,GAAG,MAA0D,EACvE,cAAc,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAuD,EAE/G;IAED,IAAI,IAAI,IAAK,MAAM,GAAG,SAAS,CAE9B;IAED,IAAI,QAAQ,IAAK,MAAM,CAEtB;IAED,IAAI,UAAU,IAAK,OAAO,CAEzB;IAID,OAAO,CAAC,GAAG;IAIX,SAAS,CAAC,KAAK,EAAG,MAAM,GAAG,SAAS,EAAE,UAAU,EAAG,MAAM,EAAE,UAAU,EAAG,UAAU,GAAI,IAAI,CAOzF;YAEa,QAAQ;IAUtB,KAAK,IAAK,IAAI,CAEb;IAGK,OAAO,CAAC,SAAS,GAAG,MAA2B,GAAI,OAAO,CAAC,OAAO,CAAC,CAMxE;YAEa,aAAa;IAOrB,OAAO,IAAK,OAAO,CAAC,IAAI,CAAC,CAQ9B;IAED,OAAO,CAAC,MAAM;YAaA,MAAM;IA4BpB,OAAO,CAAC,MAAM;YAYA,UAAU;IAyBxB,OAAO,CAAC,KAAK;CAUhB;AAED,OAAO,EAAE,YAAY,EAAE,CAAA"}
|
package/dist/PushConsumer.js
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
import { createServer } from "node:http";
|
|
2
2
|
import { CloudApiClient } from "./CloudApiClient.js";
|
|
3
|
+
/* How long a consumer told to stop by a signal keeps the process alive for
|
|
4
|
+
the work it has in hand. Under the platform's own drain the signal only
|
|
5
|
+
arrives once the work is done; on its own it is bounded by the 120 seconds a
|
|
6
|
+
Fargate task is given to stop, with a little kept back for the exit. */
|
|
7
|
+
const DRAIN_ON_SIGNAL_MS = 110_000;
|
|
8
|
+
const IDLE_POLL_MS = 250;
|
|
3
9
|
const readBody = (request) => new Promise((resolve, reject) => {
|
|
4
10
|
const chunks = [];
|
|
5
11
|
request.on("data", chunk => chunks.push(chunk));
|
|
@@ -14,20 +20,38 @@ const readBody = (request) => new Promise((resolve, reject) => {
|
|
|
14
20
|
}
|
|
15
21
|
});
|
|
16
22
|
});
|
|
23
|
+
/* The app-side end of the platform's queue: the platform pushes batches of
|
|
24
|
+
messages to this consumer's URL, and each is confirmed the moment the
|
|
25
|
+
consumer takes it on - from then on the job is the app's.
|
|
26
|
+
|
|
27
|
+
A consumer can be told to drain, by the platform ahead of replacing the app
|
|
28
|
+
or by a signal: it stops accepting pushes (they are refused unconfirmed, so
|
|
29
|
+
the platform offers them to whatever replaces this app) and finishes the
|
|
30
|
+
steps it already has in hand, which it counts and reports on /health. */
|
|
17
31
|
class PushConsumer {
|
|
18
32
|
listenPort;
|
|
33
|
+
drainOnSignals;
|
|
19
34
|
subscribers = new Map();
|
|
20
35
|
client;
|
|
21
36
|
server;
|
|
22
37
|
listening;
|
|
23
38
|
boundPort;
|
|
24
|
-
|
|
39
|
+
draining = false;
|
|
40
|
+
inFlightSteps = 0;
|
|
41
|
+
constructor(baseUrl = CloudApiClient.defaultBaseUrl(), listenPort = Number(process.env.ANBARIC_CONSUMER_PORT ?? 8788), drainOnSignals = process.env.ANBARIC_CONSUMER_URL ? ["SIGTERM"] : []) {
|
|
25
42
|
this.listenPort = listenPort;
|
|
43
|
+
this.drainOnSignals = drainOnSignals;
|
|
26
44
|
this.client = new CloudApiClient(baseUrl);
|
|
27
45
|
}
|
|
28
46
|
get port() {
|
|
29
47
|
return this.boundPort;
|
|
30
48
|
}
|
|
49
|
+
get inFlight() {
|
|
50
|
+
return this.inFlightSteps;
|
|
51
|
+
}
|
|
52
|
+
get isDraining() {
|
|
53
|
+
return this.draining;
|
|
54
|
+
}
|
|
31
55
|
// Subscribers are keyed by the (appId, workflowId) composite, encoded as a
|
|
32
56
|
// tuple so an app and a machine id can never collide.
|
|
33
57
|
key(appId, workflowId) {
|
|
@@ -35,8 +59,11 @@ class PushConsumer {
|
|
|
35
59
|
}
|
|
36
60
|
subscribe(appId, workflowId, processJob) {
|
|
37
61
|
this.subscribers.set(this.key(appId, workflowId), processJob);
|
|
38
|
-
if (!this.server)
|
|
62
|
+
if (!this.server) {
|
|
39
63
|
this.listening = this.listen();
|
|
64
|
+
for (const signal of this.drainOnSignals)
|
|
65
|
+
process.once(signal, () => void this.drainThenExit());
|
|
66
|
+
}
|
|
40
67
|
void this.register(appId, workflowId);
|
|
41
68
|
}
|
|
42
69
|
async register(appId, workflowId) {
|
|
@@ -48,6 +75,25 @@ class PushConsumer {
|
|
|
48
75
|
catch {
|
|
49
76
|
}
|
|
50
77
|
}
|
|
78
|
+
// Stops taking on new messages; what is already in hand runs to the end.
|
|
79
|
+
drain() {
|
|
80
|
+
this.draining = true;
|
|
81
|
+
}
|
|
82
|
+
// Resolves once nothing is in flight, or at the deadline.
|
|
83
|
+
async drained(timeoutMs = DRAIN_ON_SIGNAL_MS) {
|
|
84
|
+
const deadline = Date.now() + timeoutMs;
|
|
85
|
+
while (this.inFlightSteps > 0 && Date.now() < deadline) {
|
|
86
|
+
await new Promise(resolve => setTimeout(resolve, IDLE_POLL_MS));
|
|
87
|
+
}
|
|
88
|
+
return this.inFlightSteps === 0;
|
|
89
|
+
}
|
|
90
|
+
async drainThenExit() {
|
|
91
|
+
this.drain();
|
|
92
|
+
const idle = await this.drained();
|
|
93
|
+
if (!idle)
|
|
94
|
+
console.error(`[anbaric] stopping with ${this.inFlightSteps} step(s) still in flight after ${DRAIN_ON_SIGNAL_MS / 1000}s`);
|
|
95
|
+
process.exit(0);
|
|
96
|
+
}
|
|
51
97
|
async cleanUp() {
|
|
52
98
|
this.subscribers.clear();
|
|
53
99
|
if (!this.server)
|
|
@@ -71,7 +117,16 @@ class PushConsumer {
|
|
|
71
117
|
}
|
|
72
118
|
async handle(request, response) {
|
|
73
119
|
const url = new URL(request.url ?? "/", "http://localhost");
|
|
120
|
+
if (request.method === "GET" && url.pathname === "/health") {
|
|
121
|
+
return this.reply(response, 200, this.health());
|
|
122
|
+
}
|
|
123
|
+
if (request.method === "POST" && url.pathname === "/drain") {
|
|
124
|
+
this.drain();
|
|
125
|
+
return this.reply(response, 200, this.health());
|
|
126
|
+
}
|
|
74
127
|
if (request.method === "POST" && url.pathname === "/process") {
|
|
128
|
+
if (this.draining)
|
|
129
|
+
return this.reply(response, 503, { error: "Draining: not accepting new messages", ...this.health() });
|
|
75
130
|
const body = await readBody(request);
|
|
76
131
|
if (!body || !Array.isArray(body.messages)) {
|
|
77
132
|
return this.reply(response, 400, { error: "Expected a body of { messages : Array<QueueMessage> }" });
|
|
@@ -83,22 +138,24 @@ class PushConsumer {
|
|
|
83
138
|
}
|
|
84
139
|
this.reply(response, 404, { error: "Not found" });
|
|
85
140
|
}
|
|
141
|
+
health() {
|
|
142
|
+
return { draining: this.draining, inFlight: this.inFlightSteps };
|
|
143
|
+
}
|
|
86
144
|
/* A message is confirmed as soon as this consumer takes it on, not when the
|
|
87
|
-
work finishes
|
|
145
|
+
work finishes: from then on the job is the app's, and the platform never
|
|
146
|
+
offers it again. The queue's lease only guards against two dispatchers
|
|
88
147
|
claiming the same row at once; it says nothing about how long the work
|
|
89
|
-
takes
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
A process that dies midway through therefore drops that job's message.
|
|
94
|
-
That is a separate concern - losing work to a crash - and wants its own
|
|
95
|
-
answer rather than being papered over by redelivering to a consumer
|
|
96
|
-
that is already busy with it. */
|
|
148
|
+
takes, so confirming at the end would hand a long step out again while
|
|
149
|
+
it was still running. What protects work in hand is draining: the
|
|
150
|
+
platform asks before replacing the app, and a signal asks on the way
|
|
151
|
+
out. */
|
|
97
152
|
async processAll(messages) {
|
|
98
153
|
for (const message of messages) {
|
|
99
154
|
const processJob = this.subscribers.get(this.key(message.appId, message.workflowId));
|
|
100
155
|
if (!processJob)
|
|
101
156
|
continue;
|
|
157
|
+
if (this.draining)
|
|
158
|
+
continue;
|
|
102
159
|
try {
|
|
103
160
|
await this.client.request("POST", "/queue/confirm", message);
|
|
104
161
|
}
|
|
@@ -107,12 +164,16 @@ class PushConsumer {
|
|
|
107
164
|
// work that would then be duplicated by that redelivery.
|
|
108
165
|
continue;
|
|
109
166
|
}
|
|
167
|
+
this.inFlightSteps++;
|
|
110
168
|
try {
|
|
111
169
|
await processJob(message.jobId);
|
|
112
170
|
}
|
|
113
171
|
catch {
|
|
114
172
|
// The state machine records a failed job; the queue is done here.
|
|
115
173
|
}
|
|
174
|
+
finally {
|
|
175
|
+
this.inFlightSteps--;
|
|
176
|
+
}
|
|
116
177
|
}
|
|
117
178
|
}
|
|
118
179
|
reply(response, status, body) {
|
package/dist/PushConsumer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PushConsumer.js","sourceRoot":"","sources":["../src/PushConsumer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAA0C,MAAM,WAAW,CAAC;AAGhF,OAAO,EAAC,cAAc,EAAC,MAAM,qBAAqB,CAAC;AAInD,MAAM,QAAQ,GAAG,CAAC,OAAyB,EAAiB,EAAE,CAC1D,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;IAC5B,MAAM,MAAM,GAAmB,EAAE,CAAC;IAClC,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAChD,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC5B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;QACnB,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC7C,IAAI,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;QAC5D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,MAAM,CAAC,KAAK,CAAC,CAAC;QAClB,CAAC;IACL,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC;AAEP,MAAM,YAAY;
|
|
1
|
+
{"version":3,"file":"PushConsumer.js","sourceRoot":"","sources":["../src/PushConsumer.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "anbaric-impl-cloud",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.60.0",
|
|
4
4
|
"description": "Public client library for the Anbaric Cloud hosting API, providing JobPersistence and Queue implementations backed by the cloud service",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "chris@anbaric.ai",
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
"prepublishOnly": "npm run build"
|
|
21
21
|
},
|
|
22
22
|
"dependencies": {
|
|
23
|
-
"anbaric-tsapi": "^1.
|
|
23
|
+
"anbaric-tsapi": "^1.60.0"
|
|
24
24
|
},
|
|
25
25
|
"devDependencies": {
|
|
26
26
|
"@types/node": "^26.2.0",
|