@cryptexlabs/codex-nodejs-common 0.5.5 → 0.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/package.json +1 -1
- package/lib/src/filter/app-http-exception-filter.d.ts +1 -0
- package/lib/src/filter/app-http-exception-filter.js +16 -4
- package/lib/src/filter/app-http-exception-filter.js.map +1 -1
- package/lib/src/service/elasticsearch/elasticsearch.initializer.d.ts +3 -3
- package/lib/src/service/elasticsearch/elasticsearch.initializer.js +3 -21
- package/lib/src/service/elasticsearch/elasticsearch.initializer.js.map +1 -1
- package/lib/src/service/elasticsearch/elasticsearch.pinger.d.ts +12 -0
- package/lib/src/service/elasticsearch/elasticsearch.pinger.js +69 -0
- package/lib/src/service/elasticsearch/elasticsearch.pinger.js.map +1 -0
- package/package.json +1 -1
- package/src/filter/app-http-exception-filter.ts +24 -13
- package/src/service/elasticsearch/elasticsearch.initializer.ts +5 -20
- package/src/service/elasticsearch/elasticsearch.pinger.ts +56 -0
package/lib/package.json
CHANGED
|
@@ -8,4 +8,5 @@ export declare class AppHttpExceptionFilter extends BaseExceptionFilter {
|
|
|
8
8
|
private readonly config;
|
|
9
9
|
constructor(fallbackLocale: Locale, fallbackLogger: LoggerService, config: DefaultConfig, applicationRef?: HttpServer);
|
|
10
10
|
catch(exception: any, host: ArgumentsHost): void;
|
|
11
|
+
getDeveloperText(exception: any, locale: any): string;
|
|
11
12
|
}
|
|
@@ -57,13 +57,27 @@ let AppHttpExceptionFilter = class AppHttpExceptionFilter extends core_1.BaseExc
|
|
|
57
57
|
const started = exception instanceof exception_1.FriendlyHttpException
|
|
58
58
|
? exception.context.started
|
|
59
59
|
: undefined;
|
|
60
|
+
const developerText = this.getDeveloperText(exception, locale);
|
|
61
|
+
const userMessage = exception instanceof exception_1.FriendlyHttpException ? exception.userMessage : "";
|
|
62
|
+
const errorHttpResponse = new response_1.ErrorHttpResponse(status, locale, new response_1.ErrorMessage(locale, locales_1.i18nData, null, null, developerText, userMessage), exception.stack || null, this.config, correlationId, started);
|
|
63
|
+
response.status(status).json(errorHttpResponse);
|
|
64
|
+
}
|
|
65
|
+
getDeveloperText(exception, locale) {
|
|
60
66
|
let developerText = locales_1.i18nData.__({
|
|
61
67
|
phrase: enum_1.LocalesEnum.UNKNOWN_ERROR,
|
|
62
68
|
locale: locale.i18n,
|
|
63
69
|
});
|
|
64
70
|
if (exception) {
|
|
65
71
|
if (exception.getStatus) {
|
|
66
|
-
if (exception.
|
|
72
|
+
if (exception.response && exception.response.message) {
|
|
73
|
+
if (Array.isArray(exception.response.message)) {
|
|
74
|
+
developerText = exception.response.message.join(" + ");
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
developerText = exception.response.message;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
else if (exception.message.message) {
|
|
67
81
|
developerText = exception.message.message;
|
|
68
82
|
}
|
|
69
83
|
else {
|
|
@@ -71,9 +85,7 @@ let AppHttpExceptionFilter = class AppHttpExceptionFilter extends core_1.BaseExc
|
|
|
71
85
|
}
|
|
72
86
|
}
|
|
73
87
|
}
|
|
74
|
-
|
|
75
|
-
const errorHttpResponse = new response_1.ErrorHttpResponse(status, locale, new response_1.ErrorMessage(locale, locales_1.i18nData, null, null, developerText, userMessage), exception.stack || null, this.config, correlationId, started);
|
|
76
|
-
response.status(status).json(errorHttpResponse);
|
|
88
|
+
return developerText;
|
|
77
89
|
}
|
|
78
90
|
};
|
|
79
91
|
AppHttpExceptionFilter = __decorate([
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app-http-exception-filter.js","sourceRoot":"","sources":["../../../src/filter/app-http-exception-filter.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAQwB;AACxB,uCAAmD;AAEnD,0CAA8D;AAC9D,4CAAqD;AACrD,oEAAuD;AACvD,gDAA8C;AAC9C,0CAA8C;AAC9C,sCAA0C;AAI1C,IAAa,sBAAsB,GAAnC,MAAa,sBAAuB,SAAQ,0BAAmB;IAC7D,YACmB,cAAsB,EACtB,cAA6B,EAC7B,MAAqB,EACtC,cAA2B;QAE3B,KAAK,CAAC,cAAc,CAAC,CAAC;QALL,mBAAc,GAAd,cAAc,CAAQ;QACtB,mBAAc,GAAd,cAAc,CAAe;QAC7B,WAAM,GAAN,MAAM,CAAe;IAIxC,CAAC;IAED,KAAK,CAAC,SAAc,EAAE,IAAmB;QACvC,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QAChC,MAAM,OAAO,GAAG,GAAG,CAAC,UAAU,EAAW,CAAC;QAC1C,MAAM,QAAQ,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;QAEnC,MAAM,MAAM,GACV,SAAS,YAAY,iCAAqB;YACxC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM;YAC1B,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC;QAE1B,MAAM,CAAC,KAAK,CAAC;YACX,OAAO,EAAE;gBACP,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,GAAG,EAAE,OAAO,CAAC,GAAG;gBAChB,MAAM,EAAE,OAAO,CAAC,MAAM;aACvB;YACD,SAAS;SACV,CAAC,CAAC;QAGH,IAAI,CAAC,CAAC,SAAS,YAAY,sBAAa,CAAC,IAAI,SAAS,CAAC,KAAK,EAAE;YAC5D,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;SAC/B;QAED,MAAM,MAAM,GACV,SAAS,CAAC,SAAS,KAAK,SAAS;YACjC,OAAO,SAAS,CAAC,SAAS,KAAK,UAAU;YACvC,CAAC,CAAC,SAAS,CAAC,SAAS,EAAE;YACvB,CAAC,CAAC,mBAAU,CAAC,qBAAqB,CAAC;QAEvC,MAAM,MAAM,GACV,SAAS,YAAY,iCAAqB;YACxC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM;YAC1B,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC;QAE1B,MAAM,aAAa,GACjB,SAAS,YAAY,iCAAqB;YACxC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,aAAa;YACjC,CAAC,CAAC,SAAS,CAAC;QAEhB,MAAM,OAAO,GACX,SAAS,YAAY,iCAAqB;YACxC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO;YAC3B,CAAC,CAAC,SAAS,CAAC;QAEhB,
|
|
1
|
+
{"version":3,"file":"app-http-exception-filter.js","sourceRoot":"","sources":["../../../src/filter/app-http-exception-filter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import { ElasticsearchService } from "@nestjs/elasticsearch";
|
|
2
2
|
import { CustomLogger } from "../../logger";
|
|
3
|
+
import { ElasticsearchPinger } from "./elasticsearch.pinger";
|
|
3
4
|
export declare class ElasticsearchInitializer {
|
|
4
5
|
private readonly logger;
|
|
5
6
|
private readonly index;
|
|
6
7
|
private readonly elasticsearchService;
|
|
7
8
|
private readonly indexProperties;
|
|
9
|
+
private readonly elasticsearchPinger;
|
|
8
10
|
private readonly type?;
|
|
9
|
-
constructor(logger: CustomLogger, index: string, elasticsearchService: ElasticsearchService, indexProperties: any, type?: string);
|
|
11
|
+
constructor(logger: CustomLogger, index: string, elasticsearchService: ElasticsearchService, indexProperties: any, elasticsearchPinger: ElasticsearchPinger, type?: string);
|
|
10
12
|
private _createIndex;
|
|
11
13
|
private _getIndexExists;
|
|
12
14
|
initializeIndex(): Promise<void>;
|
|
13
|
-
_waitForReady(): Promise<void>;
|
|
14
|
-
_isReady(): Promise<boolean>;
|
|
15
15
|
}
|
|
@@ -2,11 +2,12 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ElasticsearchInitializer = void 0;
|
|
4
4
|
class ElasticsearchInitializer {
|
|
5
|
-
constructor(logger, index, elasticsearchService, indexProperties, type) {
|
|
5
|
+
constructor(logger, index, elasticsearchService, indexProperties, elasticsearchPinger, type) {
|
|
6
6
|
this.logger = logger;
|
|
7
7
|
this.index = index;
|
|
8
8
|
this.elasticsearchService = elasticsearchService;
|
|
9
9
|
this.indexProperties = indexProperties;
|
|
10
|
+
this.elasticsearchPinger = elasticsearchPinger;
|
|
10
11
|
this.type = type;
|
|
11
12
|
}
|
|
12
13
|
async _createIndex() {
|
|
@@ -21,7 +22,7 @@ class ElasticsearchInitializer {
|
|
|
21
22
|
});
|
|
22
23
|
}
|
|
23
24
|
async initializeIndex() {
|
|
24
|
-
await this.
|
|
25
|
+
await this.elasticsearchPinger.waitForReady();
|
|
25
26
|
const exists = await this._getIndexExists();
|
|
26
27
|
if (!exists) {
|
|
27
28
|
await this._createIndex();
|
|
@@ -37,25 +38,6 @@ class ElasticsearchInitializer {
|
|
|
37
38
|
}
|
|
38
39
|
await this.elasticsearchService.indices.putMapping(params);
|
|
39
40
|
}
|
|
40
|
-
async _waitForReady() {
|
|
41
|
-
while (!(await this._isReady())) {
|
|
42
|
-
this.logger.info("Waiting for elasticsearch");
|
|
43
|
-
await new Promise((resolve) => {
|
|
44
|
-
setTimeout(resolve, 1000);
|
|
45
|
-
});
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
async _isReady() {
|
|
49
|
-
return new Promise(async (resolve) => {
|
|
50
|
-
try {
|
|
51
|
-
const result = await this.elasticsearchService.ping();
|
|
52
|
-
resolve(result);
|
|
53
|
-
}
|
|
54
|
-
catch (e) {
|
|
55
|
-
resolve(false);
|
|
56
|
-
}
|
|
57
|
-
});
|
|
58
|
-
}
|
|
59
41
|
}
|
|
60
42
|
exports.ElasticsearchInitializer = ElasticsearchInitializer;
|
|
61
43
|
//# sourceMappingURL=elasticsearch.initializer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"elasticsearch.initializer.js","sourceRoot":"","sources":["../../../../src/service/elasticsearch/elasticsearch.initializer.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"elasticsearch.initializer.js","sourceRoot":"","sources":["../../../../src/service/elasticsearch/elasticsearch.initializer.ts"],"names":[],"mappings":";;;AAKA,MAAa,wBAAwB;IACnC,YACmB,MAAoB,EACpB,KAAa,EACb,oBAA0C,EAC1C,eAAoB,EAEpB,mBAAwC,EAExC,IAAa;QAPb,WAAM,GAAN,MAAM,CAAc;QACpB,UAAK,GAAL,KAAK,CAAQ;QACb,yBAAoB,GAApB,oBAAoB,CAAsB;QAC1C,oBAAe,GAAf,eAAe,CAAK;QAEpB,wBAAmB,GAAnB,mBAAmB,CAAqB;QAExC,SAAI,GAAJ,IAAI,CAAS;IAC7B,CAAC;IAEI,KAAK,CAAC,YAAY;QACxB,MAAM,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,MAAM,CAAC;YAC7C,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,IAAI,EAAE,EAAE;SACT,CAAC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,eAAe;QAC3B,OAAO,MAAM,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,MAAM,CAAC;YACpD,KAAK,EAAE,IAAI,CAAC,KAAK;SAClB,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,eAAe;QACnB,MAAM,IAAI,CAAC,mBAAmB,CAAC,YAAY,EAAE,CAAC;QAE9C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAC5C,IAAI,CAAC,MAAM,EAAE;YACX,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;SAC3B;QAED,IAAI,MAAM,GAAQ;YAChB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,IAAI,EAAE;gBACJ,UAAU,EAAE,IAAI,CAAC,eAAe;aACjC;SACF,CAAC;QACF,IAAI,IAAI,CAAC,IAAI,EAAE;YACb,MAAM,mCACD,MAAM,KACT,IAAI,EAAE,IAAI,CAAC,IAAI,GAChB,CAAC;SACH;QACD,MAAM,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IAC7D,CAAC;CACF;AA/CD,4DA+CC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { CustomLogger } from "../../logger";
|
|
2
|
+
export declare class ElasticsearchPinger {
|
|
3
|
+
private readonly elasticsearchService;
|
|
4
|
+
private readonly logger;
|
|
5
|
+
private intervalId;
|
|
6
|
+
private ready;
|
|
7
|
+
private isPinging;
|
|
8
|
+
constructor(elasticsearchService: any, logger: CustomLogger);
|
|
9
|
+
private _resetPinger;
|
|
10
|
+
waitForReady(): Promise<unknown>;
|
|
11
|
+
_isReady(): Promise<boolean>;
|
|
12
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.ElasticsearchPinger = void 0;
|
|
16
|
+
const common_1 = require("@nestjs/common");
|
|
17
|
+
const logger_1 = require("../../logger");
|
|
18
|
+
let ElasticsearchPinger = class ElasticsearchPinger {
|
|
19
|
+
constructor(elasticsearchService, logger) {
|
|
20
|
+
this.elasticsearchService = elasticsearchService;
|
|
21
|
+
this.logger = logger;
|
|
22
|
+
}
|
|
23
|
+
_resetPinger() {
|
|
24
|
+
if (this.intervalId) {
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
this.ready = false;
|
|
28
|
+
this.intervalId = setInterval(async () => {
|
|
29
|
+
this.logger.info("Waiting for elasticsearch");
|
|
30
|
+
this.ready = await this._isReady();
|
|
31
|
+
if (this.ready) {
|
|
32
|
+
clearInterval(this.intervalId);
|
|
33
|
+
this.intervalId = null;
|
|
34
|
+
}
|
|
35
|
+
}, 1000);
|
|
36
|
+
}
|
|
37
|
+
async waitForReady() {
|
|
38
|
+
if (this.ready) {
|
|
39
|
+
this._resetPinger();
|
|
40
|
+
}
|
|
41
|
+
return new Promise((resolve) => {
|
|
42
|
+
const intervalId = setInterval(() => {
|
|
43
|
+
if (this.ready) {
|
|
44
|
+
clearInterval(intervalId);
|
|
45
|
+
resolve(undefined);
|
|
46
|
+
}
|
|
47
|
+
}, 500);
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
async _isReady() {
|
|
51
|
+
return new Promise(async (resolve) => {
|
|
52
|
+
try {
|
|
53
|
+
const result = await this.elasticsearchService.ping();
|
|
54
|
+
resolve(result);
|
|
55
|
+
}
|
|
56
|
+
catch (e) {
|
|
57
|
+
resolve(false);
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
ElasticsearchPinger = __decorate([
|
|
63
|
+
common_1.Injectable(),
|
|
64
|
+
__param(0, common_1.Inject("ELASTICSEARCH_SERVICE")),
|
|
65
|
+
__param(1, common_1.Inject("LOGGER")),
|
|
66
|
+
__metadata("design:paramtypes", [Object, logger_1.CustomLogger])
|
|
67
|
+
], ElasticsearchPinger);
|
|
68
|
+
exports.ElasticsearchPinger = ElasticsearchPinger;
|
|
69
|
+
//# sourceMappingURL=elasticsearch.pinger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"elasticsearch.pinger.js","sourceRoot":"","sources":["../../../../src/service/elasticsearch/elasticsearch.pinger.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAAoD;AACpD,yCAA4C;AAG5C,IAAa,mBAAmB,GAAhC,MAAa,mBAAmB;IAO9B,YACoD,oBAAoB,EACnC,MAAoB;QADL,yBAAoB,GAApB,oBAAoB,CAAA;QACnC,WAAM,GAAN,MAAM,CAAc;IACtD,CAAC;IAEI,YAAY;QAClB,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB,OAAO;SACR;QACD,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,UAAU,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;YACvC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;YAC9C,IAAI,CAAC,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnC,IAAI,IAAI,CAAC,KAAK,EAAE;gBACd,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBAC/B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;aACxB;QACH,CAAC,EAAE,IAAI,CAAC,CAAC;IACX,CAAC;IAEM,KAAK,CAAC,YAAY;QACvB,IAAI,IAAI,CAAC,KAAK,EAAE;YACd,IAAI,CAAC,YAAY,EAAE,CAAC;SACrB;QAED,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC7B,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE;gBAClC,IAAI,IAAI,CAAC,KAAK,EAAE;oBACd,aAAa,CAAC,UAAU,CAAC,CAAC;oBAC1B,OAAO,CAAC,SAAS,CAAC,CAAC;iBACpB;YACH,CAAC,EAAE,GAAG,CAAC,CAAC;QACV,CAAC,CAAC,CAAC;IACL,CAAC;IACD,KAAK,CAAC,QAAQ;QACZ,OAAO,IAAI,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;YACnC,IAAI;gBACF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC;gBACtD,OAAO,CAAC,MAAM,CAAC,CAAC;aACjB;YAAC,OAAO,CAAC,EAAE;gBACV,OAAO,CAAC,KAAK,CAAC,CAAC;aAChB;QACH,CAAC,CAAC,CAAC;IACL,CAAC;CACF,CAAA;AAnDY,mBAAmB;IAD/B,mBAAU,EAAE;IASR,WAAA,eAAM,CAAC,uBAAuB,CAAC,CAAA;IAC/B,WAAA,eAAM,CAAC,QAAQ,CAAC,CAAA;6CAA0B,qBAAY;GAT9C,mBAAmB,CAmD/B;AAnDY,kDAAmB"}
|
package/package.json
CHANGED
|
@@ -74,19 +74,7 @@ export class AppHttpExceptionFilter extends BaseExceptionFilter {
|
|
|
74
74
|
? exception.context.started
|
|
75
75
|
: undefined;
|
|
76
76
|
|
|
77
|
-
|
|
78
|
-
phrase: LocalesEnum.UNKNOWN_ERROR,
|
|
79
|
-
locale: locale.i18n,
|
|
80
|
-
});
|
|
81
|
-
if (exception) {
|
|
82
|
-
if (exception.getStatus) {
|
|
83
|
-
if (exception.message.message) {
|
|
84
|
-
developerText = exception.message.message;
|
|
85
|
-
} else {
|
|
86
|
-
developerText = exception.message;
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
}
|
|
77
|
+
const developerText = this.getDeveloperText(exception, locale);
|
|
90
78
|
|
|
91
79
|
const userMessage =
|
|
92
80
|
exception instanceof FriendlyHttpException ? exception.userMessage : "";
|
|
@@ -110,4 +98,27 @@ export class AppHttpExceptionFilter extends BaseExceptionFilter {
|
|
|
110
98
|
|
|
111
99
|
response.status(status).json(errorHttpResponse);
|
|
112
100
|
}
|
|
101
|
+
|
|
102
|
+
getDeveloperText(exception: any, locale: any): string {
|
|
103
|
+
let developerText: string = i18nData.__({
|
|
104
|
+
phrase: LocalesEnum.UNKNOWN_ERROR,
|
|
105
|
+
locale: locale.i18n,
|
|
106
|
+
});
|
|
107
|
+
if (exception) {
|
|
108
|
+
if (exception.getStatus) {
|
|
109
|
+
if (exception.response && exception.response.message) {
|
|
110
|
+
if (Array.isArray(exception.response.message)) {
|
|
111
|
+
developerText = exception.response.message.join(" + ");
|
|
112
|
+
} else {
|
|
113
|
+
developerText = exception.response.message;
|
|
114
|
+
}
|
|
115
|
+
} else if (exception.message.message) {
|
|
116
|
+
developerText = exception.message.message;
|
|
117
|
+
} else {
|
|
118
|
+
developerText = exception.message;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
return developerText;
|
|
123
|
+
}
|
|
113
124
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { ElasticsearchService } from "@nestjs/elasticsearch";
|
|
2
2
|
import { CustomLogger } from "../../logger";
|
|
3
3
|
import { HttpStatus } from "@nestjs/common";
|
|
4
|
+
import { ElasticsearchPinger } from "./elasticsearch.pinger";
|
|
4
5
|
|
|
5
6
|
export class ElasticsearchInitializer {
|
|
6
7
|
constructor(
|
|
@@ -8,6 +9,9 @@ export class ElasticsearchInitializer {
|
|
|
8
9
|
private readonly index: string,
|
|
9
10
|
private readonly elasticsearchService: ElasticsearchService,
|
|
10
11
|
private readonly indexProperties: any,
|
|
12
|
+
|
|
13
|
+
private readonly elasticsearchPinger: ElasticsearchPinger,
|
|
14
|
+
|
|
11
15
|
private readonly type?: string
|
|
12
16
|
) {}
|
|
13
17
|
|
|
@@ -25,7 +29,7 @@ export class ElasticsearchInitializer {
|
|
|
25
29
|
}
|
|
26
30
|
|
|
27
31
|
async initializeIndex() {
|
|
28
|
-
await this.
|
|
32
|
+
await this.elasticsearchPinger.waitForReady();
|
|
29
33
|
|
|
30
34
|
const exists = await this._getIndexExists();
|
|
31
35
|
if (!exists) {
|
|
@@ -46,23 +50,4 @@ export class ElasticsearchInitializer {
|
|
|
46
50
|
}
|
|
47
51
|
await this.elasticsearchService.indices.putMapping(params);
|
|
48
52
|
}
|
|
49
|
-
|
|
50
|
-
async _waitForReady() {
|
|
51
|
-
while (!(await this._isReady())) {
|
|
52
|
-
this.logger.info("Waiting for elasticsearch");
|
|
53
|
-
await new Promise((resolve) => {
|
|
54
|
-
setTimeout(resolve, 1000);
|
|
55
|
-
});
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
async _isReady(): Promise<boolean> {
|
|
59
|
-
return new Promise(async (resolve) => {
|
|
60
|
-
try {
|
|
61
|
-
const result = await this.elasticsearchService.ping();
|
|
62
|
-
resolve(result);
|
|
63
|
-
} catch (e) {
|
|
64
|
-
resolve(false);
|
|
65
|
-
}
|
|
66
|
-
});
|
|
67
|
-
}
|
|
68
53
|
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { Inject, Injectable } from "@nestjs/common";
|
|
2
|
+
import { CustomLogger } from "../../logger";
|
|
3
|
+
|
|
4
|
+
@Injectable()
|
|
5
|
+
export class ElasticsearchPinger {
|
|
6
|
+
private intervalId;
|
|
7
|
+
|
|
8
|
+
private ready;
|
|
9
|
+
|
|
10
|
+
private isPinging;
|
|
11
|
+
|
|
12
|
+
constructor(
|
|
13
|
+
@Inject("ELASTICSEARCH_SERVICE") private readonly elasticsearchService,
|
|
14
|
+
@Inject("LOGGER") private readonly logger: CustomLogger
|
|
15
|
+
) {}
|
|
16
|
+
|
|
17
|
+
private _resetPinger() {
|
|
18
|
+
if (this.intervalId) {
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
this.ready = false;
|
|
22
|
+
this.intervalId = setInterval(async () => {
|
|
23
|
+
this.logger.info("Waiting for elasticsearch");
|
|
24
|
+
this.ready = await this._isReady();
|
|
25
|
+
if (this.ready) {
|
|
26
|
+
clearInterval(this.intervalId);
|
|
27
|
+
this.intervalId = null;
|
|
28
|
+
}
|
|
29
|
+
}, 1000);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
public async waitForReady() {
|
|
33
|
+
if (this.ready) {
|
|
34
|
+
this._resetPinger();
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
return new Promise((resolve) => {
|
|
38
|
+
const intervalId = setInterval(() => {
|
|
39
|
+
if (this.ready) {
|
|
40
|
+
clearInterval(intervalId);
|
|
41
|
+
resolve(undefined);
|
|
42
|
+
}
|
|
43
|
+
}, 500);
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
async _isReady(): Promise<boolean> {
|
|
47
|
+
return new Promise(async (resolve) => {
|
|
48
|
+
try {
|
|
49
|
+
const result = await this.elasticsearchService.ping();
|
|
50
|
+
resolve(result);
|
|
51
|
+
} catch (e) {
|
|
52
|
+
resolve(false);
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
}
|