|
1 |
| -import { type Gauge, type Meter, type Metrics, ValueType } from './telemetry.js'; |
| 1 | +import { BatchObservableResult, type Meter, type Metrics, ObservableGauge, ValueType } from './telemetry.js'; |
2 | 2 |
|
3 | 3 | export type LmdbMetricDescriptor = {
|
4 | 4 | name: Metrics;
|
5 | 5 | description: string;
|
6 | 6 | };
|
7 | 7 |
|
| 8 | +export type LmdbStatsCallback = () => { mappingSize: number; numItems: number; actualSize: number }; |
| 9 | + |
8 | 10 | export class LmdbMetrics {
|
9 |
| - private dbMapSize: Gauge; |
10 |
| - private dbUsedSize: Gauge; |
11 |
| - private dbNumItems: Gauge; |
| 11 | + private dbMapSize: ObservableGauge; |
| 12 | + private dbUsedSize: ObservableGauge; |
| 13 | + private dbNumItems: ObservableGauge; |
12 | 14 |
|
13 | 15 | constructor(
|
14 | 16 | meter: Meter,
|
15 | 17 | dbMapSizeDescriptor: LmdbMetricDescriptor,
|
16 | 18 | dbUsedSizeDescriptor: LmdbMetricDescriptor,
|
17 | 19 | dbNumItemsDescriptor: LmdbMetricDescriptor,
|
| 20 | + private getStats?: LmdbStatsCallback, |
18 | 21 | ) {
|
19 |
| - this.dbMapSize = meter.createGauge(dbMapSizeDescriptor.name, { |
| 22 | + this.dbMapSize = meter.createObservableGauge(dbMapSizeDescriptor.name, { |
20 | 23 | description: dbMapSizeDescriptor.description,
|
21 | 24 | valueType: ValueType.INT,
|
22 | 25 | });
|
23 |
| - this.dbUsedSize = meter.createGauge(dbUsedSizeDescriptor.name, { |
| 26 | + this.dbUsedSize = meter.createObservableGauge(dbUsedSizeDescriptor.name, { |
24 | 27 | description: dbUsedSizeDescriptor.description,
|
25 | 28 | valueType: ValueType.INT,
|
26 | 29 | });
|
27 |
| - this.dbNumItems = meter.createGauge(dbNumItemsDescriptor.name, { |
| 30 | + this.dbNumItems = meter.createObservableGauge(dbNumItemsDescriptor.name, { |
28 | 31 | description: dbNumItemsDescriptor.description,
|
29 | 32 | valueType: ValueType.INT,
|
30 | 33 | });
|
31 |
| - } |
32 | 34 |
|
33 |
| - public recordDBMetrics(metrics: { mappingSize: number; numItems: number; actualSize: number }) { |
34 |
| - this.dbMapSize.record(metrics.mappingSize); |
35 |
| - this.dbNumItems.record(metrics.actualSize); |
36 |
| - this.dbUsedSize.record(metrics.actualSize); |
| 35 | + meter.addBatchObservableCallback(this.recordDBMetrics, [this.dbMapSize, this.dbUsedSize, this.dbNumItems]); |
37 | 36 | }
|
| 37 | + |
| 38 | + private recordDBMetrics = (observable: BatchObservableResult) => { |
| 39 | + if (!this.getStats) { |
| 40 | + return; |
| 41 | + } |
| 42 | + const metrics = this.getStats(); |
| 43 | + observable.observe(this.dbMapSize, metrics.mappingSize); |
| 44 | + observable.observe(this.dbNumItems, metrics.numItems); |
| 45 | + observable.observe(this.dbUsedSize, metrics.actualSize); |
| 46 | + }; |
38 | 47 | }
|
0 commit comments