@rsdk/db.mikro-orm 5.15.0-next.0 → 5.15.0-next.10

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.
Files changed (36) hide show
  1. package/dist/metrics/entity-operations.subscriber.d.ts +15 -0
  2. package/dist/metrics/entity-operations.subscriber.js +47 -0
  3. package/dist/metrics/entity-operations.subscriber.js.map +1 -0
  4. package/dist/metrics/flush-metrics.subscriber.d.ts +18 -0
  5. package/dist/metrics/flush-metrics.subscriber.js +37 -0
  6. package/dist/metrics/flush-metrics.subscriber.js.map +1 -0
  7. package/dist/metrics/identity-map.registry.d.ts +23 -0
  8. package/dist/metrics/identity-map.registry.js +41 -0
  9. package/dist/metrics/identity-map.registry.js.map +1 -0
  10. package/dist/metrics/knex-pool.d.ts +18 -0
  11. package/dist/metrics/knex-pool.js +28 -0
  12. package/dist/metrics/knex-pool.js.map +1 -0
  13. package/dist/metrics/mikro-orm.metrics.d.ts +7 -0
  14. package/dist/metrics/mikro-orm.metrics.js +51 -0
  15. package/dist/metrics/mikro-orm.metrics.js.map +1 -0
  16. package/dist/metrics/subscribers.d.ts +25 -0
  17. package/dist/metrics/subscribers.js +36 -0
  18. package/dist/metrics/subscribers.js.map +1 -0
  19. package/dist/mikro-orm.plugin.js +2 -0
  20. package/dist/mikro-orm.plugin.js.map +1 -1
  21. package/dist/modules/metrics.module.d.ts +32 -0
  22. package/dist/modules/metrics.module.js +101 -0
  23. package/dist/modules/metrics.module.js.map +1 -0
  24. package/package.json +2 -2
  25. package/src/metrics/entity-operations.subscriber.ts +60 -0
  26. package/src/metrics/flush-metrics.subscriber.ts +48 -0
  27. package/src/metrics/identity-map.registry.spec.ts +121 -0
  28. package/src/metrics/identity-map.registry.ts +48 -0
  29. package/src/metrics/knex-pool.spec.ts +38 -0
  30. package/src/metrics/knex-pool.ts +37 -0
  31. package/src/metrics/mikro-orm.metrics.ts +35 -0
  32. package/src/metrics/subscribers.spec.ts +164 -0
  33. package/src/metrics/subscribers.ts +40 -0
  34. package/src/mikro-orm.plugin.ts +2 -0
  35. package/src/modules/metrics.module.spec.ts +267 -0
  36. package/src/modules/metrics.module.ts +128 -0
