@alacard-project/bootstrap-sdk 1.1.6 â 1.1.8
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/utils/bootstrap.utils.d.ts +2 -0
- package/dist/utils/bootstrap.utils.js +33 -6
- package/dist/utils/bootstrap.utils.js.map +1 -1
- package/dist/utils/standard-health.module.js +9 -1
- package/dist/utils/standard-health.module.js.map +1 -1
- package/package.json +5 -5
- package/src/utils/bootstrap.utils.ts +37 -6
- package/src/utils/standard-health.module.ts +9 -1
|
@@ -5,10 +5,12 @@ export interface BootstrapOptions {
|
|
|
5
5
|
port?: number;
|
|
6
6
|
grpcPort?: number;
|
|
7
7
|
corsOrigins?: string | string[];
|
|
8
|
+
enableTelemetry?: boolean;
|
|
8
9
|
kafka?: {
|
|
9
10
|
brokers?: string[];
|
|
10
11
|
groupId?: string;
|
|
11
12
|
};
|
|
13
|
+
onCreated?: (app: any) => void | Promise<void>;
|
|
12
14
|
}
|
|
13
15
|
export declare class StandardBootstrap {
|
|
14
16
|
static run(appModule: any, options: BootstrapOptions): Promise<import("@nestjs/common").INestApplication<any>>;
|
|
@@ -23,20 +23,47 @@ class StandardBootstrap {
|
|
|
23
23
|
const RootModule = {
|
|
24
24
|
module: class {
|
|
25
25
|
},
|
|
26
|
-
imports: [metrics_sdk_1.StandardMetricsModule, standard_health_module_1.StandardHealthModule, appModule],
|
|
26
|
+
imports: [metrics_sdk_1.StandardMetricsModule, standard_health_module_1.StandardHealthModule.forRoot(), appModule],
|
|
27
27
|
};
|
|
28
|
+
console.log(`[${options.serviceName}] đ Starting Nest application...`);
|
|
28
29
|
const app = await core_1.NestFactory.create(RootModule, {
|
|
29
30
|
bufferLogs: true,
|
|
30
31
|
});
|
|
31
|
-
|
|
32
|
-
|
|
32
|
+
console.log(`[${options.serviceName}] â
Nest application created.`);
|
|
33
|
+
if (options.onCreated) {
|
|
34
|
+
console.log(`[${options.serviceName}] đ Running onCreated hook...`);
|
|
35
|
+
await options.onCreated(app);
|
|
36
|
+
console.log(`[${options.serviceName}] â
onCreated hook finished.`);
|
|
37
|
+
}
|
|
38
|
+
let remoteLogger;
|
|
39
|
+
if (options.enableTelemetry !== false) {
|
|
40
|
+
try {
|
|
41
|
+
console.log(`[${options.serviceName}] đ Resolving RemoteLogger...`);
|
|
42
|
+
remoteLogger = app.get(logging_sdk_1.RemoteLogger, { strict: false });
|
|
43
|
+
if (remoteLogger) {
|
|
44
|
+
app.useLogger(remoteLogger);
|
|
45
|
+
console.log(`[${options.serviceName}] â
RemoteLogger integrated.`);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
catch (e) {
|
|
49
|
+
console.warn(`[${options.serviceName}] â ī¸ RemoteLogger not provided by AppModule, falling back to default logger.`);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
console.log(`[${options.serviceName}] âšī¸ Telemetry disabled, using default logger.`);
|
|
54
|
+
}
|
|
55
|
+
console.log(`[${options.serviceName}] đ Setting up standard app components...`);
|
|
33
56
|
(0, shared_1.setupStandardApp)(app, {
|
|
34
57
|
apiPrefix: options.apiPrefix,
|
|
35
58
|
remoteLogger,
|
|
36
59
|
corsOrigins: options.corsOrigins,
|
|
60
|
+
enableTelemetry: options.enableTelemetry,
|
|
37
61
|
});
|
|
62
|
+
console.log(`[${options.serviceName}] â
Standard app components set up.`);
|
|
63
|
+
let finalGrpcPort = 50051;
|
|
38
64
|
if (options.grpcPackage) {
|
|
39
|
-
const
|
|
65
|
+
const envGrpcPort = process.env.GRPC_PORT ? parseInt(process.env.GRPC_PORT, 10) : undefined;
|
|
66
|
+
finalGrpcPort = envGrpcPort || options.grpcPort || 50051;
|
|
40
67
|
app.connectMicroservice({
|
|
41
68
|
transport: microservices_1.Transport.GRPC,
|
|
42
69
|
options: {
|
|
@@ -62,13 +89,13 @@ class StandardBootstrap {
|
|
|
62
89
|
if (options.grpcPackage || options.kafka) {
|
|
63
90
|
await app.startAllMicroservices();
|
|
64
91
|
}
|
|
65
|
-
const finalPort = options.port || 3000;
|
|
92
|
+
const finalPort = process.env.PORT ? parseInt(process.env.PORT, 10) : (options.port || 3000);
|
|
66
93
|
await app.listen(finalPort, '0.0.0.0');
|
|
67
94
|
console.log(`đ ${options.serviceName} is running on: http://localhost:${finalPort}`);
|
|
68
95
|
console.log(`đ Metrics available at: http://localhost:${finalPort}/metrics`);
|
|
69
96
|
console.log(`đĨ Health available at: http://localhost:${finalPort}/health/live`);
|
|
70
97
|
if (options.grpcPackage) {
|
|
71
|
-
console.log(`đ gRPC is running on: 0.0.0.0:${
|
|
98
|
+
console.log(`đ gRPC is running on: 0.0.0.0:${finalGrpcPort}`);
|
|
72
99
|
}
|
|
73
100
|
return app;
|
|
74
101
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootstrap.utils.js","sourceRoot":"","sources":["../../src/utils/bootstrap.utils.ts"],"names":[],"mappings":";;;AAAA,uCAA2C;AAC3C,yDAAuE;AACvE,4DAA2D;AAC3D,8DAA4D;AAC5D,8DAAqE;AACrE,oDAAsF;AACtF,qEAAgE;
|
|
1
|
+
{"version":3,"file":"bootstrap.utils.js","sourceRoot":"","sources":["../../src/utils/bootstrap.utils.ts"],"names":[],"mappings":";;;AAAA,uCAA2C;AAC3C,yDAAuE;AACvE,4DAA2D;AAC3D,8DAA4D;AAC5D,8DAAqE;AACrE,oDAAsF;AACtF,qEAAgE;AAiBhE,MAAa,iBAAiB;IACnB,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,SAAc,EAAE,OAAyB;QAC7D,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,aAAa,CAAC;QAC1D,MAAM,gBAAgB,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,2BAA2B,CAAC;QACvF,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;QAEpD,IAAA,oBAAW,EAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAEjC,MAAM,yBAAY,CAAC,UAAU,CAAC;YAC1B,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,WAAW;YACX,OAAO,EAAE,gBAAgB;YACzB,WAAW;SACd,CAAC,CAAC;QAEH,MAAM,UAAU,GAAG;YACf,MAAM,EAAE;aAAQ;YAChB,OAAO,EAAE,CAAC,mCAAqB,EAAE,6CAAoB,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC;SAC9E,CAAC;QAEF,OAAO,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,WAAW,mCAAmC,CAAC,CAAC;QACxE,MAAM,GAAG,GAAG,MAAM,kBAAW,CAAC,MAAM,CAAC,UAAU,EAAE;YAC7C,UAAU,EAAE,IAAI;SACnB,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,WAAW,+BAA+B,CAAC,CAAC;QAGpE,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;YACpB,OAAO,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,WAAW,gCAAgC,CAAC,CAAC;YACrE,MAAM,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YAC7B,OAAO,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,WAAW,8BAA8B,CAAC,CAAC;QACvE,CAAC;QAED,IAAI,YAAY,CAAC;QAEjB,IAAI,OAAO,CAAC,eAAe,KAAK,KAAK,EAAE,CAAC;YACpC,IAAI,CAAC;gBACD,OAAO,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,WAAW,gCAAgC,CAAC,CAAC;gBAErE,YAAY,GAAG,GAAG,CAAC,GAAG,CAAC,0BAAY,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;gBACxD,IAAI,YAAY,EAAE,CAAC;oBACf,GAAG,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;oBAC5B,OAAO,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,WAAW,8BAA8B,CAAC,CAAC;gBACvE,CAAC;YACL,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACT,OAAO,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,WAAW,8EAA8E,CAAC,CAAC;YACxH,CAAC;QACL,CAAC;aAAM,CAAC;YACJ,OAAO,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,WAAW,gDAAgD,CAAC,CAAC;QACzF,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,WAAW,4CAA4C,CAAC,CAAC;QACjF,IAAA,yBAAgB,EAAC,GAAU,EAAE;YACzB,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,YAAY;YACZ,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,eAAe,EAAE,OAAO,CAAC,eAAe;SAC3C,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,WAAW,qCAAqC,CAAC,CAAC;QAE1E,IAAI,aAAa,GAAG,KAAK,CAAC;QAC1B,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;YACtB,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAC5F,aAAa,GAAG,WAAW,IAAI,OAAO,CAAC,QAAQ,IAAI,KAAK,CAAC;YACzD,GAAG,CAAC,mBAAmB,CAAsB;gBACzC,SAAS,EAAE,yBAAS,CAAC,IAAI;gBACzB,OAAO,EAAE;oBACL,OAAO,EAAE,OAAO,CAAC,WAAW;oBAC5B,SAAS,EAAE,IAAA,qBAAY,EAAC,OAAO,CAAC,WAAW,CAAC;oBAC5C,GAAG,EAAE,WAAW,aAAa,EAAE;iBAClC;aACJ,CAAC,CAAC;QACP,CAAC;QAED,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAChB,GAAG,CAAC,mBAAmB,CAAsB;gBACzC,SAAS,EAAE,yBAAS,CAAC,KAAK;gBAC1B,OAAO,EAAE;oBACL,MAAM,EAAE;wBACJ,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,aAAa,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;qBAC5F;oBACD,QAAQ,EAAE;wBACN,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,OAAO,IAAI,GAAG,OAAO,CAAC,WAAW,WAAW;qBACtE;iBACJ;aACJ,CAAC,CAAC;QACP,CAAC;QAED,IAAI,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YACvC,MAAM,GAAG,CAAC,qBAAqB,EAAE,CAAC;QACtC,CAAC;QAED,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC;QAC7F,MAAM,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAEvC,OAAO,CAAC,GAAG,CAAC,MAAM,OAAO,CAAC,WAAW,oCAAoC,SAAS,EAAE,CAAC,CAAC;QACtF,OAAO,CAAC,GAAG,CAAC,6CAA6C,SAAS,UAAU,CAAC,CAAC;QAC9E,OAAO,CAAC,GAAG,CAAC,4CAA4C,SAAS,cAAc,CAAC,CAAC;QAEjF,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,kCAAkC,aAAa,EAAE,CAAC,CAAC;QACnE,CAAC;QAED,OAAO,GAAG,CAAC;IACf,CAAC;CACJ;AAzGD,8CAyGC"}
|
|
@@ -21,7 +21,7 @@ let StandardHealthController = class StandardHealthController {
|
|
|
21
21
|
this.health = health;
|
|
22
22
|
this.memory = memory;
|
|
23
23
|
this.options = options;
|
|
24
|
-
this.heapThreshold =
|
|
24
|
+
this.heapThreshold = 300 * 1024 * 1024;
|
|
25
25
|
this.readinessIndicators = [];
|
|
26
26
|
if (options.indicators) {
|
|
27
27
|
this.readinessIndicators = options.indicators;
|
|
@@ -65,6 +65,8 @@ let StandardHealthModule = StandardHealthModule_1 = class StandardHealthModule {
|
|
|
65
65
|
static forRoot(options = {}) {
|
|
66
66
|
return {
|
|
67
67
|
module: StandardHealthModule_1,
|
|
68
|
+
imports: [terminus_1.TerminusModule],
|
|
69
|
+
controllers: [StandardHealthController],
|
|
68
70
|
providers: [
|
|
69
71
|
{
|
|
70
72
|
provide: 'HEALTH_MODULE_OPTIONS',
|
|
@@ -79,6 +81,12 @@ exports.StandardHealthModule = StandardHealthModule = StandardHealthModule_1 = _
|
|
|
79
81
|
(0, common_1.Module)({
|
|
80
82
|
imports: [terminus_1.TerminusModule],
|
|
81
83
|
controllers: [StandardHealthController],
|
|
84
|
+
providers: [
|
|
85
|
+
{
|
|
86
|
+
provide: 'HEALTH_MODULE_OPTIONS',
|
|
87
|
+
useValue: {},
|
|
88
|
+
},
|
|
89
|
+
],
|
|
82
90
|
exports: [terminus_1.TerminusModule],
|
|
83
91
|
})
|
|
84
92
|
], StandardHealthModule);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standard-health.module.js","sourceRoot":"","sources":["../../src/utils/standard-health.module.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAgF;AAChF,+CAAsJ;AAQ/I,IAAM,wBAAwB,GAA9B,MAAM,wBAAwB;IAIjC,YACY,MAA0B,EAC1B,MAA6B,EACJ,OAAoC;QAF7D,WAAM,GAAN,MAAM,CAAoB;QAC1B,WAAM,GAAN,MAAM,CAAuB;QACI,YAAO,GAAP,OAAO,CAAqB;QANjE,kBAAa,GAAW,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC;QAC1C,wBAAmB,GAA8B,EAAE,CAAC;QAOxD,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;YACrB,IAAI,CAAC,mBAAmB,GAAG,OAAO,CAAC,UAAU,CAAC;QAClD,CAAC;QACD,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;YACxB,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;QAC/C,CAAC;IACL,CAAC;IAIK,AAAN,KAAK,CAAC,aAAa;QACf,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACjC,CAAC;IAIK,AAAN,KAAK,CAAC,cAAc;QAChB,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;YACrB,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC;YAC9D,GAAG,IAAI,CAAC,mBAAmB;SAC9B,CAAC,CAAC;IACP,CAAC;CACJ,CAAA;AA/BY,4DAAwB;AAmB3B;IAFL,IAAA,YAAG,EAAC,MAAM,CAAC;IACX,IAAA,sBAAW,GAAE;;;;6DAGb;AAIK;IAFL,IAAA,YAAG,EAAC,OAAO,CAAC;IACZ,IAAA,sBAAW,GAAE;;;;8DAMb;mCA9BQ,wBAAwB;IADpC,IAAA,mBAAU,EAAC,QAAQ,CAAC;IAQZ,WAAA,IAAA,eAAM,EAAC,uBAAuB,CAAC,CAAA;qCAFhB,6BAAkB;QAClB,gCAAqB;GANhC,wBAAwB,CA+BpC;
|
|
1
|
+
{"version":3,"file":"standard-health.module.js","sourceRoot":"","sources":["../../src/utils/standard-health.module.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAgF;AAChF,+CAAsJ;AAQ/I,IAAM,wBAAwB,GAA9B,MAAM,wBAAwB;IAIjC,YACY,MAA0B,EAC1B,MAA6B,EACJ,OAAoC;QAF7D,WAAM,GAAN,MAAM,CAAoB;QAC1B,WAAM,GAAN,MAAM,CAAuB;QACI,YAAO,GAAP,OAAO,CAAqB;QANjE,kBAAa,GAAW,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC;QAC1C,wBAAmB,GAA8B,EAAE,CAAC;QAOxD,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;YACrB,IAAI,CAAC,mBAAmB,GAAG,OAAO,CAAC,UAAU,CAAC;QAClD,CAAC;QACD,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;YACxB,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;QAC/C,CAAC;IACL,CAAC;IAIK,AAAN,KAAK,CAAC,aAAa;QACf,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACjC,CAAC;IAIK,AAAN,KAAK,CAAC,cAAc;QAChB,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;YACrB,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC;YAC9D,GAAG,IAAI,CAAC,mBAAmB;SAC9B,CAAC,CAAC;IACP,CAAC;CACJ,CAAA;AA/BY,4DAAwB;AAmB3B;IAFL,IAAA,YAAG,EAAC,MAAM,CAAC;IACX,IAAA,sBAAW,GAAE;;;;6DAGb;AAIK;IAFL,IAAA,YAAG,EAAC,OAAO,CAAC;IACZ,IAAA,sBAAW,GAAE;;;;8DAMb;mCA9BQ,wBAAwB;IADpC,IAAA,mBAAU,EAAC,QAAQ,CAAC;IAQZ,WAAA,IAAA,eAAM,EAAC,uBAAuB,CAAC,CAAA;qCAFhB,6BAAkB;QAClB,gCAAqB;GANhC,wBAAwB,CA+BpC;AAaM,IAAM,oBAAoB,4BAA1B,MAAM,oBAAoB;IAC7B,MAAM,CAAC,OAAO,CAAC,UAA+B,EAAE;QAC5C,OAAO;YACH,MAAM,EAAE,sBAAoB;YAC5B,OAAO,EAAE,CAAC,yBAAc,CAAC;YACzB,WAAW,EAAE,CAAC,wBAAwB,CAAC;YACvC,SAAS,EAAE;gBACP;oBACI,OAAO,EAAE,uBAAuB;oBAChC,QAAQ,EAAE,OAAO;iBACpB;aACJ;SACJ,CAAC;IACN,CAAC;CACJ,CAAA;AAdY,oDAAoB;+BAApB,oBAAoB;IAXhC,IAAA,eAAM,EAAC;QACJ,OAAO,EAAE,CAAC,yBAAc,CAAC;QACzB,WAAW,EAAE,CAAC,wBAAwB,CAAC;QACvC,SAAS,EAAE;YACP;gBACI,OAAO,EAAE,uBAAuB;gBAChC,QAAQ,EAAE,EAAE;aACf;SACJ;QACD,OAAO,EAAE,CAAC,yBAAc,CAAC;KAC5B,CAAC;GACW,oBAAoB,CAchC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@alacard-project/bootstrap-sdk",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.8",
|
|
4
4
|
"engines": {
|
|
5
5
|
"node": ">=22.0.0"
|
|
6
6
|
},
|
|
@@ -12,10 +12,10 @@
|
|
|
12
12
|
"watch": "tsc -w"
|
|
13
13
|
},
|
|
14
14
|
"dependencies": {
|
|
15
|
-
"@alacard-project/shared": "1.1.
|
|
16
|
-
"@alacard-project/config-sdk": "1.1.
|
|
17
|
-
"@alacard-project/logging-sdk": "1.1.
|
|
18
|
-
"@alacard-project/metrics-sdk": "1.1.
|
|
15
|
+
"@alacard-project/shared": "1.1.7",
|
|
16
|
+
"@alacard-project/config-sdk": "1.1.8",
|
|
17
|
+
"@alacard-project/logging-sdk": "1.1.7",
|
|
18
|
+
"@alacard-project/metrics-sdk": "1.1.7",
|
|
19
19
|
"@nestjs/common": "10.4.15",
|
|
20
20
|
"@nestjs/core": "10.4.15",
|
|
21
21
|
"@nestjs/microservices": "10.4.15",
|
|
@@ -13,10 +13,12 @@ export interface BootstrapOptions {
|
|
|
13
13
|
port?: number;
|
|
14
14
|
grpcPort?: number;
|
|
15
15
|
corsOrigins?: string | string[];
|
|
16
|
+
enableTelemetry?: boolean;
|
|
16
17
|
kafka?: {
|
|
17
18
|
brokers?: string[];
|
|
18
19
|
groupId?: string;
|
|
19
20
|
};
|
|
21
|
+
onCreated?: (app: any) => void | Promise<void>;
|
|
20
22
|
}
|
|
21
23
|
|
|
22
24
|
export class StandardBootstrap {
|
|
@@ -36,24 +38,53 @@ export class StandardBootstrap {
|
|
|
36
38
|
|
|
37
39
|
const RootModule = {
|
|
38
40
|
module: class {},
|
|
39
|
-
imports: [StandardMetricsModule, StandardHealthModule, appModule],
|
|
41
|
+
imports: [StandardMetricsModule, StandardHealthModule.forRoot(), appModule],
|
|
40
42
|
};
|
|
41
43
|
|
|
44
|
+
console.log(`[${options.serviceName}] đ Starting Nest application...`);
|
|
42
45
|
const app = await NestFactory.create(RootModule, {
|
|
43
46
|
bufferLogs: true,
|
|
44
47
|
});
|
|
48
|
+
console.log(`[${options.serviceName}] â
Nest application created.`);
|
|
45
49
|
|
|
46
|
-
|
|
47
|
-
|
|
50
|
+
// Call onCreated hook if provided
|
|
51
|
+
if (options.onCreated) {
|
|
52
|
+
console.log(`[${options.serviceName}] đ Running onCreated hook...`);
|
|
53
|
+
await options.onCreated(app);
|
|
54
|
+
console.log(`[${options.serviceName}] â
onCreated hook finished.`);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
let remoteLogger;
|
|
58
|
+
// 4. Integrate Remote Logging if available (Optional)
|
|
59
|
+
if (options.enableTelemetry !== false) {
|
|
60
|
+
try {
|
|
61
|
+
console.log(`[${options.serviceName}] đ Resolving RemoteLogger...`);
|
|
62
|
+
// Use try-catch and specific check to avoid NestJS resolution errors
|
|
63
|
+
remoteLogger = app.get(RemoteLogger, { strict: false });
|
|
64
|
+
if (remoteLogger) {
|
|
65
|
+
app.useLogger(remoteLogger);
|
|
66
|
+
console.log(`[${options.serviceName}] â
RemoteLogger integrated.`);
|
|
67
|
+
}
|
|
68
|
+
} catch (e) {
|
|
69
|
+
console.warn(`[${options.serviceName}] â ī¸ RemoteLogger not provided by AppModule, falling back to default logger.`);
|
|
70
|
+
}
|
|
71
|
+
} else {
|
|
72
|
+
console.log(`[${options.serviceName}] âšī¸ Telemetry disabled, using default logger.`);
|
|
73
|
+
}
|
|
48
74
|
|
|
75
|
+
console.log(`[${options.serviceName}] đ Setting up standard app components...`);
|
|
49
76
|
setupStandardApp(app as any, {
|
|
50
77
|
apiPrefix: options.apiPrefix,
|
|
51
78
|
remoteLogger,
|
|
52
79
|
corsOrigins: options.corsOrigins,
|
|
80
|
+
enableTelemetry: options.enableTelemetry,
|
|
53
81
|
});
|
|
82
|
+
console.log(`[${options.serviceName}] â
Standard app components set up.`);
|
|
54
83
|
|
|
84
|
+
let finalGrpcPort = 50051;
|
|
55
85
|
if (options.grpcPackage) {
|
|
56
|
-
const
|
|
86
|
+
const envGrpcPort = process.env.GRPC_PORT ? parseInt(process.env.GRPC_PORT, 10) : undefined;
|
|
87
|
+
finalGrpcPort = envGrpcPort || options.grpcPort || 50051;
|
|
57
88
|
app.connectMicroservice<MicroserviceOptions>({
|
|
58
89
|
transport: Transport.GRPC,
|
|
59
90
|
options: {
|
|
@@ -82,7 +113,7 @@ export class StandardBootstrap {
|
|
|
82
113
|
await app.startAllMicroservices();
|
|
83
114
|
}
|
|
84
115
|
|
|
85
|
-
const finalPort = options.port || 3000;
|
|
116
|
+
const finalPort = process.env.PORT ? parseInt(process.env.PORT, 10) : (options.port || 3000);
|
|
86
117
|
await app.listen(finalPort, '0.0.0.0');
|
|
87
118
|
|
|
88
119
|
console.log(`đ ${options.serviceName} is running on: http://localhost:${finalPort}`);
|
|
@@ -90,7 +121,7 @@ export class StandardBootstrap {
|
|
|
90
121
|
console.log(`đĨ Health available at: http://localhost:${finalPort}/health/live`);
|
|
91
122
|
|
|
92
123
|
if (options.grpcPackage) {
|
|
93
|
-
console.log(`đ gRPC is running on: 0.0.0.0:${
|
|
124
|
+
console.log(`đ gRPC is running on: 0.0.0.0:${finalGrpcPort}`);
|
|
94
125
|
}
|
|
95
126
|
|
|
96
127
|
return app;
|
|
@@ -8,7 +8,7 @@ export interface HealthModuleOptions {
|
|
|
8
8
|
|
|
9
9
|
@Controller('health')
|
|
10
10
|
export class StandardHealthController {
|
|
11
|
-
private heapThreshold: number =
|
|
11
|
+
private heapThreshold: number = 300 * 1024 * 1024; // 300 MB
|
|
12
12
|
private readinessIndicators: HealthIndicatorFunction[] = [];
|
|
13
13
|
|
|
14
14
|
constructor(
|
|
@@ -43,12 +43,20 @@ export class StandardHealthController {
|
|
|
43
43
|
@Module({
|
|
44
44
|
imports: [TerminusModule],
|
|
45
45
|
controllers: [StandardHealthController],
|
|
46
|
+
providers: [
|
|
47
|
+
{
|
|
48
|
+
provide: 'HEALTH_MODULE_OPTIONS',
|
|
49
|
+
useValue: {},
|
|
50
|
+
},
|
|
51
|
+
],
|
|
46
52
|
exports: [TerminusModule],
|
|
47
53
|
})
|
|
48
54
|
export class StandardHealthModule {
|
|
49
55
|
static forRoot(options: HealthModuleOptions = {}): DynamicModule {
|
|
50
56
|
return {
|
|
51
57
|
module: StandardHealthModule,
|
|
58
|
+
imports: [TerminusModule],
|
|
59
|
+
controllers: [StandardHealthController],
|
|
52
60
|
providers: [
|
|
53
61
|
{
|
|
54
62
|
provide: 'HEALTH_MODULE_OPTIONS',
|