@rsdk/core 1.0.12 → 2.0.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 +50 -0
- package/dist/app/platform.app.d.ts +1 -1
- package/dist/app/platform.app.js +3 -25
- package/dist/app/platform.app.js.map +1 -1
- package/dist/app-metadata/app-metadata.module.js.map +1 -1
- package/dist/app-metadata/exceptions/app-name-validation.exception.js.map +1 -1
- package/dist/config/additional-source/additional-source.initializer.d.ts +6 -2
- package/dist/config/additional-source/additional-source.initializer.js +24 -18
- package/dist/config/additional-source/additional-source.initializer.js.map +1 -1
- package/dist/config/additional-source/additional-source.module.d.ts +1 -1
- package/dist/config/additional-source/additional-source.module.js +3 -1
- package/dist/config/additional-source/additional-source.module.js.map +1 -1
- package/dist/config/config-reload.indicator.d.ts +3 -2
- package/dist/config/config-reload.indicator.js +4 -3
- package/dist/config/config-reload.indicator.js.map +1 -1
- package/dist/config/config.abstract.d.ts +3 -2
- package/dist/config/config.abstract.js +3 -3
- package/dist/config/config.abstract.js.map +1 -1
- package/dist/config/config.module.d.ts +0 -81
- package/dist/config/config.module.js +26 -203
- package/dist/config/config.module.js.map +1 -1
- package/dist/config/context/config.context.d.ts +75 -0
- package/dist/config/context/config.context.js +159 -0
- package/dist/config/context/config.context.js.map +1 -0
- package/dist/config/context/module.d.ts +5 -0
- package/dist/config/context/module.js +26 -0
- package/dist/config/context/module.js.map +1 -0
- package/dist/config/exceptions/config-not-bootstrapped.exception.js.map +1 -1
- package/dist/config/exceptions/property.exception.d.ts +9 -2
- package/dist/config/exceptions/property.exception.js +4 -6
- package/dist/config/exceptions/property.exception.js.map +1 -1
- package/dist/config/index.d.ts +1 -0
- package/dist/config/index.js +3 -1
- package/dist/config/index.js.map +1 -1
- package/dist/config/metadata/config-metadata.provider.d.ts +21 -0
- package/dist/config/metadata/config-metadata.provider.js +37 -0
- package/dist/config/metadata/config-metadata.provider.js.map +1 -0
- package/dist/config/metadata/config-metadata.registry.d.ts +1 -9
- package/dist/config/metadata/config-metadata.registry.js +9 -28
- package/dist/config/metadata/config-metadata.registry.js.map +1 -1
- package/dist/config/metadata/constants.d.ts +3 -0
- package/dist/config/metadata/constants.js +7 -0
- package/dist/config/metadata/constants.js.map +1 -0
- package/dist/config/metadata/decorators/declare-property.decorator.js +2 -2
- package/dist/config/metadata/decorators/declare-property.decorator.js.map +1 -1
- package/dist/config/metadata/decorators/inject-property.decorator.d.ts +1 -1
- package/dist/config/metadata/decorators/inject-property.decorator.js +1 -1
- package/dist/config/metadata/exceptions/duplicate-property.exception.js.map +1 -1
- package/dist/config/metadata/exceptions/duplicate-section.exception.js.map +1 -1
- package/dist/config/metadata/exceptions/duplicate-source.exception.js.map +1 -1
- package/dist/config/metadata/types.d.ts +16 -0
- package/dist/config/metadata/types.js +3 -0
- package/dist/config/metadata/types.js.map +1 -0
- package/dist/config/reload/config-reload.events.d.ts +0 -2
- package/dist/config/reload/config-reload.events.js +0 -8
- package/dist/config/reload/config-reload.events.js.map +1 -1
- package/dist/config/sources/base/reloadable-config-source.abstract.d.ts +3 -2
- package/dist/config/sources/base/reloadable-config-source.abstract.js +3 -3
- package/dist/config/sources/base/reloadable-config-source.abstract.js.map +1 -1
- package/dist/config/sources/exceptions/config-source-di.exception.js.map +1 -1
- package/dist/config/sources/implementations/json-file.source.js.map +1 -1
- package/dist/config/sources/implementations/relodable-json-file.source.d.ts +3 -1
- package/dist/config/sources/implementations/relodable-json-file.source.js +6 -3
- package/dist/config/sources/implementations/relodable-json-file.source.js.map +1 -1
- package/dist/config/vars.class.d.ts +1 -1
- package/dist/config/vars.class.js +6 -6
- package/dist/config/vars.class.js.map +1 -1
- package/dist/context.aggregator.d.ts +21 -0
- package/dist/context.aggregator.js +53 -0
- package/dist/context.aggregator.js.map +1 -0
- package/dist/exceptions/base/platform-exception.absract.d.ts +2 -2
- package/dist/exceptions/base/platform-exception.absract.js +4 -1
- package/dist/exceptions/base/platform-exception.absract.js.map +1 -1
- package/dist/exceptions/implementations/bootstrap/double-init.exception.js.map +1 -1
- package/dist/exceptions/implementations/bootstrap/duplicate-protocol.exception.js.map +1 -1
- package/dist/exceptions/implementations/bootstrap/no-http.exception.js.map +1 -1
- package/dist/exceptions/implementations/bootstrap/no-init.exception.js.map +1 -1
- package/dist/exceptions/implementations/bootstrap/no-matching-transport.exception.js.map +1 -1
- package/dist/exceptions/implementations/bootstrap/sequence.exception.js.map +1 -1
- package/dist/exceptions/implementations/bootstrap/symbol-key-decoration.exception.js.map +1 -1
- package/dist/exceptions/implementations/bootstrap/unknown-bootstrap.exception.js.map +1 -1
- package/dist/exceptions/implementations/pipeline/authentication.exception.js.map +1 -1
- package/dist/exceptions/implementations/pipeline/conflict.exception.js.map +1 -1
- package/dist/exceptions/implementations/pipeline/duplicate-entity.exception.js.map +1 -1
- package/dist/exceptions/implementations/pipeline/input.exception.js.map +1 -1
- package/dist/exceptions/implementations/pipeline/internal.exception.js.map +1 -1
- package/dist/exceptions/implementations/pipeline/not-allowed.exception.js.map +1 -1
- package/dist/exceptions/implementations/pipeline/not-found.exception.js.map +1 -1
- package/dist/exceptions/implementations/pipeline/timeout.exception.js.map +1 -1
- package/dist/exceptions.handling/global-exceptions.config.js.map +1 -1
- package/dist/exceptions.handling/global-exceptions.filter.js.map +1 -1
- package/dist/exceptions.handling/global-exceptions.module.js.map +1 -1
- package/dist/health/autodoc/heath.autodoc-resolver.d.ts +5 -15
- package/dist/health/autodoc/heath.autodoc-resolver.js +11 -13
- package/dist/health/autodoc/heath.autodoc-resolver.js.map +1 -1
- package/dist/health/exceptions/health-check.exception.js.map +1 -1
- package/dist/health/health.const.d.ts +1 -0
- package/dist/health/health.const.js +2 -1
- package/dist/health/health.const.js.map +1 -1
- package/dist/health/health.module.js.map +1 -1
- package/dist/health/health.service.d.ts +6 -2
- package/dist/health/health.service.js +19 -6
- package/dist/health/health.service.js.map +1 -1
- package/dist/health/metadata/constants.d.ts +1 -0
- package/dist/health/metadata/constants.js +5 -0
- package/dist/health/metadata/constants.js.map +1 -0
- package/dist/health/metadata/indicator.decorator.js +2 -12
- package/dist/health/metadata/indicator.decorator.js.map +1 -1
- package/dist/health/metadata/indicators.registry.d.ts +0 -7
- package/dist/health/metadata/indicators.registry.js +6 -14
- package/dist/health/metadata/indicators.registry.js.map +1 -1
- package/dist/health/metadata/types.d.ts +7 -0
- package/dist/health/metadata/types.js +3 -0
- package/dist/health/metadata/types.js.map +1 -0
- package/dist/index.d.ts +8 -1
- package/dist/index.js +13 -7
- package/dist/index.js.map +1 -1
- package/dist/logging/decorators/inject-logger.decorator.js +5 -3
- package/dist/logging/decorators/inject-logger.decorator.js.map +1 -1
- package/dist/logging/global-logger-provider.generator.d.ts +7 -0
- package/dist/logging/global-logger-provider.generator.js +22 -0
- package/dist/logging/global-logger-provider.generator.js.map +1 -0
- package/dist/logging/index.d.ts +2 -0
- package/dist/logging/index.js +3 -0
- package/dist/logging/index.js.map +1 -1
- package/dist/logging/logging.config.js +1 -1
- package/dist/logging/logging.config.js.map +1 -1
- package/dist/logging/logging.module.d.ts +5 -3
- package/dist/logging/logging.module.js +25 -13
- package/dist/logging/logging.module.js.map +1 -1
- package/dist/logging/metadata/constants.d.ts +1 -0
- package/dist/logging/metadata/constants.js +5 -0
- package/dist/logging/metadata/constants.js.map +1 -0
- package/dist/logging/types.d.ts +6 -2
- package/dist/metrics/index.d.ts +1 -1
- package/dist/metrics/index.js +3 -3
- package/dist/metrics/index.js.map +1 -1
- package/dist/metrics/metadata/autodoc/metrics.autodoc-resolver.d.ts +6 -7
- package/dist/metrics/metadata/autodoc/metrics.autodoc-resolver.js +8 -11
- package/dist/metrics/metadata/autodoc/metrics.autodoc-resolver.js.map +1 -1
- package/dist/metrics/metadata/constants.d.ts +1 -0
- package/dist/metrics/metadata/constants.js +5 -0
- package/dist/metrics/metadata/constants.js.map +1 -0
- package/dist/metrics/metadata/index.d.ts +0 -1
- package/dist/metrics/metadata/index.js +0 -3
- package/dist/metrics/metadata/index.js.map +1 -1
- package/dist/metrics/metadata/metrics.registry.d.ts +0 -3
- package/dist/metrics/metadata/metrics.registry.js +9 -16
- package/dist/metrics/metadata/metrics.registry.js.map +1 -1
- package/dist/metrics/metadata/types.d.ts +2 -4
- package/dist/metrics/metric.storage.d.ts +8 -0
- package/dist/metrics/metric.storage.js +11 -0
- package/dist/metrics/metric.storage.js.map +1 -0
- package/dist/metrics/metrics.config.js.map +1 -1
- package/dist/metrics/metrics.module.d.ts +1 -1
- package/dist/metrics/metrics.module.js +27 -21
- package/dist/metrics/metrics.module.js.map +1 -1
- package/dist/platform.context.d.ts +5 -3
- package/dist/platform.context.js +20 -19
- package/dist/platform.context.js.map +1 -1
- package/dist/platform.module.d.ts +5 -4
- package/dist/platform.module.js +24 -13
- package/dist/platform.module.js.map +1 -1
- package/dist/rsdk-metadata/constants.d.ts +3 -0
- package/dist/rsdk-metadata/constants.js +5 -0
- package/dist/rsdk-metadata/constants.js.map +1 -0
- package/dist/rsdk-metadata/rsdk-metadata.global-module.d.ts +6 -0
- package/dist/rsdk-metadata/rsdk-metadata.global-module.js +31 -0
- package/dist/rsdk-metadata/rsdk-metadata.global-module.js.map +1 -0
- package/dist/tracing/services/instrumentation.service.js.map +1 -1
- package/dist/tracing/services/metadata.scanner.js.map +1 -1
- package/dist/tracing/tracing.config.js.map +1 -1
- package/dist/tracing/tracing.module.js.map +1 -1
- package/dist/transport/transport.module.d.ts +1 -0
- package/dist/transport/transport.module.js +8 -2
- package/dist/transport/transport.module.js.map +1 -1
- package/dist/types/context-aggregated.d.ts +8 -0
- package/dist/types/context-aggregated.js +3 -0
- package/dist/types/context-aggregated.js.map +1 -0
- package/dist/types/options.d.ts +6 -6
- package/dist/types/transports.d.ts +10 -3
- package/dist/types/transports.js.map +1 -1
- package/dist/unhandled-rejection.handler.d.ts +1 -0
- package/dist/unhandled-rejection.handler.js +24 -0
- package/dist/unhandled-rejection.handler.js.map +1 -0
- package/package.json +8 -7
- package/src/app/platform.app.ts +6 -32
- package/src/config/additional-source/additional-source.initializer.ts +34 -25
- package/src/config/additional-source/additional-source.module.ts +5 -2
- package/src/config/config-reload.indicator.ts +3 -3
- package/src/config/config.abstract.ts +2 -3
- package/src/config/config.module.ts +23 -225
- package/src/config/context/config.context.ts +209 -0
- package/src/config/context/module.ts +25 -0
- package/src/config/exceptions/property.exception.ts +11 -6
- package/src/config/index.ts +1 -0
- package/src/config/metadata/config-metadata.provider.ts +79 -0
- package/src/config/metadata/config-metadata.registry.ts +36 -41
- package/src/config/metadata/constants.ts +6 -0
- package/src/config/metadata/decorators/declare-property.decorator.ts +2 -2
- package/src/config/metadata/decorators/inject-property.decorator.ts +1 -1
- package/src/config/metadata/types.ts +22 -0
- package/src/config/reload/config-reload.events.ts +1 -13
- package/src/config/sources/base/reloadable-config-source.abstract.ts +2 -3
- package/src/config/sources/implementations/relodable-json-file.source.ts +6 -2
- package/src/config/vars.class.ts +9 -7
- package/src/context.aggregator.ts +62 -0
- package/src/exceptions/base/platform-exception.absract.ts +8 -3
- package/src/health/autodoc/heath.autodoc-resolver.ts +15 -18
- package/src/health/health.const.ts +2 -0
- package/src/health/health.service.ts +23 -4
- package/src/health/metadata/constants.ts +1 -0
- package/src/health/metadata/indicator.decorator.ts +2 -18
- package/src/health/metadata/indicators.registry.ts +16 -23
- package/src/health/metadata/types.ts +9 -0
- package/src/index.ts +29 -12
- package/src/logging/decorators/inject-logger.decorator.ts +5 -4
- package/src/logging/global-logger-provider.generator.ts +28 -0
- package/src/logging/index.ts +2 -0
- package/src/logging/logging.config.ts +2 -1
- package/src/logging/logging.module.ts +42 -16
- package/src/logging/metadata/constants.ts +1 -0
- package/src/logging/types.ts +6 -2
- package/src/metrics/index.ts +1 -1
- package/src/metrics/metadata/autodoc/metrics.autodoc-resolver.ts +13 -9
- package/src/metrics/metadata/constants.ts +1 -0
- package/src/metrics/metadata/index.ts +0 -1
- package/src/metrics/metadata/metrics.registry.ts +19 -23
- package/src/metrics/metadata/types.ts +2 -5
- package/src/metrics/metric.storage.ts +10 -0
- package/src/metrics/metrics.module.ts +32 -31
- package/src/platform.context.ts +32 -20
- package/src/platform.module.ts +18 -20
- package/src/rsdk-metadata/constants.ts +5 -0
- package/src/rsdk-metadata/rsdk-metadata.global-module.ts +34 -0
- package/src/transport/transport.module.ts +13 -1
- package/src/types/context-aggregated.ts +10 -0
- package/src/types/options.ts +6 -5
- package/src/types/transports.ts +15 -3
- package/src/unhandled-rejection.handler.ts +29 -0
- package/dist/health/index.d.ts +0 -7
- package/dist/health/index.js +0 -26
- package/dist/health/index.js.map +0 -1
- package/dist/health/metadata/index.d.ts +0 -2
- package/dist/health/metadata/index.js +0 -19
- package/dist/health/metadata/index.js.map +0 -1
- package/src/health/index.ts +0 -7
- package/src/health/metadata/index.ts +0 -2
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { RsdkMetadataProvider } from '@rsdk/metadata';
|
|
2
|
+
|
|
3
|
+
import { ConfigContextModule } from './config/context/module';
|
|
4
|
+
import { RsdkMetadataGlobalModule } from './rsdk-metadata/rsdk-metadata.global-module';
|
|
5
|
+
import type { ContextAggregated } from './types/context-aggregated';
|
|
6
|
+
import { ConfigContext } from './config';
|
|
7
|
+
import type { PlatformContext } from './platform.context';
|
|
8
|
+
import { PlatformModule } from './platform.module';
|
|
9
|
+
|
|
10
|
+
export class ContextAggregator {
|
|
11
|
+
private _aggregated: ContextAggregated;
|
|
12
|
+
|
|
13
|
+
constructor(private platformContext: PlatformContext) {}
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Прежде всего этот метод предназачен для единой точки конфигурации трех главных компонентов от которых зависит работа приложения
|
|
17
|
+
* RsdkMetadataProvider - хранит и предоставляет информацию о метаданных дерева модулей для приложения
|
|
18
|
+
* ConfigContext - его существование конкретно здесь обусловлено единственной проблемой, хранит информацию о том как приложение должно/может быть сконфигурировано
|
|
19
|
+
* root - Собственно рут модуль для создания DI
|
|
20
|
+
*
|
|
21
|
+
* И RsdkMetadataProvider, и ConfigContext должны быть внутри DI, они там собственно и будут. Но так как Nestjs считает иначе, а именно не даёт создать контекст приложения отдельно от транспорта... Кушаем кактус...
|
|
22
|
+
*/
|
|
23
|
+
async getAggregated(): Promise<ContextAggregated> {
|
|
24
|
+
if (this._aggregated) {
|
|
25
|
+
return this._aggregated;
|
|
26
|
+
}
|
|
27
|
+
const platformRoot = PlatformModule.forRoot(
|
|
28
|
+
this.platformContext.extendedOptions,
|
|
29
|
+
);
|
|
30
|
+
const rsdkMetadataGlobalModule = await RsdkMetadataGlobalModule.raw(
|
|
31
|
+
platformRoot,
|
|
32
|
+
);
|
|
33
|
+
const rsdkMetadataProvider = await RsdkMetadataProvider.create(
|
|
34
|
+
rsdkMetadataGlobalModule,
|
|
35
|
+
platformRoot,
|
|
36
|
+
);
|
|
37
|
+
|
|
38
|
+
const configContext = new ConfigContext(rsdkMetadataProvider, {
|
|
39
|
+
...this.platformContext.options.config,
|
|
40
|
+
appName: this.platformContext.extendedOptions.name,
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
const root = {
|
|
44
|
+
imports: [
|
|
45
|
+
platformRoot,
|
|
46
|
+
rsdkMetadataGlobalModule,
|
|
47
|
+
ConfigContextModule.forRoot(configContext),
|
|
48
|
+
],
|
|
49
|
+
module: ContextAggregator,
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
this._aggregated = { root, rsdkMetadataProvider, configContext };
|
|
53
|
+
return this._aggregated;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Просто алиас чтобы везде не писать такую конструкцию
|
|
58
|
+
*/
|
|
59
|
+
async getConfigContext(): Promise<ConfigContext> {
|
|
60
|
+
return (await this.getAggregated()).configContext;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
@@ -8,7 +8,7 @@ export interface ExceptionsProps<T = any> {
|
|
|
8
8
|
/**
|
|
9
9
|
* Wrapped original error
|
|
10
10
|
*/
|
|
11
|
-
cause?:
|
|
11
|
+
cause?: unknown | undefined;
|
|
12
12
|
|
|
13
13
|
/**
|
|
14
14
|
* Additional structured details
|
|
@@ -37,7 +37,7 @@ export abstract class PlatformException<T = any> extends Error {
|
|
|
37
37
|
* PlatformException has ability to wrap original errors. Such an option exists
|
|
38
38
|
* in many other languages and frameworks: .NET, Java, Go etc.
|
|
39
39
|
*/
|
|
40
|
-
readonly cause:
|
|
40
|
+
readonly cause: unknown | undefined;
|
|
41
41
|
|
|
42
42
|
/**
|
|
43
43
|
* Any custom attributes developer is willing to
|
|
@@ -63,7 +63,12 @@ export abstract class PlatformException<T = any> extends Error {
|
|
|
63
63
|
}
|
|
64
64
|
|
|
65
65
|
static innerMessages(ex: Error): string[] {
|
|
66
|
-
if (
|
|
66
|
+
if (
|
|
67
|
+
!ex ||
|
|
68
|
+
!(ex instanceof PlatformException) ||
|
|
69
|
+
!ex.cause ||
|
|
70
|
+
!(ex.cause instanceof Error)
|
|
71
|
+
) {
|
|
67
72
|
return [];
|
|
68
73
|
}
|
|
69
74
|
|
|
@@ -1,33 +1,30 @@
|
|
|
1
|
-
import type { DocumentNode, DocumentResolver } from '@rsdk/autodoc
|
|
2
|
-
import { Composite, Table } from '@rsdk/autodoc
|
|
3
|
-
import type {
|
|
1
|
+
import type { DocumentNode, DocumentResolver } from '@rsdk/autodoc.protocol';
|
|
2
|
+
import { Composite, Table } from '@rsdk/autodoc.protocol';
|
|
3
|
+
import type { RsdkMetadataProvider } from '@rsdk/metadata';
|
|
4
4
|
|
|
5
|
-
import
|
|
5
|
+
import { HEALTH_INDICATOR_RSDK_METADATA_SCOPE } from '../metadata/constants';
|
|
6
|
+
import type { HealthIndicatorRsdkMetadata } from '../metadata/types';
|
|
6
7
|
|
|
7
|
-
export class
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
constructorName: string;
|
|
13
|
-
}>,
|
|
14
|
-
) {}
|
|
15
|
-
|
|
16
|
-
getNode(): DocumentNode | null {
|
|
17
|
-
const resources = this.rsdkMetadata.get();
|
|
8
|
+
export class IndicatorAutodocResolver implements DocumentResolver {
|
|
9
|
+
getNode(rsdkMetadataProvider: RsdkMetadataProvider): DocumentNode | null {
|
|
10
|
+
const resources = rsdkMetadataProvider.get<HealthIndicatorRsdkMetadata>(
|
|
11
|
+
HEALTH_INDICATOR_RSDK_METADATA_SCOPE,
|
|
12
|
+
);
|
|
18
13
|
if (!resources) {
|
|
19
14
|
return null;
|
|
20
15
|
}
|
|
21
16
|
return new Composite(
|
|
22
17
|
new Table(
|
|
23
18
|
resources.map(({ value }) => ({
|
|
24
|
-
key: value.key,
|
|
25
|
-
scope: value.options.scope
|
|
19
|
+
key: value.options.key,
|
|
20
|
+
scope: value.options.scope,
|
|
26
21
|
description: value.options.description ?? '-',
|
|
27
|
-
name: value.
|
|
22
|
+
name: value.target.name,
|
|
28
23
|
})),
|
|
29
24
|
),
|
|
30
25
|
'Health indicators',
|
|
31
26
|
);
|
|
32
27
|
}
|
|
33
28
|
}
|
|
29
|
+
|
|
30
|
+
export const indicatorAutodocResolver = new IndicatorAutodocResolver();
|
|
@@ -4,14 +4,18 @@ import { ModuleRef } from '@nestjs/core';
|
|
|
4
4
|
import type { Constructor } from '@rsdk/common';
|
|
5
5
|
import { LogTime } from '@rsdk/decorators';
|
|
6
6
|
import { ILogger } from '@rsdk/logging';
|
|
7
|
+
import { RsdkMetadataProvider } from '@rsdk/metadata';
|
|
7
8
|
|
|
8
9
|
import { InjectLogger } from '../logging';
|
|
9
10
|
|
|
11
|
+
import { HEALTH_INDICATOR_RSDK_METADATA_SCOPE } from './metadata/constants';
|
|
12
|
+
import type { HealthIndicatorRsdkMetadata } from './metadata/types';
|
|
10
13
|
import { HealthCheckException } from './exceptions';
|
|
11
|
-
import {
|
|
14
|
+
import { DEFAULT_HEALTH_CHECK_SCOPE } from './health.const';
|
|
12
15
|
import type {
|
|
13
16
|
CheckSummary,
|
|
14
17
|
HealthIndicator,
|
|
18
|
+
IndicatorMetadata,
|
|
15
19
|
ResolvedIndicators,
|
|
16
20
|
} from './types';
|
|
17
21
|
|
|
@@ -23,6 +27,7 @@ export class HealthChecksService implements OnModuleInit {
|
|
|
23
27
|
constructor(
|
|
24
28
|
@InjectLogger(HealthChecksService) private readonly logger: ILogger,
|
|
25
29
|
private readonly moduleRef: ModuleRef,
|
|
30
|
+
private readonly rsdkMetadataProvider: RsdkMetadataProvider,
|
|
26
31
|
) {}
|
|
27
32
|
|
|
28
33
|
@LogTime()
|
|
@@ -64,10 +69,21 @@ export class HealthChecksService implements OnModuleInit {
|
|
|
64
69
|
return summary;
|
|
65
70
|
}
|
|
66
71
|
|
|
72
|
+
iterateByIndicators(): [Constructor<HealthIndicator>, IndicatorMetadata][] {
|
|
73
|
+
const resources =
|
|
74
|
+
this.rsdkMetadataProvider.get<HealthIndicatorRsdkMetadata>(
|
|
75
|
+
HEALTH_INDICATOR_RSDK_METADATA_SCOPE,
|
|
76
|
+
);
|
|
77
|
+
|
|
78
|
+
return resources.map((value) => [value.value.target, value.value.options]);
|
|
79
|
+
}
|
|
80
|
+
|
|
67
81
|
async onModuleInit(): Promise<void> {
|
|
68
82
|
this.logger.debug('Initializing indicators...');
|
|
69
83
|
|
|
70
|
-
|
|
84
|
+
const indicators = this.iterateByIndicators();
|
|
85
|
+
|
|
86
|
+
for (const [ctor, { key, scope }] of indicators) {
|
|
71
87
|
if (!this.indicators[scope]) {
|
|
72
88
|
this.indicators[scope] = [];
|
|
73
89
|
}
|
|
@@ -94,7 +110,7 @@ export class HealthChecksService implements OnModuleInit {
|
|
|
94
110
|
* This means - "perform all checks you have"
|
|
95
111
|
*/
|
|
96
112
|
case '*':
|
|
97
|
-
return [...this.indicators
|
|
113
|
+
return [...this.indicators[DEFAULT_HEALTH_CHECK_SCOPE]];
|
|
98
114
|
|
|
99
115
|
/**
|
|
100
116
|
* Matching exact filter. If no specific checks
|
|
@@ -107,7 +123,10 @@ export class HealthChecksService implements OnModuleInit {
|
|
|
107
123
|
this.logger.warn(`Unsupported healthcheck filter: ${filter}`);
|
|
108
124
|
}
|
|
109
125
|
|
|
110
|
-
return [
|
|
126
|
+
return [
|
|
127
|
+
...this.indicators[DEFAULT_HEALTH_CHECK_SCOPE],
|
|
128
|
+
...(specific || []),
|
|
129
|
+
];
|
|
111
130
|
}
|
|
112
131
|
}
|
|
113
132
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const HEALTH_INDICATOR_RSDK_METADATA_SCOPE = 'health-indicator';
|
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/ban-types */
|
|
2
2
|
|
|
3
|
-
import { AutodocMetadata } from '@rsdk/autodoc-protocol';
|
|
4
3
|
import type { Constructor } from '@rsdk/common';
|
|
5
|
-
import { RsdkMetadata } from '@rsdk/metadata';
|
|
6
4
|
|
|
7
|
-
import {
|
|
5
|
+
import { DEFAULT_HEALTH_CHECK_SCOPE } from '../health.const';
|
|
8
6
|
import type { HealthIndicator } from '../types';
|
|
9
7
|
|
|
10
8
|
import { IndicatorsRegistry } from './indicators.registry';
|
|
@@ -38,22 +36,8 @@ export const Indicator = (
|
|
|
38
36
|
return function (target: Function): void {
|
|
39
37
|
IndicatorsRegistry.register(target as Constructor<HealthIndicator>, {
|
|
40
38
|
key,
|
|
41
|
-
scope:
|
|
39
|
+
scope: options.scope ?? DEFAULT_HEALTH_CHECK_SCOPE,
|
|
42
40
|
...options,
|
|
43
41
|
});
|
|
44
|
-
const rsdkMetadata = new RsdkMetadata<{
|
|
45
|
-
key: string;
|
|
46
|
-
options: IndicatorOptions;
|
|
47
|
-
constructorName: string;
|
|
48
|
-
}>(target, 'health-indicator');
|
|
49
|
-
|
|
50
|
-
rsdkMetadata.add({
|
|
51
|
-
key,
|
|
52
|
-
options,
|
|
53
|
-
constructorName: target.name,
|
|
54
|
-
});
|
|
55
|
-
const autodocMetadata = new AutodocMetadata(rsdkMetadata);
|
|
56
|
-
|
|
57
|
-
autodocMetadata.defineResolver(new IndicatorAutodoc(rsdkMetadata));
|
|
58
42
|
};
|
|
59
43
|
};
|
|
@@ -1,34 +1,27 @@
|
|
|
1
|
+
import { AutodocMetadata } from '@rsdk/autodoc.protocol';
|
|
1
2
|
import type { Constructor } from '@rsdk/common';
|
|
2
|
-
import {
|
|
3
|
+
import { RsdkMetadata } from '@rsdk/metadata';
|
|
3
4
|
|
|
4
|
-
import {
|
|
5
|
+
import { indicatorAutodocResolver } from '../autodoc/heath.autodoc-resolver';
|
|
5
6
|
import type { HealthIndicator, IndicatorMetadata } from '../types';
|
|
6
7
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
private static indicators = new Map<
|
|
10
|
-
Constructor<HealthIndicator>,
|
|
11
|
-
IndicatorMetadata
|
|
12
|
-
>();
|
|
13
|
-
|
|
14
|
-
static isRegistered(ctor: Constructor<HealthIndicator>): boolean {
|
|
15
|
-
return this.indicators.has(ctor);
|
|
16
|
-
}
|
|
8
|
+
import { HEALTH_INDICATOR_RSDK_METADATA_SCOPE } from './constants';
|
|
9
|
+
import type { HealthIndicatorRsdkMetadata } from './types';
|
|
17
10
|
|
|
11
|
+
export class IndicatorsRegistry {
|
|
18
12
|
static register(
|
|
19
13
|
target: Constructor<HealthIndicator>,
|
|
20
14
|
options: IndicatorMetadata,
|
|
21
15
|
): void {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
return this.indicators.entries();
|
|
16
|
+
RsdkMetadata.add<HealthIndicatorRsdkMetadata>(
|
|
17
|
+
target,
|
|
18
|
+
{ target, options, constructorName: target.name },
|
|
19
|
+
HEALTH_INDICATOR_RSDK_METADATA_SCOPE,
|
|
20
|
+
);
|
|
21
|
+
AutodocMetadata.defineResolver(
|
|
22
|
+
target,
|
|
23
|
+
HEALTH_INDICATOR_RSDK_METADATA_SCOPE,
|
|
24
|
+
indicatorAutodocResolver,
|
|
25
|
+
);
|
|
33
26
|
}
|
|
34
27
|
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Constructor } from '@rsdk/common';
|
|
2
|
+
|
|
3
|
+
import type { HealthIndicator, IndicatorMetadata } from '../types';
|
|
4
|
+
|
|
5
|
+
export type HealthIndicatorRsdkMetadata = {
|
|
6
|
+
target: Constructor<HealthIndicator>;
|
|
7
|
+
options: IndicatorMetadata;
|
|
8
|
+
constructorName: string;
|
|
9
|
+
};
|
package/src/index.ts
CHANGED
|
@@ -1,23 +1,36 @@
|
|
|
1
|
+
import './unhandled-rejection.handler';
|
|
2
|
+
|
|
3
|
+
export {
|
|
4
|
+
FileSystemCheckOptions,
|
|
5
|
+
FileSystemIndicator,
|
|
6
|
+
PingCheckOptions,
|
|
7
|
+
PingIndicator,
|
|
8
|
+
} from './health/indicators.abstract';
|
|
9
|
+
|
|
10
|
+
export { HealthChecksService } from './health/health.service';
|
|
11
|
+
|
|
12
|
+
export { CheckSummary } from './health/types';
|
|
13
|
+
|
|
14
|
+
export { getLoggerToken } from './logging/helpers';
|
|
15
|
+
|
|
16
|
+
export { Indicator } from './health/metadata/indicator.decorator';
|
|
17
|
+
|
|
18
|
+
export { HealthIndicator } from './health/types';
|
|
19
|
+
|
|
20
|
+
export { CheckResult } from './health/helpers';
|
|
21
|
+
|
|
1
22
|
export { ConfigTag } from './config/config.const';
|
|
2
23
|
|
|
3
24
|
export { PlatformContext } from './platform.context';
|
|
4
25
|
|
|
5
26
|
export * from './config';
|
|
27
|
+
|
|
6
28
|
export * from './exceptions';
|
|
29
|
+
|
|
7
30
|
export * from './exceptions.handling';
|
|
8
|
-
|
|
9
|
-
// TODO: Продолжить документирование отсюда
|
|
10
|
-
HealthIndicator,
|
|
11
|
-
FileSystemIndicator,
|
|
12
|
-
FileSystemCheckOptions,
|
|
13
|
-
PingIndicator,
|
|
14
|
-
PingCheckOptions,
|
|
15
|
-
HealthChecksService,
|
|
16
|
-
CheckSummary,
|
|
17
|
-
Indicator,
|
|
18
|
-
CheckResult,
|
|
19
|
-
} from './health';
|
|
31
|
+
|
|
20
32
|
export { InjectLogger } from './logging';
|
|
33
|
+
|
|
21
34
|
export {
|
|
22
35
|
AnyMetric,
|
|
23
36
|
Counter,
|
|
@@ -28,7 +41,11 @@ export {
|
|
|
28
41
|
MetricsModule,
|
|
29
42
|
register,
|
|
30
43
|
} from './metrics';
|
|
44
|
+
|
|
31
45
|
export { PlatformApp } from './app/platform.app';
|
|
46
|
+
|
|
32
47
|
export * from './types';
|
|
48
|
+
|
|
33
49
|
export * from './app-metadata/decorators';
|
|
50
|
+
|
|
34
51
|
export * from './app-metadata/app-metadata.const';
|
|
@@ -7,9 +7,10 @@ import { LoggingModule } from '../logging.module';
|
|
|
7
7
|
export const InjectLogger = (
|
|
8
8
|
context: string | Constructor,
|
|
9
9
|
): ParameterDecorator => {
|
|
10
|
-
|
|
10
|
+
return (target, propertyKey, parameterIndex) => {
|
|
11
|
+
const token = getLoggerToken(context);
|
|
11
12
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
13
|
+
Inject(token)(target, propertyKey, parameterIndex);
|
|
14
|
+
LoggingModule.register(target, context, token);
|
|
15
|
+
};
|
|
15
16
|
};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { NestModuleDefinition } from '@rsdk/common';
|
|
2
|
+
import { LoggerFactory } from '@rsdk/logging';
|
|
3
|
+
import type { RsdkMetadataProvider } from '@rsdk/metadata';
|
|
4
|
+
|
|
5
|
+
import { LOGGING_RSDK_METADATA_SCOPE } from './metadata/constants';
|
|
6
|
+
import type { LoggingRsdkMetadata } from './types';
|
|
7
|
+
|
|
8
|
+
class GlobalLoggerProvidersGenerator {
|
|
9
|
+
generate(rsdkMetadataProvider: RsdkMetadataProvider): NestModuleDefinition {
|
|
10
|
+
const resources = rsdkMetadataProvider.get<LoggingRsdkMetadata>(
|
|
11
|
+
LOGGING_RSDK_METADATA_SCOPE,
|
|
12
|
+
);
|
|
13
|
+
|
|
14
|
+
const providers = resources.map(({ value }) => ({
|
|
15
|
+
provide: value.token,
|
|
16
|
+
useValue: LoggerFactory.create(value.context),
|
|
17
|
+
}));
|
|
18
|
+
|
|
19
|
+
return {
|
|
20
|
+
global: true,
|
|
21
|
+
providers: providers,
|
|
22
|
+
module: GlobalLoggerProvidersGenerator,
|
|
23
|
+
exports: providers,
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export const globalLoggerProvidersModule = new GlobalLoggerProvidersGenerator();
|
package/src/logging/index.ts
CHANGED
|
@@ -23,7 +23,8 @@ export class LoggingConfig extends Config {
|
|
|
23
23
|
|
|
24
24
|
@Property('LOG_REDACT', new ArrayParser(new StringParser()), {
|
|
25
25
|
defaultValue: [],
|
|
26
|
-
description:
|
|
26
|
+
description:
|
|
27
|
+
'Redaction sensitive data details: https://github.com/pinojs/pino/blob/master/docs/redaction.md',
|
|
27
28
|
})
|
|
28
29
|
readonly redact!: string[];
|
|
29
30
|
}
|
|
@@ -1,17 +1,21 @@
|
|
|
1
1
|
/* eslint-disable sort-keys */
|
|
2
2
|
|
|
3
|
-
import type { DynamicModule
|
|
3
|
+
import type { DynamicModule } from '@nestjs/common';
|
|
4
4
|
import { Module } from '@nestjs/common';
|
|
5
5
|
import type { Constructor } from '@rsdk/common';
|
|
6
6
|
import { LoggerFactory } from '@rsdk/logging';
|
|
7
|
+
import { RsdkMetadata } from '@rsdk/metadata';
|
|
7
8
|
|
|
8
9
|
import { PlatformConfigModule } from '../config';
|
|
10
|
+
import type { PlatformRawGlobalMetadata } from '../rsdk-metadata/constants';
|
|
11
|
+
import { PLATFORM_RAW_GLOBAL_METADATA_SCOPE } from '../rsdk-metadata/constants';
|
|
9
12
|
|
|
13
|
+
import { LOGGING_RSDK_METADATA_SCOPE } from './metadata/constants';
|
|
10
14
|
import { LoggingConfig } from './logging.config';
|
|
15
|
+
import type { LoggingRsdkMetadata } from './types';
|
|
11
16
|
|
|
12
17
|
@Module({})
|
|
13
18
|
export class LoggingModule {
|
|
14
|
-
private static providers = new Map<string, Provider>();
|
|
15
19
|
private static logger = LoggerFactory.create('LoggingModule');
|
|
16
20
|
|
|
17
21
|
constructor(config: LoggingConfig) {
|
|
@@ -27,22 +31,44 @@ export class LoggingModule {
|
|
|
27
31
|
cfg();
|
|
28
32
|
}
|
|
29
33
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
});
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
static forRoot(): DynamicModule {
|
|
38
|
-
const providers = [...this.providers.values()];
|
|
39
|
-
|
|
34
|
+
/**
|
|
35
|
+
* Возвращает модуль которые нужны для логгирования в любом случае, например его конфиг
|
|
36
|
+
*/
|
|
37
|
+
static pureRoot(): DynamicModule {
|
|
40
38
|
return {
|
|
41
|
-
module: LoggingModule,
|
|
42
|
-
imports: [PlatformConfigModule.forFeature(LoggingConfig)],
|
|
43
|
-
exports: providers,
|
|
44
|
-
providers: providers,
|
|
45
39
|
global: true,
|
|
40
|
+
imports: [PlatformConfigModule.forFeature(LoggingConfig)],
|
|
41
|
+
module: LoggingModule,
|
|
42
|
+
exports: [PlatformConfigModule],
|
|
46
43
|
};
|
|
47
44
|
}
|
|
45
|
+
|
|
46
|
+
static register(
|
|
47
|
+
target: object,
|
|
48
|
+
context: string | Constructor,
|
|
49
|
+
token: string,
|
|
50
|
+
): void {
|
|
51
|
+
RsdkMetadata.add<PlatformRawGlobalMetadata>(
|
|
52
|
+
target,
|
|
53
|
+
{
|
|
54
|
+
global: true,
|
|
55
|
+
imports: [PlatformConfigModule.forFeature(LoggingConfig)],
|
|
56
|
+
module: LoggingModule,
|
|
57
|
+
providers: [
|
|
58
|
+
{
|
|
59
|
+
provide: token,
|
|
60
|
+
useValue: LoggerFactory.create(context),
|
|
61
|
+
},
|
|
62
|
+
],
|
|
63
|
+
exports: [token],
|
|
64
|
+
},
|
|
65
|
+
PLATFORM_RAW_GLOBAL_METADATA_SCOPE,
|
|
66
|
+
);
|
|
67
|
+
|
|
68
|
+
RsdkMetadata.add<LoggingRsdkMetadata>(
|
|
69
|
+
target,
|
|
70
|
+
{ context, token, target },
|
|
71
|
+
LOGGING_RSDK_METADATA_SCOPE,
|
|
72
|
+
);
|
|
73
|
+
}
|
|
48
74
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const LOGGING_RSDK_METADATA_SCOPE = 'LOGGING_RSDK_METADATA_SCOPE';
|
package/src/logging/types.ts
CHANGED
|
@@ -1,3 +1,7 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { Constructor } from '@rsdk/common';
|
|
2
2
|
|
|
3
|
-
export type
|
|
3
|
+
export type LoggingRsdkMetadata = {
|
|
4
|
+
target: object;
|
|
5
|
+
context: string | Constructor;
|
|
6
|
+
token: string;
|
|
7
|
+
};
|
package/src/metrics/index.ts
CHANGED
|
@@ -2,5 +2,5 @@ export { Counter, Gauge, Histogram, Summary, register } from 'prom-client';
|
|
|
2
2
|
export * from './metrics.module';
|
|
3
3
|
export * from './types';
|
|
4
4
|
export * from './metadata';
|
|
5
|
-
export { MetricAutodocResolver } from './metadata';
|
|
6
5
|
export { MetricRsdkMetadata } from './metadata';
|
|
6
|
+
export { MetricStorage } from './metric.storage';
|
|
@@ -1,14 +1,16 @@
|
|
|
1
|
-
import type { DocumentNode, DocumentResolver } from '@rsdk/autodoc
|
|
2
|
-
import { Composite, Table } from '@rsdk/autodoc
|
|
3
|
-
import type {
|
|
1
|
+
import type { DocumentNode, DocumentResolver } from '@rsdk/autodoc.protocol';
|
|
2
|
+
import { Composite, Table } from '@rsdk/autodoc.protocol';
|
|
3
|
+
import type { RsdkMetadataProvider } from '@rsdk/metadata';
|
|
4
4
|
|
|
5
|
+
import { METRIC_RSDK_METADATA_SCOPE } from '../constants';
|
|
5
6
|
import type { MetricRsdkMetadata } from '../types';
|
|
6
7
|
|
|
7
|
-
|
|
8
|
-
|
|
8
|
+
class MetricAutodocResolver implements DocumentResolver {
|
|
9
|
+
getNode(rsdkMetadataProvider: RsdkMetadataProvider): DocumentNode | null {
|
|
10
|
+
const resources = rsdkMetadataProvider.get<MetricRsdkMetadata>(
|
|
11
|
+
METRIC_RSDK_METADATA_SCOPE,
|
|
12
|
+
);
|
|
9
13
|
|
|
10
|
-
getNode(): DocumentNode | null {
|
|
11
|
-
const resources = this.rsdkMetadata.get();
|
|
12
14
|
if (!resources) {
|
|
13
15
|
return null;
|
|
14
16
|
}
|
|
@@ -18,8 +20,8 @@ export class MetricAutodocResolver implements DocumentResolver {
|
|
|
18
20
|
resources.map(({ value }) => {
|
|
19
21
|
return {
|
|
20
22
|
name: value.metadata.name,
|
|
21
|
-
description: value.metadata.description,
|
|
22
|
-
type: value.type,
|
|
23
|
+
description: value.metadata.description ?? '-',
|
|
24
|
+
type: value.metadata.type,
|
|
23
25
|
controllerName: value.metricController.name,
|
|
24
26
|
};
|
|
25
27
|
}),
|
|
@@ -28,3 +30,5 @@ export class MetricAutodocResolver implements DocumentResolver {
|
|
|
28
30
|
);
|
|
29
31
|
}
|
|
30
32
|
}
|
|
33
|
+
|
|
34
|
+
export const metricsDocumentResolver = new MetricAutodocResolver();
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const METRIC_RSDK_METADATA_SCOPE = 'METRIC_RSDK_METADATA_SCOPE';
|
|
@@ -1,35 +1,31 @@
|
|
|
1
|
+
import { AutodocMetadata } from '@rsdk/autodoc.protocol';
|
|
1
2
|
import type { Constructor } from '@rsdk/common';
|
|
3
|
+
import { RsdkMetadata } from '@rsdk/metadata';
|
|
2
4
|
|
|
3
|
-
import { DoubleInitException, NoInitException } from '../../exceptions';
|
|
4
5
|
import type { AnyMetric, MetricMetadata } from '../types';
|
|
5
6
|
|
|
7
|
+
import { metricsDocumentResolver } from './autodoc/metrics.autodoc-resolver';
|
|
8
|
+
import { METRIC_RSDK_METADATA_SCOPE } from './constants';
|
|
9
|
+
import type { MetricRsdkMetadata } from './types';
|
|
10
|
+
|
|
6
11
|
// separate class because we don't want to expose this
|
|
7
12
|
export class MetricsRegistry {
|
|
8
|
-
private static metadata = new Map<Constructor<AnyMetric>, MetricMetadata>();
|
|
9
|
-
|
|
10
13
|
static register(
|
|
11
14
|
target: Constructor<AnyMetric>,
|
|
12
15
|
metric: MetricMetadata,
|
|
13
16
|
): void {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
17
|
+
RsdkMetadata.add<MetricRsdkMetadata>(
|
|
18
|
+
target,
|
|
19
|
+
{
|
|
20
|
+
metricController: target,
|
|
21
|
+
metadata: metric,
|
|
22
|
+
},
|
|
23
|
+
METRIC_RSDK_METADATA_SCOPE,
|
|
24
|
+
);
|
|
25
|
+
AutodocMetadata.defineResolver(
|
|
26
|
+
target,
|
|
27
|
+
METRIC_RSDK_METADATA_SCOPE,
|
|
28
|
+
metricsDocumentResolver,
|
|
29
|
+
);
|
|
19
30
|
}
|
|
20
|
-
|
|
21
|
-
static getOne(ctor: Constructor<AnyMetric>): Readonly<MetricMetadata> {
|
|
22
|
-
const metadata = this.metadata.get(ctor);
|
|
23
|
-
if (!metadata) {
|
|
24
|
-
throw new NoInitException('Metric', ctor.name);
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
return metadata;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
static getAll(): Readonly<Map<Constructor<AnyMetric>, MetricMetadata>> {
|
|
31
|
-
return this.metadata;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
// TODO Metadata for autodoc
|
|
35
31
|
}
|