@@ -0,0 +1,15 @@
1
+ import type { EventArgs, EventSubscriber, FlushEventArgs } from '@mikro-orm/core';
2
+ import type { EntityOperationsRecorder } from '@rsdk/db/dist/metrics/plugin-kit';
3
+ import { DetachableSubscriber } from './subscribers';
4
+ /**
5
+ * Пишет `orm_entity_operations_total`: загрузки по onLoad, изменения
6
+ * по changesets после flush. Подписка на onLoad заставляет MikroORM
7
+ * отправлять событие для каждой загруженной сущности, поэтому subscriber
8
+ * регистрируется только при включённой метрике
9
+ */
10
+ export declare class EntityOperationsSubscriber extends DetachableSubscriber implements EventSubscriber {
11
+ private readonly recorder;
12
+ constructor(recorder: EntityOperationsRecorder);
13
+ onLoad({ meta }: EventArgs<object>): void;
14
+ afterFlush({ uow }: FlushEventArgs): void;
15
+ }
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EntityOperationsSubscriber = void 0;
4
+ const subscribers_1 = require("./subscribers");
5
+ /**
6
+ * Ключи — значения `ChangeSetType`. Строками, а не через enum: в MikroORM 5
7
+ * нет части значений (`update_early`, `delete_early`)
8
+ */
9
+ const CHANGESET_OPERATIONS = {
10
+ create: 'insert',
11
+ update: 'update',
12
+ update_early: 'update',
13
+ delete: 'delete',
14
+ delete_early: 'delete',
15
+ };
16
+ /**
17
+ * Пишет `orm_entity_operations_total`: загрузки по onLoad, изменения
18
+ * по changesets после flush. Подписка на onLoad заставляет MikroORM
19
+ * отправлять событие для каждой загруженной сущности, поэтому subscriber
20
+ * регистрируется только при включённой метрике
21
+ */
22
+ class EntityOperationsSubscriber extends subscribers_1.DetachableSubscriber {
23
+ recorder;
24
+ constructor(recorder) {
25
+ super();
26
+ this.recorder = recorder;
27
+ }
28
+ onLoad({ meta }) {
29
+ if (!this.attached) {
30
+ return;
31
+ }
32
+ this.recorder.record(meta.className, 'load');
33
+ }
34
+ afterFlush({ uow }) {
35
+ if (!this.attached) {
36
+ return;
37
+ }
38
+ for (const changeSet of uow.getChangeSets()) {
39
+ const op = CHANGESET_OPERATIONS[changeSet.type];
40
+ if (op) {
41
+ this.recorder.record(changeSet.meta.className, op);
42
+ }
43
+ }
44
+ }
45
+ }
46
+ exports.EntityOperationsSubscriber = EntityOperationsSubscriber;
47
+ //# sourceMappingURL=entity-operations.subscriber.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entity-operations.subscriber.js","sourceRoot":"","sources":["../../src/metrics/entity-operations.subscriber.ts"],"names":[],"mappings":";;;AAWA,+CAAqD;AAErD;;;GAGG;AACH,MAAM,oBAAoB,GAAgD;IACxE,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,QAAQ;IAChB,YAAY,EAAE,QAAQ;IACtB,MAAM,EAAE,QAAQ;IAChB,YAAY,EAAE,QAAQ;CACvB,CAAC;AAEF;;;;;GAKG;AACH,MAAa,0BACX,SAAQ,kCAAoB;IAGC;IAA7B,YAA6B,QAAkC;QAC7D,KAAK,EAAE,CAAC;QADmB,aAAQ,GAAR,QAAQ,CAA0B;IAE/D,CAAC;IAED,MAAM,CAAC,EAAE,IAAI,EAAqB;QAChC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAC/C,CAAC;IAED,UAAU,CAAC,EAAE,GAAG,EAAkB;QAChC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,OAAO;QACT,CAAC;QAED,KAAK,MAAM,SAAS,IAAI,GAAG,CAAC,aAAa,EAAyB,EAAE,CAAC;YACnE,MAAM,EAAE,GAAG,oBAAoB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YAChD,IAAI,EAAE,EAAE,CAAC;gBACP,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;YACrD,CAAC;QACH,CAAC;IACH,CAAC;CACF;AA5BD,gEA4BC"}
@@ -0,0 +1,18 @@
1
+ import type { EventSubscriber, FlushEventArgs } from '@mikro-orm/core';
2
+ import type { HistogramLike } from '@rsdk/db/dist/metrics/plugin-kit';
3
+ import { DetachableSubscriber } from './subscribers';
4
+ export interface FlushMetrics {
5
+ duration: HistogramLike;
6
+ changesets: HistogramLike;
7
+ }
8
+ /**
9
+ * Меряет длительность flush и число changesets в нём.
10
+ * Упавший flush не доходит до afterFlush и не учитывается
11
+ */
12
+ export declare class FlushMetricsSubscriber extends DetachableSubscriber implements EventSubscriber {
13
+ private readonly metrics;
14
+ private readonly startedAt;
15
+ constructor(metrics: FlushMetrics);
16
+ beforeFlush({ uow }: FlushEventArgs): void;
17
+ afterFlush({ uow }: FlushEventArgs): void;
18
+ }
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FlushMetricsSubscriber = void 0;
4
+ const plugin_kit_1 = require("@rsdk/db/dist/metrics/plugin-kit");
5
+ const subscribers_1 = require("./subscribers");
6
+ /**
7
+ * Меряет длительность flush и число changesets в нём.
8
+ * Упавший flush не доходит до afterFlush и не учитывается
9
+ */
10
+ class FlushMetricsSubscriber extends subscribers_1.DetachableSubscriber {
11
+ metrics;
12
+ startedAt = new WeakMap();
13
+ constructor(metrics) {
14
+ super();
15
+ this.metrics = metrics;
16
+ }
17
+ beforeFlush({ uow }) {
18
+ if (!this.attached) {
19
+ return;
20
+ }
21
+ this.startedAt.set(uow, (0, plugin_kit_1.now)());
22
+ }
23
+ afterFlush({ uow }) {
24
+ if (!this.attached) {
25
+ return;
26
+ }
27
+ const startedAt = this.startedAt.get(uow);
28
+ if (startedAt === undefined) {
29
+ return;
30
+ }
31
+ this.startedAt.delete(uow);
32
+ this.metrics.duration.observe((0, plugin_kit_1.secondsSince)(startedAt));
33
+ this.metrics.changesets.observe(uow.getChangeSets().length);
34
+ }
35
+ }
36
+ exports.FlushMetricsSubscriber = FlushMetricsSubscriber;
37
+ //# sourceMappingURL=flush-metrics.subscriber.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flush-metrics.subscriber.js","sourceRoot":"","sources":["../../src/metrics/flush-metrics.subscriber.ts"],"names":[],"mappings":";;;AAEA,iEAAqE;AAErE,+CAAqD;AAOrD;;;GAGG;AACH,MAAa,sBACX,SAAQ,kCAAoB;IAKC;IAFZ,SAAS,GAAG,IAAI,OAAO,EAAkB,CAAC;IAE3D,YAA6B,OAAqB;QAChD,KAAK,EAAE,CAAC;QADmB,YAAO,GAAP,OAAO,CAAc;IAElD,CAAC;IAED,WAAW,CAAC,EAAE,GAAG,EAAkB;QACjC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,IAAA,gBAAG,GAAE,CAAC,CAAC;IACjC,CAAC;IAED,UAAU,CAAC,EAAE,GAAG,EAAkB;QAChC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,OAAO;QACT,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC1C,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC5B,OAAO;QACT,CAAC;QAED,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC3B,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAA,yBAAY,EAAC,SAAS,CAAC,CAAC,CAAC;QACvD,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC,MAAM,CAAC,CAAC;IAC9D,CAAC;CACF;AAhCD,wDAgCC"}
@@ -0,0 +1,23 @@
1
+ import type { MikroORM } from '@mikro-orm/core';
2
+ import type { Detach } from '@rsdk/db/dist/metrics/plugin-kit';
3
+ export type IdentityMapSize = () => number;
4
+ /**
5
+ * Число сущностей в identity map. Считается обходом, а не через `keys()`:
6
+ * `keys()` собирает массив через `push(...spread)` и на сотнях тысяч
7
+ * сущностей одного класса падает с `RangeError` (переполнение стека)
8
+ */
9
+ export declare const countIdentityMap: (map: Iterable<unknown>) => number;
10
+ /**
11
+ * Размер identity map глобального EntityManager
12
+ */
13
+ export declare const identityMapSize: (orm: MikroORM) => number;
14
+ /**
15
+ * EntityManager-ы, размер identity map которых gauge читает при scrape.
16
+ * Метрика живёт на весь процесс, а MikroORM — вместе с приложением.
17
+ * Источник, который бросил исключение или вернул не размер (не конечное
18
+ * число ≥ 0), в сумму не попадает: см. `ScrapeSourceRegistry`
19
+ */
20
+ export declare class IdentityMapRegistry {
21
+ static add(source: IdentityMapSize): Detach;
22
+ static total(): number;
23
+ }
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.IdentityMapRegistry = exports.identityMapSize = exports.countIdentityMap = void 0;
4
+ const plugin_kit_1 = require("@rsdk/db/dist/metrics/plugin-kit");
5
+ /**
6
+ * Число сущностей в identity map. Считается обходом, а не через `keys()`:
7
+ * `keys()` собирает массив через `push(...spread)` и на сотнях тысяч
8
+ * сущностей одного класса падает с `RangeError` (переполнение стека)
9
+ */
10
+ const countIdentityMap = (map) => {
11
+ let size = 0;
12
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
13
+ for (const _ of map) {
14
+ size++;
15
+ }
16
+ return size;
17
+ };
18
+ exports.countIdentityMap = countIdentityMap;
19
+ /**
20
+ * Размер identity map глобального EntityManager
21
+ */
22
+ const identityMapSize = (orm) => (0, exports.countIdentityMap)(orm.em.getUnitOfWork(false).getIdentityMap());
23
+ exports.identityMapSize = identityMapSize;
24
+ const isSize = (value) => typeof value === 'number' && Number.isFinite(value) && value >= 0;
25
+ const registry = new plugin_kit_1.ScrapeSourceRegistry(isSize);
26
+ /**
27
+ * EntityManager-ы, размер identity map которых gauge читает при scrape.
28
+ * Метрика живёт на весь процесс, а MikroORM — вместе с приложением.
29
+ * Источник, который бросил исключение или вернул не размер (не конечное
30
+ * число ≥ 0), в сумму не попадает: см. `ScrapeSourceRegistry`
31
+ */
32
+ class IdentityMapRegistry {
33
+ static add(source) {
34
+ return registry.add(source);
35
+ }
36
+ static total() {
37
+ return registry.snapshots().reduce((total, size) => total + size, 0);
38
+ }
39
+ }
40
+ exports.IdentityMapRegistry = IdentityMapRegistry;
41
+ //# sourceMappingURL=identity-map.registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identity-map.registry.js","sourceRoot":"","sources":["../../src/metrics/identity-map.registry.ts"],"names":[],"mappings":";;;AAEA,iEAAwE;AAIxE;;;;GAIG;AACI,MAAM,gBAAgB,GAAG,CAAC,GAAsB,EAAU,EAAE;IACjE,IAAI,IAAI,GAAG,CAAC,CAAC;IAEb,6DAA6D;IAC7D,KAAK,MAAM,CAAC,IAAI,GAAG,EAAE,CAAC;QACpB,IAAI,EAAE,CAAC;IACT,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AATW,QAAA,gBAAgB,oBAS3B;AAEF;;GAEG;AACI,MAAM,eAAe,GAAG,CAAC,GAAa,EAAU,EAAE,CACvD,IAAA,wBAAgB,EAAC,GAAG,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;AADpD,QAAA,eAAe,mBACqC;AAEjE,MAAM,MAAM,GAAG,CAAC,KAAc,EAAmB,EAAE,CACjD,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AAEpE,MAAM,QAAQ,GAAG,IAAI,iCAAoB,CAAC,MAAM,CAAC,CAAC;AAElD;;;;;GAKG;AACH,MAAa,mBAAmB;IAC9B,MAAM,CAAC,GAAG,CAAC,MAAuB;QAChC,OAAO,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC9B,CAAC;IAED,MAAM,CAAC,KAAK;QACV,OAAO,QAAQ,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC;IACvE,CAAC;CACF;AARD,kDAQC"}
@@ -0,0 +1,18 @@
1
+ import type { MikroORM } from '@mikro-orm/core';
2
+ export interface KnexPool {
3
+ resource: string;
4
+ pool: unknown;
5
+ isPostgres: boolean;
6
+ }
7
+ /**
8
+ * Пул knex основного соединения. Knex есть только у SQL-драйверов, и пул
9
+ * у него — tarn при любом диалекте. Без knex или без пула результат
10
+ * `undefined`.
11
+ *
12
+ * Здесь пул только находится: что это действительно пул tarn, проверяет
13
+ * `DbClientMetrics.instrumentPool`.
14
+ *
15
+ * `resource` — вторая часть значения метки `pool`, всегда `mikro-orm`. Имя
16
+ * приложения из `APP_NAME` к нему добавляет `DbClientMetrics`
17
+ */
18
+ export declare const findKnexPool: (orm: MikroORM) => KnexPool | undefined;
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.findKnexPool = void 0;
4
+ /**
5
+ * Пул knex основного соединения. Knex есть только у SQL-драйверов, и пул
6
+ * у него — tarn при любом диалекте. Без knex или без пула результат
7
+ * `undefined`.
8
+ *
9
+ * Здесь пул только находится: что это действительно пул tarn, проверяет
10
+ * `DbClientMetrics.instrumentPool`.
11
+ *
12
+ * `resource` — вторая часть значения метки `pool`, всегда `mikro-orm`. Имя
13
+ * приложения из `APP_NAME` к нему добавляет `DbClientMetrics`
14
+ */
15
+ const findKnexPool = (orm) => {
16
+ const connection = orm.em.getConnection();
17
+ const client = connection.getKnex?.().client;
18
+ if (!client?.pool) {
19
+ return undefined;
20
+ }
21
+ return {
22
+ resource: 'mikro-orm',
23
+ pool: client.pool,
24
+ isPostgres: client.dialect === 'postgresql',
25
+ };
26
+ };
27
+ exports.findKnexPool = findKnexPool;
28
+ //# sourceMappingURL=knex-pool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"knex-pool.js","sourceRoot":"","sources":["../../src/metrics/knex-pool.ts"],"names":[],"mappings":";;;AAYA;;;;;;;;;;GAUG;AACI,MAAM,YAAY,GAAG,CAAC,GAAa,EAAwB,EAAE;IAClE,MAAM,UAAU,GAAG,GAAG,CAAC,EAAE,CAAC,aAAa,EAAkC,CAAC;IAC1E,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC;IAE7C,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC;QAClB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO;QACL,QAAQ,EAAE,WAAW;QACrB,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,UAAU,EAAE,MAAM,CAAC,OAAO,KAAK,YAAY;KAC5C,CAAC;AACJ,CAAC,CAAC;AAbW,QAAA,YAAY,gBAavB"}
@@ -0,0 +1,7 @@
1
+ import { Gauge, Histogram } from '@rsdk/core';
2
+ export declare class MikroOrmFlushDuration extends Histogram {
3
+ }
4
+ export declare class MikroOrmFlushChangesets extends Histogram {
5
+ }
6
+ export declare class MikroOrmIdentityMapSize extends Gauge {
7
+ }
@@ -0,0 +1,51 @@
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.MikroOrmIdentityMapSize = exports.MikroOrmFlushChangesets = exports.MikroOrmFlushDuration = void 0;
10
+ const core_1 = require("@rsdk/core");
11
+ const plugin_kit_1 = require("@rsdk/db/dist/metrics/plugin-kit");
12
+ const identity_map_registry_1 = require("./identity-map.registry");
13
+ const CHANGESET_BUCKETS = [
14
+ 1, 5, 10, 25, 50, 100, 250, 500, 1000,
15
+ ];
16
+ let MikroOrmFlushDuration = class MikroOrmFlushDuration extends core_1.Histogram {
17
+ };
18
+ exports.MikroOrmFlushDuration = MikroOrmFlushDuration;
19
+ exports.MikroOrmFlushDuration = MikroOrmFlushDuration = __decorate([
20
+ (0, plugin_kit_1.DbMetric)('histogram', {
21
+ name: 'mikro_orm_flush_duration_seconds',
22
+ help: 'Duration of EntityManager flush',
23
+ description: 'Длительность em.flush()',
24
+ buckets: plugin_kit_1.QUERY_BUCKETS,
25
+ })
26
+ ], MikroOrmFlushDuration);
27
+ let MikroOrmFlushChangesets = class MikroOrmFlushChangesets extends core_1.Histogram {
28
+ };
29
+ exports.MikroOrmFlushChangesets = MikroOrmFlushChangesets;
30
+ exports.MikroOrmFlushChangesets = MikroOrmFlushChangesets = __decorate([
31
+ (0, plugin_kit_1.DbMetric)('histogram', {
32
+ name: 'mikro_orm_flush_changesets',
33
+ help: 'Number of changesets per flush',
34
+ description: 'Число changesets за один flush',
35
+ buckets: CHANGESET_BUCKETS,
36
+ })
37
+ ], MikroOrmFlushChangesets);
38
+ let MikroOrmIdentityMapSize = class MikroOrmIdentityMapSize extends core_1.Gauge {
39
+ };
40
+ exports.MikroOrmIdentityMapSize = MikroOrmIdentityMapSize;
41
+ exports.MikroOrmIdentityMapSize = MikroOrmIdentityMapSize = __decorate([
42
+ (0, plugin_kit_1.DbMetric)('gauge', {
43
+ name: 'mikro_orm_identity_map_size',
44
+ help: 'Number of entities in the global EntityManager identity map',
45
+ description: 'Размер identity map глобального EntityManager. Рост означает, что забыли fork или clear',
46
+ collect() {
47
+ this.set(identity_map_registry_1.IdentityMapRegistry.total());
48
+ },
49
+ })
50
+ ], MikroOrmIdentityMapSize);
51
+ //# sourceMappingURL=mikro-orm.metrics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mikro-orm.metrics.js","sourceRoot":"","sources":["../../src/metrics/mikro-orm.metrics.ts"],"names":[],"mappings":";;;;;;;;;AAAA,qCAA8C;AAC9C,iEAA2E;AAE3E,mEAA8D;AAE9D,MAAM,iBAAiB,GAAsB;IAC3C,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI;CACtC,CAAC;AAQK,IAAM,qBAAqB,GAA3B,MAAM,qBAAsB,SAAQ,gBAAS;CAAG,CAAA;AAA1C,sDAAqB;gCAArB,qBAAqB;IANjC,IAAA,qBAAQ,EAAC,WAAW,EAAE;QACrB,IAAI,EAAE,kCAAkC;QACxC,IAAI,EAAE,iCAAiC;QACvC,WAAW,EAAE,yBAAyB;QACtC,OAAO,EAAE,0BAAa;KACvB,CAAC;GACW,qBAAqB,CAAqB;AAQhD,IAAM,uBAAuB,GAA7B,MAAM,uBAAwB,SAAQ,gBAAS;CAAG,CAAA;AAA5C,0DAAuB;kCAAvB,uBAAuB;IANnC,IAAA,qBAAQ,EAAC,WAAW,EAAE;QACrB,IAAI,EAAE,4BAA4B;QAClC,IAAI,EAAE,gCAAgC;QACtC,WAAW,EAAE,gCAAgC;QAC7C,OAAO,EAAE,iBAAiB;KAC3B,CAAC;GACW,uBAAuB,CAAqB;AAWlD,IAAM,uBAAuB,GAA7B,MAAM,uBAAwB,SAAQ,YAAK;CAAG,CAAA;AAAxC,0DAAuB;kCAAvB,uBAAuB;IATnC,IAAA,qBAAQ,EAAC,OAAO,EAAE;QACjB,IAAI,EAAE,6BAA6B;QACnC,IAAI,EAAE,6DAA6D;QACnE,WAAW,EACT,yFAAyF;QAC3F,OAAO;YACL,IAAI,CAAC,GAAG,CAAC,2CAAmB,CAAC,KAAK,EAAE,CAAC,CAAC;QACxC,CAAC;KACF,CAAC;GACW,uBAAuB,CAAiB"}
@@ -0,0 +1,25 @@
1
+ import type { EventManager, EventSubscriber } from '@mikro-orm/core';
2
+ import type { Detach } from '@rsdk/db/dist/metrics/plugin-kit';
3
+ /**
4
+ * Subscriber метрик, которого можно выключить: у EventManager нет способа
5
+ * удалить подписчика. Каждый хук наследника первым делом проверяет `attached`.
6
+ * Выключить можно только через {@link DetachableSubscriber.detach}, включить
7
+ * обратно нельзя.
8
+ *
9
+ * `detach`, `detached` и `attached` не совпадают ни с одним ключом
10
+ * `EventType`, поэтому MikroORM не принимает их за хуки. `EventSubscriber`
11
+ * реализуют наследники: у него все поля необязательные, и класс без хуков
12
+ * TypeScript не примет
13
+ */
14
+ export declare abstract class DetachableSubscriber {
15
+ private detached;
16
+ protected get attached(): boolean;
17
+ detach(): void;
18
+ }
19
+ /**
20
+ * Регистрирует subscriber в EventManager. Detach не удаляет subscriber из
21
+ * EventManager, а выключает его: subscriber остаётся зарегистрированным,
22
+ * но больше ничего не пишет. Повторный вызов ничего не меняет:
23
+ * {@link DetachableSubscriber.detach} только ставит флаг
24
+ */
25
+ export declare const registerSubscriber: (events: EventManager, subscriber: DetachableSubscriber & EventSubscriber) => Detach;
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerSubscriber = exports.DetachableSubscriber = void 0;
4
+ /**
5
+ * Subscriber метрик, которого можно выключить: у EventManager нет способа
6
+ * удалить подписчика. Каждый хук наследника первым делом проверяет `attached`.
7
+ * Выключить можно только через {@link DetachableSubscriber.detach}, включить
8
+ * обратно нельзя.
9
+ *
10
+ * `detach`, `detached` и `attached` не совпадают ни с одним ключом
11
+ * `EventType`, поэтому MikroORM не принимает их за хуки. `EventSubscriber`
12
+ * реализуют наследники: у него все поля необязательные, и класс без хуков
13
+ * TypeScript не примет
14
+ */
15
+ class DetachableSubscriber {
16
+ detached = false;
17
+ get attached() {
18
+ return !this.detached;
19
+ }
20
+ detach() {
21
+ this.detached = true;
22
+ }
23
+ }
24
+ exports.DetachableSubscriber = DetachableSubscriber;
25
+ /**
26
+ * Регистрирует subscriber в EventManager. Detach не удаляет subscriber из
27
+ * EventManager, а выключает его: subscriber остаётся зарегистрированным,
28
+ * но больше ничего не пишет. Повторный вызов ничего не меняет:
29
+ * {@link DetachableSubscriber.detach} только ставит флаг
30
+ */
31
+ const registerSubscriber = (events, subscriber) => {
32
+ events.registerSubscriber(subscriber);
33
+ return () => subscriber.detach();
34
+ };
35
+ exports.registerSubscriber = registerSubscriber;
36
+ //# sourceMappingURL=subscribers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subscribers.js","sourceRoot":"","sources":["../../src/metrics/subscribers.ts"],"names":[],"mappings":";;;AAGA;;;;;;;;;;GAUG;AACH,MAAsB,oBAAoB;IAChC,QAAQ,GAAG,KAAK,CAAC;IAEzB,IAAc,QAAQ;QACpB,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC;IACxB,CAAC;IAED,MAAM;QACJ,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;IACvB,CAAC;CACF;AAVD,oDAUC;AAED;;;;;GAKG;AACI,MAAM,kBAAkB,GAAG,CAChC,MAAoB,EACpB,UAAkD,EAC1C,EAAE;IACV,MAAM,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC;IAEtC,OAAO,GAAG,EAAE,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;AACnC,CAAC,CAAC;AAPW,QAAA,kBAAkB,sBAO7B"}
@@ -12,6 +12,7 @@ const db_1 = require("@rsdk/db");
12
12
  const logging_1 = require("@rsdk/logging");
