@revisium/core 0.9.2 → 0.9.3
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/package.json +2 -1
- package/dist/prisma/schema.prisma +1 -1
- package/dist/src/app.module.js +2 -1
- package/dist/src/app.module.js.map +1 -1
- package/dist/src/core/core.module.js +2 -0
- package/dist/src/core/core.module.js.map +1 -1
- package/dist/src/graphql-api/graphql-api.module.js +19 -9
- package/dist/src/graphql-api/graphql-api.module.js.map +1 -1
- package/dist/src/health/health.controller.js +1 -0
- package/dist/src/health/health.controller.js.map +1 -1
- package/dist/src/index.d.ts +2 -0
- package/dist/src/index.js +5 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/metrics/graphql/constants.d.ts +3 -0
- package/dist/src/metrics/graphql/constants.js +7 -0
- package/dist/src/metrics/graphql/constants.js.map +1 -0
- package/dist/src/metrics/graphql/graphql-metrics.plugin.d.ts +7 -0
- package/dist/src/metrics/graphql/graphql-metrics.plugin.js +55 -0
- package/dist/src/metrics/graphql/graphql-metrics.plugin.js.map +1 -0
- package/dist/src/metrics/graphql/graphql-metrics.service.d.ts +16 -0
- package/dist/src/metrics/graphql/graphql-metrics.service.js +49 -0
- package/dist/src/metrics/graphql/graphql-metrics.service.js.map +1 -0
- package/dist/src/metrics/metrics.module.d.ts +2 -0
- package/dist/src/metrics/metrics.module.js +32 -0
- package/dist/src/metrics/metrics.module.js.map +1 -0
- package/dist/src/metrics/rest/constants.d.ts +3 -0
- package/dist/src/metrics/rest/constants.js +7 -0
- package/dist/src/metrics/rest/constants.js.map +1 -0
- package/dist/src/metrics/rest/rest-metrics.interceptor.d.ts +9 -0
- package/dist/src/metrics/rest/rest-metrics.interceptor.js +53 -0
- package/dist/src/metrics/rest/rest-metrics.interceptor.js.map +1 -0
- package/dist/src/metrics/rest/rest-metrics.service.d.ts +15 -0
- package/dist/src/metrics/rest/rest-metrics.service.js +49 -0
- package/dist/src/metrics/rest/rest-metrics.service.js.map +1 -0
- package/dist/src/metrics/utils.d.ts +1 -0
- package/dist/src/metrics/utils.js +8 -0
- package/dist/src/metrics/utils.js.map +1 -0
- package/dist/src/metrics-api/metrics-api.module.d.ts +4 -0
- package/dist/src/metrics-api/metrics-api.module.js +29 -0
- package/dist/src/metrics-api/metrics-api.module.js.map +1 -0
- package/dist/src/metrics-api/metrics-enabled.guard.d.ts +7 -0
- package/dist/src/metrics-api/metrics-enabled.guard.js +28 -0
- package/dist/src/metrics-api/metrics-enabled.guard.js.map +1 -0
- package/dist/src/metrics-api/metrics.controller.d.ts +7 -0
- package/dist/src/metrics-api/metrics.controller.js +49 -0
- package/dist/src/metrics-api/metrics.controller.js.map +1 -0
- package/dist/src/rest-api/auth/auth.controller.js +2 -0
- package/dist/src/rest-api/auth/auth.controller.js.map +1 -1
- package/dist/src/rest-api/branch/branch-by-name.controller.js +2 -0
- package/dist/src/rest-api/branch/branch-by-name.controller.js.map +1 -1
- package/dist/src/rest-api/configuration/configuration.controller.js +2 -0
- package/dist/src/rest-api/configuration/configuration.controller.js.map +1 -1
- package/dist/src/rest-api/endpoint/endpointByIdController.js +2 -0
- package/dist/src/rest-api/endpoint/endpointByIdController.js.map +1 -1
- package/dist/src/rest-api/organization/organization.controller.js +2 -0
- package/dist/src/rest-api/organization/organization.controller.js.map +1 -1
- package/dist/src/rest-api/project/project.controller.js +2 -0
- package/dist/src/rest-api/project/project.controller.js.map +1 -1
- package/dist/src/rest-api/rest-api.module.js +2 -1
- package/dist/src/rest-api/rest-api.module.js.map +1 -1
- package/dist/src/rest-api/revision/revision-by-id.controller.js +2 -0
- package/dist/src/rest-api/revision/revision-by-id.controller.js.map +1 -1
- package/dist/src/rest-api/row/row-by-id.controller.js +2 -0
- package/dist/src/rest-api/row/row-by-id.controller.js.map +1 -1
- package/dist/src/rest-api/table/table-by-id.controller.js +2 -0
- package/dist/src/rest-api/table/table-by-id.controller.js.map +1 -1
- package/dist/src/rest-api/user/user.controller.js +2 -0
- package/dist/src/rest-api/user/user.controller.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +2 -1
package/dist/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@revisium/core",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.3",
|
|
4
4
|
"description": "Revisium is a tool (UI/API) inspired by JSON (JSON Schema) and Git, designed to provide a flexible and low-level headless CMS solution.",
|
|
5
5
|
"private": false,
|
|
6
6
|
"homepage": "https://revisium.io",
|
|
@@ -71,6 +71,7 @@
|
|
|
71
71
|
"object-hash": "^3.0.0",
|
|
72
72
|
"passport": "^0.7.0",
|
|
73
73
|
"passport-jwt": "^4.0.1",
|
|
74
|
+
"prom-client": "^15.1.3",
|
|
74
75
|
"reflect-metadata": "^0.2.1",
|
|
75
76
|
"rxjs": "^7.8.1"
|
|
76
77
|
},
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
|
|
4
4
|
generator client {
|
|
5
5
|
provider = "prisma-client-js"
|
|
6
|
-
previewFeatures = ["fullTextSearch"]
|
|
6
|
+
previewFeatures = ["fullTextSearch", "metrics"]
|
|
7
7
|
binaryTargets = ["linux-arm64-openssl-1.1.x", "linux-arm64-openssl-3.0.x", "debian-openssl-1.1.x", "debian-openssl-3.0.x", "native", "darwin", "darwin-arm64", "windows"]
|
|
8
8
|
engineType = "binary"
|
|
9
9
|
}
|
package/dist/src/app.module.js
CHANGED
|
@@ -10,12 +10,13 @@ exports.AppModule = void 0;
|
|
|
10
10
|
const common_1 = require("@nestjs/common");
|
|
11
11
|
const config_1 = require("@nestjs/config");
|
|
12
12
|
const core_module_1 = require("./core/core.module");
|
|
13
|
+
const metrics_api_module_1 = require("./metrics-api/metrics-api.module");
|
|
13
14
|
let AppModule = class AppModule {
|
|
14
15
|
};
|
|
15
16
|
exports.AppModule = AppModule;
|
|
16
17
|
exports.AppModule = AppModule = __decorate([
|
|
17
18
|
(0, common_1.Module)({
|
|
18
|
-
imports: [config_1.ConfigModule.forRoot(), core_module_1.CoreModule],
|
|
19
|
+
imports: [config_1.ConfigModule.forRoot(), core_module_1.CoreModule, metrics_api_module_1.MetricsApiModule],
|
|
19
20
|
})
|
|
20
21
|
], AppModule);
|
|
21
22
|
//# sourceMappingURL=app.module.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.module.js","sourceRoot":"","sources":["../../src/app.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,2CAA8C;AAC9C,oDAAkD;
|
|
1
|
+
{"version":3,"file":"app.module.js","sourceRoot":"","sources":["../../src/app.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,2CAA8C;AAC9C,oDAAkD;AAClD,yEAAsE;AAK/D,IAAM,SAAS,GAAf,MAAM,SAAS;CAAG,CAAA;AAAZ,8BAAS;oBAAT,SAAS;IAHrB,IAAA,eAAM,EAAC;QACN,OAAO,EAAE,CAAC,qBAAY,CAAC,OAAO,EAAE,EAAE,wBAAU,EAAE,qCAAgB,CAAC;KAChE,CAAC;GACW,SAAS,CAAG"}
|
|
@@ -21,6 +21,7 @@ const email_module_1 = require("../email/email.module");
|
|
|
21
21
|
const endpoint_module_1 = require("../endpoint/endpoint.module");
|
|
22
22
|
const graphql_api_module_1 = require("../graphql-api/graphql-api.module");
|
|
23
23
|
const health_module_1 = require("../health/health.module");
|
|
24
|
+
const metrics_module_1 = require("../metrics/metrics.module");
|
|
24
25
|
const notification_module_1 = require("../notification/notification.module");
|
|
25
26
|
const organization_module_1 = require("../organization/organization.module");
|
|
26
27
|
const project_module_1 = require("../project/project.module");
|
|
@@ -61,6 +62,7 @@ exports.CoreModule = CoreModule = __decorate([
|
|
|
61
62
|
row_module_1.RowModule,
|
|
62
63
|
draft_module_1.DraftModule,
|
|
63
64
|
endpoint_module_1.EndpointModule,
|
|
65
|
+
metrics_module_1.MetricsModule,
|
|
64
66
|
],
|
|
65
67
|
})
|
|
66
68
|
], CoreModule);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core.module.js","sourceRoot":"","sources":["../../../src/core/core.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,2CAA8C;AAC9C,uCAA4C;AAC5C,+CAAkD;AAClD,qDAAkD;AAElD,2DAAwD;AACxD,wDAAqD;AACrD,gFAA6E;AAC7E,iEAA8D;AAC9D,wDAAqD;AACrD,wDAAqD;AACrD,iEAA8D;AAC9D,0EAAsE;AACtE,2DAAwD;AACxD,6EAA0E;AAC1E,6EAA0E;AAC1E,8DAA2D;AAC3D,iEAA6D;AAC7D,iEAA8D;AAC9D,kDAA+C;AAC/C,wDAAqD;AACrD,qDAAkD;
|
|
1
|
+
{"version":3,"file":"core.module.js","sourceRoot":"","sources":["../../../src/core/core.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,2CAA8C;AAC9C,uCAA4C;AAC5C,+CAAkD;AAClD,qDAAkD;AAElD,2DAAwD;AACxD,wDAAqD;AACrD,gFAA6E;AAC7E,iEAA8D;AAC9D,wDAAqD;AACrD,wDAAqD;AACrD,iEAA8D;AAC9D,0EAAsE;AACtE,2DAAwD;AACxD,8DAA2D;AAC3D,6EAA0E;AAC1E,6EAA0E;AAC1E,8DAA2D;AAC3D,iEAA6D;AAC7D,iEAA8D;AAC9D,kDAA+C;AAC/C,wDAAqD;AACrD,qDAAkD;AAiC3C,IAAM,UAAU,GAAhB,MAAM,UAAU;CAAG,CAAA;AAAb,gCAAU;qBAAV,UAAU;IA/BtB,IAAA,eAAM,EAAC;QACN,OAAO,EAAE;YACP,wBAAU;YACV,qBAAY,CAAC,OAAO,EAAE;YACtB,gCAAc;YACd,qCAAgB;YAChB,+BAAa;YACb,mBAAY,CAAC,QAAQ,CAAC;gBACpB;oBACE,IAAI,EAAE,QAAQ;oBACd,MAAM,EAAE,+BAAa;iBACtB;aACF,CAAC;YACF,yBAAc,CAAC,OAAO,EAAE;YACxB,0CAAmB;YACnB,0BAAW;YACX,wCAAkB;YAClB,4BAAY;YACZ,0BAAW;YACX,wBAAU;YACV,wCAAkB;YAClB,8BAAa;YACb,4BAAY;YACZ,gCAAc;YACd,0BAAW;YACX,sBAAS;YACT,0BAAW;YACX,gCAAc;YACd,8BAAa;SACd;KACF,CAAC;GACW,UAAU,CAAG"}
|
|
@@ -29,22 +29,32 @@ const revision_resolver_1 = require("./revision/revision.resolver");
|
|
|
29
29
|
const row_resolver_1 = require("./row/row.resolver");
|
|
30
30
|
const table_resolver_1 = require("./table/table.resolver");
|
|
31
31
|
const user_resolver_1 = require("./user/user.resolver");
|
|
32
|
+
const graphql_metrics_plugin_1 = require("../metrics/graphql/graphql-metrics.plugin");
|
|
33
|
+
const metrics_module_1 = require("../metrics/metrics.module");
|
|
32
34
|
let GraphqlApiModule = class GraphqlApiModule {
|
|
33
35
|
};
|
|
34
36
|
exports.GraphqlApiModule = GraphqlApiModule;
|
|
35
37
|
exports.GraphqlApiModule = GraphqlApiModule = __decorate([
|
|
36
38
|
(0, common_1.Module)({
|
|
37
39
|
imports: [
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
resolvers: { JSON: graphql_type_json_1.default },
|
|
40
|
+
metrics_module_1.MetricsModule,
|
|
41
|
+
graphql_1.GraphQLModule.forRootAsync({
|
|
42
|
+
imports: [metrics_module_1.MetricsModule],
|
|
42
43
|
driver: apollo_1.ApolloDriver,
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
44
|
+
inject: [graphql_metrics_plugin_1.GraphqlMetricsPlugin],
|
|
45
|
+
useFactory: (graphqlMetricsPlugin) => ({
|
|
46
|
+
context: ({ res }) => ({ res }),
|
|
47
|
+
path: '/-/graphql',
|
|
48
|
+
resolvers: { JSON: graphql_type_json_1.default },
|
|
49
|
+
playground: false,
|
|
50
|
+
autoSchemaFile: (0, path_1.join)(process.cwd(), 'src/schema.gql'),
|
|
51
|
+
sortSchema: true,
|
|
52
|
+
introspection: true,
|
|
53
|
+
plugins: [
|
|
54
|
+
(0, default_1.ApolloServerPluginLandingPageLocalDefault)(),
|
|
55
|
+
graphqlMetricsPlugin,
|
|
56
|
+
],
|
|
57
|
+
}),
|
|
48
58
|
}),
|
|
49
59
|
cqrs_1.CqrsModule,
|
|
50
60
|
auth_module_1.AuthModule,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graphql-api.module.js","sourceRoot":"","sources":["../../../src/graphql-api/graphql-api.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,uEAAsG;AACtG,2CAAkE;AAClE,2CAAwC;AACxC,uCAA0C;AAC1C,6CAAgD;AAChD,yDAA4C;AAC5C,+BAA4B;AAC5B,qDAAkD;AAClD,wDAAkE;AAClE,8DAAwE;AACxE,4EAAqF;AACrF,mFAA6F;AAC7F,2DAAqE;AACrE,oEAA8E;AAC9E,gFAA0F;AAC1F,iEAA2E;AAC3E,iEAA4E;AAC5E,4EAAqF;AACrF,oEAA8E;AAC9E,qDAA+D;AAC/D,2DAAqE;AACrE,wDAAkE;
|
|
1
|
+
{"version":3,"file":"graphql-api.module.js","sourceRoot":"","sources":["../../../src/graphql-api/graphql-api.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,uEAAsG;AACtG,2CAAkE;AAClE,2CAAwC;AACxC,uCAA0C;AAC1C,6CAAgD;AAChD,yDAA4C;AAC5C,+BAA4B;AAC5B,qDAAkD;AAClD,wDAAkE;AAClE,8DAAwE;AACxE,4EAAqF;AACrF,mFAA6F;AAC7F,2DAAqE;AACrE,oEAA8E;AAC9E,gFAA0F;AAC1F,iEAA2E;AAC3E,iEAA4E;AAC5E,4EAAqF;AACrF,oEAA8E;AAC9E,qDAA+D;AAC/D,2DAAqE;AACrE,wDAAkE;AAClE,sFAAkF;AAClF,8DAA2D;AA0CpD,IAAM,gBAAgB,GAAtB,MAAM,gBAAgB;CAAG,CAAA;AAAnB,4CAAgB;2BAAhB,gBAAgB;IAxC5B,IAAA,eAAM,EAAC;QACN,OAAO,EAAE;YACP,8BAAa;YACb,uBAAa,CAAC,YAAY,CAAqB;gBAC7C,OAAO,EAAE,CAAC,8BAAa,CAAC;gBACxB,MAAM,EAAE,qBAAY;gBACpB,MAAM,EAAE,CAAC,6CAAoB,CAAC;gBAC9B,UAAU,EAAE,CAAC,oBAA0C,EAAE,EAAE,CAAC,CAAC;oBAC3D,OAAO,EAAE,CAAC,EAAE,GAAG,EAAgB,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC;oBAC7C,IAAI,EAAE,YAAY;oBAClB,SAAS,EAAE,EAAE,IAAI,EAAE,2BAAW,EAAE;oBAChC,UAAU,EAAE,KAAK;oBACjB,cAAc,EAAE,IAAA,WAAI,EAAC,OAAO,CAAC,GAAG,EAAE,EAAE,gBAAgB,CAAC;oBACrD,UAAU,EAAE,IAAI;oBAChB,aAAa,EAAE,IAAI;oBACnB,OAAO,EAAE;wBACP,IAAA,mDAAyC,GAAE;wBAC3C,oBAAoB;qBACrB;iBACF,CAAC;aACH,CAAC;YACF,iBAAU;YACV,wBAAU;SACX;QACD,SAAS,EAAE;YACT,8CAAqB;YACrB,4BAAY;YACZ,4BAAY;YACZ,4CAAoB;YACpB,kCAAe;YACf,gCAAc;YACd,6CAAoB;YACpB,2CAAmB;YACnB,8BAAa;YACb,oCAAgB;YAChB,oCAAgB;YAChB,0BAAW;YACX,8BAAa;SACd;KACF,CAAC;GACW,gBAAgB,CAAG;AAEhC,IAAA,2CAAoB,GAAE,CAAC"}
|
|
@@ -25,6 +25,7 @@ __decorate([
|
|
|
25
25
|
__metadata("design:returntype", void 0)
|
|
26
26
|
], HealthController.prototype, "get", null);
|
|
27
27
|
exports.HealthController = HealthController = __decorate([
|
|
28
|
+
(0, swagger_1.ApiExcludeController)(),
|
|
28
29
|
(0, swagger_1.ApiTags)('health'),
|
|
29
30
|
(0, common_1.Controller)('health')
|
|
30
31
|
], HealthController);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"health.controller.js","sourceRoot":"","sources":["../../../src/health/health.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAAiD;AACjD,
|
|
1
|
+
{"version":3,"file":"health.controller.js","sourceRoot":"","sources":["../../../src/health/health.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAAiD;AACjD,6CAAgE;AAKzD,IAAM,gBAAgB,GAAtB,MAAM,gBAAgB;IAE3B,GAAG;QACD,OAAO,IAAI,CAAC;IACd,CAAC;CACF,CAAA;AALY,4CAAgB;AAE3B;IADC,IAAA,YAAG,GAAE;;;;2CAGL;2BAJU,gBAAgB;IAH5B,IAAA,8BAAoB,GAAE;IACtB,IAAA,iBAAO,EAAC,QAAQ,CAAC;IACjB,IAAA,mBAAU,EAAC,QAAQ,CAAC;GACR,gBAAgB,CAK5B"}
|
package/dist/src/index.d.ts
CHANGED
package/dist/src/index.js
CHANGED
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.notificationEventEmitter = exports.CoreModule = void 0;
|
|
3
|
+
exports.notificationEventEmitter = exports.PrismaService = exports.DatabaseModule = exports.CoreModule = void 0;
|
|
4
4
|
var core_module_1 = require("./core/core.module");
|
|
5
5
|
Object.defineProperty(exports, "CoreModule", { enumerable: true, get: function () { return core_module_1.CoreModule; } });
|
|
6
|
+
var database_module_1 = require("./database/database.module");
|
|
7
|
+
Object.defineProperty(exports, "DatabaseModule", { enumerable: true, get: function () { return database_module_1.DatabaseModule; } });
|
|
8
|
+
var prisma_service_1 = require("./database/prisma.service");
|
|
9
|
+
Object.defineProperty(exports, "PrismaService", { enumerable: true, get: function () { return prisma_service_1.PrismaService; } });
|
|
6
10
|
var notification_event_emitter_1 = require("./notification/notification-event-emitter");
|
|
7
11
|
Object.defineProperty(exports, "notificationEventEmitter", { enumerable: true, get: function () { return notification_event_emitter_1.notificationEventEmitter; } });
|
|
8
12
|
//# sourceMappingURL=index.js.map
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAAA,kDAAkD;AAAzC,yGAAA,UAAU,OAAA;AACnB,wFAAuF;AAA9E,sIAAA,wBAAwB,OAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAAA,kDAAkD;AAAzC,yGAAA,UAAU,OAAA;AACnB,8DAA8D;AAArD,iHAAA,cAAc,OAAA;AACvB,4DAA4D;AAAnD,+GAAA,aAAa,OAAA;AACtB,wFAAuF;AAA9E,sIAAA,wBAAwB,OAAA"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export declare const GRAPHQL_REQUEST_DURATION_SECONDS = "graphql_request_duration_seconds";
|
|
2
|
+
export declare const GRAPHQL_DID_RESOLVE_OPERATION_TOTAL = "graphql_did_resolve_operation_total";
|
|
3
|
+
export declare const GRAPHQL_DID_ENCOUNTER_ERRORS_TOTAL = "graphql_did_encounter_errors_total";
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GRAPHQL_DID_ENCOUNTER_ERRORS_TOTAL = exports.GRAPHQL_DID_RESOLVE_OPERATION_TOTAL = exports.GRAPHQL_REQUEST_DURATION_SECONDS = void 0;
|
|
4
|
+
exports.GRAPHQL_REQUEST_DURATION_SECONDS = 'graphql_request_duration_seconds';
|
|
5
|
+
exports.GRAPHQL_DID_RESOLVE_OPERATION_TOTAL = 'graphql_did_resolve_operation_total';
|
|
6
|
+
exports.GRAPHQL_DID_ENCOUNTER_ERRORS_TOTAL = 'graphql_did_encounter_errors_total';
|
|
7
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../../src/metrics/graphql/constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,gCAAgC,GAC3C,kCAAkC,CAAC;AAExB,QAAA,mCAAmC,GAC9C,qCAAqC,CAAC;AAE3B,QAAA,kCAAkC,GAC7C,oCAAoC,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { ApolloServerPlugin, BaseContext, GraphQLRequestListener } from '@apollo/server';
|
|
2
|
+
import { GraphqlMetricsService } from 'src/metrics/graphql/graphql-metrics.service';
|
|
3
|
+
export declare class GraphqlMetricsPlugin implements ApolloServerPlugin {
|
|
4
|
+
private readonly graphqlMetrics;
|
|
5
|
+
constructor(graphqlMetrics: GraphqlMetricsService);
|
|
6
|
+
requestDidStart(): Promise<GraphQLRequestListener<BaseContext>>;
|
|
7
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
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.GraphqlMetricsPlugin = void 0;
|
|
13
|
+
const common_1 = require("@nestjs/common");
|
|
14
|
+
const process = require("node:process");
|
|
15
|
+
const graphql_metrics_service_1 = require("./graphql-metrics.service");
|
|
16
|
+
const utils_1 = require("../utils");
|
|
17
|
+
let GraphqlMetricsPlugin = class GraphqlMetricsPlugin {
|
|
18
|
+
constructor(graphqlMetrics) {
|
|
19
|
+
this.graphqlMetrics = graphqlMetrics;
|
|
20
|
+
}
|
|
21
|
+
async requestDidStart() {
|
|
22
|
+
const startAt = process.hrtime();
|
|
23
|
+
return {
|
|
24
|
+
didResolveOperation: async (requestContext) => {
|
|
25
|
+
this.graphqlMetrics.didResolveOperation(getLabels(requestContext));
|
|
26
|
+
},
|
|
27
|
+
willSendResponse: async (requestContext) => {
|
|
28
|
+
this.graphqlMetrics.requestDurationSeconds({
|
|
29
|
+
...getLabels(requestContext),
|
|
30
|
+
result: 'true',
|
|
31
|
+
}, (0, utils_1.getDurationInSeconds)(startAt));
|
|
32
|
+
},
|
|
33
|
+
didEncounterErrors: async (requestContext) => {
|
|
34
|
+
const labels = getLabels(requestContext);
|
|
35
|
+
this.graphqlMetrics.didEncounterErrors(labels);
|
|
36
|
+
this.graphqlMetrics.requestDurationSeconds({
|
|
37
|
+
...labels,
|
|
38
|
+
result: 'false',
|
|
39
|
+
}, (0, utils_1.getDurationInSeconds)(startAt));
|
|
40
|
+
},
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
exports.GraphqlMetricsPlugin = GraphqlMetricsPlugin;
|
|
45
|
+
exports.GraphqlMetricsPlugin = GraphqlMetricsPlugin = __decorate([
|
|
46
|
+
(0, common_1.Injectable)(),
|
|
47
|
+
__metadata("design:paramtypes", [graphql_metrics_service_1.GraphqlMetricsService])
|
|
48
|
+
], GraphqlMetricsPlugin);
|
|
49
|
+
function getLabels(context) {
|
|
50
|
+
return {
|
|
51
|
+
operationName: context.request.operationName,
|
|
52
|
+
operation: context.operation?.operation,
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=graphql-metrics.plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graphql-metrics.plugin.js","sourceRoot":"","sources":["../../../../src/metrics/graphql/graphql-metrics.plugin.ts"],"names":[],"mappings":";;;;;;;;;;;;AAKA,2CAA4C;AAC5C,wCAAwC;AACxC,uEAAoF;AACpF,oCAAyD;AAGlD,IAAM,oBAAoB,GAA1B,MAAM,oBAAoB;IAC/B,YAA6B,cAAqC;QAArC,mBAAc,GAAd,cAAc,CAAuB;IAAG,CAAC;IAEtE,KAAK,CAAC,eAAe;QACnB,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;QAEjC,OAAO;YACL,mBAAmB,EAAE,KAAK,EAAE,cAAc,EAAE,EAAE;gBAC5C,IAAI,CAAC,cAAc,CAAC,mBAAmB,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC;YACrE,CAAC;YAED,gBAAgB,EAAE,KAAK,EAAE,cAAc,EAAE,EAAE;gBACzC,IAAI,CAAC,cAAc,CAAC,sBAAsB,CACxC;oBACE,GAAG,SAAS,CAAC,cAAc,CAAC;oBAC5B,MAAM,EAAE,MAAM;iBACf,EACD,IAAA,4BAAoB,EAAC,OAAO,CAAC,CAC9B,CAAC;YACJ,CAAC;YAED,kBAAkB,EAAE,KAAK,EAAE,cAAc,EAAE,EAAE;gBAC3C,MAAM,MAAM,GAAG,SAAS,CAAC,cAAc,CAAC,CAAC;gBAEzC,IAAI,CAAC,cAAc,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;gBAE/C,IAAI,CAAC,cAAc,CAAC,sBAAsB,CACxC;oBACE,GAAG,MAAM;oBACT,MAAM,EAAE,OAAO;iBAChB,EACD,IAAA,4BAAoB,EAAC,OAAO,CAAC,CAC9B,CAAC;YACJ,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAA;AApCY,oDAAoB;+BAApB,oBAAoB;IADhC,IAAA,mBAAU,GAAE;qCAEkC,+CAAqB;GADvD,oBAAoB,CAoChC;AAED,SAAS,SAAS,CAAC,OAGlB;IACC,OAAO;QACL,aAAa,EAAE,OAAO,CAAC,OAAO,CAAC,aAAa;QAC5C,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,SAAS;KACxC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
type Labels = {
|
|
2
|
+
operationName?: string;
|
|
3
|
+
operation?: string;
|
|
4
|
+
};
|
|
5
|
+
export declare class GraphqlMetricsService {
|
|
6
|
+
private readonly requestDurationSecondsHistogram;
|
|
7
|
+
private readonly didResolveOperationTotalCounter;
|
|
8
|
+
private readonly didEncounterErrorsTotalCounter;
|
|
9
|
+
constructor();
|
|
10
|
+
requestDurationSeconds(labels: Labels & {
|
|
11
|
+
result?: 'true' | 'false';
|
|
12
|
+
}, durationInSeconds: number): void;
|
|
13
|
+
didResolveOperation(labels: Labels): void;
|
|
14
|
+
didEncounterErrors(labels: Labels): void;
|
|
15
|
+
}
|
|
16
|
+
export {};
|
|
@@ -0,0 +1,49 @@
|
|
|
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.GraphqlMetricsService = void 0;
|
|
13
|
+
const common_1 = require("@nestjs/common");
|
|
14
|
+
const constants_1 = require("./constants");
|
|
15
|
+
const client = require("prom-client");
|
|
16
|
+
let GraphqlMetricsService = class GraphqlMetricsService {
|
|
17
|
+
constructor() {
|
|
18
|
+
this.requestDurationSecondsHistogram = new client.Histogram({
|
|
19
|
+
name: constants_1.GRAPHQL_REQUEST_DURATION_SECONDS,
|
|
20
|
+
help: 'Duration of GraphQL requests in seconds',
|
|
21
|
+
labelNames: ['operationName', 'operation', 'result'],
|
|
22
|
+
});
|
|
23
|
+
this.didResolveOperationTotalCounter = new client.Counter({
|
|
24
|
+
name: constants_1.GRAPHQL_DID_RESOLVE_OPERATION_TOTAL,
|
|
25
|
+
help: 'Total number of successfully resolved GraphQL operations',
|
|
26
|
+
labelNames: ['operationName', 'operation'],
|
|
27
|
+
});
|
|
28
|
+
this.didEncounterErrorsTotalCounter = new client.Counter({
|
|
29
|
+
name: constants_1.GRAPHQL_DID_ENCOUNTER_ERRORS_TOTAL,
|
|
30
|
+
help: 'Total number of errors encountered during GraphQL request processing',
|
|
31
|
+
labelNames: ['operationName', 'operation'],
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
requestDurationSeconds(labels, durationInSeconds) {
|
|
35
|
+
this.requestDurationSecondsHistogram.observe(labels, durationInSeconds);
|
|
36
|
+
}
|
|
37
|
+
didResolveOperation(labels) {
|
|
38
|
+
this.didResolveOperationTotalCounter.inc(labels);
|
|
39
|
+
}
|
|
40
|
+
didEncounterErrors(labels) {
|
|
41
|
+
this.didEncounterErrorsTotalCounter.inc(labels);
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
exports.GraphqlMetricsService = GraphqlMetricsService;
|
|
45
|
+
exports.GraphqlMetricsService = GraphqlMetricsService = __decorate([
|
|
46
|
+
(0, common_1.Injectable)(),
|
|
47
|
+
__metadata("design:paramtypes", [])
|
|
48
|
+
], GraphqlMetricsService);
|
|
49
|
+
//# sourceMappingURL=graphql-metrics.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graphql-metrics.service.js","sourceRoot":"","sources":["../../../../src/metrics/graphql/graphql-metrics.service.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA4C;AAC5C,2CAIuC;AACvC,sCAAsC;AAQ/B,IAAM,qBAAqB,GAA3B,MAAM,qBAAqB;IAmBhC;QAlBiB,oCAA+B,GAAG,IAAI,MAAM,CAAC,SAAS,CAAC;YACtE,IAAI,EAAE,4CAAgC;YACtC,IAAI,EAAE,yCAAyC;YAC/C,UAAU,EAAE,CAAC,eAAe,EAAE,WAAW,EAAE,QAAQ,CAAC;SACrD,CAAC,CAAC;QAEc,oCAA+B,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC;YACpE,IAAI,EAAE,+CAAmC;YACzC,IAAI,EAAE,0DAA0D;YAChE,UAAU,EAAE,CAAC,eAAe,EAAE,WAAW,CAAC;SAC3C,CAAC,CAAC;QAEc,mCAA8B,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC;YACnE,IAAI,EAAE,8CAAkC;YACxC,IAAI,EAAE,sEAAsE;YAC5E,UAAU,EAAE,CAAC,eAAe,EAAE,WAAW,CAAC;SAC3C,CAAC,CAAC;IAEY,CAAC;IAET,sBAAsB,CAC3B,MAEC,EACD,iBAAyB;QAEzB,IAAI,CAAC,+BAA+B,CAAC,OAAO,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAC1E,CAAC;IAEM,mBAAmB,CAAC,MAAc;QACvC,IAAI,CAAC,+BAA+B,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACnD,CAAC;IAEM,kBAAkB,CAAC,MAAc;QACtC,IAAI,CAAC,8BAA8B,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAClD,CAAC;CACF,CAAA;AArCY,sDAAqB;gCAArB,qBAAqB;IADjC,IAAA,mBAAU,GAAE;;GACA,qBAAqB,CAqCjC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
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.MetricsModule = void 0;
|
|
10
|
+
const common_1 = require("@nestjs/common");
|
|
11
|
+
const config_1 = require("@nestjs/config");
|
|
12
|
+
const database_module_1 = require("../database/database.module");
|
|
13
|
+
const graphql_metrics_plugin_1 = require("./graphql/graphql-metrics.plugin");
|
|
14
|
+
const graphql_metrics_service_1 = require("./graphql/graphql-metrics.service");
|
|
15
|
+
const rest_metrics_interceptor_1 = require("./rest/rest-metrics.interceptor");
|
|
16
|
+
const rest_metrics_service_1 = require("./rest/rest-metrics.service");
|
|
17
|
+
let MetricsModule = class MetricsModule {
|
|
18
|
+
};
|
|
19
|
+
exports.MetricsModule = MetricsModule;
|
|
20
|
+
exports.MetricsModule = MetricsModule = __decorate([
|
|
21
|
+
(0, common_1.Module)({
|
|
22
|
+
imports: [database_module_1.DatabaseModule, config_1.ConfigModule],
|
|
23
|
+
providers: [
|
|
24
|
+
graphql_metrics_service_1.GraphqlMetricsService,
|
|
25
|
+
graphql_metrics_plugin_1.GraphqlMetricsPlugin,
|
|
26
|
+
rest_metrics_service_1.RestMetricsService,
|
|
27
|
+
rest_metrics_interceptor_1.RestMetricsInterceptor,
|
|
28
|
+
],
|
|
29
|
+
exports: [graphql_metrics_plugin_1.GraphqlMetricsPlugin, rest_metrics_service_1.RestMetricsService, rest_metrics_interceptor_1.RestMetricsInterceptor],
|
|
30
|
+
})
|
|
31
|
+
], MetricsModule);
|
|
32
|
+
//# sourceMappingURL=metrics.module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metrics.module.js","sourceRoot":"","sources":["../../../src/metrics/metrics.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,2CAA8C;AAC9C,iEAA8D;AAC9D,6EAAkF;AAClF,+EAAoF;AACpF,8EAAmF;AACnF,sEAA2E;AAYpE,IAAM,aAAa,GAAnB,MAAM,aAAa;CAAG,CAAA;AAAhB,sCAAa;wBAAb,aAAa;IAVzB,IAAA,eAAM,EAAC;QACN,OAAO,EAAE,CAAC,gCAAc,EAAE,qBAAY,CAAC;QACvC,SAAS,EAAE;YACT,+CAAqB;YACrB,6CAAoB;YACpB,yCAAkB;YAClB,iDAAsB;SACvB;QACD,OAAO,EAAE,CAAC,6CAAoB,EAAE,yCAAkB,EAAE,iDAAsB,CAAC;KAC5E,CAAC;GACW,aAAa,CAAG"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.REST_REQUEST_ERRORS_TOTAL = exports.REST_REQUESTS_TOTAL = exports.REST_REQUEST_DURATION_SECONDS = void 0;
|
|
4
|
+
exports.REST_REQUEST_DURATION_SECONDS = 'rest_request_duration_seconds';
|
|
5
|
+
exports.REST_REQUESTS_TOTAL = 'rest_requests_total';
|
|
6
|
+
exports.REST_REQUEST_ERRORS_TOTAL = 'rest_requests_errors_total';
|
|
7
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../../src/metrics/rest/constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,6BAA6B,GAAG,+BAA+B,CAAC;AAEhE,QAAA,mBAAmB,GAAG,qBAAqB,CAAC;AAE5C,QAAA,yBAAyB,GAAG,4BAA4B,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { CallHandler, ExecutionContext, NestInterceptor } from '@nestjs/common';
|
|
2
|
+
import { Observable } from 'rxjs';
|
|
3
|
+
import { RestMetricsService } from 'src/metrics/rest/rest-metrics.service';
|
|
4
|
+
export declare class RestMetricsInterceptor implements NestInterceptor {
|
|
5
|
+
private readonly metricsService;
|
|
6
|
+
constructor(metricsService: RestMetricsService);
|
|
7
|
+
intercept(context: ExecutionContext, next: CallHandler): Observable<any>;
|
|
8
|
+
metricsProcess(context: ExecutionContext, startAt: [number, number]): void;
|
|
9
|
+
}
|
|
@@ -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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.RestMetricsInterceptor = void 0;
|
|
13
|
+
const common_1 = require("@nestjs/common");
|
|
14
|
+
const rxjs_1 = require("rxjs");
|
|
15
|
+
const rest_metrics_service_1 = require("./rest-metrics.service");
|
|
16
|
+
const utils_1 = require("../utils");
|
|
17
|
+
let RestMetricsInterceptor = class RestMetricsInterceptor {
|
|
18
|
+
constructor(metricsService) {
|
|
19
|
+
this.metricsService = metricsService;
|
|
20
|
+
}
|
|
21
|
+
intercept(context, next) {
|
|
22
|
+
const startAt = process.hrtime();
|
|
23
|
+
return next.handle().pipe((0, rxjs_1.finalize)(() => {
|
|
24
|
+
this.metricsProcess(context, startAt);
|
|
25
|
+
}));
|
|
26
|
+
}
|
|
27
|
+
metricsProcess(context, startAt) {
|
|
28
|
+
const labels = getLabels(context);
|
|
29
|
+
this.metricsService.requestDurationSeconds(labels, (0, utils_1.getDurationInSeconds)(startAt));
|
|
30
|
+
this.metricsService.requestTotal(labels);
|
|
31
|
+
if (labels.status >= 400) {
|
|
32
|
+
this.metricsService.requestErrors(labels);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
exports.RestMetricsInterceptor = RestMetricsInterceptor;
|
|
37
|
+
exports.RestMetricsInterceptor = RestMetricsInterceptor = __decorate([
|
|
38
|
+
(0, common_1.Injectable)(),
|
|
39
|
+
__metadata("design:paramtypes", [rest_metrics_service_1.RestMetricsService])
|
|
40
|
+
], RestMetricsInterceptor);
|
|
41
|
+
function getLabels(context) {
|
|
42
|
+
const request = context.switchToHttp().getRequest();
|
|
43
|
+
const response = context.switchToHttp().getResponse();
|
|
44
|
+
const method = request.method;
|
|
45
|
+
const route = request.route ? request.route.path : request.path;
|
|
46
|
+
const status = response.statusCode.toString();
|
|
47
|
+
return {
|
|
48
|
+
method,
|
|
49
|
+
route,
|
|
50
|
+
status,
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=rest-metrics.interceptor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rest-metrics.interceptor.js","sourceRoot":"","sources":["../../../../src/metrics/rest/rest-metrics.interceptor.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAKwB;AACxB,+BAA4C;AAC5C,iEAA2E;AAC3E,oCAAyD;AAGlD,IAAM,sBAAsB,GAA5B,MAAM,sBAAsB;IACjC,YAA6B,cAAkC;QAAlC,mBAAc,GAAd,cAAc,CAAoB;IAAG,CAAC;IAEnE,SAAS,CAAC,OAAyB,EAAE,IAAiB;QACpD,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;QAEjC,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CACvB,IAAA,eAAQ,EAAC,GAAG,EAAE;YACZ,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACxC,CAAC,CAAC,CACH,CAAC;IACJ,CAAC;IAED,cAAc,CAAC,OAAyB,EAAE,OAAyB;QACjE,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;QAElC,IAAI,CAAC,cAAc,CAAC,sBAAsB,CACxC,MAAM,EACN,IAAA,4BAAoB,EAAC,OAAO,CAAC,CAC9B,CAAC;QAEF,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QAEzC,IAAI,MAAM,CAAC,MAAM,IAAI,GAAG,EAAE,CAAC;YACzB,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;CACF,CAAA;AA3BY,wDAAsB;iCAAtB,sBAAsB;IADlC,IAAA,mBAAU,GAAE;qCAEkC,yCAAkB;GADpD,sBAAsB,CA2BlC;AAED,SAAS,SAAS,CAAC,OAAyB;IAC1C,MAAM,OAAO,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,UAAU,EAAE,CAAC;IACpD,MAAM,QAAQ,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,WAAW,EAAE,CAAC;IAEtD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAC9B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;IAChE,MAAM,MAAM,GAAG,QAAQ,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;IAE9C,OAAO;QACL,MAAM;QACN,KAAK;QACL,MAAM;KACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
type Labels = {
|
|
2
|
+
method?: string;
|
|
3
|
+
route?: string;
|
|
4
|
+
status?: string;
|
|
5
|
+
};
|
|
6
|
+
export declare class RestMetricsService {
|
|
7
|
+
private readonly requestDurationSecondsHistogram;
|
|
8
|
+
private readonly requestTotalCounter;
|
|
9
|
+
private readonly requestErrorsTotalCounter;
|
|
10
|
+
constructor();
|
|
11
|
+
requestDurationSeconds(labels: Labels, durationInSeconds: number): void;
|
|
12
|
+
requestTotal(labels: Labels): void;
|
|
13
|
+
requestErrors(labels: Labels): void;
|
|
14
|
+
}
|
|
15
|
+
export {};
|
|
@@ -0,0 +1,49 @@
|
|
|
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.RestMetricsService = void 0;
|
|
13
|
+
const common_1 = require("@nestjs/common");
|
|
14
|
+
const client = require("prom-client");
|
|
15
|
+
const constants_1 = require("./constants");
|
|
16
|
+
let RestMetricsService = class RestMetricsService {
|
|
17
|
+
constructor() {
|
|
18
|
+
this.requestDurationSecondsHistogram = new client.Histogram({
|
|
19
|
+
name: constants_1.REST_REQUEST_DURATION_SECONDS,
|
|
20
|
+
help: 'Duration of REST API requests in seconds',
|
|
21
|
+
labelNames: ['method', 'route', 'status'],
|
|
22
|
+
});
|
|
23
|
+
this.requestTotalCounter = new client.Counter({
|
|
24
|
+
name: constants_1.REST_REQUESTS_TOTAL,
|
|
25
|
+
help: 'Total number of REST API requests',
|
|
26
|
+
labelNames: ['method', 'route', 'status'],
|
|
27
|
+
});
|
|
28
|
+
this.requestErrorsTotalCounter = new client.Counter({
|
|
29
|
+
name: constants_1.REST_REQUEST_ERRORS_TOTAL,
|
|
30
|
+
help: 'Total number of errors encountered during REST API request processing',
|
|
31
|
+
labelNames: ['method', 'route', 'status'],
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
requestDurationSeconds(labels, durationInSeconds) {
|
|
35
|
+
this.requestDurationSecondsHistogram.observe(labels, durationInSeconds);
|
|
36
|
+
}
|
|
37
|
+
requestTotal(labels) {
|
|
38
|
+
this.requestTotalCounter.inc(labels);
|
|
39
|
+
}
|
|
40
|
+
requestErrors(labels) {
|
|
41
|
+
this.requestErrorsTotalCounter.inc(labels);
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
exports.RestMetricsService = RestMetricsService;
|
|
45
|
+
exports.RestMetricsService = RestMetricsService = __decorate([
|
|
46
|
+
(0, common_1.Injectable)(),
|
|
47
|
+
__metadata("design:paramtypes", [])
|
|
48
|
+
], RestMetricsService);
|
|
49
|
+
//# sourceMappingURL=rest-metrics.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rest-metrics.service.js","sourceRoot":"","sources":["../../../../src/metrics/rest/rest-metrics.service.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA4C;AAC5C,sCAAsC;AACtC,2CAIoC;AAS7B,IAAM,kBAAkB,GAAxB,MAAM,kBAAkB;IAmB7B;QAlBiB,oCAA+B,GAAG,IAAI,MAAM,CAAC,SAAS,CAAC;YACtE,IAAI,EAAE,yCAA6B;YACnC,IAAI,EAAE,0CAA0C;YAChD,UAAU,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC;SAC1C,CAAC,CAAC;QAEc,wBAAmB,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC;YACxD,IAAI,EAAE,+BAAmB;YACzB,IAAI,EAAE,mCAAmC;YACzC,UAAU,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC;SAC1C,CAAC,CAAC;QAEc,8BAAyB,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC;YAC9D,IAAI,EAAE,qCAAyB;YAC/B,IAAI,EAAE,uEAAuE;YAC7E,UAAU,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC;SAC1C,CAAC,CAAC;IAEY,CAAC;IAET,sBAAsB,CAAC,MAAc,EAAE,iBAAyB;QACrE,IAAI,CAAC,+BAA+B,CAAC,OAAO,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAC1E,CAAC;IAEM,YAAY,CAAC,MAAc;QAChC,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACvC,CAAC;IAEM,aAAa,CAAC,MAAc;QACjC,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC7C,CAAC;CACF,CAAA;AAhCY,gDAAkB;6BAAlB,kBAAkB;IAD9B,IAAA,mBAAU,GAAE;;GACA,kBAAkB,CAgC9B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function getDurationInSeconds(startAt: [number, number]): number;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getDurationInSeconds = getDurationInSeconds;
|
|
4
|
+
function getDurationInSeconds(startAt) {
|
|
5
|
+
const [seconds, nanoseconds] = process.hrtime(startAt);
|
|
6
|
+
return seconds + nanoseconds / 1e9;
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/metrics/utils.ts"],"names":[],"mappings":";;AAAA,oDAGC;AAHD,SAAgB,oBAAoB,CAAC,OAAyB;IAC5D,MAAM,CAAC,OAAO,EAAE,WAAW,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACvD,OAAO,OAAO,GAAG,WAAW,GAAG,GAAG,CAAC;AACrC,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
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.MetricsApiModule = void 0;
|
|
10
|
+
const common_1 = require("@nestjs/common");
|
|
11
|
+
const config_1 = require("@nestjs/config");
|
|
12
|
+
const client = require("prom-client");
|
|
13
|
+
const database_module_1 = require("../database/database.module");
|
|
14
|
+
const metrics_enabled_guard_1 = require("./metrics-enabled.guard");
|
|
15
|
+
const metrics_controller_1 = require("./metrics.controller");
|
|
16
|
+
let MetricsApiModule = class MetricsApiModule {
|
|
17
|
+
onModuleInit() {
|
|
18
|
+
client.collectDefaultMetrics();
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
exports.MetricsApiModule = MetricsApiModule;
|
|
22
|
+
exports.MetricsApiModule = MetricsApiModule = __decorate([
|
|
23
|
+
(0, common_1.Module)({
|
|
24
|
+
imports: [database_module_1.DatabaseModule, config_1.ConfigModule],
|
|
25
|
+
providers: [metrics_enabled_guard_1.MetricsEnabledGuard],
|
|
26
|
+
controllers: [metrics_controller_1.MetricsController],
|
|
27
|
+
})
|
|
28
|
+
], MetricsApiModule);
|
|
29
|
+
//# sourceMappingURL=metrics-api.module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metrics-api.module.js","sourceRoot":"","sources":["../../../src/metrics-api/metrics-api.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAsD;AACtD,2CAA8C;AAC9C,sCAAsC;AACtC,iEAA8D;AAC9D,mEAA4E;AAC5E,6DAAuE;AAOhE,IAAM,gBAAgB,GAAtB,MAAM,gBAAgB;IAC3B,YAAY;QACV,MAAM,CAAC,qBAAqB,EAAE,CAAC;IACjC,CAAC;CACF,CAAA;AAJY,4CAAgB;2BAAhB,gBAAgB;IAL5B,IAAA,eAAM,EAAC;QACN,OAAO,EAAE,CAAC,gCAAc,EAAE,qBAAY,CAAC;QACvC,SAAS,EAAE,CAAC,2CAAmB,CAAC;QAChC,WAAW,EAAE,CAAC,sCAAiB,CAAC;KACjC,CAAC;GACW,gBAAgB,CAI5B"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { CanActivate } from '@nestjs/common';
|
|
2
|
+
import { ConfigService } from '@nestjs/config';
|
|
3
|
+
export declare class MetricsEnabledGuard implements CanActivate {
|
|
4
|
+
private readonly configService;
|
|
5
|
+
constructor(configService: ConfigService);
|
|
6
|
+
canActivate(): boolean;
|
|
7
|
+
}
|