@webiny/api-elasticsearch-tasks 0.0.0-unstable.6f45466a1d → 0.0.0-unstable.7be00a75a9
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/abstractions/DbRegistry.js +2 -1
- package/abstractions/DbRegistry.js.map +1 -1
- package/abstractions/OpensearchTenantIndexFactory.d.ts +2 -2
- package/abstractions/OpensearchTenantIndexFactory.js +2 -1
- package/abstractions/OpensearchTenantIndexFactory.js.map +1 -1
- package/abstractions/SynchronizationContext.d.ts +3 -1
- package/abstractions/SynchronizationContext.js +2 -1
- package/abstractions/SynchronizationContext.js.map +1 -1
- package/errors/IndexSettingsGetError.js +10 -9
- package/errors/IndexSettingsGetError.js.map +1 -1
- package/errors/IndexSettingsSetError.js +10 -9
- package/errors/IndexSettingsSetError.js.map +1 -1
- package/errors/IndexingDisableError.js +3 -1
- package/errors/IndexingDisableError.js.map +1 -1
- package/errors/IndexingEnableError.js +3 -1
- package/errors/IndexingEnableError.js.map +1 -1
- package/errors/index.js +0 -2
- package/helpers/getClients.d.ts +2 -2
- package/helpers/getClients.js +11 -10
- package/helpers/getClients.js.map +1 -1
- package/helpers/scan.js +12 -14
- package/helpers/scan.js.map +1 -1
- package/index.js +14 -10
- package/index.js.map +1 -1
- package/package.json +33 -35
- package/settings/DisableIndexing.js +16 -15
- package/settings/DisableIndexing.js.map +1 -1
- package/settings/EnableIndexing.js +16 -15
- package/settings/EnableIndexing.js.map +1 -1
- package/settings/IndexManager.d.ts +1 -1
- package/settings/IndexManager.js +67 -79
- package/settings/IndexManager.js.map +1 -1
- package/settings/IndexSettingsManager.d.ts +1 -1
- package/settings/IndexSettingsManager.js +31 -30
- package/settings/IndexSettingsManager.js.map +1 -1
- package/settings/index.js +0 -2
- package/settings/types.js +0 -3
- package/tasks/Manager.d.ts +3 -3
- package/tasks/Manager.js +24 -25
- package/tasks/Manager.js.map +1 -1
- package/tasks/createIndexes/CreateIndexesTask.js +33 -48
- package/tasks/createIndexes/CreateIndexesTask.js.map +1 -1
- package/tasks/createIndexes/CreateIndexesTaskRunner.js +45 -61
- package/tasks/createIndexes/CreateIndexesTaskRunner.js.map +1 -1
- package/tasks/createIndexes/OnBeforeTrigger.js +28 -41
- package/tasks/createIndexes/OnBeforeTrigger.js.map +1 -1
- package/tasks/createIndexes/createIndex.js +12 -17
- package/tasks/createIndexes/createIndex.js.map +1 -1
- package/tasks/createIndexes/index.js +9 -12
- package/tasks/createIndexes/index.js.map +1 -1
- package/tasks/createIndexes/listIndexes.js +10 -16
- package/tasks/createIndexes/listIndexes.js.map +1 -1
- package/tasks/createIndexes/types.js +0 -3
- package/tasks/dataSynchronization/DataSynchronizationTask.d.ts +6 -12
- package/tasks/dataSynchronization/DataSynchronizationTask.js +52 -64
- package/tasks/dataSynchronization/DataSynchronizationTask.js.map +1 -1
- package/tasks/dataSynchronization/DataSynchronizationTaskRunner.js +31 -39
- package/tasks/dataSynchronization/DataSynchronizationTaskRunner.js.map +1 -1
- package/tasks/dataSynchronization/createFactories.js +4 -7
- package/tasks/dataSynchronization/createFactories.js.map +1 -1
- package/tasks/dataSynchronization/elasticsearch/ElasticsearchFetcher.d.ts +1 -1
- package/tasks/dataSynchronization/elasticsearch/ElasticsearchFetcher.js +66 -80
- package/tasks/dataSynchronization/elasticsearch/ElasticsearchFetcher.js.map +1 -1
- package/tasks/dataSynchronization/elasticsearch/ElasticsearchSynchronize.js +49 -62
- package/tasks/dataSynchronization/elasticsearch/ElasticsearchSynchronize.js.map +1 -1
- package/tasks/dataSynchronization/elasticsearch/ElasticsearchToDynamoDbSynchronization.js +50 -62
- package/tasks/dataSynchronization/elasticsearch/ElasticsearchToDynamoDbSynchronization.js.map +1 -1
- package/tasks/dataSynchronization/elasticsearch/abstractions/ElasticsearchFetcher.d.ts +1 -1
- package/tasks/dataSynchronization/elasticsearch/abstractions/ElasticsearchFetcher.js +0 -3
- package/tasks/dataSynchronization/elasticsearch/abstractions/ElasticsearchSynchronize.js +0 -3
- package/tasks/dataSynchronization/elasticsearch/shouldIgnoreEsResponseError.js +7 -4
- package/tasks/dataSynchronization/elasticsearch/shouldIgnoreEsResponseError.js.map +1 -1
- package/tasks/dataSynchronization/entities/getElasticsearchEntity.js +14 -20
- package/tasks/dataSynchronization/entities/getElasticsearchEntity.js.map +1 -1
- package/tasks/dataSynchronization/entities/getElasticsearchEntityType.js +7 -8
- package/tasks/dataSynchronization/entities/getElasticsearchEntityType.js.map +1 -1
- package/tasks/dataSynchronization/entities/getTable.js +13 -19
- package/tasks/dataSynchronization/entities/getTable.js.map +1 -1
- package/tasks/dataSynchronization/entities/index.js +0 -2
- package/tasks/dataSynchronization/index.js +15 -18
- package/tasks/dataSynchronization/index.js.map +1 -1
- package/tasks/dataSynchronization/types.d.ts +1 -1
- package/tasks/dataSynchronization/types.js +0 -3
- package/tasks/enableIndexing/EnableIndexingTaskRunner.js +27 -35
- package/tasks/enableIndexing/EnableIndexingTaskRunner.js.map +1 -1
- package/tasks/enableIndexing/index.js +23 -33
- package/tasks/enableIndexing/index.js.map +1 -1
- package/tasks/enableIndexing/types.js +0 -3
- package/tasks/index.js +0 -2
- package/tasks/reindexing/ReindexingTaskRunner.js +75 -119
- package/tasks/reindexing/ReindexingTaskRunner.js.map +1 -1
- package/tasks/reindexing/index.js +0 -2
- package/tasks/reindexing/reindexingTaskDefinition.js +25 -40
- package/tasks/reindexing/reindexingTaskDefinition.js.map +1 -1
- package/types.d.ts +4 -4
- package/types.js +0 -3
- package/errors/index.js.map +0 -1
- package/settings/index.js.map +0 -1
- package/settings/types.js.map +0 -1
- package/tasks/createIndexes/types.js.map +0 -1
- package/tasks/dataSynchronization/elasticsearch/abstractions/ElasticsearchFetcher.js.map +0 -1
- package/tasks/dataSynchronization/elasticsearch/abstractions/ElasticsearchSynchronize.js.map +0 -1
- package/tasks/dataSynchronization/entities/index.js.map +0 -1
- package/tasks/dataSynchronization/types.js.map +0 -1
- package/tasks/enableIndexing/types.js.map +0 -1
- package/tasks/index.js.map +0 -1
- package/tasks/reindexing/index.js.map +0 -1
- package/types.js.map +0 -1
package/settings/IndexManager.js
CHANGED
|
@@ -3,91 +3,79 @@ import { DisableIndexing } from "./DisableIndexing.js";
|
|
|
3
3
|
import { EnableIndexing } from "./EnableIndexing.js";
|
|
4
4
|
import { getObjectProperties } from "@webiny/utils";
|
|
5
5
|
const defaultIndexSettings = {
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
numberOfReplicas: 1,
|
|
7
|
+
refreshInterval: "1s"
|
|
8
8
|
};
|
|
9
9
|
const indexPrefix = process.env.OPENSEARCH_INDEX_PREFIX || "";
|
|
10
|
-
const filterIndex = item
|
|
11
|
-
|
|
12
|
-
return false;
|
|
13
|
-
|
|
14
|
-
return
|
|
15
|
-
} else if (indexPrefix) {
|
|
16
|
-
return item.startsWith(indexPrefix);
|
|
17
|
-
}
|
|
18
|
-
return true;
|
|
10
|
+
const filterIndex = (item)=>{
|
|
11
|
+
if (!item) return false;
|
|
12
|
+
if (item.startsWith(".")) return false;
|
|
13
|
+
if (indexPrefix) return item.startsWith(indexPrefix);
|
|
14
|
+
return true;
|
|
19
15
|
};
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
}
|
|
24
|
-
constructor(client, settings, defaults) {
|
|
25
|
-
const indexSettings = new IndexSettingsManager(client);
|
|
26
|
-
this.client = client;
|
|
27
|
-
this.disable = new DisableIndexing(indexSettings);
|
|
28
|
-
this.enable = new EnableIndexing(indexSettings);
|
|
29
|
-
this._settings = settings;
|
|
30
|
-
this.defaults = {
|
|
31
|
-
refreshInterval: defaults?.refreshInterval || defaultIndexSettings.refreshInterval,
|
|
32
|
-
numberOfReplicas: defaults?.numberOfReplicas || defaultIndexSettings.numberOfReplicas
|
|
33
|
-
};
|
|
34
|
-
}
|
|
35
|
-
async list() {
|
|
36
|
-
try {
|
|
37
|
-
const response = await this.client.cat.indices({
|
|
38
|
-
format: "json"
|
|
39
|
-
});
|
|
40
|
-
if (!Array.isArray(response.body)) {
|
|
41
|
-
return [];
|
|
42
|
-
}
|
|
43
|
-
return response.body.map(item => item.index).filter(filterIndex);
|
|
44
|
-
} catch (ex) {
|
|
45
|
-
console.error(JSON.stringify({
|
|
46
|
-
message: "Failed to list indices.",
|
|
47
|
-
error: getObjectProperties(ex)
|
|
48
|
-
}));
|
|
49
|
-
return [];
|
|
16
|
+
class IndexManager {
|
|
17
|
+
get settings() {
|
|
18
|
+
return this._settings;
|
|
50
19
|
}
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
20
|
+
constructor(client, settings, defaults){
|
|
21
|
+
const indexSettings = new IndexSettingsManager(client);
|
|
22
|
+
this.client = client;
|
|
23
|
+
this.disable = new DisableIndexing(indexSettings);
|
|
24
|
+
this.enable = new EnableIndexing(indexSettings);
|
|
25
|
+
this._settings = settings;
|
|
26
|
+
this.defaults = {
|
|
27
|
+
refreshInterval: defaults?.refreshInterval || defaultIndexSettings.refreshInterval,
|
|
28
|
+
numberOfReplicas: defaults?.numberOfReplicas || defaultIndexSettings.numberOfReplicas
|
|
29
|
+
};
|
|
58
30
|
}
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
31
|
+
async list() {
|
|
32
|
+
try {
|
|
33
|
+
const response = await this.client.cat.indices({
|
|
34
|
+
format: "json"
|
|
35
|
+
});
|
|
36
|
+
if (!Array.isArray(response.body)) return [];
|
|
37
|
+
return response.body.map((item)=>item.index).filter((index)=>filterIndex(index));
|
|
38
|
+
} catch (ex) {
|
|
39
|
+
console.error(JSON.stringify({
|
|
40
|
+
message: "Failed to list indices.",
|
|
41
|
+
error: getObjectProperties(ex)
|
|
42
|
+
}));
|
|
43
|
+
return [];
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
async disableIndexing(index) {
|
|
47
|
+
if (this._settings[index]) return this._settings[index];
|
|
48
|
+
const settings = await this.disable.exec(index);
|
|
49
|
+
this._settings[index] = settings;
|
|
50
|
+
return settings;
|
|
51
|
+
}
|
|
52
|
+
async enableIndexing(index) {
|
|
53
|
+
if (!index) {
|
|
54
|
+
const indexes = Object.keys(this._settings);
|
|
55
|
+
for (const index of indexes)await this.enableIndexing(index);
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
const settings = this._settings[index] || this.defaults;
|
|
59
|
+
await this.enable.exec(index, settings);
|
|
60
|
+
}
|
|
61
|
+
async createIndex(index, settings) {
|
|
62
|
+
await this.client.indices.create({
|
|
63
|
+
index,
|
|
64
|
+
body: settings
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
async indexExists(index) {
|
|
68
|
+
const response = await this.client.indices.exists({
|
|
69
|
+
index,
|
|
70
|
+
ignore_unavailable: false,
|
|
71
|
+
allow_no_indices: true,
|
|
72
|
+
include_defaults: true,
|
|
73
|
+
flat_settings: false,
|
|
74
|
+
local: false
|
|
75
|
+
});
|
|
76
|
+
return !!response.body;
|
|
70
77
|
}
|
|
71
|
-
const settings = this._settings[index] || this.defaults;
|
|
72
|
-
await this.enable.exec(index, settings);
|
|
73
|
-
}
|
|
74
|
-
async createIndex(index, settings) {
|
|
75
|
-
await this.client.indices.create({
|
|
76
|
-
index,
|
|
77
|
-
body: settings
|
|
78
|
-
});
|
|
79
|
-
}
|
|
80
|
-
async indexExists(index) {
|
|
81
|
-
const response = await this.client.indices.exists({
|
|
82
|
-
index,
|
|
83
|
-
ignore_unavailable: false,
|
|
84
|
-
allow_no_indices: true,
|
|
85
|
-
include_defaults: true,
|
|
86
|
-
flat_settings: false,
|
|
87
|
-
local: false
|
|
88
|
-
});
|
|
89
|
-
return !!response.body;
|
|
90
|
-
}
|
|
91
78
|
}
|
|
79
|
+
export { IndexManager };
|
|
92
80
|
|
|
93
81
|
//# sourceMappingURL=IndexManager.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"settings/IndexManager.js","sources":["../../src/settings/IndexManager.ts"],"sourcesContent":["import { IndexSettingsManager } from \"~/settings/IndexSettingsManager.js\";\nimport { DisableIndexing } from \"./DisableIndexing.js\";\nimport { EnableIndexing } from \"./EnableIndexing.js\";\nimport type { IElasticsearchIndexingTaskValuesSettings, IIndexSettingsValues } from \"~/types.js\";\nimport type { IIndexManager } from \"~/settings/types.js\";\nimport type { Client } from \"@webiny/api-opensearch\";\nimport { getObjectProperties } from \"@webiny/utils\";\n\nconst defaultIndexSettings: IIndexSettingsValues = {\n numberOfReplicas: 1,\n refreshInterval: \"1s\"\n};\n\nexport interface IListIndicesResponse {\n index: string;\n}\n\nconst indexPrefix = process.env.OPENSEARCH_INDEX_PREFIX || \"\";\nconst filterIndex = (item?: string) => {\n if (!item) {\n return false;\n } else if (item.startsWith(\".\")) {\n return false;\n } else if (indexPrefix) {\n return item.startsWith(indexPrefix);\n }\n return true;\n};\n\nexport class IndexManager implements IIndexManager {\n private readonly client: Client;\n private readonly disable: DisableIndexing;\n private readonly enable: EnableIndexing;\n private readonly _settings: IElasticsearchIndexingTaskValuesSettings;\n\n private readonly defaults: IIndexSettingsValues;\n\n public get settings(): IElasticsearchIndexingTaskValuesSettings {\n return this._settings;\n }\n\n public constructor(\n client: Client,\n settings: IElasticsearchIndexingTaskValuesSettings,\n defaults?: Partial<IIndexSettingsValues>\n ) {\n const indexSettings = new IndexSettingsManager(client);\n this.client = client;\n this.disable = new DisableIndexing(indexSettings);\n this.enable = new EnableIndexing(indexSettings);\n this._settings = settings;\n this.defaults = {\n refreshInterval: defaults?.refreshInterval || defaultIndexSettings.refreshInterval,\n numberOfReplicas: defaults?.numberOfReplicas || defaultIndexSettings.numberOfReplicas\n };\n }\n\n public async list(): Promise<string[]> {\n try {\n const response = await this.client.cat.indices({\n format: \"json\"\n });\n if (!Array.isArray(response.body)) {\n return [];\n }\n return response.body\n .map(item => item.index)\n .filter((index): index is string => filterIndex(index));\n } catch (ex) {\n console.error(\n JSON.stringify({\n message: \"Failed to list indices.\",\n error: getObjectProperties(ex)\n })\n );\n return [];\n }\n }\n\n public async disableIndexing(index: string) {\n /**\n * No need to disable indexing if it's already disabled.\n */\n if (this._settings[index]) {\n return this._settings[index];\n }\n const settings = await this.disable.exec(index);\n this._settings[index] = settings;\n return settings;\n }\n\n public async enableIndexing(index?: string) {\n if (!index) {\n const indexes = Object.keys(this._settings);\n for (const index of indexes) {\n await this.enableIndexing(index);\n }\n return;\n }\n const settings = this._settings[index] || this.defaults;\n await this.enable.exec(index, settings);\n }\n\n public async createIndex(index: string, settings?: Record<string, any>): Promise<void> {\n await this.client.indices.create({\n index,\n body: settings\n });\n }\n\n public async indexExists(index: string): Promise<boolean> {\n const response = await this.client.indices.exists({\n index,\n ignore_unavailable: false,\n allow_no_indices: true,\n include_defaults: true,\n flat_settings: false,\n local: false\n });\n return !!response.body;\n }\n}\n"],"names":["defaultIndexSettings","indexPrefix","process","filterIndex","item","IndexManager","client","settings","defaults","indexSettings","IndexSettingsManager","DisableIndexing","EnableIndexing","response","Array","index","ex","console","JSON","getObjectProperties","indexes","Object"],"mappings":";;;;AAQA,MAAMA,uBAA6C;IAC/C,kBAAkB;IAClB,iBAAiB;AACrB;AAMA,MAAMC,cAAcC,QAAQ,GAAG,CAAC,uBAAuB,IAAI;AAC3D,MAAMC,cAAc,CAACC;IACjB,IAAI,CAACA,MACD,OAAO;IACJ,IAAIA,KAAK,UAAU,CAAC,MACvB,OAAO;IACJ,IAAIH,aACP,OAAOG,KAAK,UAAU,CAACH;IAE3B,OAAO;AACX;AAEO,MAAMI;IAQT,IAAW,WAAqD;QAC5D,OAAO,IAAI,CAAC,SAAS;IACzB;IAEA,YACIC,MAAc,EACdC,QAAkD,EAClDC,QAAwC,CAC1C;QACE,MAAMC,gBAAgB,IAAIC,qBAAqBJ;QAC/C,IAAI,CAAC,MAAM,GAAGA;QACd,IAAI,CAAC,OAAO,GAAG,IAAIK,gBAAgBF;QACnC,IAAI,CAAC,MAAM,GAAG,IAAIG,eAAeH;QACjC,IAAI,CAAC,SAAS,GAAGF;QACjB,IAAI,CAAC,QAAQ,GAAG;YACZ,iBAAiBC,UAAU,mBAAmBR,qBAAqB,eAAe;YAClF,kBAAkBQ,UAAU,oBAAoBR,qBAAqB,gBAAgB;QACzF;IACJ;IAEA,MAAa,OAA0B;QACnC,IAAI;YACA,MAAMa,WAAW,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC;gBAC3C,QAAQ;YACZ;YACA,IAAI,CAACC,MAAM,OAAO,CAACD,SAAS,IAAI,GAC5B,OAAO,EAAE;YAEb,OAAOA,SAAS,IAAI,CACf,GAAG,CAACT,CAAAA,OAAQA,KAAK,KAAK,EACtB,MAAM,CAAC,CAACW,QAA2BZ,YAAYY;QACxD,EAAE,OAAOC,IAAI;YACTC,QAAQ,KAAK,CACTC,KAAK,SAAS,CAAC;gBACX,SAAS;gBACT,OAAOC,oBAAoBH;YAC/B;YAEJ,OAAO,EAAE;QACb;IACJ;IAEA,MAAa,gBAAgBD,KAAa,EAAE;QAIxC,IAAI,IAAI,CAAC,SAAS,CAACA,MAAM,EACrB,OAAO,IAAI,CAAC,SAAS,CAACA,MAAM;QAEhC,MAAMR,WAAW,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAACQ;QACzC,IAAI,CAAC,SAAS,CAACA,MAAM,GAAGR;QACxB,OAAOA;IACX;IAEA,MAAa,eAAeQ,KAAc,EAAE;QACxC,IAAI,CAACA,OAAO;YACR,MAAMK,UAAUC,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS;YAC1C,KAAK,MAAMN,SAASK,QAChB,MAAM,IAAI,CAAC,cAAc,CAACL;YAE9B;QACJ;QACA,MAAMR,WAAW,IAAI,CAAC,SAAS,CAACQ,MAAM,IAAI,IAAI,CAAC,QAAQ;QACvD,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAACA,OAAOR;IAClC;IAEA,MAAa,YAAYQ,KAAa,EAAER,QAA8B,EAAiB;QACnF,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;YAC7BQ;YACA,MAAMR;QACV;IACJ;IAEA,MAAa,YAAYQ,KAAa,EAAoB;QACtD,MAAMF,WAAW,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;YAC9CE;YACA,oBAAoB;YACpB,kBAAkB;YAClB,kBAAkB;YAClB,eAAe;YACf,OAAO;QACX;QACA,OAAO,CAAC,CAACF,SAAS,IAAI;IAC1B;AACJ"}
|
|
@@ -1,37 +1,38 @@
|
|
|
1
1
|
import { IndexSettingsGetError, IndexSettingsSetError } from "../errors/index.js";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
}
|
|
6
|
-
async getSettings(index) {
|
|
7
|
-
try {
|
|
8
|
-
const response = await this.elasticsearch.indices.getSettings({
|
|
9
|
-
index
|
|
10
|
-
});
|
|
11
|
-
const setting = response.body[index].settings.index;
|
|
12
|
-
return {
|
|
13
|
-
numberOfReplicas: setting.number_of_replicas,
|
|
14
|
-
refreshInterval: setting.refresh_interval
|
|
15
|
-
};
|
|
16
|
-
} catch (ex) {
|
|
17
|
-
throw new IndexSettingsGetError(ex, index);
|
|
2
|
+
class IndexSettingsManager {
|
|
3
|
+
constructor(elasticsearch){
|
|
4
|
+
this.elasticsearch = elasticsearch;
|
|
18
5
|
}
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
6
|
+
async getSettings(index) {
|
|
7
|
+
try {
|
|
8
|
+
const response = await this.elasticsearch.indices.getSettings({
|
|
9
|
+
index
|
|
10
|
+
});
|
|
11
|
+
const setting = response.body[index]?.settings?.index;
|
|
12
|
+
return {
|
|
13
|
+
numberOfReplicas: parseInt(String(setting?.number_of_replicas ?? "0"), 10),
|
|
14
|
+
refreshInterval: setting?.refresh_interval ?? "1s"
|
|
15
|
+
};
|
|
16
|
+
} catch (ex) {
|
|
17
|
+
throw new IndexSettingsGetError(ex, index);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
async setSettings(index, settings) {
|
|
21
|
+
try {
|
|
22
|
+
await this.elasticsearch.indices.putSettings({
|
|
23
|
+
index,
|
|
24
|
+
body: {
|
|
25
|
+
index: {
|
|
26
|
+
number_of_replicas: settings.numberOfReplicas,
|
|
27
|
+
refresh_interval: settings.refreshInterval
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
} catch (ex) {
|
|
32
|
+
throw new IndexSettingsSetError(ex, index);
|
|
29
33
|
}
|
|
30
|
-
});
|
|
31
|
-
} catch (ex) {
|
|
32
|
-
throw new IndexSettingsSetError(ex, index);
|
|
33
34
|
}
|
|
34
|
-
}
|
|
35
35
|
}
|
|
36
|
+
export { IndexSettingsManager };
|
|
36
37
|
|
|
37
38
|
//# sourceMappingURL=IndexSettingsManager.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"settings/IndexSettingsManager.js","sources":["../../src/settings/IndexSettingsManager.ts"],"sourcesContent":["import type { Client } from \"@webiny/api-opensearch\";\nimport { IndexSettingsGetError, IndexSettingsSetError } from \"~/errors/index.js\";\nimport type { IIndexSettingsValues } from \"~/types.js\";\n\nexport class IndexSettingsManager {\n private readonly elasticsearch: Client;\n\n public constructor(elasticsearch: Client) {\n this.elasticsearch = elasticsearch;\n }\n\n public async getSettings(index: string): Promise<IIndexSettingsValues> {\n try {\n const response = await this.elasticsearch.indices.getSettings({\n index\n });\n\n const setting = response.body[index]?.settings?.index;\n\n return {\n numberOfReplicas: parseInt(String(setting?.number_of_replicas ?? \"0\"), 10),\n refreshInterval: setting?.refresh_interval ?? \"1s\"\n };\n } catch (ex) {\n throw new IndexSettingsGetError(ex, index);\n }\n }\n\n public async setSettings(index: string, settings: IIndexSettingsValues): Promise<void> {\n try {\n await this.elasticsearch.indices.putSettings({\n index,\n body: {\n index: {\n number_of_replicas: settings.numberOfReplicas,\n refresh_interval: settings.refreshInterval\n }\n }\n });\n } catch (ex) {\n throw new IndexSettingsSetError(ex, index);\n }\n }\n}\n"],"names":["IndexSettingsManager","elasticsearch","index","response","setting","parseInt","String","ex","IndexSettingsGetError","settings","IndexSettingsSetError"],"mappings":";AAIO,MAAMA;IAGT,YAAmBC,aAAqB,CAAE;QACtC,IAAI,CAAC,aAAa,GAAGA;IACzB;IAEA,MAAa,YAAYC,KAAa,EAAiC;QACnE,IAAI;YACA,MAAMC,WAAW,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,WAAW,CAAC;gBAC1DD;YACJ;YAEA,MAAME,UAAUD,SAAS,IAAI,CAACD,MAAM,EAAE,UAAU;YAEhD,OAAO;gBACH,kBAAkBG,SAASC,OAAOF,SAAS,sBAAsB,MAAM;gBACvE,iBAAiBA,SAAS,oBAAoB;YAClD;QACJ,EAAE,OAAOG,IAAI;YACT,MAAM,IAAIC,sBAAsBD,IAAIL;QACxC;IACJ;IAEA,MAAa,YAAYA,KAAa,EAAEO,QAA8B,EAAiB;QACnF,IAAI;YACA,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,WAAW,CAAC;gBACzCP;gBACA,MAAM;oBACF,OAAO;wBACH,oBAAoBO,SAAS,gBAAgB;wBAC7C,kBAAkBA,SAAS,eAAe;oBAC9C;gBACJ;YACJ;QACJ,EAAE,OAAOF,IAAI;YACT,MAAM,IAAIG,sBAAsBH,IAAIL;QACxC;IACJ;AACJ"}
|
package/settings/index.js
CHANGED
package/settings/types.js
CHANGED
package/tasks/Manager.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { TaskController } from "@webiny/api-core/features/task/TaskController/index.js";
|
|
2
2
|
import type { DynamoDBDocument } from "@webiny/aws-sdk/client-dynamodb/index.js";
|
|
3
|
-
import type { Client } from "@webiny/api-
|
|
4
|
-
import {
|
|
3
|
+
import type { Client } from "@webiny/api-opensearch";
|
|
4
|
+
import { createOpenSearchTable } from "@webiny/api-opensearch";
|
|
5
5
|
import type { IManager } from "../types.js";
|
|
6
6
|
import type { BatchReadItem } from "@webiny/db-dynamodb/utils/batch/batchRead.js";
|
|
7
7
|
import type { IEntity } from "@webiny/db-dynamodb";
|
|
@@ -15,7 +15,7 @@ export declare class Manager<T extends TaskDefinition.TaskInput, O extends TaskD
|
|
|
15
15
|
readonly controller: TaskController.Interface<T, O>;
|
|
16
16
|
readonly documentClient: DynamoDBDocument;
|
|
17
17
|
readonly elasticsearch: Client;
|
|
18
|
-
readonly table: ReturnType<typeof
|
|
18
|
+
readonly table: ReturnType<typeof createOpenSearchTable>;
|
|
19
19
|
private readonly entities;
|
|
20
20
|
constructor(params: ManagerParams<T, O>);
|
|
21
21
|
getEntity(name: string): IEntity;
|
package/tasks/Manager.js
CHANGED
|
@@ -1,30 +1,29 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { createOpenSearchEntity, createOpenSearchTable } from "@webiny/api-opensearch";
|
|
2
2
|
import { batchReadAll } from "@webiny/db-dynamodb/utils/batch/batchRead.js";
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
3
|
+
class Manager {
|
|
4
|
+
constructor(params){
|
|
5
|
+
this.entities = {};
|
|
6
|
+
this.controller = params.controller;
|
|
7
|
+
this.documentClient = params.documentClient;
|
|
8
|
+
this.elasticsearch = params.elasticsearchClient;
|
|
9
|
+
this.table = createOpenSearchTable({
|
|
10
|
+
documentClient: this.documentClient
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
getEntity(name) {
|
|
14
|
+
if (this.entities[name]) return this.entities[name];
|
|
15
|
+
return this.entities[name] = createOpenSearchEntity({
|
|
16
|
+
table: this.table,
|
|
17
|
+
entityName: name
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
async read(items) {
|
|
21
|
+
return await batchReadAll({
|
|
22
|
+
table: this.table.table,
|
|
23
|
+
items
|
|
24
|
+
});
|
|
16
25
|
}
|
|
17
|
-
return this.entities[name] = createElasticsearchEntity({
|
|
18
|
-
table: this.table,
|
|
19
|
-
entityName: name
|
|
20
|
-
});
|
|
21
|
-
}
|
|
22
|
-
async read(items) {
|
|
23
|
-
return await batchReadAll({
|
|
24
|
-
table: this.table.table,
|
|
25
|
-
items
|
|
26
|
-
});
|
|
27
|
-
}
|
|
28
26
|
}
|
|
27
|
+
export { Manager };
|
|
29
28
|
|
|
30
29
|
//# sourceMappingURL=Manager.js.map
|
package/tasks/Manager.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"tasks/Manager.js","sources":["../../src/tasks/Manager.ts"],"sourcesContent":["import { TaskController } from \"@webiny/api-core/features/task/TaskController/index.js\";\nimport type { DynamoDBDocument } from \"@webiny/aws-sdk/client-dynamodb/index.js\";\nimport type { Client } from \"@webiny/api-opensearch\";\nimport { createOpenSearchEntity, createOpenSearchTable } from \"@webiny/api-opensearch\";\nimport type { IManager } from \"~/types.js\";\nimport type { BatchReadItem } from \"@webiny/db-dynamodb/utils/batch/batchRead.js\";\nimport { batchReadAll } from \"@webiny/db-dynamodb/utils/batch/batchRead.js\";\nimport type { IEntity } from \"@webiny/db-dynamodb\";\nimport { TaskDefinition } from \"@webiny/api-core/features/task/TaskDefinition/index.js\";\n\nexport interface ManagerParams<\n T extends TaskDefinition.TaskInput,\n O extends TaskDefinition.TaskOutput\n> {\n documentClient: DynamoDBDocument;\n elasticsearchClient: Client;\n controller: TaskController.Interface<T, O>;\n}\n\nexport class Manager<\n T extends TaskDefinition.TaskInput,\n O extends TaskDefinition.TaskOutput = TaskDefinition.TaskOutput\n> implements IManager<T, O> {\n public readonly controller: TaskController.Interface<T, O>;\n public readonly documentClient: DynamoDBDocument;\n public readonly elasticsearch: Client;\n public readonly table: ReturnType<typeof createOpenSearchTable>;\n\n private readonly entities: Record<string, IEntity> = {};\n\n public constructor(params: ManagerParams<T, O>) {\n this.controller = params.controller;\n this.documentClient = params.documentClient;\n this.elasticsearch = params.elasticsearchClient;\n\n this.table = createOpenSearchTable({\n documentClient: this.documentClient\n });\n }\n\n public getEntity(name: string): IEntity {\n if (this.entities[name]) {\n return this.entities[name];\n }\n\n return (this.entities[name] = createOpenSearchEntity({\n table: this.table,\n entityName: name\n }));\n }\n\n public async read<T>(items: BatchReadItem[]): Promise<T[]> {\n return await batchReadAll<T>({\n table: this.table.table,\n items\n });\n }\n}\n"],"names":["Manager","params","createOpenSearchTable","name","createOpenSearchEntity","items","batchReadAll"],"mappings":";;AAmBO,MAAMA;IAWT,YAAmBC,MAA2B,CAAE;aAF/B,QAAQ,GAA4B,CAAC;QAGlD,IAAI,CAAC,UAAU,GAAGA,OAAO,UAAU;QACnC,IAAI,CAAC,cAAc,GAAGA,OAAO,cAAc;QAC3C,IAAI,CAAC,aAAa,GAAGA,OAAO,mBAAmB;QAE/C,IAAI,CAAC,KAAK,GAAGC,sBAAsB;YAC/B,gBAAgB,IAAI,CAAC,cAAc;QACvC;IACJ;IAEO,UAAUC,IAAY,EAAW;QACpC,IAAI,IAAI,CAAC,QAAQ,CAACA,KAAK,EACnB,OAAO,IAAI,CAAC,QAAQ,CAACA,KAAK;QAG9B,OAAQ,IAAI,CAAC,QAAQ,CAACA,KAAK,GAAGC,uBAAuB;YACjD,OAAO,IAAI,CAAC,KAAK;YACjB,YAAYD;QAChB;IACJ;IAEA,MAAa,KAAQE,KAAsB,EAAgB;QACvD,OAAO,MAAMC,aAAgB;YACzB,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK;YACvBD;QACJ;IACJ;AACJ"}
|
|
@@ -1,53 +1,38 @@
|
|
|
1
1
|
import { CreateIndexesTaskRunner } from "./CreateIndexesTaskRunner.js";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
2
|
+
class CreateIndexesTaskDefinition {
|
|
3
|
+
constructor(elasticsearchClient, documentClient, tenantContext, listTenantsUseCase, indexFactories){
|
|
4
|
+
this.elasticsearchClient = elasticsearchClient;
|
|
5
|
+
this.documentClient = documentClient;
|
|
6
|
+
this.tenantContext = tenantContext;
|
|
7
|
+
this.listTenantsUseCase = listTenantsUseCase;
|
|
8
|
+
this.indexFactories = indexFactories;
|
|
9
|
+
this.id = "elasticsearchCreateIndexes";
|
|
10
|
+
this.title = "Create Missing Elasticsearch Indexes";
|
|
11
|
+
this.maxIterations = 2;
|
|
12
|
+
}
|
|
13
|
+
async run({ input, controller }) {
|
|
14
|
+
if (controller.runtime.isAborted()) return controller.response.aborted();
|
|
15
|
+
const { Manager } = await import("../Manager.js");
|
|
16
|
+
const { IndexManager } = await import("../../settings/index.js");
|
|
17
|
+
const manager = new Manager({
|
|
18
|
+
elasticsearchClient: this.elasticsearchClient,
|
|
19
|
+
documentClient: this.documentClient,
|
|
20
|
+
controller
|
|
21
|
+
});
|
|
22
|
+
const indexManager = new IndexManager(manager.elasticsearch, {});
|
|
23
|
+
const createIndexesTaskRunner = new CreateIndexesTaskRunner(this.tenantContext, this.listTenantsUseCase, this.indexFactories, manager, indexManager);
|
|
24
|
+
return createIndexesTaskRunner.execute(input.matching, Array.from(input.done || []));
|
|
25
|
+
}
|
|
26
|
+
async onBeforeTrigger() {
|
|
27
|
+
const { IndexManager } = await import("../../settings/index.js");
|
|
28
|
+
const indexManager = new IndexManager(this.elasticsearchClient, {});
|
|
29
|
+
const { OnBeforeTrigger } = await import("./OnBeforeTrigger.js");
|
|
30
|
+
const onBeforeTrigger = new OnBeforeTrigger(indexManager, this.tenantContext, this.indexFactories);
|
|
31
|
+
await onBeforeTrigger.run([
|
|
32
|
+
"wbytask"
|
|
33
|
+
]);
|
|
23
34
|
}
|
|
24
|
-
const {
|
|
25
|
-
Manager
|
|
26
|
-
} = await import(/* webpackChunkName: "Manager" */"../Manager.js");
|
|
27
|
-
const {
|
|
28
|
-
IndexManager
|
|
29
|
-
} = await import(/* webpackChunkName: "IndexManager" */"../../settings/index.js");
|
|
30
|
-
const manager = new Manager({
|
|
31
|
-
elasticsearchClient: this.elasticsearchClient,
|
|
32
|
-
documentClient: this.documentClient,
|
|
33
|
-
controller
|
|
34
|
-
});
|
|
35
|
-
const indexManager = new IndexManager(manager.elasticsearch, {});
|
|
36
|
-
const createIndexesTaskRunner = new CreateIndexesTaskRunner(this.tenantContext, this.listTenantsUseCase, this.indexFactories, manager, indexManager);
|
|
37
|
-
return createIndexesTaskRunner.execute(input.matching, Array.from(input.done || []));
|
|
38
|
-
}
|
|
39
|
-
async onBeforeTrigger() {
|
|
40
|
-
// Let's create a new index for the tasks first.
|
|
41
|
-
const {
|
|
42
|
-
IndexManager
|
|
43
|
-
} = await import(/* webpackChunkName: "IndexManager" */"../../settings/index.js");
|
|
44
|
-
const indexManager = new IndexManager(this.elasticsearchClient, {});
|
|
45
|
-
const {
|
|
46
|
-
OnBeforeTrigger
|
|
47
|
-
} = await import(/* webpackChunkName: "OnBeforeTrigger" */"./OnBeforeTrigger.js");
|
|
48
|
-
const onBeforeTrigger = new OnBeforeTrigger(indexManager, this.tenantContext, this.indexFactories);
|
|
49
|
-
await onBeforeTrigger.run(["wbytask"]);
|
|
50
|
-
}
|
|
51
35
|
}
|
|
36
|
+
export { CreateIndexesTaskDefinition };
|
|
52
37
|
|
|
53
38
|
//# sourceMappingURL=CreateIndexesTask.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"tasks/createIndexes/CreateIndexesTask.js","sources":["../../../src/tasks/createIndexes/CreateIndexesTask.ts"],"sourcesContent":["import { TaskDefinition } from \"@webiny/api-core/features/task/TaskDefinition/index.js\";\nimport type { IElasticsearchCreateIndexesTaskInput } from \"~/tasks/createIndexes/types.js\";\nimport type { IElasticsearchTaskConfig } from \"~/types.js\";\nimport { CreateIndexesTaskRunner } from \"~/tasks/createIndexes/CreateIndexesTaskRunner.js\";\nimport { TenantContext } from \"@webiny/api-core/features/tenancy/TenantContext/index.js\";\nimport { ListTenantsUseCase } from \"@webiny/api-core/features/tenancy/ListTenants/index.js\";\nimport { OpensearchTenantIndexFactory } from \"~/abstractions/OpensearchTenantIndexFactory.js\";\n\nexport class CreateIndexesTaskDefinition implements TaskDefinition.Interface<IElasticsearchCreateIndexesTaskInput> {\n id = \"elasticsearchCreateIndexes\";\n title = \"Create Missing Elasticsearch Indexes\";\n /**\n * Maximum number of iterations before the task goes into the error state.\n * No point in having more than 2 runs, as the create index operations should not even take 1 full run, no matter how much indexes is there to create.\n */\n maxIterations = 2;\n\n constructor(\n private elasticsearchClient: IElasticsearchTaskConfig[\"elasticsearchClient\"],\n private documentClient: IElasticsearchTaskConfig[\"documentClient\"],\n private tenantContext: TenantContext.Interface,\n private listTenantsUseCase: ListTenantsUseCase.Interface,\n private indexFactories: OpensearchTenantIndexFactory.Interface[]\n ) {}\n\n async run({\n input,\n controller\n }: TaskDefinition.RunParams<IElasticsearchCreateIndexesTaskInput>) {\n if (controller.runtime.isAborted()) {\n return controller.response.aborted();\n }\n\n const { Manager } = await import(\n /* webpackChunkName: \"Manager\" */\n \"../Manager.js\"\n );\n const { IndexManager } = await import(\n /* webpackChunkName: \"IndexManager\" */ \"~/settings/index.js\"\n );\n\n const manager = new Manager<IElasticsearchCreateIndexesTaskInput>({\n elasticsearchClient: this.elasticsearchClient,\n documentClient: this.documentClient,\n controller\n });\n\n const indexManager = new IndexManager(manager.elasticsearch, {});\n\n const createIndexesTaskRunner = new CreateIndexesTaskRunner(\n this.tenantContext,\n this.listTenantsUseCase,\n this.indexFactories,\n manager,\n indexManager\n );\n\n return createIndexesTaskRunner.execute(input.matching, Array.from(input.done || []));\n }\n\n async onBeforeTrigger() {\n // Let's create a new index for the tasks first.\n const { IndexManager } = await import(\n /* webpackChunkName: \"IndexManager\" */ \"~/settings/index.js\"\n );\n const indexManager = new IndexManager(this.elasticsearchClient, {});\n const { OnBeforeTrigger } = await import(\n /* webpackChunkName: \"OnBeforeTrigger\" */\n \"./OnBeforeTrigger.js\"\n );\n\n const onBeforeTrigger = new OnBeforeTrigger(\n indexManager,\n this.tenantContext,\n this.indexFactories\n );\n await onBeforeTrigger.run([\"wbytask\"]);\n }\n}\n"],"names":["CreateIndexesTaskDefinition","elasticsearchClient","documentClient","tenantContext","listTenantsUseCase","indexFactories","input","controller","Manager","IndexManager","manager","indexManager","createIndexesTaskRunner","CreateIndexesTaskRunner","Array","OnBeforeTrigger","onBeforeTrigger"],"mappings":";AAQO,MAAMA;IAST,YACYC,mBAAoE,EACpEC,cAA0D,EAC1DC,aAAsC,EACtCC,kBAAgD,EAChDC,cAAwD,CAClE;aALUJ,mBAAmB,GAAnBA;aACAC,cAAc,GAAdA;aACAC,aAAa,GAAbA;aACAC,kBAAkB,GAAlBA;aACAC,cAAc,GAAdA;aAbZ,EAAE,GAAG;aACL,KAAK,GAAG;QAIP,KACD,aAAa,GAAG;IAQb;IAEH,MAAM,IAAI,EACNC,KAAK,EACLC,UAAU,EACmD,EAAE;QAC/D,IAAIA,WAAW,OAAO,CAAC,SAAS,IAC5B,OAAOA,WAAW,QAAQ,CAAC,OAAO;QAGtC,MAAM,EAAEC,OAAO,EAAE,GAAG,MAAM,MAAM,CAAN;QAI1B,MAAM,EAAEC,YAAY,EAAE,GAAG,MAAM,MAAM,CAAN;QAI/B,MAAMC,UAAU,IAAIF,QAA8C;YAC9D,qBAAqB,IAAI,CAAC,mBAAmB;YAC7C,gBAAgB,IAAI,CAAC,cAAc;YACnCD;QACJ;QAEA,MAAMI,eAAe,IAAIF,aAAaC,QAAQ,aAAa,EAAE,CAAC;QAE9D,MAAME,0BAA0B,IAAIC,wBAChC,IAAI,CAAC,aAAa,EAClB,IAAI,CAAC,kBAAkB,EACvB,IAAI,CAAC,cAAc,EACnBH,SACAC;QAGJ,OAAOC,wBAAwB,OAAO,CAACN,MAAM,QAAQ,EAAEQ,MAAM,IAAI,CAACR,MAAM,IAAI,IAAI,EAAE;IACtF;IAEA,MAAM,kBAAkB;QAEpB,MAAM,EAAEG,YAAY,EAAE,GAAG,MAAM,MAAM,CAAN;QAG/B,MAAME,eAAe,IAAIF,aAAa,IAAI,CAAC,mBAAmB,EAAE,CAAC;QACjE,MAAM,EAAEM,eAAe,EAAE,GAAG,MAAM,MAAM,CAAN;QAKlC,MAAMC,kBAAkB,IAAID,gBACxBJ,cACA,IAAI,CAAC,aAAa,EAClB,IAAI,CAAC,cAAc;QAEvB,MAAMK,gBAAgB,GAAG,CAAC;YAAC;SAAU;IACzC;AACJ"}
|