@webiny/api-sync-to-opensearch 0.0.0-unstable.0156a4c312
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/LICENSE +21 -0
- package/NotEnoughRemainingTimeError.d.ts +3 -0
- package/NotEnoughRemainingTimeError.js +6 -0
- package/NotEnoughRemainingTimeError.js.map +1 -0
- package/README.md +11 -0
- package/features/ExecuteSync/ExecuteSync.d.ts +16 -0
- package/features/ExecuteSync/ExecuteSync.js +102 -0
- package/features/ExecuteSync/ExecuteSync.js.map +1 -0
- package/features/ExecuteSync/abstraction.d.ts +14 -0
- package/features/ExecuteSync/abstraction.js +5 -0
- package/features/ExecuteSync/abstraction.js.map +1 -0
- package/features/ExecuteSync/feature.d.ts +4 -0
- package/features/ExecuteSync/feature.js +11 -0
- package/features/ExecuteSync/feature.js.map +1 -0
- package/features/ExecuteSyncWithRetry/ExecuteSyncWithRetry.d.ts +15 -0
- package/features/ExecuteSyncWithRetry/ExecuteSyncWithRetry.js +54 -0
- package/features/ExecuteSyncWithRetry/ExecuteSyncWithRetry.js.map +1 -0
- package/features/ExecuteSyncWithRetry/abstraction.d.ts +16 -0
- package/features/ExecuteSyncWithRetry/abstraction.js +5 -0
- package/features/ExecuteSyncWithRetry/abstraction.js.map +1 -0
- package/features/ExecuteSyncWithRetry/feature.d.ts +4 -0
- package/features/ExecuteSyncWithRetry/feature.js +11 -0
- package/features/ExecuteSyncWithRetry/feature.js.map +1 -0
- package/features/Operations/Operations.d.ts +18 -0
- package/features/Operations/Operations.js +49 -0
- package/features/Operations/Operations.js.map +1 -0
- package/features/Operations/OperationsFactory.d.ts +9 -0
- package/features/Operations/OperationsFactory.js +14 -0
- package/features/Operations/OperationsFactory.js.map +1 -0
- package/features/Operations/abstractions/Operations.d.ts +27 -0
- package/features/Operations/abstractions/Operations.js +5 -0
- package/features/Operations/abstractions/Operations.js.map +1 -0
- package/features/Operations/abstractions/OperationsFactory.d.ts +8 -0
- package/features/Operations/abstractions/OperationsFactory.js +5 -0
- package/features/Operations/abstractions/OperationsFactory.js.map +1 -0
- package/features/Operations/feature.d.ts +4 -0
- package/features/Operations/feature.js +11 -0
- package/features/Operations/feature.js.map +1 -0
- package/features/OperationsBuilder/abstraction.d.ts +11 -0
- package/features/OperationsBuilder/abstraction.js +5 -0
- package/features/OperationsBuilder/abstraction.js.map +1 -0
- package/features/SynchronizationBuilder/SynchronizationBuilder.d.ts +20 -0
- package/features/SynchronizationBuilder/SynchronizationBuilder.js +43 -0
- package/features/SynchronizationBuilder/SynchronizationBuilder.js.map +1 -0
- package/features/SynchronizationBuilder/abstraction.d.ts +12 -0
- package/features/SynchronizationBuilder/abstraction.js +5 -0
- package/features/SynchronizationBuilder/abstraction.js.map +1 -0
- package/features/SynchronizationBuilder/feature.d.ts +4 -0
- package/features/SynchronizationBuilder/feature.js +11 -0
- package/features/SynchronizationBuilder/feature.js.map +1 -0
- package/index.d.ts +12 -0
- package/index.js +12 -0
- package/package.json +42 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) Webiny
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NotEnoughRemainingTimeError.js","sources":["../src/NotEnoughRemainingTimeError.ts"],"sourcesContent":["import { WebinyError } from \"@webiny/error\";\n\nexport class NotEnoughRemainingTimeError extends WebinyError {}\n"],"names":["NotEnoughRemainingTimeError","WebinyError"],"mappings":";AAEO,MAAMA,oCAAoCC;AAAa"}
|
package/README.md
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# @webiny/api-sync-to-opensearch
|
|
2
|
+
|
|
3
|
+
> [!NOTE]
|
|
4
|
+
> This package is part of the [Webiny](https://www.webiny.com) monorepo.
|
|
5
|
+
> It’s **included in every Webiny project by default** and is not meant to be used as a standalone package.
|
|
6
|
+
|
|
7
|
+
📘 **Documentation:** [https://www.webiny.com/docs](https://www.webiny.com/docs)
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
_This README file is automatically generated during the publish process._
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { ExecuteSync as ExecuteSyncAbstraction } from "./abstraction.js";
|
|
2
|
+
import { Env } from "@webiny/stdlib";
|
|
3
|
+
import { Timer } from "@webiny/utils/features/Timer/abstraction.js";
|
|
4
|
+
import { OpenSearchClient } from "@webiny/api-opensearch/exports/api/opensearch.js";
|
|
5
|
+
declare class ExecuteSyncImpl implements ExecuteSyncAbstraction.Interface {
|
|
6
|
+
private readonly env;
|
|
7
|
+
private readonly timer;
|
|
8
|
+
private readonly openSearchClient;
|
|
9
|
+
constructor(env: Env.Interface, timer: Timer.Interface, openSearchClient: OpenSearchClient.Interface);
|
|
10
|
+
execute(params: ExecuteSyncAbstraction.Params): Promise<void>;
|
|
11
|
+
private shouldShowLogs;
|
|
12
|
+
}
|
|
13
|
+
export declare const ExecuteSync: typeof ExecuteSyncImpl & {
|
|
14
|
+
__abstraction: import("@webiny/di").Abstraction<import("./abstraction.js").IExecuteSync>;
|
|
15
|
+
};
|
|
16
|
+
export {};
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { OpenSearchCatClusterHealthStatus, UnhealthyClusterError, WaitingHealthyClusterAbortedError, createWaitUntilHealthy } from "@webiny/api-opensearch";
|
|
2
|
+
import { WebinyError } from "@webiny/error";
|
|
3
|
+
import { ExecuteSync } from "./abstraction.js";
|
|
4
|
+
import { Env } from "@webiny/stdlib";
|
|
5
|
+
import { Timer } from "@webiny/utils/features/Timer/abstraction.js";
|
|
6
|
+
import { OpenSearchClient } from "@webiny/api-opensearch/exports/api/opensearch.js";
|
|
7
|
+
const getError = (item)=>{
|
|
8
|
+
if (!item.index?.error?.reason) return null;
|
|
9
|
+
const reason = item.index.error.reason;
|
|
10
|
+
if (null !== reason.match(/no such index \[([a-zA-Z0-9_-]+)\]/)) return "index";
|
|
11
|
+
return reason;
|
|
12
|
+
};
|
|
13
|
+
const checkErrors = (result)=>{
|
|
14
|
+
if (!result || !result.body || !result.body.items) return;
|
|
15
|
+
for (const item of result.body.items){
|
|
16
|
+
const err = getError(item);
|
|
17
|
+
if (!err) continue;
|
|
18
|
+
else if ("index" === err) {
|
|
19
|
+
if ("true" === process.env.DEBUG) console.error("Bulk response", JSON.stringify(result, null, 2));
|
|
20
|
+
continue;
|
|
21
|
+
}
|
|
22
|
+
console.error("Body item with error", item);
|
|
23
|
+
throw new WebinyError(err, "TO_OPENSEARCH_ERROR", item);
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
class ExecuteSyncImpl {
|
|
27
|
+
constructor(env, timer, openSearchClient){
|
|
28
|
+
this.env = env;
|
|
29
|
+
this.timer = timer;
|
|
30
|
+
this.openSearchClient = openSearchClient;
|
|
31
|
+
}
|
|
32
|
+
async execute(params) {
|
|
33
|
+
const { maxProcessorPercent, maxRunningTime, operations } = params;
|
|
34
|
+
if (0 === operations.total) return;
|
|
35
|
+
const remainingTime = this.timer.getRemainingSeconds();
|
|
36
|
+
const runningTime = maxRunningTime - remainingTime;
|
|
37
|
+
const maxWaitingTime = remainingTime - 90;
|
|
38
|
+
if (this.shouldShowLogs()) console.debug(`The Lambda is already running for ${runningTime}s. Setting Health Check max waiting time: ${maxWaitingTime}s`);
|
|
39
|
+
const healthCheck = createWaitUntilHealthy(this.openSearchClient.use(), {
|
|
40
|
+
minClusterHealthStatus: OpenSearchCatClusterHealthStatus.Yellow,
|
|
41
|
+
waitingTimeStep: 30,
|
|
42
|
+
maxProcessorPercent,
|
|
43
|
+
maxWaitingTime
|
|
44
|
+
});
|
|
45
|
+
try {
|
|
46
|
+
await healthCheck.wait({
|
|
47
|
+
async onUnhealthy ({ startedAt, runs, mustEndAt, waitingTimeStep, waitingReason }) {
|
|
48
|
+
console.debug(`Cluster is unhealthy on run #${runs}.`, {
|
|
49
|
+
startedAt,
|
|
50
|
+
mustEndAt,
|
|
51
|
+
waitingTimeStep,
|
|
52
|
+
waitingReason
|
|
53
|
+
});
|
|
54
|
+
},
|
|
55
|
+
async onTimeout ({ startedAt, runs, waitingTimeStep, mustEndAt, waitingReason }) {
|
|
56
|
+
console.error(`Cluster health check timeout on run #${runs}.`, {
|
|
57
|
+
startedAt,
|
|
58
|
+
mustEndAt,
|
|
59
|
+
waitingTimeStep,
|
|
60
|
+
waitingReason
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
} catch (ex) {
|
|
65
|
+
if (ex instanceof UnhealthyClusterError || ex instanceof WaitingHealthyClusterAbortedError) throw ex;
|
|
66
|
+
console.error("Cluster health check failed.", ex);
|
|
67
|
+
throw ex;
|
|
68
|
+
}
|
|
69
|
+
try {
|
|
70
|
+
const res = await this.openSearchClient.use().bulk({
|
|
71
|
+
body: operations.items
|
|
72
|
+
});
|
|
73
|
+
checkErrors(res);
|
|
74
|
+
} catch (error) {
|
|
75
|
+
console.error(error, {
|
|
76
|
+
tenant: "root"
|
|
77
|
+
});
|
|
78
|
+
if (this.shouldShowLogs()) {
|
|
79
|
+
const meta = error?.meta || {};
|
|
80
|
+
delete meta["meta"];
|
|
81
|
+
console.error("Bulk error", JSON.stringify(error, null, 2));
|
|
82
|
+
}
|
|
83
|
+
throw error;
|
|
84
|
+
}
|
|
85
|
+
if (this.shouldShowLogs()) console.info(`Transferred ${operations.total} record operations to OpenSearch.`);
|
|
86
|
+
}
|
|
87
|
+
shouldShowLogs() {
|
|
88
|
+
if (this.env.getBoolean("TESTING")) return false;
|
|
89
|
+
return this.env.getBoolean("DEBUG", false);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
const ExecuteSync_ExecuteSync = ExecuteSync.createImplementation({
|
|
93
|
+
implementation: ExecuteSyncImpl,
|
|
94
|
+
dependencies: [
|
|
95
|
+
Env,
|
|
96
|
+
Timer,
|
|
97
|
+
OpenSearchClient
|
|
98
|
+
]
|
|
99
|
+
});
|
|
100
|
+
export { ExecuteSync_ExecuteSync as ExecuteSync };
|
|
101
|
+
|
|
102
|
+
//# sourceMappingURL=ExecuteSync.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features/ExecuteSync/ExecuteSync.js","sources":["../../../src/features/ExecuteSync/ExecuteSync.ts"],"sourcesContent":["import {\n createWaitUntilHealthy,\n OpenSearchCatClusterHealthStatus,\n UnhealthyClusterError,\n WaitingHealthyClusterAbortedError\n} from \"@webiny/api-opensearch\";\nimport type { ApiResponse } from \"@webiny/api-opensearch/types.js\";\nimport { WebinyError } from \"@webiny/error\";\nimport { ExecuteSync as ExecuteSyncAbstraction } from \"./abstraction.js\";\nimport { Env } from \"@webiny/stdlib\";\nimport { Timer } from \"@webiny/utils/features/Timer/abstraction.js\";\nimport { OpenSearchClient } from \"@webiny/api-opensearch/exports/api/opensearch.js\";\n\ninterface BulkOperationsResponseBodyItemIndexError {\n reason?: string;\n}\n\ninterface BulkOperationsResponseBodyItemIndex {\n error?: BulkOperationsResponseBodyItemIndexError;\n}\n\ninterface BulkOperationsResponseBodyItem {\n index?: BulkOperationsResponseBodyItemIndex;\n error?: string;\n}\n\nconst getError = (item: BulkOperationsResponseBodyItem): string | null => {\n if (!item.index?.error?.reason) {\n return null;\n }\n const reason = item.index.error.reason;\n if (reason.match(/no such index \\[([a-zA-Z0-9_-]+)\\]/) !== null) {\n return \"index\";\n }\n return reason;\n};\n\nconst checkErrors = (result?: ApiResponse): void => {\n if (!result || !result.body || !result.body.items) {\n return;\n }\n for (const item of result.body.items) {\n const err = getError(item);\n if (!err) {\n continue;\n } else if (err === \"index\") {\n if (process.env.DEBUG === \"true\") {\n console.error(\"Bulk response\", JSON.stringify(result, null, 2));\n }\n continue;\n }\n console.error(\"Body item with error\", item);\n throw new WebinyError(err, \"TO_OPENSEARCH_ERROR\", item);\n }\n};\n\nclass ExecuteSyncImpl implements ExecuteSyncAbstraction.Interface {\n public constructor(\n private readonly env: Env.Interface,\n private readonly timer: Timer.Interface,\n private readonly openSearchClient: OpenSearchClient.Interface\n ) {}\n\n public async execute(params: ExecuteSyncAbstraction.Params): Promise<void> {\n const { maxProcessorPercent, maxRunningTime, operations } = params;\n\n if (operations.total === 0) {\n return;\n }\n\n const remainingTime = this.timer.getRemainingSeconds();\n const runningTime = maxRunningTime - remainingTime;\n const maxWaitingTime = remainingTime - 90;\n\n if (this.shouldShowLogs()) {\n console.debug(\n `The Lambda is already running for ${runningTime}s. Setting Health Check max waiting time: ${maxWaitingTime}s`\n );\n }\n\n const healthCheck = createWaitUntilHealthy(this.openSearchClient.use(), {\n minClusterHealthStatus: OpenSearchCatClusterHealthStatus.Yellow,\n waitingTimeStep: 30,\n maxProcessorPercent,\n maxWaitingTime\n });\n\n try {\n await healthCheck.wait({\n async onUnhealthy({ startedAt, runs, mustEndAt, waitingTimeStep, waitingReason }) {\n console.debug(`Cluster is unhealthy on run #${runs}.`, {\n startedAt,\n mustEndAt,\n waitingTimeStep,\n waitingReason\n });\n },\n async onTimeout({ startedAt, runs, waitingTimeStep, mustEndAt, waitingReason }) {\n console.error(`Cluster health check timeout on run #${runs}.`, {\n startedAt,\n mustEndAt,\n waitingTimeStep,\n waitingReason\n });\n }\n });\n } catch (ex) {\n if (\n ex instanceof UnhealthyClusterError ||\n ex instanceof WaitingHealthyClusterAbortedError\n ) {\n throw ex;\n }\n console.error(`Cluster health check failed.`, ex);\n throw ex;\n }\n\n try {\n const res = await this.openSearchClient.use().bulk({\n body: operations.items\n });\n checkErrors(res);\n } catch (error) {\n console.error(error, { tenant: \"root\" });\n\n if (this.shouldShowLogs()) {\n const meta = error?.meta || {};\n delete meta[\"meta\"];\n console.error(\"Bulk error\", JSON.stringify(error, null, 2));\n }\n throw error;\n }\n if (this.shouldShowLogs()) {\n console.info(`Transferred ${operations.total} record operations to OpenSearch.`);\n }\n }\n\n private shouldShowLogs(): boolean {\n /**\n * Don't show logs during tests, really no point.\n */\n if (this.env.getBoolean(\"TESTING\")) {\n return false;\n }\n return this.env.getBoolean(\"DEBUG\", false);\n }\n}\n\nexport const ExecuteSync = ExecuteSyncAbstraction.createImplementation({\n implementation: ExecuteSyncImpl,\n dependencies: [Env, Timer, OpenSearchClient]\n});\n"],"names":["getError","item","reason","checkErrors","result","err","process","console","JSON","WebinyError","ExecuteSyncImpl","env","timer","openSearchClient","params","maxProcessorPercent","maxRunningTime","operations","remainingTime","runningTime","maxWaitingTime","healthCheck","createWaitUntilHealthy","OpenSearchCatClusterHealthStatus","startedAt","runs","mustEndAt","waitingTimeStep","waitingReason","ex","UnhealthyClusterError","WaitingHealthyClusterAbortedError","res","error","meta","ExecuteSync","ExecuteSyncAbstraction","Env","Timer","OpenSearchClient"],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { Operations } from "../Operations/abstractions/Operations.js";
|
|
2
|
+
export interface IExecuteSyncParams {
|
|
3
|
+
maxRunningTime: number;
|
|
4
|
+
maxProcessorPercent: number;
|
|
5
|
+
operations: Pick<Operations.Interface, "items" | "total">;
|
|
6
|
+
}
|
|
7
|
+
export interface IExecuteSync {
|
|
8
|
+
execute(params: IExecuteSyncParams): Promise<void>;
|
|
9
|
+
}
|
|
10
|
+
export declare const ExecuteSync: import("@webiny/di").Abstraction<IExecuteSync>;
|
|
11
|
+
export declare namespace ExecuteSync {
|
|
12
|
+
type Interface = IExecuteSync;
|
|
13
|
+
type Params = IExecuteSyncParams;
|
|
14
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features/ExecuteSync/abstraction.js","sources":["../../../src/features/ExecuteSync/abstraction.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport type { Operations } from \"../Operations/abstractions/Operations.js\";\n\nexport interface IExecuteSyncParams {\n maxRunningTime: number;\n maxProcessorPercent: number;\n operations: Pick<Operations.Interface, \"items\" | \"total\">;\n}\n\nexport interface IExecuteSync {\n execute(params: IExecuteSyncParams): Promise<void>;\n}\n\nexport const ExecuteSync = createAbstraction<IExecuteSync>(\"Sync/ExecuteSync\");\n\nexport namespace ExecuteSync {\n export type Interface = IExecuteSync;\n export type Params = IExecuteSyncParams;\n}\n"],"names":["ExecuteSync","createAbstraction"],"mappings":";AAaO,MAAMA,cAAcC,kBAAgC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { createFeature } from "@webiny/feature/api";
|
|
2
|
+
import { ExecuteSync } from "./ExecuteSync.js";
|
|
3
|
+
const ExecuteSyncFeature = createFeature({
|
|
4
|
+
name: "sync.executeSync",
|
|
5
|
+
register (container) {
|
|
6
|
+
container.register(ExecuteSync);
|
|
7
|
+
}
|
|
8
|
+
});
|
|
9
|
+
export { ExecuteSyncFeature };
|
|
10
|
+
|
|
11
|
+
//# sourceMappingURL=feature.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features/ExecuteSync/feature.js","sources":["../../../src/features/ExecuteSync/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { ExecuteSync } from \"./ExecuteSync.js\";\n\nexport const ExecuteSyncFeature = createFeature({\n name: \"sync.executeSync\",\n register(container) {\n container.register(ExecuteSync);\n }\n});\n"],"names":["ExecuteSyncFeature","createFeature","container","ExecuteSync"],"mappings":";;AAGO,MAAMA,qBAAqBC,cAAc;IAC5C,MAAM;IACN,UAASC,SAAS;QACdA,UAAU,QAAQ,CAACC;IACvB;AACJ"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { ExecuteSync } from "../ExecuteSync/abstraction.js";
|
|
2
|
+
import { ExecuteSyncWithRetry as ExecuteSyncWithRetryAbstraction } from "./abstraction.js";
|
|
3
|
+
import { Env } from "@webiny/stdlib";
|
|
4
|
+
import { Timer } from "@webiny/utils/features/Timer/abstraction.js";
|
|
5
|
+
declare class ExecuteSyncWithRetryImpl implements ExecuteSyncWithRetryAbstraction.Interface {
|
|
6
|
+
private readonly timer;
|
|
7
|
+
private readonly executeSync;
|
|
8
|
+
private readonly env;
|
|
9
|
+
constructor(timer: Timer.Interface, executeSync: ExecuteSync.Interface, env: Env.Interface);
|
|
10
|
+
execute(params: ExecuteSyncWithRetryAbstraction.Params): Promise<void>;
|
|
11
|
+
}
|
|
12
|
+
export declare const ExecuteSyncWithRetry: typeof ExecuteSyncWithRetryImpl & {
|
|
13
|
+
__abstraction: import("@webiny/di").Abstraction<import("./abstraction.js").IExecuteSyncWithRetry>;
|
|
14
|
+
};
|
|
15
|
+
export {};
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import p_retry from "p-retry";
|
|
2
|
+
import { ExecuteSync } from "../ExecuteSync/abstraction.js";
|
|
3
|
+
import { NotEnoughRemainingTimeError } from "../../NotEnoughRemainingTimeError.js";
|
|
4
|
+
import { ExecuteSyncWithRetry } from "./abstraction.js";
|
|
5
|
+
import { Env } from "@webiny/stdlib";
|
|
6
|
+
import { Timer } from "@webiny/utils/features/Timer/abstraction.js";
|
|
7
|
+
const minRemainingSecondsToTimeout = 120;
|
|
8
|
+
class ExecuteSyncWithRetryImpl {
|
|
9
|
+
constructor(timer, executeSync, env){
|
|
10
|
+
this.timer = timer;
|
|
11
|
+
this.executeSync = executeSync;
|
|
12
|
+
this.env = env;
|
|
13
|
+
}
|
|
14
|
+
async execute(params) {
|
|
15
|
+
const maxProcessorPercent = this.env.getNumber("MAX_ES_PROCESSOR", "test" === process.env.NODE_ENV ? 101 : 98);
|
|
16
|
+
const maxRetryTime = this.env.getNumber("WEBINY_TO_OPENSEARCH_MAX_RETRY_TIME", params.maxRetryTime || 300000);
|
|
17
|
+
const retries = this.env.getNumber("WEBINY_TO_OPENSEARCH_RETRIES", params.retries || 20);
|
|
18
|
+
const minTimeout = this.env.getNumber("WEBINY_TO_OPENSEARCH_MIN_TIMEOUT", params.minTimeout || 1500);
|
|
19
|
+
const maxTimeout = this.env.getNumber("WEBINY_TO_OPENSEARCH_MAX_TIMEOUT", params.maxTimeout || 30000);
|
|
20
|
+
try {
|
|
21
|
+
await p_retry(async ()=>{
|
|
22
|
+
await this.executeSync.execute({
|
|
23
|
+
maxRunningTime: params.maxRunningTime,
|
|
24
|
+
maxProcessorPercent: params.maxProcessorPercent || maxProcessorPercent,
|
|
25
|
+
operations: params.operations
|
|
26
|
+
});
|
|
27
|
+
}, {
|
|
28
|
+
maxRetryTime,
|
|
29
|
+
retries,
|
|
30
|
+
minTimeout,
|
|
31
|
+
maxTimeout,
|
|
32
|
+
onFailedAttempt: ({ error, attemptNumber })=>{
|
|
33
|
+
if (this.timer.getRemainingSeconds() < minRemainingSecondsToTimeout) throw new NotEnoughRemainingTimeError(error);
|
|
34
|
+
if (attemptNumber < 0.75 * retries) return;
|
|
35
|
+
console.error(`Attempt #${attemptNumber} failed.`);
|
|
36
|
+
console.error(error);
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
} catch (ex) {
|
|
40
|
+
throw ex;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
const ExecuteSyncWithRetry_ExecuteSyncWithRetry = ExecuteSyncWithRetry.createImplementation({
|
|
45
|
+
implementation: ExecuteSyncWithRetryImpl,
|
|
46
|
+
dependencies: [
|
|
47
|
+
Timer,
|
|
48
|
+
ExecuteSync,
|
|
49
|
+
Env
|
|
50
|
+
]
|
|
51
|
+
});
|
|
52
|
+
export { ExecuteSyncWithRetry_ExecuteSyncWithRetry as ExecuteSyncWithRetry };
|
|
53
|
+
|
|
54
|
+
//# sourceMappingURL=ExecuteSyncWithRetry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features/ExecuteSyncWithRetry/ExecuteSyncWithRetry.js","sources":["../../../src/features/ExecuteSyncWithRetry/ExecuteSyncWithRetry.ts"],"sourcesContent":["import pRetry from \"p-retry\";\nimport { ExecuteSync } from \"../ExecuteSync/abstraction.js\";\nimport { NotEnoughRemainingTimeError } from \"~/NotEnoughRemainingTimeError.js\";\nimport { ExecuteSyncWithRetry as ExecuteSyncWithRetryAbstraction } from \"./abstraction.js\";\nimport { Env } from \"@webiny/stdlib\";\nimport { Timer } from \"@webiny/utils/features/Timer/abstraction.js\";\n\nconst minRemainingSecondsToTimeout = 120;\n\nclass ExecuteSyncWithRetryImpl implements ExecuteSyncWithRetryAbstraction.Interface {\n public constructor(\n private readonly timer: Timer.Interface,\n private readonly executeSync: ExecuteSync.Interface,\n private readonly env: Env.Interface\n ) {}\n\n public async execute(params: ExecuteSyncWithRetryAbstraction.Params): Promise<void> {\n const maxProcessorPercent = this.env.getNumber(\n \"MAX_ES_PROCESSOR\",\n process.env.NODE_ENV === \"test\" ? 101 : 98\n );\n\n const maxRetryTime = this.env.getNumber(\n \"WEBINY_TO_OPENSEARCH_MAX_RETRY_TIME\",\n params.maxRetryTime || 300000\n );\n const retries = this.env.getNumber(\"WEBINY_TO_OPENSEARCH_RETRIES\", params.retries || 20);\n const minTimeout = this.env.getNumber(\n \"WEBINY_TO_OPENSEARCH_MIN_TIMEOUT\",\n params.minTimeout || 1500\n );\n const maxTimeout = this.env.getNumber(\n \"WEBINY_TO_OPENSEARCH_MAX_TIMEOUT\",\n params.maxTimeout || 30000\n );\n\n try {\n await pRetry(\n async () => {\n await this.executeSync.execute({\n maxRunningTime: params.maxRunningTime,\n maxProcessorPercent: params.maxProcessorPercent || maxProcessorPercent,\n operations: params.operations\n });\n },\n {\n maxRetryTime,\n retries,\n minTimeout,\n maxTimeout,\n onFailedAttempt: ({ error, attemptNumber }) => {\n if (this.timer.getRemainingSeconds() < minRemainingSecondsToTimeout) {\n throw new NotEnoughRemainingTimeError(error);\n }\n if (attemptNumber < retries * 0.75) {\n return;\n }\n console.error(`Attempt #${attemptNumber} failed.`);\n console.error(error);\n }\n }\n );\n } catch (ex) {\n throw ex;\n }\n }\n}\n\nexport const ExecuteSyncWithRetry = ExecuteSyncWithRetryAbstraction.createImplementation({\n implementation: ExecuteSyncWithRetryImpl,\n dependencies: [Timer, ExecuteSync, Env]\n});\n"],"names":["minRemainingSecondsToTimeout","ExecuteSyncWithRetryImpl","timer","executeSync","env","params","maxProcessorPercent","process","maxRetryTime","retries","minTimeout","maxTimeout","pRetry","error","attemptNumber","NotEnoughRemainingTimeError","console","ex","ExecuteSyncWithRetry","ExecuteSyncWithRetryAbstraction","Timer","ExecuteSync","Env"],"mappings":";;;;;;AAOA,MAAMA,+BAA+B;AAErC,MAAMC;IACF,YACqBC,KAAsB,EACtBC,WAAkC,EAClCC,GAAkB,CACrC;aAHmBF,KAAK,GAALA;aACAC,WAAW,GAAXA;aACAC,GAAG,GAAHA;IAClB;IAEH,MAAa,QAAQC,MAA8C,EAAiB;QAChF,MAAMC,sBAAsB,IAAI,CAAC,GAAG,CAAC,SAAS,CAC1C,oBACAC,AAAyB,WAAzBA,QAAQ,GAAG,CAAC,QAAQ,GAAc,MAAM;QAG5C,MAAMC,eAAe,IAAI,CAAC,GAAG,CAAC,SAAS,CACnC,uCACAH,OAAO,YAAY,IAAI;QAE3B,MAAMI,UAAU,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,gCAAgCJ,OAAO,OAAO,IAAI;QACrF,MAAMK,aAAa,IAAI,CAAC,GAAG,CAAC,SAAS,CACjC,oCACAL,OAAO,UAAU,IAAI;QAEzB,MAAMM,aAAa,IAAI,CAAC,GAAG,CAAC,SAAS,CACjC,oCACAN,OAAO,UAAU,IAAI;QAGzB,IAAI;YACA,MAAMO,QACF;gBACI,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;oBAC3B,gBAAgBP,OAAO,cAAc;oBACrC,qBAAqBA,OAAO,mBAAmB,IAAIC;oBACnD,YAAYD,OAAO,UAAU;gBACjC;YACJ,GACA;gBACIG;gBACAC;gBACAC;gBACAC;gBACA,iBAAiB,CAAC,EAAEE,KAAK,EAAEC,aAAa,EAAE;oBACtC,IAAI,IAAI,CAAC,KAAK,CAAC,mBAAmB,KAAKd,8BACnC,MAAM,IAAIe,4BAA4BF;oBAE1C,IAAIC,gBAAgBL,AAAU,OAAVA,SAChB;oBAEJO,QAAQ,KAAK,CAAC,CAAC,SAAS,EAAEF,cAAc,QAAQ,CAAC;oBACjDE,QAAQ,KAAK,CAACH;gBAClB;YACJ;QAER,EAAE,OAAOI,IAAI;YACT,MAAMA;QACV;IACJ;AACJ;AAEO,MAAMC,4CAAuBC,qBAAAA,oBAAoD,CAAC;IACrF,gBAAgBlB;IAChB,cAAc;QAACmB;QAAOC;QAAaC;KAAI;AAC3C"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { ExecuteSync } from "../ExecuteSync/abstraction.js";
|
|
2
|
+
export interface IExecuteSyncWithRetryParams extends Omit<ExecuteSync.Params, "maxProcessorPercent"> {
|
|
3
|
+
maxRetryTime?: number;
|
|
4
|
+
retries?: number;
|
|
5
|
+
minTimeout?: number;
|
|
6
|
+
maxTimeout?: number;
|
|
7
|
+
maxProcessorPercent?: number;
|
|
8
|
+
}
|
|
9
|
+
export interface IExecuteSyncWithRetry {
|
|
10
|
+
execute(params: IExecuteSyncWithRetryParams): Promise<void>;
|
|
11
|
+
}
|
|
12
|
+
export declare const ExecuteSyncWithRetry: import("@webiny/di").Abstraction<IExecuteSyncWithRetry>;
|
|
13
|
+
export declare namespace ExecuteSyncWithRetry {
|
|
14
|
+
type Interface = IExecuteSyncWithRetry;
|
|
15
|
+
type Params = IExecuteSyncWithRetryParams;
|
|
16
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features/ExecuteSyncWithRetry/abstraction.js","sources":["../../../src/features/ExecuteSyncWithRetry/abstraction.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport type { ExecuteSync } from \"../ExecuteSync/abstraction.js\";\n\nexport interface IExecuteSyncWithRetryParams extends Omit<\n ExecuteSync.Params,\n \"maxProcessorPercent\"\n> {\n maxRetryTime?: number;\n retries?: number;\n minTimeout?: number;\n maxTimeout?: number;\n maxProcessorPercent?: number;\n}\n\nexport interface IExecuteSyncWithRetry {\n execute(params: IExecuteSyncWithRetryParams): Promise<void>;\n}\n\nexport const ExecuteSyncWithRetry = createAbstraction<IExecuteSyncWithRetry>(\n \"Sync/ExecuteSyncWithRetry\"\n);\n\nexport namespace ExecuteSyncWithRetry {\n export type Interface = IExecuteSyncWithRetry;\n export type Params = IExecuteSyncWithRetryParams;\n}\n"],"names":["ExecuteSyncWithRetry","createAbstraction"],"mappings":";AAkBO,MAAMA,uBAAuBC,kBAChC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { createFeature } from "@webiny/feature/api";
|
|
2
|
+
import { ExecuteSyncWithRetry } from "./ExecuteSyncWithRetry.js";
|
|
3
|
+
const ExecuteSyncWithRetryFeature = createFeature({
|
|
4
|
+
name: "sync.executeSyncWithRetry",
|
|
5
|
+
register (container) {
|
|
6
|
+
container.register(ExecuteSyncWithRetry);
|
|
7
|
+
}
|
|
8
|
+
});
|
|
9
|
+
export { ExecuteSyncWithRetryFeature };
|
|
10
|
+
|
|
11
|
+
//# sourceMappingURL=feature.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features/ExecuteSyncWithRetry/feature.js","sources":["../../../src/features/ExecuteSyncWithRetry/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { ExecuteSyncWithRetry } from \"./ExecuteSyncWithRetry.js\";\n\nexport const ExecuteSyncWithRetryFeature = createFeature({\n name: \"sync.executeSyncWithRetry\",\n register(container) {\n container.register(ExecuteSyncWithRetry);\n }\n});\n"],"names":["ExecuteSyncWithRetryFeature","createFeature","container","ExecuteSyncWithRetry"],"mappings":";;AAGO,MAAMA,8BAA8BC,cAAc;IACrD,MAAM;IACN,UAASC,SAAS;QACdA,UAAU,QAAQ,CAACC;IACvB;AACJ"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { GenericRecord } from "@webiny/api/types.js";
|
|
2
|
+
import { Operations as OperationsAbstraction } from "./abstractions/Operations.js";
|
|
3
|
+
export declare enum OperationType {
|
|
4
|
+
INSERT = "INSERT",
|
|
5
|
+
MODIFY = "MODIFY",
|
|
6
|
+
REMOVE = "REMOVE"
|
|
7
|
+
}
|
|
8
|
+
export declare class Operations implements OperationsAbstraction.Interface {
|
|
9
|
+
private _items;
|
|
10
|
+
private _count;
|
|
11
|
+
get items(): GenericRecord[];
|
|
12
|
+
get total(): number;
|
|
13
|
+
get count(): number;
|
|
14
|
+
clear(): void;
|
|
15
|
+
insert(params: OperationsAbstraction.InsertParams): void;
|
|
16
|
+
modify(params: OperationsAbstraction.ModifyParams): void;
|
|
17
|
+
delete(params: OperationsAbstraction.DeleteParams): void;
|
|
18
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
var Operations_OperationType = /*#__PURE__*/ function(OperationType) {
|
|
2
|
+
OperationType["INSERT"] = "INSERT";
|
|
3
|
+
OperationType["MODIFY"] = "MODIFY";
|
|
4
|
+
OperationType["REMOVE"] = "REMOVE";
|
|
5
|
+
return OperationType;
|
|
6
|
+
}({});
|
|
7
|
+
class Operations {
|
|
8
|
+
get items() {
|
|
9
|
+
return this._items;
|
|
10
|
+
}
|
|
11
|
+
get total() {
|
|
12
|
+
return this.items.length;
|
|
13
|
+
}
|
|
14
|
+
get count() {
|
|
15
|
+
return this._count;
|
|
16
|
+
}
|
|
17
|
+
clear() {
|
|
18
|
+
this._items = [];
|
|
19
|
+
this._count = 0;
|
|
20
|
+
}
|
|
21
|
+
insert(params) {
|
|
22
|
+
this._count++;
|
|
23
|
+
this.items.push({
|
|
24
|
+
index: {
|
|
25
|
+
_id: params.id,
|
|
26
|
+
_index: params.index
|
|
27
|
+
}
|
|
28
|
+
}, params.data);
|
|
29
|
+
}
|
|
30
|
+
modify(params) {
|
|
31
|
+
this.insert(params);
|
|
32
|
+
}
|
|
33
|
+
delete(params) {
|
|
34
|
+
this._count++;
|
|
35
|
+
this.items.push({
|
|
36
|
+
delete: {
|
|
37
|
+
_id: params.id,
|
|
38
|
+
_index: params.index
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
constructor(){
|
|
43
|
+
this._items = [];
|
|
44
|
+
this._count = 0;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
export { Operations, Operations_OperationType as OperationType };
|
|
48
|
+
|
|
49
|
+
//# sourceMappingURL=Operations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features/Operations/Operations.js","sources":["../../../src/features/Operations/Operations.ts"],"sourcesContent":["import type { GenericRecord } from \"@webiny/api/types.js\";\nimport { Operations as OperationsAbstraction } from \"./abstractions/Operations.js\";\n\nexport enum OperationType {\n INSERT = \"INSERT\",\n MODIFY = \"MODIFY\",\n REMOVE = \"REMOVE\"\n}\n\nexport class Operations implements OperationsAbstraction.Interface {\n private _items: GenericRecord[] = [];\n private _count = 0;\n\n public get items(): GenericRecord[] {\n return this._items;\n }\n\n public get total(): number {\n return this.items.length;\n }\n\n public get count(): number {\n return this._count;\n }\n\n public clear() {\n this._items = [];\n this._count = 0;\n }\n\n public insert(params: OperationsAbstraction.InsertParams): void {\n this._count++;\n this.items.push(\n {\n index: {\n _id: params.id,\n _index: params.index\n }\n },\n params.data\n );\n }\n\n public modify(params: OperationsAbstraction.ModifyParams): void {\n this.insert(params);\n }\n\n public delete(params: OperationsAbstraction.DeleteParams): void {\n this._count++;\n this.items.push({\n delete: {\n _id: params.id,\n _index: params.index\n }\n });\n }\n}\n"],"names":["OperationType","Operations","params"],"mappings":"AAGO,IAAKA,2BAAaA,WAAAA,GAAAA,SAAbA,aAAa;;;;WAAbA;;AAML,MAAMC;IAIT,IAAW,QAAyB;QAChC,OAAO,IAAI,CAAC,MAAM;IACtB;IAEA,IAAW,QAAgB;QACvB,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM;IAC5B;IAEA,IAAW,QAAgB;QACvB,OAAO,IAAI,CAAC,MAAM;IACtB;IAEO,QAAQ;QACX,IAAI,CAAC,MAAM,GAAG,EAAE;QAChB,IAAI,CAAC,MAAM,GAAG;IAClB;IAEO,OAAOC,MAA0C,EAAQ;QAC5D,IAAI,CAAC,MAAM;QACX,IAAI,CAAC,KAAK,CAAC,IAAI,CACX;YACI,OAAO;gBACH,KAAKA,OAAO,EAAE;gBACd,QAAQA,OAAO,KAAK;YACxB;QACJ,GACAA,OAAO,IAAI;IAEnB;IAEO,OAAOA,MAA0C,EAAQ;QAC5D,IAAI,CAAC,MAAM,CAACA;IAChB;IAEO,OAAOA,MAA0C,EAAQ;QAC5D,IAAI,CAAC,MAAM;QACX,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;YACZ,QAAQ;gBACJ,KAAKA,OAAO,EAAE;gBACd,QAAQA,OAAO,KAAK;YACxB;QACJ;IACJ;;aA7CQ,MAAM,GAAoB,EAAE;aAC5B,MAAM,GAAG;;AA6CrB"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { OperationsFactory as OperationsFactoryAbstraction } from "./abstractions/OperationsFactory.js";
|
|
2
|
+
import { Operations } from "./Operations.js";
|
|
3
|
+
declare class OperationsFactoryImpl implements OperationsFactoryAbstraction.Interface {
|
|
4
|
+
create(): Operations;
|
|
5
|
+
}
|
|
6
|
+
export declare const OperationsFactory: typeof OperationsFactoryImpl & {
|
|
7
|
+
__abstraction: import("@webiny/di").Abstraction<import("./abstractions/OperationsFactory.js").IOperationsFactory>;
|
|
8
|
+
};
|
|
9
|
+
export {};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { OperationsFactory } from "./abstractions/OperationsFactory.js";
|
|
2
|
+
import { Operations } from "./Operations.js";
|
|
3
|
+
class OperationsFactoryImpl {
|
|
4
|
+
create() {
|
|
5
|
+
return new Operations();
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
const OperationsFactory_OperationsFactory = OperationsFactory.createImplementation({
|
|
9
|
+
implementation: OperationsFactoryImpl,
|
|
10
|
+
dependencies: []
|
|
11
|
+
});
|
|
12
|
+
export { OperationsFactory_OperationsFactory as OperationsFactory };
|
|
13
|
+
|
|
14
|
+
//# sourceMappingURL=OperationsFactory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features/Operations/OperationsFactory.js","sources":["../../../src/features/Operations/OperationsFactory.ts"],"sourcesContent":["import { OperationsFactory as OperationsFactoryAbstraction } from \"./abstractions/OperationsFactory.js\";\nimport { Operations } from \"./Operations.js\";\n\nclass OperationsFactoryImpl implements OperationsFactoryAbstraction.Interface {\n public create() {\n return new Operations();\n }\n}\n\nexport const OperationsFactory = OperationsFactoryAbstraction.createImplementation({\n implementation: OperationsFactoryImpl,\n dependencies: []\n});\n"],"names":["OperationsFactoryImpl","Operations","OperationsFactory","OperationsFactoryAbstraction"],"mappings":";;AAGA,MAAMA;IACK,SAAS;QACZ,OAAO,IAAIC;IACf;AACJ;AAEO,MAAMC,sCAAoBC,kBAAAA,oBAAiD,CAAC;IAC/E,gBAAgBH;IAChB,cAAc,EAAE;AACpB"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { GenericRecord } from "@webiny/api/types.js";
|
|
2
|
+
export interface IInsertOperationParams {
|
|
3
|
+
id: string;
|
|
4
|
+
index: string;
|
|
5
|
+
data: GenericRecord;
|
|
6
|
+
}
|
|
7
|
+
export type IModifyOperationParams = IInsertOperationParams;
|
|
8
|
+
export interface IDeleteOperationParams {
|
|
9
|
+
id: string;
|
|
10
|
+
index: string;
|
|
11
|
+
}
|
|
12
|
+
export interface IOperations {
|
|
13
|
+
items: GenericRecord[];
|
|
14
|
+
total: number;
|
|
15
|
+
count: number;
|
|
16
|
+
clear(): void;
|
|
17
|
+
insert(params: IInsertOperationParams): void;
|
|
18
|
+
modify(params: IModifyOperationParams): void;
|
|
19
|
+
delete(params: IDeleteOperationParams): void;
|
|
20
|
+
}
|
|
21
|
+
export declare const Operations: import("@webiny/di").Abstraction<IOperations>;
|
|
22
|
+
export declare namespace Operations {
|
|
23
|
+
type Interface = IOperations;
|
|
24
|
+
type InsertParams = IInsertOperationParams;
|
|
25
|
+
type ModifyParams = IModifyOperationParams;
|
|
26
|
+
type DeleteParams = IDeleteOperationParams;
|
|
27
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features/Operations/abstractions/Operations.js","sources":["../../../../src/features/Operations/abstractions/Operations.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport type { GenericRecord } from \"@webiny/api/types.js\";\n\nexport interface IInsertOperationParams {\n id: string;\n index: string;\n data: GenericRecord;\n}\n\nexport type IModifyOperationParams = IInsertOperationParams;\n\nexport interface IDeleteOperationParams {\n id: string;\n index: string;\n}\n\nexport interface IOperations {\n items: GenericRecord[];\n total: number;\n count: number;\n clear(): void;\n insert(params: IInsertOperationParams): void;\n modify(params: IModifyOperationParams): void;\n delete(params: IDeleteOperationParams): void;\n}\n\nexport const Operations = createAbstraction<IOperations>(\"Sync/Operations\");\n\nexport namespace Operations {\n export type Interface = IOperations;\n export type InsertParams = IInsertOperationParams;\n export type ModifyParams = IModifyOperationParams;\n export type DeleteParams = IDeleteOperationParams;\n}\n"],"names":["Operations","createAbstraction"],"mappings":";AA0BO,MAAMA,aAAaC,kBAA+B"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Operations } from "./Operations.js";
|
|
2
|
+
export interface IOperationsFactory {
|
|
3
|
+
create(): Operations.Interface;
|
|
4
|
+
}
|
|
5
|
+
export declare const OperationsFactory: import("@webiny/di").Abstraction<IOperationsFactory>;
|
|
6
|
+
export declare namespace OperationsFactory {
|
|
7
|
+
type Interface = IOperationsFactory;
|
|
8
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features/Operations/abstractions/OperationsFactory.js","sources":["../../../../src/features/Operations/abstractions/OperationsFactory.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport type { Operations } from \"./Operations.js\";\n\nexport interface IOperationsFactory {\n create(): Operations.Interface;\n}\n\nexport const OperationsFactory = createAbstraction<IOperationsFactory>(\"Sync/OperationsFactory\");\n\nexport namespace OperationsFactory {\n export type Interface = IOperationsFactory;\n}\n"],"names":["OperationsFactory","createAbstraction"],"mappings":";AAOO,MAAMA,oBAAoBC,kBAAsC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { createFeature } from "@webiny/feature/api";
|
|
2
|
+
import { OperationsFactory } from "./OperationsFactory.js";
|
|
3
|
+
const OperationsFactoryFeature = createFeature({
|
|
4
|
+
name: "sync.operationsFactory",
|
|
5
|
+
register (container) {
|
|
6
|
+
container.register(OperationsFactory);
|
|
7
|
+
}
|
|
8
|
+
});
|
|
9
|
+
export { OperationsFactoryFeature };
|
|
10
|
+
|
|
11
|
+
//# sourceMappingURL=feature.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features/Operations/feature.js","sources":["../../../src/features/Operations/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { OperationsFactory } from \"./OperationsFactory.js\";\n\nexport const OperationsFactoryFeature = createFeature({\n name: \"sync.operationsFactory\",\n register(container) {\n container.register(OperationsFactory);\n }\n});\n"],"names":["OperationsFactoryFeature","createFeature","container","OperationsFactory"],"mappings":";;AAGO,MAAMA,2BAA2BC,cAAc;IAClD,MAAM;IACN,UAASC,SAAS;QACdA,UAAU,QAAQ,CAACC;IACvB;AACJ"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Operations } from "../Operations/abstractions/Operations.js";
|
|
2
|
+
export interface IOperationsBuilderBuildParams<TRecord = unknown> {
|
|
3
|
+
records: TRecord[];
|
|
4
|
+
}
|
|
5
|
+
export interface IOperationsBuilder<TRecord = unknown> {
|
|
6
|
+
build(params: IOperationsBuilderBuildParams<TRecord>): Promise<Operations.Interface>;
|
|
7
|
+
}
|
|
8
|
+
export declare const OperationsBuilder: import("@webiny/di").Abstraction<IOperationsBuilder<unknown>>;
|
|
9
|
+
export declare namespace OperationsBuilder {
|
|
10
|
+
type Interface<TRecord = unknown> = IOperationsBuilder<TRecord>;
|
|
11
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features/OperationsBuilder/abstraction.js","sources":["../../../src/features/OperationsBuilder/abstraction.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport type { Operations } from \"../Operations/abstractions/Operations.js\";\n\nexport interface IOperationsBuilderBuildParams<TRecord = unknown> {\n records: TRecord[];\n}\n\nexport interface IOperationsBuilder<TRecord = unknown> {\n build(params: IOperationsBuilderBuildParams<TRecord>): Promise<Operations.Interface>;\n}\n\nexport const OperationsBuilder = createAbstraction<IOperationsBuilder>(\"Sync/OperationsBuilder\");\n\nexport namespace OperationsBuilder {\n export type Interface<TRecord = unknown> = IOperationsBuilder<TRecord>;\n}\n"],"names":["OperationsBuilder","createAbstraction"],"mappings":";AAWO,MAAMA,oBAAoBC,kBAAsC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Operations } from "../Operations/abstractions/Operations.js";
|
|
2
|
+
import { OperationsFactory } from "../Operations/abstractions/OperationsFactory.js";
|
|
3
|
+
import { Timer } from "@webiny/utils/features/Timer/abstraction.js";
|
|
4
|
+
import { ExecuteSyncWithRetry } from "../ExecuteSyncWithRetry/abstraction.js";
|
|
5
|
+
import { SynchronizationBuilder as SynchronizationBuilderAbstraction } from "./abstraction.js";
|
|
6
|
+
declare class SynchronizationBuilderImpl implements SynchronizationBuilderAbstraction.Interface {
|
|
7
|
+
private readonly timer;
|
|
8
|
+
private readonly executeSyncWithRetry;
|
|
9
|
+
private readonly operationsFactory;
|
|
10
|
+
private readonly operations;
|
|
11
|
+
constructor(timer: Timer.Interface, executeSyncWithRetry: ExecuteSyncWithRetry.Interface, operationsFactory: OperationsFactory.Interface);
|
|
12
|
+
insert(params: Operations.InsertParams): void;
|
|
13
|
+
modify(params: Operations.ModifyParams): void;
|
|
14
|
+
delete(params: Operations.DeleteParams): void;
|
|
15
|
+
build(): (params?: Partial<ExecuteSyncWithRetry.Params>) => Promise<void>;
|
|
16
|
+
}
|
|
17
|
+
export declare const SynchronizationBuilder: typeof SynchronizationBuilderImpl & {
|
|
18
|
+
__abstraction: import("@webiny/di").Abstraction<import("./abstraction.js").ISynchronizationBuilder>;
|
|
19
|
+
};
|
|
20
|
+
export {};
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { OperationsFactory } from "../Operations/abstractions/OperationsFactory.js";
|
|
2
|
+
import { Timer } from "@webiny/utils/features/Timer/abstraction.js";
|
|
3
|
+
import { ExecuteSyncWithRetry } from "../ExecuteSyncWithRetry/abstraction.js";
|
|
4
|
+
import { SynchronizationBuilder } from "./abstraction.js";
|
|
5
|
+
class SynchronizationBuilderImpl {
|
|
6
|
+
constructor(timer, executeSyncWithRetry, operationsFactory){
|
|
7
|
+
this.timer = timer;
|
|
8
|
+
this.executeSyncWithRetry = executeSyncWithRetry;
|
|
9
|
+
this.operationsFactory = operationsFactory;
|
|
10
|
+
this.operations = this.operationsFactory.create();
|
|
11
|
+
}
|
|
12
|
+
insert(params) {
|
|
13
|
+
this.operations.insert(params);
|
|
14
|
+
}
|
|
15
|
+
modify(params) {
|
|
16
|
+
this.operations.modify(params);
|
|
17
|
+
}
|
|
18
|
+
delete(params) {
|
|
19
|
+
this.operations.delete(params);
|
|
20
|
+
}
|
|
21
|
+
build() {
|
|
22
|
+
return async (params)=>{
|
|
23
|
+
if (0 === this.operations.total) return;
|
|
24
|
+
await this.executeSyncWithRetry.execute({
|
|
25
|
+
...params,
|
|
26
|
+
maxRunningTime: this.timer.getRemainingSeconds(),
|
|
27
|
+
operations: this.operations
|
|
28
|
+
});
|
|
29
|
+
this.operations.clear();
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
const SynchronizationBuilder_SynchronizationBuilder = SynchronizationBuilder.createImplementation({
|
|
34
|
+
implementation: SynchronizationBuilderImpl,
|
|
35
|
+
dependencies: [
|
|
36
|
+
Timer,
|
|
37
|
+
ExecuteSyncWithRetry,
|
|
38
|
+
OperationsFactory
|
|
39
|
+
]
|
|
40
|
+
});
|
|
41
|
+
export { SynchronizationBuilder_SynchronizationBuilder as SynchronizationBuilder };
|
|
42
|
+
|
|
43
|
+
//# sourceMappingURL=SynchronizationBuilder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features/SynchronizationBuilder/SynchronizationBuilder.js","sources":["../../../src/features/SynchronizationBuilder/SynchronizationBuilder.ts"],"sourcesContent":["import { Operations } from \"../Operations/abstractions/Operations.js\";\nimport { OperationsFactory } from \"../Operations/abstractions/OperationsFactory.js\";\nimport { Timer } from \"@webiny/utils/features/Timer/abstraction.js\";\nimport { ExecuteSyncWithRetry } from \"../ExecuteSyncWithRetry/abstraction.js\";\nimport { SynchronizationBuilder as SynchronizationBuilderAbstraction } from \"./abstraction.js\";\n\nclass SynchronizationBuilderImpl implements SynchronizationBuilderAbstraction.Interface {\n private readonly operations: Operations.Interface;\n\n public constructor(\n private readonly timer: Timer.Interface,\n private readonly executeSyncWithRetry: ExecuteSyncWithRetry.Interface,\n private readonly operationsFactory: OperationsFactory.Interface\n ) {\n this.operations = this.operationsFactory.create();\n }\n\n public insert(params: Operations.InsertParams): void {\n this.operations.insert(params);\n }\n\n public modify(params: Operations.ModifyParams): void {\n this.operations.modify(params);\n }\n\n public delete(params: Operations.DeleteParams): void {\n this.operations.delete(params);\n }\n\n public build() {\n return async (params?: Partial<ExecuteSyncWithRetry.Params>) => {\n if (this.operations.total === 0) {\n return;\n }\n await this.executeSyncWithRetry.execute({\n ...params,\n maxRunningTime: this.timer.getRemainingSeconds(),\n operations: this.operations\n });\n this.operations.clear();\n };\n }\n}\n\nexport const SynchronizationBuilder = SynchronizationBuilderAbstraction.createImplementation({\n implementation: SynchronizationBuilderImpl,\n dependencies: [Timer, ExecuteSyncWithRetry, OperationsFactory]\n});\n"],"names":["SynchronizationBuilderImpl","timer","executeSyncWithRetry","operationsFactory","params","SynchronizationBuilder","SynchronizationBuilderAbstraction","Timer","ExecuteSyncWithRetry","OperationsFactory"],"mappings":";;;;AAMA,MAAMA;IAGF,YACqBC,KAAsB,EACtBC,oBAAoD,EACpDC,iBAA8C,CACjE;aAHmBF,KAAK,GAALA;aACAC,oBAAoB,GAApBA;aACAC,iBAAiB,GAAjBA;QAEjB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM;IACnD;IAEO,OAAOC,MAA+B,EAAQ;QACjD,IAAI,CAAC,UAAU,CAAC,MAAM,CAACA;IAC3B;IAEO,OAAOA,MAA+B,EAAQ;QACjD,IAAI,CAAC,UAAU,CAAC,MAAM,CAACA;IAC3B;IAEO,OAAOA,MAA+B,EAAQ;QACjD,IAAI,CAAC,UAAU,CAAC,MAAM,CAACA;IAC3B;IAEO,QAAQ;QACX,OAAO,OAAOA;YACV,IAAI,AAA0B,MAA1B,IAAI,CAAC,UAAU,CAAC,KAAK,EACrB;YAEJ,MAAM,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC;gBACpC,GAAGA,MAAM;gBACT,gBAAgB,IAAI,CAAC,KAAK,CAAC,mBAAmB;gBAC9C,YAAY,IAAI,CAAC,UAAU;YAC/B;YACA,IAAI,CAAC,UAAU,CAAC,KAAK;QACzB;IACJ;AACJ;AAEO,MAAMC,gDAAyBC,uBAAAA,oBAAsD,CAAC;IACzF,gBAAgBN;IAChB,cAAc;QAACO;QAAOC;QAAsBC;KAAkB;AAClE"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Operations } from "../Operations/abstractions/Operations.js";
|
|
2
|
+
import type { ExecuteSyncWithRetry } from "../ExecuteSyncWithRetry/abstraction.js";
|
|
3
|
+
export interface ISynchronizationBuilder {
|
|
4
|
+
insert(params: Operations.InsertParams): void;
|
|
5
|
+
modify(params: Operations.ModifyParams): void;
|
|
6
|
+
delete(params: Operations.DeleteParams): void;
|
|
7
|
+
build(): (params?: Partial<ExecuteSyncWithRetry.Params>) => Promise<void>;
|
|
8
|
+
}
|
|
9
|
+
export declare const SynchronizationBuilder: import("@webiny/di").Abstraction<ISynchronizationBuilder>;
|
|
10
|
+
export declare namespace SynchronizationBuilder {
|
|
11
|
+
type Interface = ISynchronizationBuilder;
|
|
12
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features/SynchronizationBuilder/abstraction.js","sources":["../../../src/features/SynchronizationBuilder/abstraction.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport type { Operations } from \"../Operations/abstractions/Operations.js\";\nimport type { ExecuteSyncWithRetry } from \"../ExecuteSyncWithRetry/abstraction.js\";\n\nexport interface ISynchronizationBuilder {\n insert(params: Operations.InsertParams): void;\n modify(params: Operations.ModifyParams): void;\n delete(params: Operations.DeleteParams): void;\n build(): (params?: Partial<ExecuteSyncWithRetry.Params>) => Promise<void>;\n}\n\nexport const SynchronizationBuilder = createAbstraction<ISynchronizationBuilder>(\n \"Sync/SynchronizationBuilder\"\n);\n\nexport namespace SynchronizationBuilder {\n export type Interface = ISynchronizationBuilder;\n}\n"],"names":["SynchronizationBuilder","createAbstraction"],"mappings":";AAWO,MAAMA,yBAAyBC,kBAClC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { createFeature } from "@webiny/feature/api";
|
|
2
|
+
import { SynchronizationBuilder } from "./SynchronizationBuilder.js";
|
|
3
|
+
const SynchronizationBuilderFeature = createFeature({
|
|
4
|
+
name: "sync.synchronizationBuilder",
|
|
5
|
+
register (container) {
|
|
6
|
+
container.register(SynchronizationBuilder);
|
|
7
|
+
}
|
|
8
|
+
});
|
|
9
|
+
export { SynchronizationBuilderFeature };
|
|
10
|
+
|
|
11
|
+
//# sourceMappingURL=feature.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features/SynchronizationBuilder/feature.js","sources":["../../../src/features/SynchronizationBuilder/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { SynchronizationBuilder } from \"./SynchronizationBuilder.js\";\n\nexport const SynchronizationBuilderFeature = createFeature({\n name: \"sync.synchronizationBuilder\",\n register(container) {\n container.register(SynchronizationBuilder);\n }\n});\n"],"names":["SynchronizationBuilderFeature","createFeature","container","SynchronizationBuilder"],"mappings":";;AAGO,MAAMA,gCAAgCC,cAAc;IACvD,MAAM;IACN,UAASC,SAAS;QACdA,UAAU,QAAQ,CAACC;IACvB;AACJ"}
|
package/index.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export { Operations } from "./features/Operations/abstractions/Operations.js";
|
|
2
|
+
export { OperationType } from "./features/Operations/Operations.js";
|
|
3
|
+
export { OperationsFactory } from "./features/Operations/abstractions/OperationsFactory.js";
|
|
4
|
+
export { OperationsFactoryFeature } from "./features/Operations/feature.js";
|
|
5
|
+
export { OperationsBuilder } from "./features/OperationsBuilder/abstraction.js";
|
|
6
|
+
export { ExecuteSync } from "./features/ExecuteSync/abstraction.js";
|
|
7
|
+
export { ExecuteSyncFeature } from "./features/ExecuteSync/feature.js";
|
|
8
|
+
export { ExecuteSyncWithRetry } from "./features/ExecuteSyncWithRetry/abstraction.js";
|
|
9
|
+
export { ExecuteSyncWithRetryFeature } from "./features/ExecuteSyncWithRetry/feature.js";
|
|
10
|
+
export { SynchronizationBuilder } from "./features/SynchronizationBuilder/abstraction.js";
|
|
11
|
+
export { SynchronizationBuilderFeature } from "./features/SynchronizationBuilder/feature.js";
|
|
12
|
+
export { NotEnoughRemainingTimeError } from "./NotEnoughRemainingTimeError.js";
|
package/index.js
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export { Operations } from "./features/Operations/abstractions/Operations.js";
|
|
2
|
+
export { OperationType } from "./features/Operations/Operations.js";
|
|
3
|
+
export { OperationsFactory } from "./features/Operations/abstractions/OperationsFactory.js";
|
|
4
|
+
export { OperationsFactoryFeature } from "./features/Operations/feature.js";
|
|
5
|
+
export { OperationsBuilder } from "./features/OperationsBuilder/abstraction.js";
|
|
6
|
+
export { ExecuteSync } from "./features/ExecuteSync/abstraction.js";
|
|
7
|
+
export { ExecuteSyncFeature } from "./features/ExecuteSync/feature.js";
|
|
8
|
+
export { ExecuteSyncWithRetry } from "./features/ExecuteSyncWithRetry/abstraction.js";
|
|
9
|
+
export { ExecuteSyncWithRetryFeature } from "./features/ExecuteSyncWithRetry/feature.js";
|
|
10
|
+
export { SynchronizationBuilder } from "./features/SynchronizationBuilder/abstraction.js";
|
|
11
|
+
export { SynchronizationBuilderFeature } from "./features/SynchronizationBuilder/feature.js";
|
|
12
|
+
export { NotEnoughRemainingTimeError } from "./NotEnoughRemainingTimeError.js";
|
package/package.json
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@webiny/api-sync-to-opensearch",
|
|
3
|
+
"version": "0.0.0-unstable.0156a4c312",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"exports": {
|
|
6
|
+
".": "./index.js",
|
|
7
|
+
"./*": "./*"
|
|
8
|
+
},
|
|
9
|
+
"repository": {
|
|
10
|
+
"type": "git",
|
|
11
|
+
"url": "https://github.com/webiny/webiny-js.git",
|
|
12
|
+
"directory": "packages/api-sync-to-opensearch"
|
|
13
|
+
},
|
|
14
|
+
"description": "Platform-agnostic OpenSearch synchronization with DI abstractions.",
|
|
15
|
+
"license": "MIT",
|
|
16
|
+
"author": "Webiny Ltd.",
|
|
17
|
+
"dependencies": {
|
|
18
|
+
"@webiny/api": "0.0.0-unstable.0156a4c312",
|
|
19
|
+
"@webiny/api-opensearch": "0.0.0-unstable.0156a4c312",
|
|
20
|
+
"@webiny/error": "0.0.0-unstable.0156a4c312",
|
|
21
|
+
"@webiny/feature": "0.0.0-unstable.0156a4c312",
|
|
22
|
+
"@webiny/stdlib": "0.0.21",
|
|
23
|
+
"@webiny/utils": "0.0.0-unstable.0156a4c312",
|
|
24
|
+
"p-retry": "8.0.1"
|
|
25
|
+
},
|
|
26
|
+
"devDependencies": {
|
|
27
|
+
"@webiny/build-tools": "0.0.0-unstable.0156a4c312",
|
|
28
|
+
"@webiny/plugins": "0.0.0-unstable.0156a4c312",
|
|
29
|
+
"typescript": "7.0.2"
|
|
30
|
+
},
|
|
31
|
+
"publishConfig": {
|
|
32
|
+
"access": "public"
|
|
33
|
+
},
|
|
34
|
+
"adio": {
|
|
35
|
+
"ignoreDirs": [
|
|
36
|
+
"__tests__"
|
|
37
|
+
]
|
|
38
|
+
},
|
|
39
|
+
"webiny": {
|
|
40
|
+
"publishFrom": "dist"
|
|
41
|
+
}
|
|
42
|
+
}
|