@application-kit/observability 0.1.0 → 0.3.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/CHANGELOG.md +26 -0
- package/README.md +98 -17
- package/dist/cjs/cqrs/cqrs-logger.d.ts +12 -0
- package/dist/cjs/cqrs/cqrs-logger.js +72 -0
- package/dist/cjs/cqrs/cqrs-logger.module.d.ts +2 -0
- package/dist/cjs/cqrs/cqrs-logger.module.js +22 -0
- package/dist/cjs/cqrs/index.d.ts +2 -0
- package/dist/cjs/cqrs/index.js +18 -0
- package/dist/cjs/health/cli/health-cli-options.interface.d.ts +3 -0
- package/dist/cjs/health/cli/health-cli-options.interface.js +2 -0
- package/dist/cjs/health/cli/health-cli.d.ts +13 -0
- package/dist/cjs/health/cli/health-cli.js +56 -0
- package/dist/cjs/health/cli/health-cli.module.d.ts +5 -0
- package/dist/cjs/health/cli/health-cli.module.js +23 -0
- package/dist/cjs/health/cli/index.d.ts +3 -0
- package/dist/cjs/health/cli/index.js +19 -0
- package/dist/cjs/health/graphql/health-check.type.d.ts +3 -0
- package/dist/cjs/health/graphql/health-check.type.js +24 -0
- package/dist/cjs/health/graphql/health-graphql.module.d.ts +5 -0
- package/dist/cjs/health/graphql/health-graphql.module.js +26 -0
- package/dist/cjs/health/graphql/health.resolver.d.ts +11 -0
- package/dist/cjs/health/graphql/health.resolver.js +55 -0
- package/dist/cjs/health/graphql/index.d.ts +3 -0
- package/dist/cjs/health/graphql/index.js +19 -0
- package/dist/cjs/health/health-checks.d.ts +10 -0
- package/dist/cjs/health/health-checks.js +53 -0
- package/dist/cjs/health/health-http.module.d.ts +5 -0
- package/dist/cjs/health/health-http.module.js +26 -0
- package/dist/cjs/health/health-module-options.interface.d.ts +9 -0
- package/dist/cjs/health/health-module-options.interface.js +2 -0
- package/dist/cjs/health/health.config.d.ts +8 -0
- package/dist/cjs/health/health.config.js +39 -0
- package/dist/cjs/health/health.controller.d.ts +14 -0
- package/dist/cjs/health/health.controller.js +78 -0
- package/dist/cjs/health/health.environment.d.ts +5 -0
- package/dist/cjs/health/health.environment.js +38 -0
- package/dist/cjs/health/health.module.d.ts +5 -0
- package/dist/cjs/health/health.module.js +28 -0
- package/dist/cjs/health/index.d.ts +8 -0
- package/dist/cjs/health/index.js +24 -0
- package/dist/cjs/health/migrations.health-indicator.d.ts +9 -0
- package/dist/cjs/health/migrations.health-indicator.js +40 -0
- package/dist/cjs/http/client-ip-options.interface.d.ts +3 -0
- package/dist/cjs/http/client-ip-options.interface.js +2 -0
- package/dist/cjs/http/index.d.ts +2 -0
- package/dist/cjs/http/index.js +18 -0
- package/dist/cjs/http/resolve-client-ip.d.ts +14 -0
- package/dist/cjs/http/resolve-client-ip.js +22 -0
- package/dist/cjs/logging/constants.d.ts +1 -0
- package/dist/cjs/logging/constants.js +4 -0
- package/dist/cjs/logging/index.d.ts +8 -0
- package/dist/cjs/logging/index.js +24 -0
- package/dist/cjs/logging/infrastructure-paths.d.ts +4 -0
- package/dist/cjs/logging/infrastructure-paths.js +9 -0
- package/dist/cjs/logging/logger.environment.d.ts +4 -0
- package/dist/cjs/logging/logger.environment.js +24 -0
- package/dist/cjs/logging/observability-logger.interface.d.ts +4 -0
- package/dist/cjs/logging/observability-logger.interface.js +2 -0
- package/dist/cjs/logging/pino-logger-options.interface.d.ts +5 -0
- package/dist/cjs/logging/pino-logger-options.interface.js +2 -0
- package/dist/cjs/logging/pino-logger.config.d.ts +15 -0
- package/dist/cjs/logging/pino-logger.config.js +104 -0
- package/dist/cjs/logging/resolve-request-id.d.ts +4 -0
- package/dist/cjs/logging/resolve-request-id.js +10 -0
- package/dist/cjs/logging/resolve-support-id.d.ts +3 -0
- package/dist/cjs/logging/resolve-support-id.js +8 -0
- package/dist/cjs/metrics/index.d.ts +3 -0
- package/dist/cjs/metrics/index.js +3 -0
- package/dist/cjs/metrics/metrics-hooks.d.ts +2 -0
- package/dist/cjs/metrics/metrics-hooks.js +37 -0
- package/dist/cjs/metrics/metrics-http.module.d.ts +5 -0
- package/dist/cjs/metrics/metrics-http.module.js +29 -0
- package/dist/cjs/metrics/metrics.controller.d.ts +7 -0
- package/dist/cjs/metrics/metrics.controller.js +42 -0
- package/dist/cjs/shared/active-span-context.d.ts +2 -0
- package/dist/cjs/shared/active-span-context.js +9 -0
- package/dist/cjs/shared/with-class-decorator.d.ts +2 -0
- package/dist/cjs/shared/with-class-decorator.js +14 -0
- package/dist/esm/cqrs/cqrs-logger.d.ts +12 -0
- package/dist/esm/cqrs/cqrs-logger.js +69 -0
- package/dist/esm/cqrs/cqrs-logger.module.d.ts +2 -0
- package/dist/esm/cqrs/cqrs-logger.module.js +19 -0
- package/dist/esm/cqrs/index.d.ts +2 -0
- package/dist/esm/cqrs/index.js +2 -0
- package/dist/esm/health/cli/health-cli-options.interface.d.ts +3 -0
- package/dist/esm/health/cli/health-cli-options.interface.js +1 -0
- package/dist/esm/health/cli/health-cli.d.ts +13 -0
- package/dist/esm/health/cli/health-cli.js +52 -0
- package/dist/esm/health/cli/health-cli.module.d.ts +5 -0
- package/dist/esm/health/cli/health-cli.module.js +20 -0
- package/dist/esm/health/cli/index.d.ts +3 -0
- package/dist/esm/health/cli/index.js +3 -0
- package/dist/esm/health/graphql/health-check.type.d.ts +3 -0
- package/dist/esm/health/graphql/health-check.type.js +21 -0
- package/dist/esm/health/graphql/health-graphql.module.d.ts +5 -0
- package/dist/esm/health/graphql/health-graphql.module.js +23 -0
- package/dist/esm/health/graphql/health.resolver.d.ts +11 -0
- package/dist/esm/health/graphql/health.resolver.js +52 -0
- package/dist/esm/health/graphql/index.d.ts +3 -0
- package/dist/esm/health/graphql/index.js +3 -0
- package/dist/esm/health/health-checks.d.ts +10 -0
- package/dist/esm/health/health-checks.js +50 -0
- package/dist/esm/health/health-http.module.d.ts +5 -0
- package/dist/esm/health/health-http.module.js +23 -0
- package/dist/esm/health/health-module-options.interface.d.ts +9 -0
- package/dist/esm/health/health-module-options.interface.js +1 -0
- package/dist/esm/health/health.config.d.ts +8 -0
- package/dist/esm/health/health.config.js +36 -0
- package/dist/esm/health/health.controller.d.ts +14 -0
- package/dist/esm/health/health.controller.js +75 -0
- package/dist/esm/health/health.environment.d.ts +5 -0
- package/dist/esm/health/health.environment.js +34 -0
- package/dist/esm/health/health.module.d.ts +5 -0
- package/dist/esm/health/health.module.js +25 -0
- package/dist/esm/health/index.d.ts +8 -0
- package/dist/esm/health/index.js +8 -0
- package/dist/esm/health/migrations.health-indicator.d.ts +9 -0
- package/dist/esm/health/migrations.health-indicator.js +37 -0
- package/dist/esm/http/client-ip-options.interface.d.ts +3 -0
- package/dist/esm/http/client-ip-options.interface.js +1 -0
- package/dist/esm/http/index.d.ts +2 -0
- package/dist/esm/http/index.js +2 -0
- package/dist/esm/http/resolve-client-ip.d.ts +14 -0
- package/dist/esm/http/resolve-client-ip.js +18 -0
- package/dist/esm/logging/constants.d.ts +1 -0
- package/dist/esm/logging/constants.js +1 -0
- package/dist/esm/logging/index.d.ts +8 -0
- package/dist/esm/logging/index.js +8 -0
- package/dist/esm/logging/infrastructure-paths.d.ts +4 -0
- package/dist/esm/logging/infrastructure-paths.js +5 -0
- package/dist/esm/logging/logger.environment.d.ts +4 -0
- package/dist/esm/logging/logger.environment.js +20 -0
- package/dist/esm/logging/observability-logger.interface.d.ts +4 -0
- package/dist/esm/logging/observability-logger.interface.js +1 -0
- package/dist/esm/logging/pino-logger-options.interface.d.ts +5 -0
- package/dist/esm/logging/pino-logger-options.interface.js +1 -0
- package/dist/esm/logging/pino-logger.config.d.ts +15 -0
- package/dist/esm/logging/pino-logger.config.js +99 -0
- package/dist/esm/logging/resolve-request-id.d.ts +4 -0
- package/dist/esm/logging/resolve-request-id.js +6 -0
- package/dist/esm/logging/resolve-support-id.d.ts +3 -0
- package/dist/esm/logging/resolve-support-id.js +4 -0
- package/dist/esm/metrics/index.d.ts +3 -0
- package/dist/esm/metrics/index.js +3 -0
- package/dist/esm/metrics/metrics-hooks.d.ts +2 -0
- package/dist/esm/metrics/metrics-hooks.js +33 -0
- package/dist/esm/metrics/metrics-http.module.d.ts +5 -0
- package/dist/esm/metrics/metrics-http.module.js +26 -0
- package/dist/esm/metrics/metrics.controller.d.ts +7 -0
- package/dist/esm/metrics/metrics.controller.js +39 -0
- package/dist/esm/shared/active-span-context.d.ts +2 -0
- package/dist/esm/shared/active-span-context.js +5 -0
- package/dist/esm/shared/with-class-decorator.d.ts +2 -0
- package/dist/esm/shared/with-class-decorator.js +10 -0
- package/package.json +140 -5
|
@@ -0,0 +1,53 @@
|
|
|
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.HealthChecks = void 0;
|
|
16
|
+
const common_1 = require("@nestjs/common");
|
|
17
|
+
const terminus_1 = require("@nestjs/terminus");
|
|
18
|
+
const health_config_js_1 = require("./health.config.js");
|
|
19
|
+
let HealthChecks = class HealthChecks {
|
|
20
|
+
database;
|
|
21
|
+
memory;
|
|
22
|
+
disk;
|
|
23
|
+
config;
|
|
24
|
+
constructor(database, memory, disk, config) {
|
|
25
|
+
this.database = database;
|
|
26
|
+
this.memory = memory;
|
|
27
|
+
this.disk = disk;
|
|
28
|
+
this.config = config;
|
|
29
|
+
}
|
|
30
|
+
build() {
|
|
31
|
+
return [
|
|
32
|
+
async () => this.database.pingCheck('typeorm'),
|
|
33
|
+
async () => this.memory.checkHeap('memory_heap', this.config.memoryHeapBytes),
|
|
34
|
+
async () => this.memory.checkRSS('memory_rss', this.config.memoryRssBytes),
|
|
35
|
+
async () => this.disk.checkStorage('disk', {
|
|
36
|
+
path: '/',
|
|
37
|
+
thresholdPercent: this.config.diskThresholdPercent,
|
|
38
|
+
}),
|
|
39
|
+
];
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
exports.HealthChecks = HealthChecks;
|
|
43
|
+
exports.HealthChecks = HealthChecks = __decorate([
|
|
44
|
+
(0, common_1.Injectable)(),
|
|
45
|
+
__param(0, (0, common_1.Inject)(terminus_1.TypeOrmHealthIndicator)),
|
|
46
|
+
__param(1, (0, common_1.Inject)(terminus_1.MemoryHealthIndicator)),
|
|
47
|
+
__param(2, (0, common_1.Inject)(terminus_1.DiskHealthIndicator)),
|
|
48
|
+
__param(3, (0, common_1.Inject)(health_config_js_1.HealthConfig)),
|
|
49
|
+
__metadata("design:paramtypes", [terminus_1.TypeOrmHealthIndicator,
|
|
50
|
+
terminus_1.MemoryHealthIndicator,
|
|
51
|
+
terminus_1.DiskHealthIndicator,
|
|
52
|
+
health_config_js_1.HealthConfig])
|
|
53
|
+
], HealthChecks);
|
|
@@ -0,0 +1,26 @@
|
|
|
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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.HealthHttpModule = void 0;
|
|
10
|
+
const common_1 = require("@nestjs/common");
|
|
11
|
+
const with_class_decorator_js_1 = require("../shared/with-class-decorator.js");
|
|
12
|
+
const health_controller_js_1 = require("./health.controller.js");
|
|
13
|
+
const migrations_health_indicator_js_1 = require("./migrations.health-indicator.js");
|
|
14
|
+
let HealthHttpModule = class HealthHttpModule {
|
|
15
|
+
static forRoot(options = {}) {
|
|
16
|
+
return {
|
|
17
|
+
controllers: [(0, with_class_decorator_js_1.withClassDecorator)(health_controller_js_1.HealthController, options.publicRoute)],
|
|
18
|
+
module: this,
|
|
19
|
+
providers: [migrations_health_indicator_js_1.MigrationsHealthIndicator],
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
exports.HealthHttpModule = HealthHttpModule;
|
|
24
|
+
exports.HealthHttpModule = HealthHttpModule = __decorate([
|
|
25
|
+
(0, common_1.Module)({})
|
|
26
|
+
], HealthHttpModule);
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ModuleMetadata } from '@nestjs/common';
|
|
2
|
+
import type { TerminusModuleOptions } from '@nestjs/terminus';
|
|
3
|
+
export interface HealthCarrierOptionsInterface {
|
|
4
|
+
readonly publicRoute?: ClassDecorator;
|
|
5
|
+
}
|
|
6
|
+
export interface HealthModuleOptionsInterface {
|
|
7
|
+
readonly imports?: ModuleMetadata['imports'];
|
|
8
|
+
readonly terminus?: TerminusModuleOptions;
|
|
9
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { HealthEnvironment } from './health.environment.js';
|
|
2
|
+
export declare class HealthConfig {
|
|
3
|
+
private readonly environment;
|
|
4
|
+
get diskThresholdPercent(): number;
|
|
5
|
+
get memoryHeapBytes(): number;
|
|
6
|
+
get memoryRssBytes(): number;
|
|
7
|
+
constructor(environment: HealthEnvironment);
|
|
8
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
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.HealthConfig = void 0;
|
|
16
|
+
const common_1 = require("@nestjs/common");
|
|
17
|
+
const health_environment_js_1 = require("./health.environment.js");
|
|
18
|
+
const BYTES_IN_MEGABYTE = 1024 * 1024;
|
|
19
|
+
let HealthConfig = class HealthConfig {
|
|
20
|
+
environment;
|
|
21
|
+
get diskThresholdPercent() {
|
|
22
|
+
return this.environment.HEALTH_DISK_THRESHOLD_PERCENT;
|
|
23
|
+
}
|
|
24
|
+
get memoryHeapBytes() {
|
|
25
|
+
return this.environment.HEALTH_MEMORY_HEAP_MB * BYTES_IN_MEGABYTE;
|
|
26
|
+
}
|
|
27
|
+
get memoryRssBytes() {
|
|
28
|
+
return this.environment.HEALTH_MEMORY_RSS_MB * BYTES_IN_MEGABYTE;
|
|
29
|
+
}
|
|
30
|
+
constructor(environment) {
|
|
31
|
+
this.environment = environment;
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
exports.HealthConfig = HealthConfig;
|
|
35
|
+
exports.HealthConfig = HealthConfig = __decorate([
|
|
36
|
+
(0, common_1.Injectable)(),
|
|
37
|
+
__param(0, (0, common_1.Inject)(health_environment_js_1.HealthEnvironment)),
|
|
38
|
+
__metadata("design:paramtypes", [health_environment_js_1.HealthEnvironment])
|
|
39
|
+
], HealthConfig);
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { HealthCheckResult } from '@nestjs/terminus';
|
|
2
|
+
import { HealthCheckService, TypeOrmHealthIndicator } from '@nestjs/terminus';
|
|
3
|
+
import { HealthChecks } from './health-checks.js';
|
|
4
|
+
import { MigrationsHealthIndicator } from './migrations.health-indicator.js';
|
|
5
|
+
export declare class HealthController {
|
|
6
|
+
private readonly health;
|
|
7
|
+
private readonly database;
|
|
8
|
+
private readonly migrations;
|
|
9
|
+
private readonly healthChecks;
|
|
10
|
+
constructor(health: HealthCheckService, database: TypeOrmHealthIndicator, migrations: MigrationsHealthIndicator, healthChecks: HealthChecks);
|
|
11
|
+
check(): Promise<HealthCheckResult>;
|
|
12
|
+
live(): Promise<HealthCheckResult>;
|
|
13
|
+
ready(): Promise<HealthCheckResult>;
|
|
14
|
+
}
|
|
@@ -0,0 +1,78 @@
|
|
|
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.HealthController = void 0;
|
|
16
|
+
const logging_1 = require("@application-kit/typeorm/logging");
|
|
17
|
+
const common_1 = require("@nestjs/common");
|
|
18
|
+
const terminus_1 = require("@nestjs/terminus");
|
|
19
|
+
const infrastructure_paths_js_1 = require("../logging/infrastructure-paths.js");
|
|
20
|
+
const health_checks_js_1 = require("./health-checks.js");
|
|
21
|
+
const migrations_health_indicator_js_1 = require("./migrations.health-indicator.js");
|
|
22
|
+
let HealthController = class HealthController {
|
|
23
|
+
health;
|
|
24
|
+
database;
|
|
25
|
+
migrations;
|
|
26
|
+
healthChecks;
|
|
27
|
+
constructor(health, database, migrations, healthChecks) {
|
|
28
|
+
this.health = health;
|
|
29
|
+
this.database = database;
|
|
30
|
+
this.migrations = migrations;
|
|
31
|
+
this.healthChecks = healthChecks;
|
|
32
|
+
}
|
|
33
|
+
async check() {
|
|
34
|
+
return (0, logging_1.runAsInfrastructureQuery)(async () => this.health.check(this.healthChecks.build()));
|
|
35
|
+
}
|
|
36
|
+
async live() {
|
|
37
|
+
return this.health.check([]);
|
|
38
|
+
}
|
|
39
|
+
async ready() {
|
|
40
|
+
return (0, logging_1.runAsInfrastructureQuery)(async () => this.health.check([
|
|
41
|
+
async () => this.database.pingCheck('typeorm'),
|
|
42
|
+
async () => this.migrations.isUpToDate('migrations'),
|
|
43
|
+
]));
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
exports.HealthController = HealthController;
|
|
47
|
+
__decorate([
|
|
48
|
+
(0, common_1.Get)(),
|
|
49
|
+
(0, terminus_1.HealthCheck)(),
|
|
50
|
+
__metadata("design:type", Function),
|
|
51
|
+
__metadata("design:paramtypes", []),
|
|
52
|
+
__metadata("design:returntype", Promise)
|
|
53
|
+
], HealthController.prototype, "check", null);
|
|
54
|
+
__decorate([
|
|
55
|
+
(0, common_1.Get)('live'),
|
|
56
|
+
(0, terminus_1.HealthCheck)(),
|
|
57
|
+
__metadata("design:type", Function),
|
|
58
|
+
__metadata("design:paramtypes", []),
|
|
59
|
+
__metadata("design:returntype", Promise)
|
|
60
|
+
], HealthController.prototype, "live", null);
|
|
61
|
+
__decorate([
|
|
62
|
+
(0, common_1.Get)('ready'),
|
|
63
|
+
(0, terminus_1.HealthCheck)(),
|
|
64
|
+
__metadata("design:type", Function),
|
|
65
|
+
__metadata("design:paramtypes", []),
|
|
66
|
+
__metadata("design:returntype", Promise)
|
|
67
|
+
], HealthController.prototype, "ready", null);
|
|
68
|
+
exports.HealthController = HealthController = __decorate([
|
|
69
|
+
(0, common_1.Controller)(infrastructure_paths_js_1.HEALTH_ROUTE),
|
|
70
|
+
__param(0, (0, common_1.Inject)(terminus_1.HealthCheckService)),
|
|
71
|
+
__param(1, (0, common_1.Inject)(terminus_1.TypeOrmHealthIndicator)),
|
|
72
|
+
__param(2, (0, common_1.Inject)(migrations_health_indicator_js_1.MigrationsHealthIndicator)),
|
|
73
|
+
__param(3, (0, common_1.Inject)(health_checks_js_1.HealthChecks)),
|
|
74
|
+
__metadata("design:paramtypes", [terminus_1.HealthCheckService,
|
|
75
|
+
terminus_1.TypeOrmHealthIndicator,
|
|
76
|
+
migrations_health_indicator_js_1.MigrationsHealthIndicator,
|
|
77
|
+
health_checks_js_1.HealthChecks])
|
|
78
|
+
], HealthController);
|
|
@@ -0,0 +1,38 @@
|
|
|
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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.HealthEnvironment = void 0;
|
|
13
|
+
const class_transformer_1 = require("class-transformer");
|
|
14
|
+
const class_validator_1 = require("class-validator");
|
|
15
|
+
class HealthEnvironment {
|
|
16
|
+
HEALTH_DISK_THRESHOLD_PERCENT = 0.8;
|
|
17
|
+
HEALTH_MEMORY_HEAP_MB = 500;
|
|
18
|
+
HEALTH_MEMORY_RSS_MB = 800;
|
|
19
|
+
}
|
|
20
|
+
exports.HealthEnvironment = HealthEnvironment;
|
|
21
|
+
__decorate([
|
|
22
|
+
(0, class_transformer_1.Expose)(),
|
|
23
|
+
(0, class_validator_1.IsNumber)(),
|
|
24
|
+
(0, class_transformer_1.Type)(() => Number),
|
|
25
|
+
__metadata("design:type", Object)
|
|
26
|
+
], HealthEnvironment.prototype, "HEALTH_DISK_THRESHOLD_PERCENT", void 0);
|
|
27
|
+
__decorate([
|
|
28
|
+
(0, class_transformer_1.Expose)(),
|
|
29
|
+
(0, class_validator_1.IsNumber)(),
|
|
30
|
+
(0, class_transformer_1.Type)(() => Number),
|
|
31
|
+
__metadata("design:type", Object)
|
|
32
|
+
], HealthEnvironment.prototype, "HEALTH_MEMORY_HEAP_MB", void 0);
|
|
33
|
+
__decorate([
|
|
34
|
+
(0, class_transformer_1.Expose)(),
|
|
35
|
+
(0, class_validator_1.IsNumber)(),
|
|
36
|
+
(0, class_transformer_1.Type)(() => Number),
|
|
37
|
+
__metadata("design:type", Object)
|
|
38
|
+
], HealthEnvironment.prototype, "HEALTH_MEMORY_RSS_MB", void 0);
|
|
@@ -0,0 +1,28 @@
|
|
|
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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.HealthModule = void 0;
|
|
10
|
+
const common_1 = require("@nestjs/common");
|
|
11
|
+
const terminus_1 = require("@nestjs/terminus");
|
|
12
|
+
const health_checks_js_1 = require("./health-checks.js");
|
|
13
|
+
let HealthModule = class HealthModule {
|
|
14
|
+
static forRoot(options = {}) {
|
|
15
|
+
const terminus = terminus_1.TerminusModule.forRoot(options.terminus);
|
|
16
|
+
return {
|
|
17
|
+
exports: [health_checks_js_1.HealthChecks, terminus],
|
|
18
|
+
global: true,
|
|
19
|
+
imports: [...options.imports ?? [], terminus],
|
|
20
|
+
module: this,
|
|
21
|
+
providers: [health_checks_js_1.HealthChecks],
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
exports.HealthModule = HealthModule;
|
|
26
|
+
exports.HealthModule = HealthModule = __decorate([
|
|
27
|
+
(0, common_1.Module)({})
|
|
28
|
+
], HealthModule);
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export * from './health-checks.js';
|
|
2
|
+
export * from './health-http.module.js';
|
|
3
|
+
export * from './health-module-options.interface.js';
|
|
4
|
+
export * from './health.config.js';
|
|
5
|
+
export * from './health.controller.js';
|
|
6
|
+
export * from './health.environment.js';
|
|
7
|
+
export * from './health.module.js';
|
|
8
|
+
export * from './migrations.health-indicator.js';
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./health-checks.js"), exports);
|
|
18
|
+
__exportStar(require("./health-http.module.js"), exports);
|
|
19
|
+
__exportStar(require("./health-module-options.interface.js"), exports);
|
|
20
|
+
__exportStar(require("./health.config.js"), exports);
|
|
21
|
+
__exportStar(require("./health.controller.js"), exports);
|
|
22
|
+
__exportStar(require("./health.environment.js"), exports);
|
|
23
|
+
__exportStar(require("./health.module.js"), exports);
|
|
24
|
+
__exportStar(require("./migrations.health-indicator.js"), exports);
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { HealthIndicatorResult } from '@nestjs/terminus';
|
|
2
|
+
import { HealthIndicatorService } from '@nestjs/terminus';
|
|
3
|
+
import { DataSource } from 'typeorm';
|
|
4
|
+
export declare class MigrationsHealthIndicator {
|
|
5
|
+
private readonly healthIndicatorService;
|
|
6
|
+
private readonly dataSource;
|
|
7
|
+
constructor(healthIndicatorService: HealthIndicatorService, dataSource: DataSource);
|
|
8
|
+
isUpToDate(key: string): Promise<HealthIndicatorResult>;
|
|
9
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
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.MigrationsHealthIndicator = void 0;
|
|
16
|
+
const common_1 = require("@nestjs/common");
|
|
17
|
+
const terminus_1 = require("@nestjs/terminus");
|
|
18
|
+
const typeorm_1 = require("@nestjs/typeorm");
|
|
19
|
+
const typeorm_2 = require("typeorm");
|
|
20
|
+
let MigrationsHealthIndicator = class MigrationsHealthIndicator {
|
|
21
|
+
healthIndicatorService;
|
|
22
|
+
dataSource;
|
|
23
|
+
constructor(healthIndicatorService, dataSource) {
|
|
24
|
+
this.healthIndicatorService = healthIndicatorService;
|
|
25
|
+
this.dataSource = dataSource;
|
|
26
|
+
}
|
|
27
|
+
async isUpToDate(key) {
|
|
28
|
+
const hasPendingMigrations = await this.dataSource.showMigrations();
|
|
29
|
+
const indicator = this.healthIndicatorService.check(key);
|
|
30
|
+
return hasPendingMigrations ? indicator.down({ pendingMigrations: true }) : indicator.up();
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
exports.MigrationsHealthIndicator = MigrationsHealthIndicator;
|
|
34
|
+
exports.MigrationsHealthIndicator = MigrationsHealthIndicator = __decorate([
|
|
35
|
+
(0, common_1.Injectable)(),
|
|
36
|
+
__param(0, (0, common_1.Inject)(terminus_1.HealthIndicatorService)),
|
|
37
|
+
__param(1, (0, typeorm_1.InjectDataSource)()),
|
|
38
|
+
__metadata("design:paramtypes", [terminus_1.HealthIndicatorService,
|
|
39
|
+
typeorm_2.DataSource])
|
|
40
|
+
], MigrationsHealthIndicator);
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./client-ip-options.interface.js"), exports);
|
|
18
|
+
__exportStar(require("./resolve-client-ip.js"), exports);
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { ClientIpOptionsInterface } from './client-ip-options.interface.js';
|
|
2
|
+
export interface ClientIpSourceInterface {
|
|
3
|
+
headers?: Record<string, string | string[] | undefined> | undefined;
|
|
4
|
+
ip?: string | undefined;
|
|
5
|
+
raw?: {
|
|
6
|
+
socket?: SocketLikeInterface | undefined;
|
|
7
|
+
} | undefined;
|
|
8
|
+
socket?: SocketLikeInterface | undefined;
|
|
9
|
+
}
|
|
10
|
+
interface SocketLikeInterface {
|
|
11
|
+
remoteAddress?: string | undefined;
|
|
12
|
+
}
|
|
13
|
+
export declare const resolveClientIp: (request: ClientIpSourceInterface, options?: ClientIpOptionsInterface) => string;
|
|
14
|
+
export {};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.resolveClientIp = void 0;
|
|
4
|
+
const firstHeaderValue = (value) => {
|
|
5
|
+
const single = Array.isArray(value) ? value[0] : value;
|
|
6
|
+
return (single ?? '').trim();
|
|
7
|
+
};
|
|
8
|
+
const trustedHeaderIp = (request, trustedHeaders) => {
|
|
9
|
+
const values = trustedHeaders?.map((header) => firstHeaderValue(request.headers?.[header]));
|
|
10
|
+
return values?.find((value) => value !== '') ?? '';
|
|
11
|
+
};
|
|
12
|
+
const rawSocketIp = (request) => request.raw?.socket?.remoteAddress ?? '';
|
|
13
|
+
const socketIp = (request) => request.socket?.remoteAddress ?? rawSocketIp(request);
|
|
14
|
+
const fallbackIp = (request) => {
|
|
15
|
+
const proxyAwareIp = (request.ip ?? '').trim();
|
|
16
|
+
return proxyAwareIp === '' ? socketIp(request) : proxyAwareIp;
|
|
17
|
+
};
|
|
18
|
+
const resolveClientIp = (request, options = {}) => {
|
|
19
|
+
const headerIp = trustedHeaderIp(request, options.trustedHeaders);
|
|
20
|
+
return headerIp === '' ? fallbackIp(request) : headerIp;
|
|
21
|
+
};
|
|
22
|
+
exports.resolveClientIp = resolveClientIp;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const OBSERVABILITY_LOGGER: unique symbol;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export * from './constants.js';
|
|
2
|
+
export * from './infrastructure-paths.js';
|
|
3
|
+
export * from './logger.environment.js';
|
|
4
|
+
export * from './observability-logger.interface.js';
|
|
5
|
+
export * from './pino-logger-options.interface.js';
|
|
6
|
+
export * from './pino-logger.config.js';
|
|
7
|
+
export * from './resolve-request-id.js';
|
|
8
|
+
export * from './resolve-support-id.js';
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./constants.js"), exports);
|
|
18
|
+
__exportStar(require("./infrastructure-paths.js"), exports);
|
|
19
|
+
__exportStar(require("./logger.environment.js"), exports);
|
|
20
|
+
__exportStar(require("./observability-logger.interface.js"), exports);
|
|
21
|
+
__exportStar(require("./pino-logger-options.interface.js"), exports);
|
|
22
|
+
__exportStar(require("./pino-logger.config.js"), exports);
|
|
23
|
+
__exportStar(require("./resolve-request-id.js"), exports);
|
|
24
|
+
__exportStar(require("./resolve-support-id.js"), exports);
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isInfrastructurePath = exports.INFRASTRUCTURE_PATHS = exports.METRICS_ROUTE = exports.HEALTH_ROUTE = void 0;
|
|
4
|
+
exports.HEALTH_ROUTE = 'health';
|
|
5
|
+
exports.METRICS_ROUTE = 'metrics';
|
|
6
|
+
exports.INFRASTRUCTURE_PATHS = [`/${exports.HEALTH_ROUTE}`, `/${exports.METRICS_ROUTE}`];
|
|
7
|
+
const isInfrastructurePath = (path) => exports.INFRASTRUCTURE_PATHS
|
|
8
|
+
.some((prefix) => path === prefix || path.startsWith(`${prefix}/`));
|
|
9
|
+
exports.isInfrastructurePath = isInfrastructurePath;
|
|
@@ -0,0 +1,24 @@
|
|
|
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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.LoggerEnvironment = void 0;
|
|
13
|
+
const class_transformer_1 = require("class-transformer");
|
|
14
|
+
const class_validator_1 = require("class-validator");
|
|
15
|
+
const LOG_LEVELS = ['trace', 'debug', 'info', 'warn', 'error', 'fatal', 'silent'];
|
|
16
|
+
class LoggerEnvironment {
|
|
17
|
+
LOG_LEVEL = 'warn';
|
|
18
|
+
}
|
|
19
|
+
exports.LoggerEnvironment = LoggerEnvironment;
|
|
20
|
+
__decorate([
|
|
21
|
+
(0, class_transformer_1.Expose)(),
|
|
22
|
+
(0, class_validator_1.IsIn)(LOG_LEVELS),
|
|
23
|
+
__metadata("design:type", String)
|
|
24
|
+
], LoggerEnvironment.prototype, "LOG_LEVEL", void 0);
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { Params } from 'nestjs-pino';
|
|
2
|
+
import type { Level } from 'pino';
|
|
3
|
+
import type { PinoLoggerOptionsInterface } from './pino-logger-options.interface.js';
|
|
4
|
+
import { LoggerEnvironment } from './logger.environment.js';
|
|
5
|
+
export declare const responseLogLevel: (request: {
|
|
6
|
+
url?: string | undefined;
|
|
7
|
+
}, response: {
|
|
8
|
+
statusCode: number;
|
|
9
|
+
}, error?: Error) => Level;
|
|
10
|
+
export declare const traceContextMixin: () => Record<string, number | string>;
|
|
11
|
+
export declare class PinoLoggerConfig {
|
|
12
|
+
private readonly environment;
|
|
13
|
+
constructor(environment: LoggerEnvironment);
|
|
14
|
+
createOptions(options?: PinoLoggerOptionsInterface): Params;
|
|
15
|
+
}
|