@ohos-ports/cloudnative-health 2.1.2-beta.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.
@@ -0,0 +1,351 @@
1
+ "use strict";
2
+ /*
3
+ * Copyright IBM Corporation 2018
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
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
+ Object.defineProperty(exports, "__esModule", { value: true });
27
+ exports.PluginStatus = exports.State = exports.ShutdownCheck = exports.LivenessCheck = exports.ReadinessCheck = exports.StartupCheck = exports.Plugin = exports.HealthStatus = exports.HealthChecker = void 0;
28
+ var State;
29
+ (function (State) {
30
+ State["UNKNOWN"] = "UNKNOWN";
31
+ State["STARTING"] = "STARTING";
32
+ State["UP"] = "UP";
33
+ State["DOWN"] = "DOWN";
34
+ State["STOPPING"] = "STOPPING";
35
+ State["STOPPED"] = "STOPPED";
36
+ })(State || (State = {}));
37
+ exports.State = State;
38
+ class HealthStatus {
39
+ constructor(state) {
40
+ this.status = state;
41
+ this.checks = [];
42
+ }
43
+ addStatus(status) {
44
+ this.checks.push(status);
45
+ if (this.status === State.UNKNOWN) {
46
+ this.status = status.state;
47
+ }
48
+ else if (this.status === State.STARTING) {
49
+ if (status.state === State.STARTING)
50
+ this.status = State.STARTING;
51
+ if (status.state === State.DOWN)
52
+ this.status = State.DOWN;
53
+ return;
54
+ }
55
+ else if (this.status === State.UP) {
56
+ if (status.state === State.STARTING)
57
+ this.status = State.STARTING;
58
+ if (status.state === State.UP)
59
+ this.status = State.UP;
60
+ if (status.state === State.DOWN)
61
+ this.status = State.DOWN;
62
+ return;
63
+ }
64
+ else if (this.status === State.DOWN) {
65
+ return;
66
+ }
67
+ else if (this.status === State.STOPPING) {
68
+ if (status.state === State.STOPPING)
69
+ this.status = State.STOPPING;
70
+ if (status.state === State.DOWN)
71
+ this.status = State.STOPPED;
72
+ if (status.state === State.STOPPED)
73
+ this.status = State.STOPPED;
74
+ return;
75
+ }
76
+ else if (this.status === State.STOPPED) {
77
+ if (status.state === State.STOPPING)
78
+ this.status = State.STOPPING;
79
+ if (status.state === State.DOWN)
80
+ this.status = State.STOPPED;
81
+ return;
82
+ }
83
+ }
84
+ }
85
+ exports.HealthStatus = HealthStatus;
86
+ class HealthChecker {
87
+ constructor() {
88
+ this.startupComplete = true;
89
+ this.startupPlugins = [];
90
+ this.readinessPlugins = [];
91
+ this.healthPlugins = [];
92
+ this.shutdownEnabled = false;
93
+ this.shutdownRequested = false;
94
+ this.shutdownPlugins = [];
95
+ // Force this to be an instance function so that it can access `this` fields
96
+ this.onShutdownRequest = () => {
97
+ this.shutdownRequested = true;
98
+ this.shutdownPlugins.map((check) => {
99
+ check.runCheck();
100
+ });
101
+ };
102
+ }
103
+ getStartUpComplete() {
104
+ return this.startupComplete;
105
+ }
106
+ registerStartupCheck(plugin) {
107
+ this.startupPlugins.push(plugin);
108
+ this.startupComplete = false;
109
+ return plugin.runCheck();
110
+ }
111
+ registerReadinessCheck(plugin) {
112
+ this.readinessPlugins.push(plugin);
113
+ }
114
+ registerLivenessCheck(plugin) {
115
+ this.healthPlugins.push(plugin);
116
+ }
117
+ registerShutdownCheck(plugin) {
118
+ if (this.shutdownEnabled === false) {
119
+ this.shutdownEnabled = true;
120
+ process.on('SIGTERM', this.onShutdownRequest);
121
+ }
122
+ this.shutdownPlugins.push(plugin);
123
+ }
124
+ getStatus() {
125
+ return __awaiter(this, void 0, void 0, function* () {
126
+ if (this.shutdownRequested === true) {
127
+ return this.getShutdownStatus();
128
+ }
129
+ if (this.startupComplete === false) {
130
+ return this.getStartupStatus();
131
+ }
132
+ return this.getHealthStatus();
133
+ });
134
+ }
135
+ getPromiseStatus(statusResponse) {
136
+ return __awaiter(this, void 0, void 0, function* () {
137
+ const runChecks = this.startupPlugins.map(check => check.runCheck());
138
+ yield Promise.all(runChecks);
139
+ this.startupPlugins.forEach(check => statusResponse.addStatus(check.getStatus()));
140
+ });
141
+ }
142
+ getStartupStatus() {
143
+ return __awaiter(this, void 0, void 0, function* () {
144
+ let statusResponse;
145
+ // Handle startup case
146
+ if (this.startupComplete === false) {
147
+ statusResponse = new HealthStatus(State.UNKNOWN);
148
+ this.startupPlugins.map((check) => {
149
+ const promiseCheck = check.runCheck();
150
+ statusResponse.addStatus(check.getStatus());
151
+ return promiseCheck;
152
+ });
153
+ if (statusResponse.status !== State.UP) {
154
+ return statusResponse;
155
+ }
156
+ this.startupComplete = true;
157
+ }
158
+ return this.getHealthStatus();
159
+ });
160
+ }
161
+ getReadinessStatus() {
162
+ return __awaiter(this, void 0, void 0, function* () {
163
+ let statusResponse;
164
+ if (this.shutdownRequested === true) {
165
+ return this.getShutdownStatus();
166
+ }
167
+ if (this.startupComplete === false) {
168
+ statusResponse = new HealthStatus(State.UNKNOWN);
169
+ yield this.getPromiseStatus(statusResponse);
170
+ if (statusResponse.status === State.UP) {
171
+ this.startupComplete = true;
172
+ }
173
+ else {
174
+ return this.getStartupStatus();
175
+ }
176
+ }
177
+ // Handle readiness
178
+ statusResponse = new HealthStatus(State.UP);
179
+ let filteredPromises = this.readinessPlugins.filter(element => element !== undefined);
180
+ if (filteredPromises.length === 0) {
181
+ return statusResponse;
182
+ }
183
+ else {
184
+ yield Promise.all(filteredPromises.map((check) => __awaiter(this, void 0, void 0, function* () {
185
+ const promiseCheck = yield check.runCheck();
186
+ statusResponse.addStatus(check.getStatus());
187
+ return promiseCheck;
188
+ })));
189
+ return statusResponse;
190
+ }
191
+ });
192
+ }
193
+ getLivenessStatus() {
194
+ return __awaiter(this, void 0, void 0, function* () {
195
+ let statusResponse;
196
+ if (this.shutdownRequested === true) {
197
+ return this.getShutdownStatus();
198
+ }
199
+ if (this.startupComplete === false) {
200
+ statusResponse = new HealthStatus(State.UNKNOWN);
201
+ yield this.getPromiseStatus(statusResponse);
202
+ if (statusResponse.status === State.UP) {
203
+ this.startupComplete = true;
204
+ }
205
+ else {
206
+ return this.getStartupStatus();
207
+ }
208
+ }
209
+ // Handle liveness
210
+ statusResponse = new HealthStatus(State.UP);
211
+ let filteredPromises = this.healthPlugins.filter(element => element !== undefined);
212
+ if (filteredPromises.length === 0) {
213
+ return statusResponse;
214
+ }
215
+ else {
216
+ yield Promise.all(filteredPromises.map((check) => __awaiter(this, void 0, void 0, function* () {
217
+ const promiseCheck = yield check.runCheck();
218
+ statusResponse.addStatus(check.getStatus());
219
+ return promiseCheck;
220
+ })));
221
+ return statusResponse;
222
+ }
223
+ });
224
+ }
225
+ // Health is Liveness || Readiness
226
+ getHealthStatus() {
227
+ return __awaiter(this, void 0, void 0, function* () {
228
+ let statusResponse;
229
+ // Handle liveness
230
+ statusResponse = new HealthStatus(State.UP);
231
+ yield Promise.all([this.getReadinessStatus(), this.getLivenessStatus()])
232
+ .then((values) => {
233
+ let readiness = values[0];
234
+ let liveness = values[1];
235
+ readiness.checks.map((check) => {
236
+ statusResponse.addStatus(check);
237
+ });
238
+ liveness.checks.map((check) => {
239
+ statusResponse.addStatus(check);
240
+ });
241
+ return statusResponse;
242
+ });
243
+ return statusResponse;
244
+ });
245
+ }
246
+ getShutdownStatus() {
247
+ return __awaiter(this, void 0, void 0, function* () {
248
+ let statusResponse;
249
+ // Handle shutdown case
250
+ if (this.shutdownRequested === true) {
251
+ statusResponse = new HealthStatus(State.STOPPING);
252
+ const runChecks = this.shutdownPlugins.map((check) => {
253
+ check.runCheck();
254
+ });
255
+ yield Promise.all(runChecks);
256
+ this.shutdownPlugins.forEach((check) => {
257
+ statusResponse.addStatus(check.getStatus());
258
+ });
259
+ return statusResponse;
260
+ }
261
+ else {
262
+ return this.getHealthStatus();
263
+ }
264
+ });
265
+ }
266
+ }
267
+ exports.HealthChecker = HealthChecker;
268
+ class Plugin {
269
+ constructor(name) {
270
+ this.status = State.DOWN;
271
+ this.statusReason = "";
272
+ this.name = name;
273
+ }
274
+ getStatus() {
275
+ return new PluginStatus(this.name, this.status, this.statusReason);
276
+ }
277
+ wrapPromise(promise, success, failure) {
278
+ let wrappedPromise = () => {
279
+ return promise()
280
+ .then(() => {
281
+ this.status = success;
282
+ this.statusReason = "";
283
+ return Promise.resolve();
284
+ })
285
+ .catch((err) => {
286
+ this.status = failure;
287
+ try {
288
+ this.statusReason = String(err.message || err);
289
+ }
290
+ catch (err) {
291
+ this.statusReason = String();
292
+ }
293
+ return Promise.resolve();
294
+ });
295
+ };
296
+ return wrappedPromise;
297
+ }
298
+ }
299
+ exports.Plugin = Plugin;
300
+ class LivenessCheck extends Plugin {
301
+ constructor(name, livenessPromiseGen) {
302
+ super(name);
303
+ this.promise = this.wrapPromise(livenessPromiseGen, State.UP, State.DOWN);
304
+ }
305
+ runCheck() {
306
+ return this.promise();
307
+ }
308
+ }
309
+ exports.LivenessCheck = LivenessCheck;
310
+ class StartupCheck extends Plugin {
311
+ constructor(name, startupPromise) {
312
+ super(name);
313
+ this.promise = this.wrapPromise(startupPromise, State.UP, State.DOWN);
314
+ this.status = State.STARTING;
315
+ }
316
+ runCheck() {
317
+ return this.promise();
318
+ }
319
+ }
320
+ exports.StartupCheck = StartupCheck;
321
+ class ReadinessCheck extends Plugin {
322
+ constructor(name, ReadinessPromiseGen) {
323
+ super(name);
324
+ this.promise = this.wrapPromise(ReadinessPromiseGen, State.UP, State.DOWN);
325
+ this.status = State.STARTING;
326
+ }
327
+ runCheck() {
328
+ return this.promise();
329
+ }
330
+ }
331
+ exports.ReadinessCheck = ReadinessCheck;
332
+ class ShutdownCheck extends Plugin {
333
+ constructor(name, shutdownPromise) {
334
+ super(name);
335
+ this.promise = this.wrapPromise(shutdownPromise, State.STOPPED, State.DOWN);
336
+ this.status = State.STOPPING;
337
+ }
338
+ runCheck() {
339
+ return this.promise();
340
+ }
341
+ }
342
+ exports.ShutdownCheck = ShutdownCheck;
343
+ class PluginStatus {
344
+ constructor(name, state, reason) {
345
+ this.name = name;
346
+ this.state = state;
347
+ this.data = { "reason": reason };
348
+ }
349
+ }
350
+ exports.PluginStatus = PluginStatus;
351
+ //# sourceMappingURL=HealthChecker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HealthChecker.js","sourceRoot":"","sources":["HealthChecker.ts"],"names":[],"mappings":"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"}