@conduitplatform/module-tools 0.16.0-alpha.9 → 0.16.0-rc.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ManagedModule.d.ts +1 -0
- package/dist/ManagedModule.js +153 -358
- package/dist/ManagedModule.js.map +1 -1
- package/dist/classes/ConduitActiveSchema.d.ts +12 -9
- package/dist/classes/ConduitActiveSchema.js +43 -52
- package/dist/classes/ConduitActiveSchema.js.map +1 -1
- package/dist/classes/ConduitServiceModule.d.ts +2 -0
- package/dist/classes/ConduitServiceModule.js +65 -112
- package/dist/classes/ConduitServiceModule.js.map +1 -1
- package/dist/classes/ConfigController.js +10 -17
- package/dist/classes/ConfigController.js.map +1 -1
- package/dist/classes/GrpcServer.d.ts +1 -0
- package/dist/classes/GrpcServer.js +93 -172
- package/dist/classes/GrpcServer.js.map +1 -1
- package/dist/helpers/GrpcHelper.js +11 -11
- package/dist/helpers/GrpcHelper.js.map +1 -1
- package/dist/helpers/GrpcToParsedRouterRequest.d.ts +2 -0
- package/dist/helpers/GrpcToParsedRouterRequest.js +19 -0
- package/dist/helpers/GrpcToParsedRouterRequest.js.map +1 -0
- package/dist/helpers/TypeHelpers.js +57 -119
- package/dist/helpers/TypeHelpers.js.map +1 -1
- package/dist/helpers/index.d.ts +1 -0
- package/dist/helpers/index.js +1 -0
- package/dist/helpers/index.js.map +1 -1
- package/dist/helpers/wrapGrpcFunctions.js +14 -15
- package/dist/helpers/wrapGrpcFunctions.js.map +1 -1
- package/dist/interfaces/ModuleLifecycleStage.d.ts +7 -0
- package/dist/interfaces/ModuleLifecycleStage.js +12 -0
- package/dist/interfaces/ModuleLifecycleStage.js.map +1 -0
- package/dist/logging/index.js +80 -180
- package/dist/logging/index.js.map +1 -1
- package/dist/metrics/MetricsServer.d.ts +2 -1
- package/dist/metrics/MetricsServer.js +25 -70
- package/dist/metrics/MetricsServer.js.map +1 -1
- package/dist/metrics/clientMiddleware.js +76 -217
- package/dist/metrics/clientMiddleware.js.map +1 -1
- package/dist/metrics/config/defaults.js +1 -1
- package/dist/metrics/config/defaults.js.map +1 -1
- package/dist/metrics/index.js +53 -89
- package/dist/metrics/index.js.map +1 -1
- package/dist/module.proto +58 -0
- package/dist/routing/ProxyRouteBuilder.js +21 -24
- package/dist/routing/ProxyRouteBuilder.js.map +1 -1
- package/dist/routing/RouteBuilder.js +31 -34
- package/dist/routing/RouteBuilder.js.map +1 -1
- package/dist/routing/RoutingController.d.ts +8 -0
- package/dist/routing/RoutingController.js +25 -0
- package/dist/routing/RoutingController.js.map +1 -0
- package/dist/routing/RoutingManager.d.ts +5 -2
- package/dist/routing/RoutingManager.js +61 -115
- package/dist/routing/RoutingManager.js.map +1 -1
- package/dist/routing/RoutingUtilities.js +3 -3
- package/dist/routing/RoutingUtilities.js.map +1 -1
- package/dist/routing/wrapRouterFunctions.d.ts +5 -5
- package/dist/routing/wrapRouterFunctions.js +30 -39
- package/dist/routing/wrapRouterFunctions.js.map +1 -1
- package/dist/utilities/convictConfigParser.js +2 -2
- package/dist/utilities/convictConfigParser.js.map +1 -1
- package/dist/utilities/initializeSdk.js +9 -11
- package/dist/utilities/initializeSdk.js.map +1 -1
- package/dist/utilities/linearBackoffTimeout.d.ts +1 -1
- package/dist/utilities/linearBackoffTimeout.js +35 -92
- package/dist/utilities/linearBackoffTimeout.js.map +1 -1
- package/dist/utilities/merge.js +2 -2
- package/dist/utilities/merge.js.map +1 -1
- package/package.json +19 -20
package/dist/ManagedModule.d.ts
CHANGED
|
@@ -10,6 +10,7 @@ export declare abstract class ManagedModule<T> extends ConduitServiceModule {
|
|
|
10
10
|
protected abstract readonly metricsSchema?: object;
|
|
11
11
|
private readonly serviceAddress;
|
|
12
12
|
private readonly servicePort;
|
|
13
|
+
private _moduleState;
|
|
13
14
|
protected constructor(moduleName: string);
|
|
14
15
|
get name(): string;
|
|
15
16
|
get address(): string;
|
package/dist/ManagedModule.js
CHANGED
|
@@ -1,209 +1,111 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __extends = (this && this.__extends) || (function () {
|
|
3
|
-
var extendStatics = function (d, b) {
|
|
4
|
-
extendStatics = Object.setPrototypeOf ||
|
|
5
|
-
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
|
6
|
-
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
|
7
|
-
return extendStatics(d, b);
|
|
8
|
-
};
|
|
9
|
-
return function (d, b) {
|
|
10
|
-
if (typeof b !== "function" && b !== null)
|
|
11
|
-
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
|
|
12
|
-
extendStatics(d, b);
|
|
13
|
-
function __() { this.constructor = d; }
|
|
14
|
-
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
15
|
-
};
|
|
16
|
-
})();
|
|
17
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
18
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
19
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
20
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
21
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
22
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
23
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
24
|
-
});
|
|
25
|
-
};
|
|
26
|
-
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
27
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
28
|
-
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
29
|
-
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
30
|
-
function step(op) {
|
|
31
|
-
if (f) throw new TypeError("Generator is already executing.");
|
|
32
|
-
while (_) try {
|
|
33
|
-
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
34
|
-
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
35
|
-
switch (op[0]) {
|
|
36
|
-
case 0: case 1: t = op; break;
|
|
37
|
-
case 4: _.label++; return { value: op[1], done: false };
|
|
38
|
-
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
39
|
-
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
40
|
-
default:
|
|
41
|
-
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
42
|
-
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
43
|
-
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
44
|
-
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
45
|
-
if (t[2]) _.ops.pop();
|
|
46
|
-
_.trys.pop(); continue;
|
|
47
|
-
}
|
|
48
|
-
op = body.call(thisArg, _);
|
|
49
|
-
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
50
|
-
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
51
|
-
}
|
|
52
|
-
};
|
|
53
2
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
54
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
55
4
|
};
|
|
56
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
57
6
|
exports.ManagedModule = void 0;
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
7
|
+
const classes_1 = require("./classes");
|
|
8
|
+
const lodash_1 = require("lodash");
|
|
9
|
+
const grpc_js_1 = require("@grpc/grpc-js");
|
|
10
|
+
const convict_1 = __importDefault(require("convict"));
|
|
11
|
+
const grpc_sdk_1 = __importDefault(require("@conduitplatform/grpc-sdk"));
|
|
12
|
+
const utilities_1 = require("./utilities");
|
|
13
|
+
const convictConfigParser_1 = require("./utilities/convictConfigParser");
|
|
14
|
+
const routing_1 = require("./routing");
|
|
15
|
+
const RoutingController_1 = require("./routing/RoutingController");
|
|
16
|
+
const ModuleLifecycleStage_1 = require("./interfaces/ModuleLifecycleStage");
|
|
17
|
+
class ManagedModule extends classes_1.ConduitServiceModule {
|
|
18
|
+
constructor(moduleName) {
|
|
70
19
|
var _a;
|
|
71
|
-
|
|
72
|
-
|
|
20
|
+
super(moduleName);
|
|
21
|
+
this.configOverride = false;
|
|
22
|
+
this._moduleState = ModuleLifecycleStage_1.ModuleLifecycleStage.CREATE_GRPC;
|
|
73
23
|
if (!process.env.CONDUIT_SERVER) {
|
|
74
24
|
throw new Error('CONDUIT_SERVER is undefined, specify Conduit server URL');
|
|
75
25
|
}
|
|
76
|
-
|
|
77
|
-
|
|
26
|
+
this.servicePort = (_a = process.env.GRPC_PORT) !== null && _a !== void 0 ? _a : '5000';
|
|
27
|
+
this.serviceAddress =
|
|
78
28
|
// @compat (v0.15): SERVICE_IP -> SERVICE_URL
|
|
79
|
-
process.env.SERVICE_URL || process.env.SERVICE_IP || '0.0.0.0:' +
|
|
29
|
+
process.env.SERVICE_URL || process.env.SERVICE_IP || '0.0.0.0:' + this.servicePort;
|
|
80
30
|
try {
|
|
81
|
-
|
|
82
|
-
return
|
|
31
|
+
this.grpcSdk = (0, utilities_1.initializeSdk)(process.env.CONDUIT_SERVER, this.name, true, () => {
|
|
32
|
+
return this.healthState;
|
|
83
33
|
});
|
|
84
34
|
}
|
|
85
35
|
catch (e) {
|
|
86
36
|
throw new Error('Failed to initialize grpcSdk');
|
|
87
37
|
}
|
|
88
|
-
return _this;
|
|
89
38
|
}
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
this.initialize(this.serviceAddress, this.servicePort);
|
|
113
|
-
_a.label = 2;
|
|
114
|
-
case 2:
|
|
115
|
-
_a.trys.push([2, 5, , 6]);
|
|
116
|
-
return [4 /*yield*/, this.preRegisterLifecycle()];
|
|
117
|
-
case 3:
|
|
118
|
-
_a.sent();
|
|
119
|
-
return [4 /*yield*/, this.grpcSdk.config.registerModule(this.name, this.address, this.healthState)];
|
|
120
|
-
case 4:
|
|
121
|
-
_a.sent();
|
|
122
|
-
return [3 /*break*/, 6];
|
|
123
|
-
case 5:
|
|
124
|
-
err_1 = _a.sent();
|
|
125
|
-
grpc_sdk_1.default.Logger.error('Failed to initialize server');
|
|
126
|
-
grpc_sdk_1.default.Logger.error(err_1);
|
|
127
|
-
process.exit(-1);
|
|
128
|
-
return [3 /*break*/, 6];
|
|
129
|
-
case 6: return [4 /*yield*/, this.postRegisterLifecycle().catch(function (err) {
|
|
130
|
-
grpc_sdk_1.default.Logger.error('Failed to activate module');
|
|
131
|
-
grpc_sdk_1.default.Logger.error(err);
|
|
132
|
-
process.exit(-1);
|
|
133
|
-
})];
|
|
134
|
-
case 7:
|
|
135
|
-
_a.sent();
|
|
136
|
-
return [2 /*return*/];
|
|
137
|
-
}
|
|
138
|
-
});
|
|
39
|
+
get name() {
|
|
40
|
+
return this._moduleName;
|
|
41
|
+
}
|
|
42
|
+
get address() {
|
|
43
|
+
return this._address;
|
|
44
|
+
}
|
|
45
|
+
async start() {
|
|
46
|
+
await this.grpcSdk.initialize();
|
|
47
|
+
this.initialize(this.serviceAddress, this.servicePort);
|
|
48
|
+
try {
|
|
49
|
+
await this.preRegisterLifecycle();
|
|
50
|
+
await this.grpcSdk.config.registerModule(this.name, this.address, this.healthState);
|
|
51
|
+
}
|
|
52
|
+
catch (err) {
|
|
53
|
+
grpc_sdk_1.default.Logger.error('Failed to initialize server');
|
|
54
|
+
grpc_sdk_1.default.Logger.error(err);
|
|
55
|
+
process.exit(-1);
|
|
56
|
+
}
|
|
57
|
+
await this.postRegisterLifecycle().catch((err) => {
|
|
58
|
+
grpc_sdk_1.default.Logger.error('Failed to activate module');
|
|
59
|
+
grpc_sdk_1.default.Logger.error(err);
|
|
60
|
+
process.exit(-1);
|
|
139
61
|
});
|
|
140
|
-
}
|
|
62
|
+
}
|
|
141
63
|
/**
|
|
142
64
|
* This is the first function triggered on module spin up.
|
|
143
65
|
* @param address {string} external address:port of service (LoadBalancer)
|
|
144
66
|
* @param port {string} port to bring up gRPC service
|
|
145
67
|
*/
|
|
146
|
-
|
|
68
|
+
initialize(address, port) {
|
|
147
69
|
this._address = address;
|
|
148
70
|
this._port = port;
|
|
149
71
|
if (this.configSchema) {
|
|
150
72
|
this.config = (0, convict_1.default)(this.configSchema);
|
|
151
73
|
}
|
|
152
|
-
}
|
|
74
|
+
}
|
|
153
75
|
/**
|
|
154
76
|
* This is triggered before spinning up the Grpc Server
|
|
155
77
|
* of the module. On this stage, the redis bus and state have
|
|
156
78
|
* not yet been initialized, and only communications with Conduit core
|
|
157
79
|
* have been established.
|
|
158
80
|
*/
|
|
159
|
-
|
|
160
|
-
return __awaiter(this, void 0, void 0, function () { return __generator(this, function (_a) {
|
|
161
|
-
return [2 /*return*/];
|
|
162
|
-
}); });
|
|
163
|
-
};
|
|
81
|
+
async preServerStart() { }
|
|
164
82
|
/**
|
|
165
83
|
* This is triggered right after Grpc Server start.
|
|
166
84
|
* At this stage the core module will communicate with your service
|
|
167
85
|
* for health checks, and the Bus and State management mechanics
|
|
168
86
|
* are online and available.
|
|
169
87
|
*/
|
|
170
|
-
|
|
171
|
-
return __awaiter(this, void 0, void 0, function () { return __generator(this, function (_a) {
|
|
172
|
-
return [2 /*return*/];
|
|
173
|
-
}); });
|
|
174
|
-
};
|
|
88
|
+
async onServerStart() { }
|
|
175
89
|
/**
|
|
176
90
|
* Triggers right before registering the module with Conduit Core.
|
|
177
91
|
*/
|
|
178
|
-
|
|
179
|
-
return __awaiter(this, void 0, void 0, function () { return __generator(this, function (_a) {
|
|
180
|
-
return [2 /*return*/];
|
|
181
|
-
}); });
|
|
182
|
-
};
|
|
92
|
+
async preRegister() { }
|
|
183
93
|
/**
|
|
184
94
|
* Triggers when module has been registered with Conduit Core
|
|
185
95
|
* This is the step where you should initialize your
|
|
186
96
|
* module's general routing (admin or client) and any other operation,
|
|
187
97
|
* that would require other modules being able to reach you
|
|
188
98
|
*/
|
|
189
|
-
|
|
190
|
-
return __awaiter(this, void 0, void 0, function () { return __generator(this, function (_a) {
|
|
191
|
-
return [2 /*return*/];
|
|
192
|
-
}); });
|
|
193
|
-
};
|
|
99
|
+
async onRegister() { }
|
|
194
100
|
/**
|
|
195
101
|
* This is triggered when the module receives new configuration.
|
|
196
102
|
* At this step the configuration has not been checked yet,
|
|
197
103
|
* and has only been parsed.
|
|
198
104
|
* @param config
|
|
199
105
|
*/
|
|
200
|
-
|
|
201
|
-
return
|
|
202
|
-
|
|
203
|
-
return [2 /*return*/, config];
|
|
204
|
-
});
|
|
205
|
-
});
|
|
206
|
-
};
|
|
106
|
+
async preConfig(config) {
|
|
107
|
+
return config;
|
|
108
|
+
}
|
|
207
109
|
/**
|
|
208
110
|
* This is triggered when new configuration has been applied.
|
|
209
111
|
* This happens either when changes are being made on the configuration,
|
|
@@ -211,223 +113,116 @@ var ManagedModule = /** @class */ (function (_super) {
|
|
|
211
113
|
* In either case the configuration is now available through the
|
|
212
114
|
* Config Controller of the sdk.
|
|
213
115
|
*/
|
|
214
|
-
|
|
215
|
-
return __awaiter(this, void 0, void 0, function () { return __generator(this, function (_a) {
|
|
216
|
-
return [2 /*return*/];
|
|
217
|
-
}); });
|
|
218
|
-
};
|
|
116
|
+
async onConfig() { }
|
|
219
117
|
/**
|
|
220
118
|
* Registers common and module-specific metric types.
|
|
221
119
|
*/
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
}
|
|
233
|
-
return [2 /*return*/];
|
|
234
|
-
});
|
|
235
|
-
});
|
|
236
|
-
};
|
|
120
|
+
async registerMetrics() {
|
|
121
|
+
if (grpc_sdk_1.default.Metrics) {
|
|
122
|
+
grpc_sdk_1.default.Metrics.initializeDefaultMetrics();
|
|
123
|
+
if (this.metricsSchema) {
|
|
124
|
+
Object.values(this.metricsSchema).forEach(metric => {
|
|
125
|
+
grpc_sdk_1.default.Metrics.registerMetric(metric.type, metric.config);
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
237
130
|
/**
|
|
238
131
|
* Initializes metric startup values.
|
|
239
132
|
* Implemented by individual modules.
|
|
240
133
|
*/
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
}
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
});
|
|
260
|
-
});
|
|
261
|
-
};
|
|
262
|
-
ManagedModule.prototype.startGrpcServer = function () {
|
|
263
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
264
|
-
return __generator(this, function (_a) {
|
|
265
|
-
switch (_a.label) {
|
|
266
|
-
case 0:
|
|
267
|
-
if (!this.service) return [3 /*break*/, 2];
|
|
268
|
-
this._serviceName = this.service.protoDescription.substring(this.service.protoDescription.indexOf('.') + 1);
|
|
269
|
-
return [4 /*yield*/, this.grpcServer.addService(this.service.protoPath, this.service.protoDescription, this.service.functions)];
|
|
270
|
-
case 1:
|
|
271
|
-
_a.sent();
|
|
272
|
-
_a.label = 2;
|
|
273
|
-
case 2: return [4 /*yield*/, this.addHealthCheckService()];
|
|
274
|
-
case 3:
|
|
275
|
-
_a.sent();
|
|
276
|
-
return [4 /*yield*/, this.addModuleService()];
|
|
277
|
-
case 4:
|
|
278
|
-
_a.sent();
|
|
279
|
-
return [4 /*yield*/, this.grpcServer.start()];
|
|
280
|
-
case 5:
|
|
281
|
-
_a.sent();
|
|
282
|
-
grpc_sdk_1.default.Logger.log('gRPC server listening on ' + this._port);
|
|
283
|
-
return [2 /*return*/];
|
|
284
|
-
}
|
|
285
|
-
});
|
|
286
|
-
});
|
|
287
|
-
};
|
|
288
|
-
ManagedModule.prototype.setConfig = function (call, callback) {
|
|
134
|
+
async initializeMetrics() { }
|
|
135
|
+
async createGrpcServer() {
|
|
136
|
+
this.grpcServer = new classes_1.GrpcServer(this._port);
|
|
137
|
+
this._port = (await this.grpcServer.createNewServer()).toString();
|
|
138
|
+
}
|
|
139
|
+
async startGrpcServer() {
|
|
140
|
+
if (this.service) {
|
|
141
|
+
this._serviceName = this.service.protoDescription.substring(this.service.protoDescription.indexOf('.') + 1);
|
|
142
|
+
await this.grpcServer.addService(this.service.protoPath, this.service.protoDescription, this.service.functions);
|
|
143
|
+
}
|
|
144
|
+
routing_1.RoutingManager.ClientController = new RoutingController_1.RoutingController();
|
|
145
|
+
routing_1.RoutingManager.AdminController = new RoutingController_1.RoutingController();
|
|
146
|
+
await this.addHealthCheckService();
|
|
147
|
+
await this.addModuleService();
|
|
148
|
+
await this.grpcServer.start();
|
|
149
|
+
grpc_sdk_1.default.Logger.log('gRPC server listening on ' + this._port);
|
|
150
|
+
}
|
|
151
|
+
async setConfig(call, callback) {
|
|
289
152
|
var _a;
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
return [4 /*yield*/, this.onConfig()];
|
|
325
|
-
case 2:
|
|
326
|
-
_b.sent();
|
|
327
|
-
(_a = this.grpcSdk.bus) === null || _a === void 0 ? void 0 : _a.publish((0, lodash_1.kebabCase)(this.name) + ':config:update', JSON.stringify(config));
|
|
328
|
-
return [3 /*break*/, 4];
|
|
329
|
-
case 3:
|
|
330
|
-
e_1 = _b.sent();
|
|
331
|
-
return [2 /*return*/, callback({ code: grpc_js_1.status.INTERNAL, message: e_1.message })];
|
|
332
|
-
case 4: return [2 /*return*/];
|
|
333
|
-
}
|
|
334
|
-
});
|
|
335
|
-
});
|
|
336
|
-
};
|
|
153
|
+
try {
|
|
154
|
+
if (!this.config) {
|
|
155
|
+
return callback({
|
|
156
|
+
code: grpc_js_1.status.INVALID_ARGUMENT,
|
|
157
|
+
message: 'Module is not configurable',
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
let config = JSON.parse(call.request.newConfig);
|
|
161
|
+
config = (0, utilities_1.merge)(this.config.getProperties(), config);
|
|
162
|
+
config = await this.preConfig(config);
|
|
163
|
+
const previousConfig = this.config.getProperties();
|
|
164
|
+
try {
|
|
165
|
+
this.config.load(config).validate({
|
|
166
|
+
allowed: 'warn',
|
|
167
|
+
});
|
|
168
|
+
config = this.config.getProperties();
|
|
169
|
+
callback(null, { updatedConfig: JSON.stringify(config) });
|
|
170
|
+
}
|
|
171
|
+
catch (e) {
|
|
172
|
+
this.config = (0, convict_1.default)(this.configSchema);
|
|
173
|
+
this.config.load(previousConfig);
|
|
174
|
+
return callback({
|
|
175
|
+
code: grpc_js_1.status.INVALID_ARGUMENT,
|
|
176
|
+
message: 'Invalid configuration values: ' + e.message,
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
classes_1.ConfigController.getInstance().config = config;
|
|
180
|
+
await this.onConfig();
|
|
181
|
+
(_a = this.grpcSdk.bus) === null || _a === void 0 ? void 0 : _a.publish((0, lodash_1.kebabCase)(this.name) + ':config:update', JSON.stringify(config));
|
|
182
|
+
}
|
|
183
|
+
catch (e) {
|
|
184
|
+
return callback({ code: grpc_js_1.status.INTERNAL, message: e.message });
|
|
185
|
+
}
|
|
186
|
+
}
|
|
337
187
|
/** Used to update the module's configuration on initial Redis/DB reconciliation. */
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
this.grpcSdk.bus.subscribe("".concat(this.name, ":config:update"), function (message) { return __awaiter(_this, void 0, void 0, function () {
|
|
345
|
-
var _a;
|
|
346
|
-
return __generator(this, function (_b) {
|
|
347
|
-
switch (_b.label) {
|
|
348
|
-
case 0:
|
|
349
|
-
_a = classes_1.ConfigController.getInstance();
|
|
350
|
-
return [4 /*yield*/, this.preConfig(JSON.parse(message))];
|
|
351
|
-
case 1:
|
|
352
|
-
_a.config = _b.sent();
|
|
353
|
-
return [4 /*yield*/, this.onConfig()];
|
|
354
|
-
case 2:
|
|
355
|
-
_b.sent();
|
|
356
|
-
return [2 /*return*/];
|
|
357
|
-
}
|
|
358
|
-
});
|
|
359
|
-
}); });
|
|
360
|
-
return [2 /*return*/];
|
|
361
|
-
});
|
|
188
|
+
async handleConfigSyncUpdate() {
|
|
189
|
+
if (!this.config)
|
|
190
|
+
return;
|
|
191
|
+
this.grpcSdk.bus.subscribe(`${(0, lodash_1.kebabCase)(this.name)}:config:update`, async (message) => {
|
|
192
|
+
classes_1.ConfigController.getInstance().config = await this.preConfig(JSON.parse(message));
|
|
193
|
+
await this.onConfig();
|
|
362
194
|
});
|
|
363
|
-
}
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
return [2 /*return*/];
|
|
396
|
-
}
|
|
397
|
-
});
|
|
398
|
-
});
|
|
399
|
-
};
|
|
400
|
-
ManagedModule.prototype.postRegisterLifecycle = function () {
|
|
401
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
402
|
-
var configSchema, config;
|
|
403
|
-
return __generator(this, function (_a) {
|
|
404
|
-
switch (_a.label) {
|
|
405
|
-
case 0: return [4 /*yield*/, this.onRegister()];
|
|
406
|
-
case 1:
|
|
407
|
-
_a.sent();
|
|
408
|
-
if (!this.config) return [3 /*break*/, 5];
|
|
409
|
-
configSchema = this.config.getSchema();
|
|
410
|
-
config = this.config.getProperties();
|
|
411
|
-
return [4 /*yield*/, this.preConfig(config)];
|
|
412
|
-
case 2:
|
|
413
|
-
config = _a.sent();
|
|
414
|
-
return [4 /*yield*/, this.grpcSdk.config.configure(config, (0, convictConfigParser_1.convictConfigParser)(configSchema), this.configOverride)];
|
|
415
|
-
case 3:
|
|
416
|
-
config = _a.sent();
|
|
417
|
-
classes_1.ConfigController.getInstance();
|
|
418
|
-
if (config)
|
|
419
|
-
classes_1.ConfigController.getInstance().config = config;
|
|
420
|
-
if (!(!config || config.active || !config.hasOwnProperty('active'))) return [3 /*break*/, 5];
|
|
421
|
-
return [4 /*yield*/, this.onConfig()];
|
|
422
|
-
case 4:
|
|
423
|
-
_a.sent();
|
|
424
|
-
_a.label = 5;
|
|
425
|
-
case 5: return [2 /*return*/];
|
|
426
|
-
}
|
|
427
|
-
});
|
|
428
|
-
});
|
|
429
|
-
};
|
|
430
|
-
return ManagedModule;
|
|
431
|
-
}(classes_1.ConduitServiceModule));
|
|
195
|
+
}
|
|
196
|
+
async preRegisterLifecycle() {
|
|
197
|
+
await this.createGrpcServer();
|
|
198
|
+
this._moduleState = ModuleLifecycleStage_1.ModuleLifecycleStage.PRE_SERVER_START;
|
|
199
|
+
await this.preServerStart();
|
|
200
|
+
await this.grpcSdk.initializeEventBus();
|
|
201
|
+
await this.handleConfigSyncUpdate();
|
|
202
|
+
await this.registerMetrics();
|
|
203
|
+
await this.startGrpcServer();
|
|
204
|
+
this._moduleState = ModuleLifecycleStage_1.ModuleLifecycleStage.SERVER_STARTED;
|
|
205
|
+
await this.onServerStart();
|
|
206
|
+
await this.initializeMetrics();
|
|
207
|
+
this._moduleState = ModuleLifecycleStage_1.ModuleLifecycleStage.PRE_REGISTER;
|
|
208
|
+
await this.preRegister();
|
|
209
|
+
}
|
|
210
|
+
async postRegisterLifecycle() {
|
|
211
|
+
this._moduleState = ModuleLifecycleStage_1.ModuleLifecycleStage.POST_REGISTER;
|
|
212
|
+
this.registered = true;
|
|
213
|
+
await this.onRegister();
|
|
214
|
+
if (this.config) {
|
|
215
|
+
const configSchema = this.config.getSchema();
|
|
216
|
+
let config = this.config.getProperties();
|
|
217
|
+
config = await this.preConfig(config);
|
|
218
|
+
config = await this.grpcSdk.config.configure(config, (0, convictConfigParser_1.convictConfigParser)(configSchema), this.configOverride);
|
|
219
|
+
classes_1.ConfigController.getInstance();
|
|
220
|
+
if (config)
|
|
221
|
+
classes_1.ConfigController.getInstance().config = config;
|
|
222
|
+
if (!config || config.active || !config.hasOwnProperty('active'))
|
|
223
|
+
await this.onConfig();
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
}
|
|
432
227
|
exports.ManagedModule = ManagedModule;
|
|
433
228
|
//# sourceMappingURL=ManagedModule.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ManagedModule.js","sourceRoot":"","sources":["../src/ManagedModule.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ManagedModule.js","sourceRoot":"","sources":["../src/ManagedModule.ts"],"names":[],"mappings":"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"}
|