@ductape/sdk 0.2.8 → 0.2.10
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/api/services/processorApi.service.d.ts +4 -0
- package/dist/api/services/processorApi.service.js +13 -0
- package/dist/api/services/processorApi.service.js.map +1 -1
- package/dist/api/services/productsApi.service.d.ts +9 -0
- package/dist/api/services/productsApi.service.js.map +1 -1
- package/dist/database/databases.service.js +7 -9
- package/dist/database/databases.service.js.map +1 -1
- package/dist/features/feature-executor.js +3 -17
- package/dist/features/feature-executor.js.map +1 -1
- package/dist/index.d.ts +5 -1
- package/dist/index.js +41 -9
- package/dist/index.js.map +1 -1
- package/dist/logs/logs.service.d.ts +3 -0
- package/dist/logs/logs.service.js +25 -0
- package/dist/logs/logs.service.js.map +1 -1
- package/dist/processor/services/processor.service.d.ts +8 -0
- package/dist/processor/services/processor.service.js +28 -2
- package/dist/processor/services/processor.service.js.map +1 -1
- package/dist/products/services/products.service.js +2 -2
- package/dist/products/services/products.service.js.map +1 -1
- package/dist/resilience/fallback.service.d.ts +2 -4
- package/dist/resilience/fallback.service.js +56 -65
- package/dist/resilience/fallback.service.js.map +1 -1
- package/dist/resilience/health-status-cache.d.ts +11 -0
- package/dist/resilience/health-status-cache.js +46 -0
- package/dist/resilience/health-status-cache.js.map +1 -0
- package/dist/resilience/healthcheck.service.js +1 -1
- package/dist/resilience/healthcheck.service.js.map +1 -1
- package/dist/resilience/quota.service.d.ts +3 -5
- package/dist/resilience/quota.service.js +82 -62
- package/dist/resilience/quota.service.js.map +1 -1
- package/dist/resilience/resilience.service.js +6 -2
- package/dist/resilience/resilience.service.js.map +1 -1
- package/dist/resilience/types/index.d.ts +8 -0
- package/dist/runtime/resilient-write-queue.d.ts +18 -0
- package/dist/runtime/resilient-write-queue.js +74 -0
- package/dist/runtime/resilient-write-queue.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/types/index.types.d.ts +4 -0
- package/dist/types/index.types.js.map +1 -1
- package/dist/types/productsBuilder.types.d.ts +2 -0
- package/dist/types/productsBuilder.types.js.map +1 -1
- package/package.json +1 -1
|
@@ -24,6 +24,8 @@ export default class LogsService {
|
|
|
24
24
|
private environment;
|
|
25
25
|
private ip_address;
|
|
26
26
|
private language;
|
|
27
|
+
private retryTimer?;
|
|
28
|
+
private retryAttempt;
|
|
27
29
|
constructor({ workspace_id, public_key, user_id, token, product_id, env_type, app_id, workspace_private_key, ip_address, language }: ILoggerInit);
|
|
28
30
|
add(item: ILogData): void;
|
|
29
31
|
fetchLogs(): ILogData[];
|
|
@@ -38,6 +40,7 @@ export default class LogsService {
|
|
|
38
40
|
* Logs API. Failed and unsent entries remain queued for a later flush.
|
|
39
41
|
*/
|
|
40
42
|
publish(): Promise<void>;
|
|
43
|
+
private scheduleRetry;
|
|
41
44
|
fetch(params: LogQueryParams): Promise<any>;
|
|
42
45
|
private getUserAccess;
|
|
43
46
|
}
|
|
@@ -4,6 +4,7 @@ const logsApi_service_1 = require("../api/services/logsApi.service");
|
|
|
4
4
|
const processor_utils_1 = require("../processor/utils/processor.utils");
|
|
5
5
|
class LogsService {
|
|
6
6
|
constructor({ workspace_id, public_key, user_id, token, product_id, env_type, app_id, workspace_private_key, ip_address, language }) {
|
|
7
|
+
this.retryAttempt = 0;
|
|
7
8
|
this.workspace_id = workspace_id;
|
|
8
9
|
this.public_key = public_key;
|
|
9
10
|
this.user_id = user_id;
|
|
@@ -19,6 +20,10 @@ class LogsService {
|
|
|
19
20
|
}
|
|
20
21
|
add(item) {
|
|
21
22
|
var _a, _b, _c, _d;
|
|
23
|
+
const isInitiatedLifecycle = [item.message, item.name]
|
|
24
|
+
.some((value) => /\s-\sinitiated$/i.test(String(value !== null && value !== void 0 ? value : '').trim()));
|
|
25
|
+
if (isInitiatedLifecycle)
|
|
26
|
+
return;
|
|
22
27
|
item.data = typeof item.data === 'object' ? JSON.stringify(item.data) : item.data;
|
|
23
28
|
// Automatically calculate latency if start and end are provided
|
|
24
29
|
let latency = item.latency;
|
|
@@ -107,6 +112,8 @@ class LogsService {
|
|
|
107
112
|
const maxEntryDataBytes = this.configuredByteLimit('DUCTAPE_LOG_MAX_ENTRY_DATA_BYTES', LogsService.DEFAULT_ENTRY_DATA_BYTES);
|
|
108
113
|
const payload = pending.map((item) => {
|
|
109
114
|
var _a;
|
|
115
|
+
if (item.data_encrypted)
|
|
116
|
+
return item;
|
|
110
117
|
const rawData = typeof item.data === 'string' ? item.data : JSON.stringify((_a = item.data) !== null && _a !== void 0 ? _a : {});
|
|
111
118
|
const dataStr = this.truncateUtf8(rawData, maxEntryDataBytes);
|
|
112
119
|
if (!this.workspace_private_key)
|
|
@@ -143,9 +150,27 @@ class LogsService {
|
|
|
143
150
|
this.eventLogs.unshift(...unsent);
|
|
144
151
|
console.warn(`[Ductape Logs] Flush failed; ${unsent.length} log entries retained for retry. ` +
|
|
145
152
|
'Request details were suppressed.');
|
|
153
|
+
this.scheduleRetry();
|
|
146
154
|
return;
|
|
147
155
|
}
|
|
148
156
|
}
|
|
157
|
+
this.retryAttempt = 0;
|
|
158
|
+
if (this.retryTimer)
|
|
159
|
+
clearTimeout(this.retryTimer);
|
|
160
|
+
this.retryTimer = undefined;
|
|
161
|
+
}
|
|
162
|
+
scheduleRetry() {
|
|
163
|
+
var _a, _b;
|
|
164
|
+
if (this.retryTimer)
|
|
165
|
+
return;
|
|
166
|
+
this.retryAttempt += 1;
|
|
167
|
+
const exponential = Math.min(60000, 500 * (2 ** Math.min(this.retryAttempt, 7)));
|
|
168
|
+
const jitter = Math.floor(Math.random() * Math.max(1, exponential / 4));
|
|
169
|
+
this.retryTimer = setTimeout(() => {
|
|
170
|
+
this.retryTimer = undefined;
|
|
171
|
+
void this.publish();
|
|
172
|
+
}, exponential + jitter);
|
|
173
|
+
(_b = (_a = this.retryTimer).unref) === null || _b === void 0 ? void 0 : _b.call(_a);
|
|
149
174
|
}
|
|
150
175
|
async fetch(params) {
|
|
151
176
|
if (!params.component) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logs.service.js","sourceRoot":"","sources":["../../src/logs/logs.service.ts"],"names":[],"mappings":";;AAAA,qEAAgF;AAChF,wEAA6D;AAY7D,MAAqB,WAAW;
|
|
1
|
+
{"version":3,"file":"logs.service.js","sourceRoot":"","sources":["../../src/logs/logs.service.ts"],"names":[],"mappings":";;AAAA,qEAAgF;AAChF,wEAA6D;AAY7D,MAAqB,WAAW;IAqB5B,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,qBAAqB,EAAE,UAAU,EAAE,QAAQ,EAAe;QAFxI,iBAAY,GAAG,CAAC,CAAC;QAGrB,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,UAAU,GAAG,UAAU,aAAV,UAAU,cAAV,UAAU,GAAI,EAAE,CAAC;QACnC,IAAI,CAAC,MAAM,GAAG,MAAM,aAAN,MAAM,cAAN,MAAM,GAAI,IAAI,CAAC;QAC7B,IAAI,CAAC,qBAAqB,GAAG,qBAAqB,aAArB,qBAAqB,cAArB,qBAAqB,GAAI,IAAI,CAAC;QAC3D,IAAI,CAAC,UAAU,GAAG,UAAU,aAAV,UAAU,cAAV,UAAU,GAAI,IAAI,CAAC;QACrC,mFAAmF;QACnF,IAAI,CAAC,QAAQ,GAAG,QAAQ,aAAR,QAAQ,cAAR,QAAQ,GAAI,YAAY,CAAC;QACzC,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;QAEpB,IAAI,CAAC,OAAO,GAAG,IAAI,+BAAa,CAAC,QAAQ,CAAC,CAAC;IAC/C,CAAC;IAED,GAAG,CAAC,IAAc;;QACd,MAAM,oBAAoB,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC;aACjD,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,aAAL,KAAK,cAAL,KAAK,GAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAC1E,IAAI,oBAAoB;YAAE,OAAO;QAEjC,IAAI,CAAC,IAAI,GAAG,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QAElF,gEAAgE;QAChE,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC3B,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;YACrC,OAAO,GAAG,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC;QACpC,CAAC;QAED,IAAI,CAAC,SAAS,CAAC,IAAI,iCACZ,IAAI,KACP,SAAS,EAAE,IAAI,IAAI,EAAE,EACrB,OAAO,EACP,UAAU,EAAE,MAAA,MAAA,IAAI,CAAC,UAAU,mCAAI,IAAI,CAAC,UAAU,mCAAI,SAAS,EAC3D,QAAQ,EAAE,MAAA,MAAA,IAAI,CAAC,QAAQ,mCAAI,IAAI,CAAC,QAAQ,mCAAI,SAAS,IACvD,CAAC;IACP,CAAC;IAED,SAAS;QACL,OAAO,IAAI,CAAC,SAAS,CAAC;IAC1B,CAAC;IAED,YAAY,CAAC,UAAkB;QAC3B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IACjC,CAAC;IAEO,mBAAmB,CAAC,IAAY,EAAE,QAAgB;QACtD,MAAM,KAAK,GAAG,OAAO,OAAO,KAAK,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QAC/E,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC;IAClE,CAAC;IAEO,UAAU,CAAC,KAAc;QAC7B,OAAO,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC;IACtE,CAAC;IAEO,YAAY,CAAC,KAAa,EAAE,QAAgB;QAChD,IAAI,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,UAAU,IAAI,QAAQ;YAAE,OAAO,KAAK,CAAC;QACzE,MAAM,MAAM,GAAG,gCAAgC,CAAC;QAChD,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC;QAC1F,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,IAAI,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC;QACxB,OAAO,GAAG,GAAG,IAAI,EAAE,CAAC;YAChB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YACxC,IAAI,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,UAAU,IAAI,aAAa;gBAAE,GAAG,GAAG,GAAG,CAAC;;gBACpF,IAAI,GAAG,GAAG,GAAG,CAAC,CAAC;QACxB,CAAC;QACD,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,MAAM,EAAE,CAAC;IAC7C,CAAC;IAEO,KAAK,CAAC,KAAK,CAAC,EAAU;QAC1B,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;IAC5D,CAAC;IAEO,KAAK,CAAC,YAAY,CAAC,KAAsB,EAAE,OAAO,GAAG,CAAC;;QAC1D,IAAI,CAAC;YACD,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE;gBAC9B,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,YAAY,EAAE,IAAI,CAAC,YAAY;gBAC/B,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,UAAU,EAAE,MAAA,IAAI,CAAC,UAAU,mCAAI,SAAS;gBACxC,QAAQ,EAAE,MAAA,IAAI,CAAC,QAAQ,mCAAI,SAAS;aACvC,CAAC,CAAC;QACP,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YAClB,MAAM,MAAM,GAAG,MAAM,CAAC,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,QAAQ,0CAAE,MAAM,CAAC,CAAC;YAC/C,IAAI,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBAC7C,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC;gBAC3D,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC;gBACxD,OAAO;YACX,CAAC;YAED,MAAM,UAAU,GAAG,IAAI,CAAC,mBAAmB,CACvC,yBAAyB,EACzB,WAAW,CAAC,mBAAmB,CAClC,CAAC;YACF,MAAM,SAAS,GAAG,CAAC,MAAM,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,IAAI,GAAG,CAAC;YACjG,IAAI,SAAS,IAAI,OAAO,GAAG,UAAU,EAAE,CAAC;gBACpC,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAA,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,QAAQ,0CAAE,OAAO,0CAAG,aAAa,CAAC,CAAC,CAAC;gBAC5E,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,KAAM,EAAE,GAAG,GAAG,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC;gBAC7D,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC;gBAC5E,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,iBAAiB,IAAI,CAAC;oBACxE,CAAC,CAAC,iBAAiB,GAAG,IAAI;oBAC1B,CAAC,CAAC,aAAa,GAAG,QAAQ,CAAC;gBAC/B,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBAC1B,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC;gBAC5C,OAAO;YACX,CAAC;YACD,MAAM,KAAK,CAAC;QAChB,CAAC;IACL,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,OAAO;QACT,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM;YAAE,OAAO;QAEnC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAChE,MAAM,aAAa,GAAG,IAAI,CAAC,mBAAmB,CAC1C,6BAA6B,EAC7B,WAAW,CAAC,mBAAmB,CAClC,CAAC;QACF,MAAM,iBAAiB,GAAG,IAAI,CAAC,mBAAmB,CAC9C,kCAAkC,EAClC,WAAW,CAAC,wBAAwB,CACvC,CAAC;QAEF,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;;YACjC,IAAK,IAAgD,CAAC,cAAc;gBAAE,OAAO,IAAI,CAAC;YAClF,MAAM,OAAO,GAAG,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAA,IAAI,CAAC,IAAI,mCAAI,EAAE,CAAC,CAAC;YAC5F,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;YAC9D,IAAI,CAAC,IAAI,CAAC,qBAAqB;gBAAE,uCAAY,IAAI,KAAE,IAAI,EAAE,OAAO,IAAG;YACnE,IAAI,CAAC;gBACD,uCACO,IAAI,KACP,IAAI,EAAE,IAAA,yBAAO,EAAC,OAAO,EAAE,IAAI,CAAC,qBAAqB,CAAC,EAClD,cAAc,EAAE,IAAa,IAC/B;YACN,CAAC;YAAC,WAAM,CAAC;gBACL,sEAAsE;gBACtE,uCAAY,IAAI,KAAE,IAAI,EAAE,yBAAyB,EAAE,cAAc,EAAE,KAAc,IAAG;YACxF,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,MAAM,OAAO,GAA2B,EAAE,CAAC;QAC3C,IAAI,KAAK,GAAoB,EAAE,CAAC;QAChC,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;YACzB,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YACxC,IAAI,KAAK,CAAC,MAAM,IAAI,UAAU,GAAG,SAAS,GAAG,aAAa,EAAE,CAAC;gBACzD,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACpB,KAAK,GAAG,EAAE,CAAC;gBACX,UAAU,GAAG,CAAC,CAAC;YACnB,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjB,UAAU,IAAI,SAAS,CAAC;QAC5B,CAAC;QACD,IAAI,KAAK,CAAC,MAAM;YAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAEtC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,OAAO,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;YACrD,IAAI,CAAC;gBACD,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;YAC5C,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACb,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;gBAC3C,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC,CAAC;gBAClC,OAAO,CAAC,IAAI,CACR,gCAAgC,MAAM,CAAC,MAAM,mCAAmC;oBAChF,kCAAkC,CACrC,CAAC;gBACF,IAAI,CAAC,aAAa,EAAE,CAAC;gBACrB,OAAO;YACX,CAAC;QACL,CAAC;QACD,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;QACtB,IAAI,IAAI,CAAC,UAAU;YAAE,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACnD,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;IAChC,CAAC;IAEO,aAAa;;QACjB,IAAI,IAAI,CAAC,UAAU;YAAE,OAAO;QAC5B,IAAI,CAAC,YAAY,IAAI,CAAC,CAAC;QACvB,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,KAAM,EAAE,GAAG,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAClF,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC;QACxE,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,GAAG,EAAE;YAC9B,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;YAC5B,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC;QACxB,CAAC,EAAE,WAAW,GAAG,MAAM,CAAC,CAAC;QACzB,MAAA,MAAA,IAAI,CAAC,UAAU,EAAC,KAAK,kDAAI,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,MAAsB;QAE9B,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;QACpF,CAAC;QAED,IAAI,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;QAC/D,CAAC;QAED,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;QAChE,CAAC;QAED,IAAI,MAAM,CAAC,SAAS,KAAK,KAAK,EAAE,CAAC;YAC7B,IAAI,MAAM,CAAC,GAAG,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBAC1C,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;YACtE,CAAC;YACD,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,gCAAK,MAAM,KAAE,MAAM,EAAE,IAAI,CAAC,MAAM,GAAmB,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,CAAA;QAClH,CAAC;aAAM,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YACxC,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,gCAAK,MAAM,KAAE,UAAU,EAAE,IAAI,CAAC,UAAU,GAAmB,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,CAAA;QAC1H,CAAC;IACL,CAAC;IAES,aAAa;;QACnB,OAAO;YACL,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,UAAU,EAAE,MAAA,IAAI,CAAC,UAAU,mCAAI,SAAS;YACxC,QAAQ,EAAE,MAAA,IAAI,CAAC,QAAQ,mCAAI,SAAS;SACrC,CAAC;IACJ,CAAC;;AArPqB,+BAAmB,GAAG,GAAG,GAAG,IAAI,AAAb,CAAc;AACjC,oCAAwB,GAAG,EAAE,GAAG,IAAI,AAAZ,CAAa;AACrC,+BAAmB,GAAG,CAAC,AAAJ,CAAK;kBAH/B,WAAW"}
|
|
@@ -35,6 +35,8 @@ export default class ProcessorService implements IProcessorService {
|
|
|
35
35
|
private doneWithProcessing;
|
|
36
36
|
private productTag;
|
|
37
37
|
private pricingTag;
|
|
38
|
+
/** Optional app marketplace pricing; workspace subscription metering is independent. */
|
|
39
|
+
private appPricing?;
|
|
38
40
|
private apps;
|
|
39
41
|
private baseLogs;
|
|
40
42
|
private clone;
|
|
@@ -280,6 +282,7 @@ export default class ProcessorService implements IProcessorService {
|
|
|
280
282
|
app_active: boolean;
|
|
281
283
|
recipient_workspace_id: string;
|
|
282
284
|
product_env_mapping?: IProductAppEnvs | null;
|
|
285
|
+
app_pricing?: unknown;
|
|
283
286
|
}): Promise<any>;
|
|
284
287
|
processRequest(payload: IRetryMeta, event: IStepEvent, retries: IAppRetryPolicy, additional_logs: Partial<ILogData>, returnValue?: boolean): Promise<true | IProcessingFailure | {
|
|
285
288
|
process_id: string;
|
|
@@ -458,6 +461,11 @@ export default class ProcessorService implements IProcessorService {
|
|
|
458
461
|
* Fetches the latest healthcheck status for a product/env from Redis cache.
|
|
459
462
|
*/
|
|
460
463
|
getHealthcheckStatusFromCache(productTag: string, envSlug: string): Promise<any>;
|
|
464
|
+
/**
|
|
465
|
+
* Opens the provider circuit immediately after an operation failure. The
|
|
466
|
+
* interval monitor is deliberately the only path that closes it again.
|
|
467
|
+
*/
|
|
468
|
+
markHealthcheckUnavailable(productTag: string, healthcheckTag: string, envSlug: string, reason?: string): Promise<void>;
|
|
461
469
|
/**
|
|
462
470
|
* Updates the healthcheck in the remote DB for a product with all envs' results.
|
|
463
471
|
*/
|
|
@@ -49,6 +49,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
49
49
|
var _a, _b;
|
|
50
50
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
51
51
|
const products_service_1 = __importDefault(require("../../products/services/products.service"));
|
|
52
|
+
const health_status_cache_1 = require("../../resilience/health-status-cache");
|
|
52
53
|
const types_1 = require("../../types");
|
|
53
54
|
const logs_service_1 = __importDefault(require("../../logs/logs.service"));
|
|
54
55
|
const cloud_runtime_util_1 = require("../../cloud/cloud-runtime.util");
|
|
@@ -2959,7 +2960,9 @@ class ProcessorService {
|
|
|
2959
2960
|
// Pricing/request accounting can touch Redis (including lock acquisition and
|
|
2960
2961
|
// a 5s command timeout). It is telemetry/accounting and must not hold a
|
|
2961
2962
|
// completed provider response on the business request path.
|
|
2962
|
-
|
|
2963
|
+
if (this.appPricing !== undefined && this.appPricing !== null && this.appPricing !== false) {
|
|
2964
|
+
void this.processPricingCostEventually(Object.assign(Object.assign({}, additional_logs), { app_id, workspace_id: this.workspace_id }), event.app).then(() => this.logService.publish()).catch(() => { });
|
|
2965
|
+
}
|
|
2963
2966
|
const log = Object.assign(Object.assign(Object.assign({}, this.baseLogs), additional_logs), { message: 'Process http request - success', successful_execution: true, data: { response: results }, status: types_1.LogEventStatus.SUCCESS, app_id, action: event.event, start,
|
|
2964
2967
|
end });
|
|
2965
2968
|
this.logService.add(log);
|
|
@@ -4682,7 +4685,7 @@ class ProcessorService {
|
|
|
4682
4685
|
async writeResult(status, retryable = true) {
|
|
4683
4686
|
var _a, _b, _c, _d, _e, _f, _g, _h, _j;
|
|
4684
4687
|
const envSlug = (_f = (_d = (_b = (_a = this.processEnv) === null || _a === void 0 ? void 0 : _a.slug) !== null && _b !== void 0 ? _b : (_c = this.input) === null || _c === void 0 ? void 0 : _c.env) !== null && _d !== void 0 ? _d : (_e = this.baseLogs) === null || _e === void 0 ? void 0 : _e.env) !== null && _f !== void 0 ? _f : '';
|
|
4685
|
-
|
|
4688
|
+
this.processorApiService.enqueueResult(Object.assign(Object.assign({ status, component: this.component, start: this.start, end: this.end, retryable, result: (0, processor_utils_1.encrypt)(JSON.stringify(this.processingOutput), this.productBuilderService.fetchPrivateKey()), process_id: this.process_id, product_id: this.productId, product_tag: this.productTag ||
|
|
4686
4689
|
((_g = this.input) === null || _g === void 0 ? void 0 : _g.product) ||
|
|
4687
4690
|
((_h = this.baseLogs) === null || _h === void 0 ? void 0 : _h.product_tag), workspace_id: this.workspace_id }, ((_j = this.featureExecutionContext) !== null && _j !== void 0 ? _j : {})), { env: envSlug, input: (0, processor_utils_1.encrypt)(JSON.stringify(this.input), this.productBuilderService.fetchPrivateKey()) }), Object.assign(Object.assign({}, this.getUserAccess()), { access_key: this.accessKey }));
|
|
4688
4691
|
}
|
|
@@ -4857,6 +4860,7 @@ class ProcessorService {
|
|
|
4857
4860
|
if (bootstrapData.product_id) {
|
|
4858
4861
|
this.productId = bootstrapData.product_id;
|
|
4859
4862
|
}
|
|
4863
|
+
this.appPricing = bootstrapData.app_pricing;
|
|
4860
4864
|
if (!this.productId) {
|
|
4861
4865
|
throw new Error(`Action execution could not resolve product_id for product '${product_tag}'`);
|
|
4862
4866
|
}
|
|
@@ -5423,6 +5427,15 @@ class ProcessorService {
|
|
|
5423
5427
|
* Writes the healthcheck result to Redis cache for fast status retrieval.
|
|
5424
5428
|
*/
|
|
5425
5429
|
async writeHealthcheckResultToCache(data, result) {
|
|
5430
|
+
var _a, _b, _c;
|
|
5431
|
+
if ((data === null || data === void 0 ? void 0 : data.product) && (data === null || data === void 0 ? void 0 : data.healthcheck) && (data === null || data === void 0 ? void 0 : data.env)) {
|
|
5432
|
+
(0, health_status_cache_1.setRuntimeHealthState)(this.workspace_id, data.product, data.env, data.healthcheck, {
|
|
5433
|
+
status: (result === null || result === void 0 ? void 0 : result.status) === 'available' || (result === null || result === void 0 ? void 0 : result.status) === 'unavailable' ? result.status : 'unknown',
|
|
5434
|
+
lastChecked: (_b = (_a = result === null || result === void 0 ? void 0 : result.checkedAt) !== null && _a !== void 0 ? _a : result === null || result === void 0 ? void 0 : result.lastChecked) !== null && _b !== void 0 ? _b : new Date().toISOString(),
|
|
5435
|
+
latency: Number.isFinite(Number(result === null || result === void 0 ? void 0 : result.latency)) ? Number(result.latency) : undefined,
|
|
5436
|
+
statusSource: (_c = result === null || result === void 0 ? void 0 : result.status_source) !== null && _c !== void 0 ? _c : result === null || result === void 0 ? void 0 : result.statusSource,
|
|
5437
|
+
});
|
|
5438
|
+
}
|
|
5426
5439
|
if (!this.redisClient)
|
|
5427
5440
|
return;
|
|
5428
5441
|
const key = `healthcheck:${data.product}:${data.healthcheck}:${data.env}`;
|
|
@@ -5440,6 +5453,19 @@ class ProcessorService {
|
|
|
5440
5453
|
const cached = await this.redisClient.get(key);
|
|
5441
5454
|
return cached ? JSON.parse(cached) : null;
|
|
5442
5455
|
}
|
|
5456
|
+
/**
|
|
5457
|
+
* Opens the provider circuit immediately after an operation failure. The
|
|
5458
|
+
* interval monitor is deliberately the only path that closes it again.
|
|
5459
|
+
*/
|
|
5460
|
+
async markHealthcheckUnavailable(productTag, healthcheckTag, envSlug, reason) {
|
|
5461
|
+
const checkedAt = new Date().toISOString();
|
|
5462
|
+
const result = Object.assign({ status: 'unavailable', checkedAt, latency: 0, status_source: 'runtime_failure' }, (reason ? { reason: reason.slice(0, 500) } : {}));
|
|
5463
|
+
void this.writeHealthcheckResultToCache({ product: productTag, healthcheck: healthcheckTag, env: envSlug }, result).catch(() => undefined);
|
|
5464
|
+
void this.updateHealthcheckOnProcessor(productTag, [{
|
|
5465
|
+
tag: healthcheckTag,
|
|
5466
|
+
environments: [Object.assign({ slug: envSlug }, result)],
|
|
5467
|
+
}]).catch(() => undefined);
|
|
5468
|
+
}
|
|
5443
5469
|
/**
|
|
5444
5470
|
* Updates the healthcheck in the remote DB for a product with all envs' results.
|
|
5445
5471
|
*/
|