13
13
  const lodash_1 = __importDefault(require("lodash"));
14
14
  const node_path_1 = __importDefault(require("node:path"));
15
+ const metrics_module_1 = require("./modules/metrics.module");
15
16
  const mikro_orm_config_1 = require("./providers/mikro-orm.config");
16
17
  const mikro_orm_logger_adapter_1 = require("./providers/mikro-orm-logger.adapter");
17
18
  const mikro_orm_errors_transformer_1 = require("./mikro-orm.errors-transformer");
@@ -164,6 +165,7 @@ class MikroOrmPlugin {
164
165
  .value();
165
166
  },
166
167
  }),
168
+ metrics_module_1.MikroOrmMetricsModule,
167
169
  ];
168
170
  }
169
171
  errorTransformers() {
@@ -1 +1 @@
1
- {"version":3,"file":"mikro-orm.plugin.js","sourceRoot":"","sources":["../src/mikro-orm.plugin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mikro-orm.plugin.js","sourceRoot":"","sources":["../src/mikro-orm.plugin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import { MikroORM } from '@mikro-orm/core';
2
+ import type { OnApplicationShutdown, OnModuleInit } from '@nestjs/common';
3
+ import type { DbClientMetrics, Detach, EntityOperationsRecorder } from '@rsdk/db/dist/metrics/plugin-kit';
4
+ import { DbMetricsModuleBase } from '@rsdk/db/dist/metrics/plugin-kit';
5
+ import { ILogger } from '@rsdk/logging';
6
+ import { MikroOrmFlushChangesets, MikroOrmFlushDuration } from '../metrics/mikro-orm.metrics';
7
+ /**
8
+ * Подключает метрики БД к MikroORM: пул knex, flush, identity map и
9
+ * операции над сущностями. Выключатель `DB_METRICS_ENABLED`, внедрение
10
+ * метрик через DI (`DbClientMetrics` и `EntityOperationsRecorder` — по
11
+ * токенам из `plugin-kit`) и итог при остановке приложения описаны в
12
+ * {@link DbMetricsModuleBase}. Значение метки `pool` собирает ядро из
13
+ * `APP_NAME` и ресурса из {@link findKnexPool}.
14
+ *
15
+ * При остановке subscriber-ы выключаются. Удалить их из EventManager нельзя:
16
+ * публичного способа нет, поэтому они остаются зарегистрированными
17
+ * у закрытого ORM, но ничего не пишут
18
+ */
19
+ export declare class MikroOrmMetricsModule extends DbMetricsModuleBase implements OnModuleInit, OnApplicationShutdown {
20
+ private readonly orm;
21
+ private readonly flushDuration;
22
+ private readonly flushChangesets;
23
+ private readonly logger;
24
+ /**
25
+ * @param flushDuration `null`, только когда метрики выключены, а тогда
26
+ * `attach` не вызывается; то же для `flushChangesets`
27
+ */
28
+ constructor(orm: MikroORM, client: DbClientMetrics | null, entityOperations: EntityOperationsRecorder | null, flushDuration: MikroOrmFlushDuration | null, flushChangesets: MikroOrmFlushChangesets | null, logger: ILogger);
29
+ protected attach(add: (detach?: Detach) => void, client: DbClientMetrics): void;
30
+ private instrumentPool;
31
+ private subscribe;
32
+ }
@@ -0,0 +1,101 @@
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.MikroOrmMetricsModule = void 0;
16
+ const core_1 = require("@mikro-orm/core");
17
+ const common_1 = require("@nestjs/common");
18
+ const core_2 = require("@rsdk/core");
19
+ const plugin_kit_1 = require("@rsdk/db/dist/metrics/plugin-kit");
20
+ const entity_operations_subscriber_1 = require("../metrics/entity-operations.subscriber");
21
+ const flush_metrics_subscriber_1 = require("../metrics/flush-metrics.subscriber");
22
+ const identity_map_registry_1 = require("../metrics/identity-map.registry");
23
+ const knex_pool_1 = require("../metrics/knex-pool");
24
+ const mikro_orm_metrics_1 = require("../metrics/mikro-orm.metrics");
25
+ const subscribers_1 = require("../metrics/subscribers");
26
+ /**
27
+ * Подключает метрики БД к MikroORM: пул knex, flush, identity map и
28
+ * операции над сущностями. Выключатель `DB_METRICS_ENABLED`, внедрение
29
+ * метрик через DI (`DbClientMetrics` и `EntityOperationsRecorder` — по
30
+ * токенам из `plugin-kit`) и итог при остановке приложения описаны в
31
+ * {@link DbMetricsModuleBase}. Значение метки `pool` собирает ядро из
32
+ * `APP_NAME` и ресурса из {@link findKnexPool}.
33
+ *
34
+ * При остановке subscriber-ы выключаются. Удалить их из EventManager нельзя:
35
+ * публичного способа нет, поэтому они остаются зарегистрированными
36
+ * у закрытого ORM, но ничего не пишут
37
+ */
38
+ let MikroOrmMetricsModule = class MikroOrmMetricsModule extends plugin_kit_1.DbMetricsModuleBase {
39
+ orm;
40
+ flushDuration;
41
+ flushChangesets;
42
+ logger;
43
+ /**
44
+ * @param flushDuration `null`, только когда метрики выключены, а тогда
45
+ * `attach` не вызывается; то же для `flushChangesets`
46
+ */
47
+ constructor(orm, client, entityOperations, flushDuration, flushChangesets, logger) {
48
+ super(client, entityOperations);
49
+ this.orm = orm;
50
+ this.flushDuration = flushDuration;
51
+ this.flushChangesets = flushChangesets;
52
+ this.logger = logger;
53
+ }
54
+ attach(add, client) {
55
+ this.instrumentPool(add, client);
56
+ this.subscribe(add);
57
+ add(identity_map_registry_1.IdentityMapRegistry.add(() => (0, identity_map_registry_1.identityMapSize)(this.orm)));
58
+ }
59
+ instrumentPool(add, client) {
60
+ const knexPool = (0, knex_pool_1.findKnexPool)(this.orm);
61
+ if (!knexPool) {
62
+ this.logger.info('Pool metrics are not supported for this driver');
63
+ return;
64
+ }
65
+ const { resource, pool, isPostgres } = knexPool;
66
+ // Обёртка `query` рассчитана на соединения `pg`, а они в пуле knex
67
+ // только у диалекта postgresql
68
+ add(client.instrumentPool('tarn', pool, resource, this.logger, {
69
+ instrumentQueries: isPostgres,
70
+ }));
71
+ }
72
+ subscribe(add) {
73
+ const events = this.orm.em.getEventManager();
74
+ if (this.flushDuration && this.flushChangesets) {
75
+ add((0, subscribers_1.registerSubscriber)(events, new flush_metrics_subscriber_1.FlushMetricsSubscriber({
76
+ duration: this.flushDuration,
77
+ changesets: this.flushChangesets,
78
+ })));
79
+ }
80
+ if (this.entityOperations) {
81
+ add((0, subscribers_1.registerSubscriber)(events, new entity_operations_subscriber_1.EntityOperationsSubscriber(this.entityOperations)));
82
+ }
83
+ }
84
+ };
85
+ exports.MikroOrmMetricsModule = MikroOrmMetricsModule;
86
+ exports.MikroOrmMetricsModule = MikroOrmMetricsModule = __decorate([
87
+ (0, common_1.Module)({
88
+ providers: (0, plugin_kit_1.dbMetricsModuleProviders)([
89
+ mikro_orm_metrics_1.MikroOrmFlushDuration,
90
+ mikro_orm_metrics_1.MikroOrmFlushChangesets,
91
+ mikro_orm_metrics_1.MikroOrmIdentityMapSize,
92
+ ]),
93
+ }),
94
+ __param(1, (0, common_1.Inject)(plugin_kit_1.DB_CLIENT_METRICS_TOKEN)),
95
+ __param(2, (0, common_1.Inject)(plugin_kit_1.ENTITY_OPERATIONS_RECORDER_TOKEN)),
96
+ __param(3, (0, common_1.Inject)(mikro_orm_metrics_1.MikroOrmFlushDuration)),
97
+ __param(4, (0, common_1.Inject)(mikro_orm_metrics_1.MikroOrmFlushChangesets)),
98
+ __param(5, (0, core_2.InjectLogger)(MikroOrmMetricsModule)),
99
+ __metadata("design:paramtypes", [core_1.MikroORM, Object, Object, Object, Object, Object])
100
+ ], MikroOrmMetricsModule);
101
+ //# sourceMappingURL=metrics.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metrics.module.js","sourceRoot":"","sources":["../../src/modules/metrics.module.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,0CAA2C;AAE3C,2CAAgD;AAChD,qCAA0C;AAM1C,iEAK0C;AAG1C,0FAAqF;AACrF,kFAA6E;AAC7E,4EAG0C;AAC1C,oDAAoD;AACpD,oEAIsC;AACtC,wDAA4D;AAE5D;;;;;;;;;;;GAWG;AAQI,IAAM,qBAAqB,GAA3B,MAAM,qBACX,SAAQ,gCAAmB;IAQR;IAKA;IAEA;IACqC;IAbxD;;;OAGG;IACH,YACmB,GAAa,EACG,MAA8B,EAE/D,gBAAiD,EAEhC,aAA2C,EAE3C,eAA+C,EACV,MAAe;QAErE,KAAK,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;QAVf,QAAG,GAAH,GAAG,CAAU;QAKb,kBAAa,GAAb,aAAa,CAA8B;QAE3C,oBAAe,GAAf,eAAe,CAAgC;QACV,WAAM,GAAN,MAAM,CAAS;IAGvE,CAAC;IAES,MAAM,CACd,GAA8B,EAC9B,MAAuB;QAEvB,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACjC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QACpB,GAAG,CAAC,2CAAmB,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAA,uCAAe,EAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAChE,CAAC;IAEO,cAAc,CACpB,GAA8B,EAC9B,MAAuB;QAEvB,MAAM,QAAQ,GAAG,IAAA,wBAAY,EAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACxC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;YACnE,OAAO;QACT,CAAC;QAED,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,QAAQ,CAAC;QAEhD,mEAAmE;QACnE,+BAA+B;QAE/B,GAAG,CACD,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE;YACzD,iBAAiB,EAAE,UAAU;SAC9B,CAAC,CACH,CAAC;IACJ,CAAC;IAEO,SAAS,CAAC,GAA8B;QAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,eAAe,EAAE,CAAC;QAE7C,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YAC/C,GAAG,CACD,IAAA,gCAAkB,EAChB,MAAM,EACN,IAAI,iDAAsB,CAAC;gBACzB,QAAQ,EAAE,IAAI,CAAC,aAAa;gBAC5B,UAAU,EAAE,IAAI,CAAC,eAAe;aACjC,CAAC,CACH,CACF,CAAC;QACJ,CAAC;QAED,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC1B,GAAG,CACD,IAAA,gCAAkB,EAChB,MAAM,EACN,IAAI,yDAA0B,CAAC,IAAI,CAAC,gBAAgB,CAAC,CACtD,CACF,CAAC;QACJ,CAAC;IACH,CAAC;CACF,CAAA;AA7EY,sDAAqB;gCAArB,qBAAqB;IAPjC,IAAA,eAAM,EAAC;QACN,SAAS,EAAE,IAAA,qCAAwB,EAAC;YAClC,yCAAqB;YACrB,2CAAuB;YACvB,2CAAuB;SACxB,CAAC;KACH,CAAC;IAWG,WAAA,IAAA,eAAM,EAAC,oCAAuB,CAAC,CAAA;IAC/B,WAAA,IAAA,eAAM,EAAC,6CAAgC,CAAC,CAAA;IAExC,WAAA,IAAA,eAAM,EAAC,yCAAqB,CAAC,CAAA;IAE7B,WAAA,IAAA,eAAM,EAAC,2CAAuB,CAAC,CAAA;IAE/B,WAAA,IAAA,mBAAY,EAAC,qBAAqB,CAAC,CAAA;qCARd,eAAQ;GATrB,qBAAqB,CA6EjC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rsdk/db.mikro-orm",
3
- "version": "5.15.0-next.0",
3
+ "version": "5.15.0-next.10",
4
4
  "description": "Mikro-orm module for platform",
5
5
  "license": "Apache License 2.0",
6
6
  "publishConfig": {
@@ -56,5 +56,5 @@
56
56
  "optional": true
57
57
  }
58
58
  },
59
- "gitHead": "73cae60f47c13e668ab69803051724bbc54008af"
59
+ "gitHead": "5c57cb5f847d357896054931b63a2c20094faeca"
60
60
  }