@powersync/service-core 0.0.0-dev-20250310190630 → 0.0.0-dev-20250312090341
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 +2 -7
- package/dist/api/api-index.d.ts +0 -1
- package/dist/api/api-index.js +0 -1
- package/dist/api/api-index.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/metrics/Metrics.d.ts +30 -0
- package/dist/metrics/Metrics.js +202 -0
- package/dist/metrics/Metrics.js.map +1 -0
- package/dist/replication/AbstractReplicationJob.d.ts +0 -2
- package/dist/replication/AbstractReplicationJob.js.map +1 -1
- package/dist/replication/AbstractReplicator.d.ts +0 -3
- package/dist/replication/AbstractReplicator.js +0 -3
- package/dist/replication/AbstractReplicator.js.map +1 -1
- package/dist/replication/ReplicationModule.d.ts +0 -7
- package/dist/replication/ReplicationModule.js +0 -1
- package/dist/replication/ReplicationModule.js.map +1 -1
- package/dist/replication/replication-index.d.ts +0 -1
- package/dist/replication/replication-index.js +0 -1
- package/dist/replication/replication-index.js.map +1 -1
- package/dist/routes/endpoints/socket-route.js +5 -5
- package/dist/routes/endpoints/socket-route.js.map +1 -1
- package/dist/routes/endpoints/sync-stream.js +6 -6
- package/dist/routes/endpoints/sync-stream.js.map +1 -1
- package/dist/storage/SyncRulesBucketStorage.d.ts +2 -1
- package/dist/storage/SyncRulesBucketStorage.js +1 -1
- package/dist/storage/SyncRulesBucketStorage.js.map +1 -1
- package/dist/storage/bson.d.ts +1 -0
- package/dist/storage/bson.js +6 -10
- package/dist/storage/bson.js.map +1 -1
- package/dist/storage/storage-index.d.ts +0 -1
- package/dist/storage/storage-index.js +0 -1
- package/dist/storage/storage-index.js.map +1 -1
- package/dist/sync/BucketChecksumState.d.ts +3 -0
- package/dist/sync/BucketChecksumState.js +51 -21
- package/dist/sync/BucketChecksumState.js.map +1 -1
- package/dist/sync/RequestTracker.d.ts +0 -3
- package/dist/sync/RequestTracker.js +3 -8
- package/dist/sync/RequestTracker.js.map +1 -1
- package/dist/sync/util.d.ts +1 -0
- package/dist/sync/util.js +11 -0
- package/dist/sync/util.js.map +1 -1
- package/dist/system/ServiceContext.d.ts +3 -3
- package/dist/system/ServiceContext.js +3 -7
- package/dist/system/ServiceContext.js.map +1 -1
- package/dist/util/config/compound-config-collector.js +1 -2
- package/dist/util/config/compound-config-collector.js.map +1 -1
- package/package.json +7 -7
- package/src/api/api-index.ts +0 -1
- package/src/index.ts +2 -2
- package/src/metrics/Metrics.ts +255 -0
- package/src/replication/AbstractReplicationJob.ts +0 -2
- package/src/replication/AbstractReplicator.ts +0 -7
- package/src/replication/ReplicationModule.ts +0 -10
- package/src/replication/replication-index.ts +0 -1
- package/src/routes/endpoints/socket-route.ts +5 -6
- package/src/routes/endpoints/sync-stream.ts +6 -7
- package/src/storage/SyncRulesBucketStorage.ts +3 -2
- package/src/storage/bson.ts +7 -9
- package/src/storage/storage-index.ts +0 -1
- package/src/sync/BucketChecksumState.ts +54 -22
- package/src/sync/RequestTracker.ts +3 -9
- package/src/sync/util.ts +12 -0
- package/src/system/ServiceContext.ts +4 -9
- package/src/util/config/compound-config-collector.ts +1 -2
- package/test/src/sync/BucketChecksumState.test.ts +3 -2
- package/tsconfig.tsbuildinfo +1 -1
- package/dist/api/api-metrics.d.ts +0 -11
- package/dist/api/api-metrics.js +0 -30
- package/dist/api/api-metrics.js.map +0 -1
- package/dist/metrics/MetricsEngine.d.ts +0 -21
- package/dist/metrics/MetricsEngine.js +0 -79
- package/dist/metrics/MetricsEngine.js.map +0 -1
- package/dist/metrics/metrics-index.d.ts +0 -4
- package/dist/metrics/metrics-index.js +0 -5
- package/dist/metrics/metrics-index.js.map +0 -1
- package/dist/metrics/metrics-interfaces.d.ts +0 -36
- package/dist/metrics/metrics-interfaces.js +0 -6
- package/dist/metrics/metrics-interfaces.js.map +0 -1
- package/dist/metrics/open-telemetry/OpenTelemetryMetricsFactory.d.ts +0 -10
- package/dist/metrics/open-telemetry/OpenTelemetryMetricsFactory.js +0 -51
- package/dist/metrics/open-telemetry/OpenTelemetryMetricsFactory.js.map +0 -1
- package/dist/metrics/open-telemetry/util.d.ts +0 -6
- package/dist/metrics/open-telemetry/util.js +0 -56
- package/dist/metrics/open-telemetry/util.js.map +0 -1
- package/dist/replication/replication-metrics.d.ts +0 -11
- package/dist/replication/replication-metrics.js +0 -39
- package/dist/replication/replication-metrics.js.map +0 -1
- package/dist/storage/storage-metrics.d.ts +0 -4
- package/dist/storage/storage-metrics.js +0 -56
- package/dist/storage/storage-metrics.js.map +0 -1
- package/src/api/api-metrics.ts +0 -35
- package/src/metrics/MetricsEngine.ts +0 -98
- package/src/metrics/metrics-index.ts +0 -4
- package/src/metrics/metrics-interfaces.ts +0 -41
- package/src/metrics/open-telemetry/OpenTelemetryMetricsFactory.ts +0 -66
- package/src/metrics/open-telemetry/util.ts +0 -74
- package/src/replication/replication-metrics.ts +0 -45
- package/src/storage/storage-metrics.ts +0 -67
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { MetricsEngine } from '../metrics/MetricsEngine.js';
|
|
2
|
-
/**
|
|
3
|
-
* Create and register the core API metrics.
|
|
4
|
-
* @param engine
|
|
5
|
-
*/
|
|
6
|
-
export declare function createCoreAPIMetrics(engine: MetricsEngine): void;
|
|
7
|
-
/**
|
|
8
|
-
* Initialise the core API metrics. This should be called after the metrics have been created.
|
|
9
|
-
* @param engine
|
|
10
|
-
*/
|
|
11
|
-
export declare function initializeCoreAPIMetrics(engine: MetricsEngine): void;
|
package/dist/api/api-metrics.js
DELETED
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import { APIMetric } from '@powersync/service-types';
|
|
2
|
-
/**
|
|
3
|
-
* Create and register the core API metrics.
|
|
4
|
-
* @param engine
|
|
5
|
-
*/
|
|
6
|
-
export function createCoreAPIMetrics(engine) {
|
|
7
|
-
engine.createCounter({
|
|
8
|
-
name: APIMetric.DATA_SYNCED_BYTES,
|
|
9
|
-
description: 'Uncompressed size of synced data',
|
|
10
|
-
unit: 'bytes'
|
|
11
|
-
});
|
|
12
|
-
engine.createCounter({
|
|
13
|
-
name: APIMetric.OPERATIONS_SYNCED,
|
|
14
|
-
description: 'Number of operations synced'
|
|
15
|
-
});
|
|
16
|
-
engine.createUpDownCounter({
|
|
17
|
-
name: APIMetric.CONCURRENT_CONNECTIONS,
|
|
18
|
-
description: 'Number of concurrent sync connections'
|
|
19
|
-
});
|
|
20
|
-
}
|
|
21
|
-
/**
|
|
22
|
-
* Initialise the core API metrics. This should be called after the metrics have been created.
|
|
23
|
-
* @param engine
|
|
24
|
-
*/
|
|
25
|
-
export function initializeCoreAPIMetrics(engine) {
|
|
26
|
-
const concurrent_connections = engine.getUpDownCounter(APIMetric.CONCURRENT_CONNECTIONS);
|
|
27
|
-
// Initialize the metric, so that it reports a value before connections have been opened.
|
|
28
|
-
concurrent_connections.add(0);
|
|
29
|
-
}
|
|
30
|
-
//# sourceMappingURL=api-metrics.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"api-metrics.js","sourceRoot":"","sources":["../../src/api/api-metrics.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAErD;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAqB;IACxD,MAAM,CAAC,aAAa,CAAC;QACnB,IAAI,EAAE,SAAS,CAAC,iBAAiB;QACjC,WAAW,EAAE,kCAAkC;QAC/C,IAAI,EAAE,OAAO;KACd,CAAC,CAAC;IAEH,MAAM,CAAC,aAAa,CAAC;QACnB,IAAI,EAAE,SAAS,CAAC,iBAAiB;QACjC,WAAW,EAAE,6BAA6B;KAC3C,CAAC,CAAC;IAEH,MAAM,CAAC,mBAAmB,CAAC;QACzB,IAAI,EAAE,SAAS,CAAC,sBAAsB;QACtC,WAAW,EAAE,uCAAuC;KACrD,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,wBAAwB,CAAC,MAAqB;IAC5D,MAAM,sBAAsB,GAAG,MAAM,CAAC,gBAAgB,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC;IAEzF,yFAAyF;IACzF,sBAAsB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAChC,CAAC"}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import { Counter, UpDownCounter, ObservableGauge, MetricMetadata, MetricsFactory } from './metrics-interfaces.js';
|
|
2
|
-
export interface MetricsEngineOptions {
|
|
3
|
-
factory: MetricsFactory;
|
|
4
|
-
disable_telemetry_sharing: boolean;
|
|
5
|
-
}
|
|
6
|
-
export declare class MetricsEngine {
|
|
7
|
-
private options;
|
|
8
|
-
private counters;
|
|
9
|
-
private upDownCounters;
|
|
10
|
-
private observableGauges;
|
|
11
|
-
constructor(options: MetricsEngineOptions);
|
|
12
|
-
private get factory();
|
|
13
|
-
createCounter(metadata: MetricMetadata): Counter;
|
|
14
|
-
createUpDownCounter(metadata: MetricMetadata): UpDownCounter;
|
|
15
|
-
createObservableGauge(metadata: MetricMetadata): ObservableGauge;
|
|
16
|
-
getCounter(name: string): Counter;
|
|
17
|
-
getUpDownCounter(name: string): UpDownCounter;
|
|
18
|
-
getObservableGauge(name: string): ObservableGauge;
|
|
19
|
-
start(): Promise<void>;
|
|
20
|
-
shutdown(): Promise<void>;
|
|
21
|
-
}
|
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
import { logger, ServiceAssertionError } from '@powersync/lib-services-framework';
|
|
2
|
-
export class MetricsEngine {
|
|
3
|
-
options;
|
|
4
|
-
counters;
|
|
5
|
-
upDownCounters;
|
|
6
|
-
observableGauges;
|
|
7
|
-
constructor(options) {
|
|
8
|
-
this.options = options;
|
|
9
|
-
this.counters = new Map();
|
|
10
|
-
this.upDownCounters = new Map();
|
|
11
|
-
this.observableGauges = new Map();
|
|
12
|
-
}
|
|
13
|
-
get factory() {
|
|
14
|
-
return this.options.factory;
|
|
15
|
-
}
|
|
16
|
-
createCounter(metadata) {
|
|
17
|
-
if (this.counters.has(metadata.name)) {
|
|
18
|
-
logger.warn(`Counter with name ${metadata.name} already created and registered, skipping.`);
|
|
19
|
-
return this.counters.get(metadata.name);
|
|
20
|
-
}
|
|
21
|
-
const counter = this.factory.createCounter(metadata);
|
|
22
|
-
this.counters.set(metadata.name, counter);
|
|
23
|
-
return counter;
|
|
24
|
-
}
|
|
25
|
-
createUpDownCounter(metadata) {
|
|
26
|
-
if (this.upDownCounters.has(metadata.name)) {
|
|
27
|
-
logger.warn(`UpDownCounter with name ${metadata.name} already created and registered, skipping.`);
|
|
28
|
-
return this.upDownCounters.get(metadata.name);
|
|
29
|
-
}
|
|
30
|
-
const upDownCounter = this.factory.createUpDownCounter(metadata);
|
|
31
|
-
this.upDownCounters.set(metadata.name, upDownCounter);
|
|
32
|
-
return upDownCounter;
|
|
33
|
-
}
|
|
34
|
-
createObservableGauge(metadata) {
|
|
35
|
-
if (this.observableGauges.has(metadata.name)) {
|
|
36
|
-
logger.warn(`ObservableGauge with name ${metadata.name} already created and registered, skipping.`);
|
|
37
|
-
return this.observableGauges.get(metadata.name);
|
|
38
|
-
}
|
|
39
|
-
const observableGauge = this.factory.createObservableGauge(metadata);
|
|
40
|
-
this.observableGauges.set(metadata.name, observableGauge);
|
|
41
|
-
return observableGauge;
|
|
42
|
-
}
|
|
43
|
-
getCounter(name) {
|
|
44
|
-
const counter = this.counters.get(name);
|
|
45
|
-
if (!counter) {
|
|
46
|
-
throw new ServiceAssertionError(`Counter '${name}' has not been created and registered yet.`);
|
|
47
|
-
}
|
|
48
|
-
return counter;
|
|
49
|
-
}
|
|
50
|
-
getUpDownCounter(name) {
|
|
51
|
-
const upDownCounter = this.upDownCounters.get(name);
|
|
52
|
-
if (!upDownCounter) {
|
|
53
|
-
throw new ServiceAssertionError(`UpDownCounter '${name}' has not been created and registered yet.`);
|
|
54
|
-
}
|
|
55
|
-
return upDownCounter;
|
|
56
|
-
}
|
|
57
|
-
getObservableGauge(name) {
|
|
58
|
-
const observableGauge = this.observableGauges.get(name);
|
|
59
|
-
if (!observableGauge) {
|
|
60
|
-
throw new ServiceAssertionError(`ObservableGauge '${name}' has not been created and registered yet.`);
|
|
61
|
-
}
|
|
62
|
-
return observableGauge;
|
|
63
|
-
}
|
|
64
|
-
async start() {
|
|
65
|
-
logger.info(`
|
|
66
|
-
Attention:
|
|
67
|
-
PowerSync collects completely anonymous telemetry regarding usage.
|
|
68
|
-
This information is used to shape our roadmap to better serve our customers.
|
|
69
|
-
You can learn more, including how to opt-out if you'd not like to participate in this anonymous program, by visiting the following URL:
|
|
70
|
-
https://docs.powersync.com/self-hosting/lifecycle-maintenance/telemetry
|
|
71
|
-
`.trim());
|
|
72
|
-
logger.info(`Anonymous telemetry is currently: ${this.options.disable_telemetry_sharing ? 'disabled' : 'enabled'}`);
|
|
73
|
-
logger.info('Successfully started Metrics Engine.');
|
|
74
|
-
}
|
|
75
|
-
async shutdown() {
|
|
76
|
-
logger.info('Successfully shut down Metrics Engine.');
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
//# sourceMappingURL=MetricsEngine.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"MetricsEngine.js","sourceRoot":"","sources":["../../src/metrics/MetricsEngine.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"metrics-index.js","sourceRoot":"","sources":["../../src/metrics/metrics-index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,yBAAyB,CAAC;AACxC,cAAc,iDAAiD,CAAC;AAChE,cAAc,0BAA0B,CAAC"}
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
export interface Counter {
|
|
2
|
-
/**
|
|
3
|
-
* Increment the counter by the given value. Only positive numbers are valid.
|
|
4
|
-
* @param value
|
|
5
|
-
*/
|
|
6
|
-
add(value: number): void;
|
|
7
|
-
}
|
|
8
|
-
export interface UpDownCounter {
|
|
9
|
-
/**
|
|
10
|
-
* Increment or decrement(if negative) the counter by the given value.
|
|
11
|
-
* @param value
|
|
12
|
-
*/
|
|
13
|
-
add(value: number): void;
|
|
14
|
-
}
|
|
15
|
-
export interface ObservableGauge {
|
|
16
|
-
/**
|
|
17
|
-
* Set a value provider that provides the value for the gauge at the time of observation.
|
|
18
|
-
* @param valueProvider
|
|
19
|
-
*/
|
|
20
|
-
setValueProvider(valueProvider: () => Promise<number | undefined>): void;
|
|
21
|
-
}
|
|
22
|
-
export declare enum Precision {
|
|
23
|
-
INT = "int",
|
|
24
|
-
DOUBLE = "double"
|
|
25
|
-
}
|
|
26
|
-
export interface MetricMetadata {
|
|
27
|
-
name: string;
|
|
28
|
-
description?: string;
|
|
29
|
-
unit?: string;
|
|
30
|
-
precision?: Precision;
|
|
31
|
-
}
|
|
32
|
-
export interface MetricsFactory {
|
|
33
|
-
createCounter(metadata: MetricMetadata): Counter;
|
|
34
|
-
createUpDownCounter(metadata: MetricMetadata): UpDownCounter;
|
|
35
|
-
createObservableGauge(metadata: MetricMetadata): ObservableGauge;
|
|
36
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"metrics-interfaces.js","sourceRoot":"","sources":["../../src/metrics/metrics-interfaces.ts"],"names":[],"mappings":"AAwBA,MAAM,CAAN,IAAY,SAGX;AAHD,WAAY,SAAS;IACnB,wBAAW,CAAA;IACX,8BAAiB,CAAA;AACnB,CAAC,EAHW,SAAS,KAAT,SAAS,QAGpB"}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { Meter } from '@opentelemetry/api';
|
|
2
|
-
import { Counter, ObservableGauge, UpDownCounter, MetricMetadata, MetricsFactory } from '../metrics-interfaces.js';
|
|
3
|
-
export declare class OpenTelemetryMetricsFactory implements MetricsFactory {
|
|
4
|
-
private meter;
|
|
5
|
-
constructor(meter: Meter);
|
|
6
|
-
createCounter(metadata: MetricMetadata): Counter;
|
|
7
|
-
createObservableGauge(metadata: MetricMetadata): ObservableGauge;
|
|
8
|
-
createUpDownCounter(metadata: MetricMetadata): UpDownCounter;
|
|
9
|
-
private toValueType;
|
|
10
|
-
}
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
import { ValueType } from '@opentelemetry/api';
|
|
2
|
-
import { Precision } from '../metrics-interfaces.js';
|
|
3
|
-
export class OpenTelemetryMetricsFactory {
|
|
4
|
-
meter;
|
|
5
|
-
constructor(meter) {
|
|
6
|
-
this.meter = meter;
|
|
7
|
-
}
|
|
8
|
-
createCounter(metadata) {
|
|
9
|
-
return this.meter.createCounter(metadata.name, {
|
|
10
|
-
description: metadata.description,
|
|
11
|
-
unit: metadata.unit,
|
|
12
|
-
valueType: this.toValueType(metadata.precision)
|
|
13
|
-
});
|
|
14
|
-
}
|
|
15
|
-
createObservableGauge(metadata) {
|
|
16
|
-
const gauge = this.meter.createObservableGauge(metadata.name, {
|
|
17
|
-
description: metadata.description,
|
|
18
|
-
unit: metadata.unit,
|
|
19
|
-
valueType: this.toValueType(metadata.precision)
|
|
20
|
-
});
|
|
21
|
-
return {
|
|
22
|
-
setValueProvider(valueProvider) {
|
|
23
|
-
gauge.addCallback(async (result) => {
|
|
24
|
-
const value = await valueProvider();
|
|
25
|
-
if (value) {
|
|
26
|
-
result.observe(value);
|
|
27
|
-
}
|
|
28
|
-
});
|
|
29
|
-
}
|
|
30
|
-
};
|
|
31
|
-
}
|
|
32
|
-
createUpDownCounter(metadata) {
|
|
33
|
-
return this.meter.createUpDownCounter(metadata.name, {
|
|
34
|
-
description: metadata.description,
|
|
35
|
-
unit: metadata.unit,
|
|
36
|
-
valueType: this.toValueType(metadata.precision)
|
|
37
|
-
});
|
|
38
|
-
}
|
|
39
|
-
toValueType(precision) {
|
|
40
|
-
if (!precision) {
|
|
41
|
-
return ValueType.INT;
|
|
42
|
-
}
|
|
43
|
-
switch (precision) {
|
|
44
|
-
case Precision.INT:
|
|
45
|
-
return ValueType.INT;
|
|
46
|
-
case Precision.DOUBLE:
|
|
47
|
-
return ValueType.DOUBLE;
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
//# sourceMappingURL=OpenTelemetryMetricsFactory.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"OpenTelemetryMetricsFactory.js","sourceRoot":"","sources":["../../../src/metrics/open-telemetry/OpenTelemetryMetricsFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAML,SAAS,EACV,MAAM,0BAA0B,CAAC;AAElC,MAAM,OAAO,2BAA2B;IAC9B,KAAK,CAAQ;IAErB,YAAY,KAAY;QACtB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED,aAAa,CAAC,QAAwB;QACpC,OAAO,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,EAAE;YAC7C,WAAW,EAAE,QAAQ,CAAC,WAAW;YACjC,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC;SAChD,CAAC,CAAC;IACL,CAAC;IAED,qBAAqB,CAAC,QAAwB;QAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,QAAQ,CAAC,IAAI,EAAE;YAC5D,WAAW,EAAE,QAAQ,CAAC,WAAW;YACjC,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC;SAChD,CAAC,CAAC;QAEH,OAAO;YACL,gBAAgB,CAAC,aAAgD;gBAC/D,KAAK,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;oBACjC,MAAM,KAAK,GAAG,MAAM,aAAa,EAAE,CAAC;oBAEpC,IAAI,KAAK,EAAE,CAAC;wBACV,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;oBACxB,CAAC;gBACH,CAAC,CAAC,CAAC;YACL,CAAC;SACF,CAAC;IACJ,CAAC;IAED,mBAAmB,CAAC,QAAwB;QAC1C,OAAO,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,QAAQ,CAAC,IAAI,EAAE;YACnD,WAAW,EAAE,QAAQ,CAAC,WAAW;YACjC,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC;SAChD,CAAC,CAAC;IACL,CAAC;IAEO,WAAW,CAAC,SAAqB;QACvC,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,SAAS,CAAC,GAAG,CAAC;QACvB,CAAC;QAED,QAAQ,SAAS,EAAE,CAAC;YAClB,KAAK,SAAS,CAAC,GAAG;gBAChB,OAAO,SAAS,CAAC,GAAG,CAAC;YACvB,KAAK,SAAS,CAAC,MAAM;gBACnB,OAAO,SAAS,CAAC,MAAM,CAAC;QAC5B,CAAC;IACH,CAAC;CACF"}
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import { ServiceContext } from '../../system/ServiceContext.js';
|
|
2
|
-
import { MetricsFactory } from '../metrics-interfaces.js';
|
|
3
|
-
export interface RuntimeMetadata {
|
|
4
|
-
[key: string]: string | number | undefined;
|
|
5
|
-
}
|
|
6
|
-
export declare function createOpenTelemetryMetricsFactory(context: ServiceContext): MetricsFactory;
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
import { MeterProvider, PeriodicExportingMetricReader } from '@opentelemetry/sdk-metrics';
|
|
2
|
-
import { env } from '../../util/env.js';
|
|
3
|
-
import { PrometheusExporter } from '@opentelemetry/exporter-prometheus';
|
|
4
|
-
import { OTLPMetricExporter } from '@opentelemetry/exporter-metrics-otlp-http';
|
|
5
|
-
import { Resource } from '@opentelemetry/resources';
|
|
6
|
-
import { OpenTelemetryMetricsFactory } from './OpenTelemetryMetricsFactory.js';
|
|
7
|
-
export function createOpenTelemetryMetricsFactory(context) {
|
|
8
|
-
const { configuration, lifeCycleEngine, storageEngine } = context;
|
|
9
|
-
const configuredExporters = [];
|
|
10
|
-
if (env.METRICS_PORT) {
|
|
11
|
-
const prometheusExporter = new PrometheusExporter({ port: env.METRICS_PORT, preventServerStart: true });
|
|
12
|
-
configuredExporters.push(prometheusExporter);
|
|
13
|
-
lifeCycleEngine.withLifecycle(prometheusExporter, {
|
|
14
|
-
start: () => prometheusExporter.startServer()
|
|
15
|
-
});
|
|
16
|
-
}
|
|
17
|
-
if (!configuration.telemetry.disable_telemetry_sharing) {
|
|
18
|
-
const periodicExporter = new PeriodicExportingMetricReader({
|
|
19
|
-
exporter: new OTLPMetricExporter({
|
|
20
|
-
url: configuration.telemetry.internal_service_endpoint
|
|
21
|
-
}),
|
|
22
|
-
exportIntervalMillis: 1000 * 60 * 5 // 5 minutes
|
|
23
|
-
});
|
|
24
|
-
configuredExporters.push(periodicExporter);
|
|
25
|
-
}
|
|
26
|
-
let resolvedMetadata;
|
|
27
|
-
const runtimeMetadata = new Promise((resolve) => {
|
|
28
|
-
resolvedMetadata = resolve;
|
|
29
|
-
});
|
|
30
|
-
lifeCycleEngine.withLifecycle(null, {
|
|
31
|
-
start: async () => {
|
|
32
|
-
const bucketStorage = storageEngine.activeBucketStorage;
|
|
33
|
-
try {
|
|
34
|
-
const instanceId = await bucketStorage.getPowerSyncInstanceId();
|
|
35
|
-
resolvedMetadata({ ['instance_id']: instanceId });
|
|
36
|
-
}
|
|
37
|
-
catch (err) {
|
|
38
|
-
resolvedMetadata({ ['instance_id']: 'Unknown' });
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
});
|
|
42
|
-
const meterProvider = new MeterProvider({
|
|
43
|
-
resource: new Resource({
|
|
44
|
-
['service']: 'PowerSync'
|
|
45
|
-
}, runtimeMetadata),
|
|
46
|
-
readers: configuredExporters
|
|
47
|
-
});
|
|
48
|
-
lifeCycleEngine.withLifecycle(meterProvider, {
|
|
49
|
-
stop: async () => {
|
|
50
|
-
await meterProvider.shutdown();
|
|
51
|
-
}
|
|
52
|
-
});
|
|
53
|
-
const meter = meterProvider.getMeter('powersync');
|
|
54
|
-
return new OpenTelemetryMetricsFactory(meter);
|
|
55
|
-
}
|
|
56
|
-
//# sourceMappingURL=util.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"util.js","sourceRoot":"","sources":["../../../src/metrics/open-telemetry/util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAgB,6BAA6B,EAAE,MAAM,4BAA4B,CAAC;AACxG,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AACxC,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,EAAE,kBAAkB,EAAE,MAAM,2CAA2C,CAAC;AAC/E,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAEpD,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAO/E,MAAM,UAAU,iCAAiC,CAAC,OAAuB;IACvE,MAAM,EAAE,aAAa,EAAE,eAAe,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC;IAClE,MAAM,mBAAmB,GAAmB,EAAE,CAAC;IAE/C,IAAI,GAAG,CAAC,YAAY,EAAE,CAAC;QACrB,MAAM,kBAAkB,GAAG,IAAI,kBAAkB,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,YAAY,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC,CAAC;QACxG,mBAAmB,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAE7C,eAAe,CAAC,aAAa,CAAC,kBAAkB,EAAE;YAChD,KAAK,EAAE,GAAG,EAAE,CAAC,kBAAkB,CAAC,WAAW,EAAE;SAC9C,CAAC,CAAC;IACL,CAAC;IAED,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,yBAAyB,EAAE,CAAC;QACvD,MAAM,gBAAgB,GAAG,IAAI,6BAA6B,CAAC;YACzD,QAAQ,EAAE,IAAI,kBAAkB,CAAC;gBAC/B,GAAG,EAAE,aAAa,CAAC,SAAS,CAAC,yBAAyB;aACvD,CAAC;YACF,oBAAoB,EAAE,IAAI,GAAG,EAAE,GAAG,CAAC,CAAC,YAAY;SACjD,CAAC,CAAC;QAEH,mBAAmB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC7C,CAAC;IAED,IAAI,gBAAqD,CAAC;IAC1D,MAAM,eAAe,GAA6B,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QACxE,gBAAgB,GAAG,OAAO,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,eAAe,CAAC,aAAa,CAAC,IAAI,EAAE;QAClC,KAAK,EAAE,KAAK,IAAI,EAAE;YAChB,MAAM,aAAa,GAAG,aAAa,CAAC,mBAAmB,CAAC;YACxD,IAAI,CAAC;gBACH,MAAM,UAAU,GAAG,MAAM,aAAa,CAAC,sBAAsB,EAAE,CAAC;gBAChE,gBAAgB,CAAC,EAAE,CAAC,aAAa,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;YACpD,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,gBAAgB,CAAC,EAAE,CAAC,aAAa,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;YACnD,CAAC;QACH,CAAC;KACF,CAAC,CAAC;IAEH,MAAM,aAAa,GAAG,IAAI,aAAa,CAAC;QACtC,QAAQ,EAAE,IAAI,QAAQ,CACpB;YACE,CAAC,SAAS,CAAC,EAAE,WAAW;SACzB,EACD,eAAe,CAChB;QACD,OAAO,EAAE,mBAAmB;KAC7B,CAAC,CAAC;IAEH,eAAe,CAAC,aAAa,CAAC,aAAa,EAAE;QAC3C,IAAI,EAAE,KAAK,IAAI,EAAE;YACf,MAAM,aAAa,CAAC,QAAQ,EAAE,CAAC;QACjC,CAAC;KACF,CAAC,CAAC;IAEH,MAAM,KAAK,GAAG,aAAa,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IAElD,OAAO,IAAI,2BAA2B,CAAC,KAAK,CAAC,CAAC;AAChD,CAAC"}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { MetricsEngine } from '../metrics/metrics-index.js';
|
|
2
|
-
/**
|
|
3
|
-
* Create and register the core replication metrics.
|
|
4
|
-
* @param engine
|
|
5
|
-
*/
|
|
6
|
-
export declare function createCoreReplicationMetrics(engine: MetricsEngine): void;
|
|
7
|
-
/**
|
|
8
|
-
* Initialise the core replication metrics. This should be called after the metrics have been created.
|
|
9
|
-
* @param engine
|
|
10
|
-
*/
|
|
11
|
-
export declare function initializeCoreReplicationMetrics(engine: MetricsEngine): void;
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import { ReplicationMetric } from '@powersync/service-types';
|
|
2
|
-
/**
|
|
3
|
-
* Create and register the core replication metrics.
|
|
4
|
-
* @param engine
|
|
5
|
-
*/
|
|
6
|
-
export function createCoreReplicationMetrics(engine) {
|
|
7
|
-
engine.createCounter({
|
|
8
|
-
name: ReplicationMetric.DATA_REPLICATED_BYTES,
|
|
9
|
-
description: 'Uncompressed size of replicated data',
|
|
10
|
-
unit: 'bytes'
|
|
11
|
-
});
|
|
12
|
-
engine.createCounter({
|
|
13
|
-
name: ReplicationMetric.ROWS_REPLICATED,
|
|
14
|
-
description: 'Total number of replicated rows'
|
|
15
|
-
});
|
|
16
|
-
engine.createCounter({
|
|
17
|
-
name: ReplicationMetric.TRANSACTIONS_REPLICATED,
|
|
18
|
-
description: 'Total number of replicated transactions'
|
|
19
|
-
});
|
|
20
|
-
engine.createCounter({
|
|
21
|
-
name: ReplicationMetric.CHUNKS_REPLICATED,
|
|
22
|
-
description: 'Total number of replication chunks'
|
|
23
|
-
});
|
|
24
|
-
}
|
|
25
|
-
/**
|
|
26
|
-
* Initialise the core replication metrics. This should be called after the metrics have been created.
|
|
27
|
-
* @param engine
|
|
28
|
-
*/
|
|
29
|
-
export function initializeCoreReplicationMetrics(engine) {
|
|
30
|
-
const data_replicated_bytes = engine.getCounter(ReplicationMetric.DATA_REPLICATED_BYTES);
|
|
31
|
-
const rows_replicated_total = engine.getCounter(ReplicationMetric.ROWS_REPLICATED);
|
|
32
|
-
const transactions_replicated_total = engine.getCounter(ReplicationMetric.TRANSACTIONS_REPLICATED);
|
|
33
|
-
const chunks_replicated_total = engine.getCounter(ReplicationMetric.CHUNKS_REPLICATED);
|
|
34
|
-
data_replicated_bytes.add(0);
|
|
35
|
-
rows_replicated_total.add(0);
|
|
36
|
-
transactions_replicated_total.add(0);
|
|
37
|
-
chunks_replicated_total.add(0);
|
|
38
|
-
}
|
|
39
|
-
//# sourceMappingURL=replication-metrics.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"replication-metrics.js","sourceRoot":"","sources":["../../src/replication/replication-metrics.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7D;;;GAGG;AACH,MAAM,UAAU,4BAA4B,CAAC,MAAqB;IAChE,MAAM,CAAC,aAAa,CAAC;QACnB,IAAI,EAAE,iBAAiB,CAAC,qBAAqB;QAC7C,WAAW,EAAE,sCAAsC;QACnD,IAAI,EAAE,OAAO;KACd,CAAC,CAAC;IAEH,MAAM,CAAC,aAAa,CAAC;QACnB,IAAI,EAAE,iBAAiB,CAAC,eAAe;QACvC,WAAW,EAAE,iCAAiC;KAC/C,CAAC,CAAC;IAEH,MAAM,CAAC,aAAa,CAAC;QACnB,IAAI,EAAE,iBAAiB,CAAC,uBAAuB;QAC/C,WAAW,EAAE,yCAAyC;KACvD,CAAC,CAAC;IAEH,MAAM,CAAC,aAAa,CAAC;QACnB,IAAI,EAAE,iBAAiB,CAAC,iBAAiB;QACzC,WAAW,EAAE,oCAAoC;KAClD,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gCAAgC,CAAC,MAAqB;IACpE,MAAM,qBAAqB,GAAG,MAAM,CAAC,UAAU,CAAC,iBAAiB,CAAC,qBAAqB,CAAC,CAAC;IACzF,MAAM,qBAAqB,GAAG,MAAM,CAAC,UAAU,CAAC,iBAAiB,CAAC,eAAe,CAAC,CAAC;IACnF,MAAM,6BAA6B,GAAG,MAAM,CAAC,UAAU,CAAC,iBAAiB,CAAC,uBAAuB,CAAC,CAAC;IACnG,MAAM,uBAAuB,GAAG,MAAM,CAAC,UAAU,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,CAAC;IAEvF,qBAAqB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC7B,qBAAqB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC7B,6BAA6B,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACrC,uBAAuB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACjC,CAAC"}
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import { MetricsEngine } from '../metrics/MetricsEngine.js';
|
|
2
|
-
import { BucketStorageFactory } from './BucketStorageFactory.js';
|
|
3
|
-
export declare function createCoreStorageMetrics(engine: MetricsEngine): void;
|
|
4
|
-
export declare function initializeCoreStorageMetrics(engine: MetricsEngine, storage: BucketStorageFactory): void;
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
import { logger } from '@powersync/lib-services-framework';
|
|
2
|
-
import { StorageMetric } from '@powersync/service-types';
|
|
3
|
-
export function createCoreStorageMetrics(engine) {
|
|
4
|
-
engine.createObservableGauge({
|
|
5
|
-
name: StorageMetric.REPLICATION_SIZE_BYTES,
|
|
6
|
-
description: 'Size of current data stored in PowerSync',
|
|
7
|
-
unit: 'bytes'
|
|
8
|
-
});
|
|
9
|
-
engine.createObservableGauge({
|
|
10
|
-
name: StorageMetric.OPERATION_SIZE_BYTES,
|
|
11
|
-
description: 'Size of operations stored in PowerSync',
|
|
12
|
-
unit: 'bytes'
|
|
13
|
-
});
|
|
14
|
-
engine.createObservableGauge({
|
|
15
|
-
name: StorageMetric.PARAMETER_SIZE_BYTES,
|
|
16
|
-
description: 'Size of parameter data stored in PowerSync',
|
|
17
|
-
unit: 'bytes'
|
|
18
|
-
});
|
|
19
|
-
}
|
|
20
|
-
export function initializeCoreStorageMetrics(engine, storage) {
|
|
21
|
-
const replication_storage_size_bytes = engine.getObservableGauge(StorageMetric.REPLICATION_SIZE_BYTES);
|
|
22
|
-
const operation_storage_size_bytes = engine.getObservableGauge(StorageMetric.OPERATION_SIZE_BYTES);
|
|
23
|
-
const parameter_storage_size_bytes = engine.getObservableGauge(StorageMetric.PARAMETER_SIZE_BYTES);
|
|
24
|
-
const MINIMUM_INTERVAL = 60_000;
|
|
25
|
-
let cachedRequest = undefined;
|
|
26
|
-
let cacheTimestamp = 0;
|
|
27
|
-
const getMetrics = () => {
|
|
28
|
-
if (cachedRequest == null || Date.now() - cacheTimestamp > MINIMUM_INTERVAL) {
|
|
29
|
-
cachedRequest = storage.getStorageMetrics().catch((e) => {
|
|
30
|
-
logger.error(`Failed to get storage metrics`, e);
|
|
31
|
-
return null;
|
|
32
|
-
});
|
|
33
|
-
cacheTimestamp = Date.now();
|
|
34
|
-
}
|
|
35
|
-
return cachedRequest;
|
|
36
|
-
};
|
|
37
|
-
replication_storage_size_bytes.setValueProvider(async () => {
|
|
38
|
-
const metrics = await getMetrics();
|
|
39
|
-
if (metrics) {
|
|
40
|
-
return metrics.replication_size_bytes;
|
|
41
|
-
}
|
|
42
|
-
});
|
|
43
|
-
operation_storage_size_bytes.setValueProvider(async () => {
|
|
44
|
-
const metrics = await getMetrics();
|
|
45
|
-
if (metrics) {
|
|
46
|
-
return metrics.operations_size_bytes;
|
|
47
|
-
}
|
|
48
|
-
});
|
|
49
|
-
parameter_storage_size_bytes.setValueProvider(async () => {
|
|
50
|
-
const metrics = await getMetrics();
|
|
51
|
-
if (metrics) {
|
|
52
|
-
return metrics.parameters_size_bytes;
|
|
53
|
-
}
|
|
54
|
-
});
|
|
55
|
-
}
|
|
56
|
-
//# sourceMappingURL=storage-metrics.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"storage-metrics.js","sourceRoot":"","sources":["../../src/storage/storage-metrics.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AAE3D,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAEzD,MAAM,UAAU,wBAAwB,CAAC,MAAqB;IAC5D,MAAM,CAAC,qBAAqB,CAAC;QAC3B,IAAI,EAAE,aAAa,CAAC,sBAAsB;QAC1C,WAAW,EAAE,0CAA0C;QACvD,IAAI,EAAE,OAAO;KACd,CAAC,CAAC;IAEH,MAAM,CAAC,qBAAqB,CAAC;QAC3B,IAAI,EAAE,aAAa,CAAC,oBAAoB;QACxC,WAAW,EAAE,wCAAwC;QACrD,IAAI,EAAE,OAAO;KACd,CAAC,CAAC;IAEH,MAAM,CAAC,qBAAqB,CAAC;QAC3B,IAAI,EAAE,aAAa,CAAC,oBAAoB;QACxC,WAAW,EAAE,4CAA4C;QACzD,IAAI,EAAE,OAAO;KACd,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,MAAqB,EAAE,OAA6B;IAC/F,MAAM,8BAA8B,GAAG,MAAM,CAAC,kBAAkB,CAAC,aAAa,CAAC,sBAAsB,CAAC,CAAC;IACvG,MAAM,4BAA4B,GAAG,MAAM,CAAC,kBAAkB,CAAC,aAAa,CAAC,oBAAoB,CAAC,CAAC;IACnG,MAAM,4BAA4B,GAAG,MAAM,CAAC,kBAAkB,CAAC,aAAa,CAAC,oBAAoB,CAAC,CAAC;IAEnG,MAAM,gBAAgB,GAAG,MAAM,CAAC;IAEhC,IAAI,aAAa,GAA+C,SAAS,CAAC;IAC1E,IAAI,cAAc,GAAG,CAAC,CAAC;IAEvB,MAAM,UAAU,GAAG,GAAG,EAAE;QACtB,IAAI,aAAa,IAAI,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,cAAc,GAAG,gBAAgB,EAAE,CAAC;YAC5E,aAAa,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;gBACtD,MAAM,CAAC,KAAK,CAAC,+BAA+B,EAAE,CAAC,CAAC,CAAC;gBACjD,OAAO,IAAI,CAAC;YACd,CAAC,CAAC,CAAC;YACH,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC9B,CAAC;QACD,OAAO,aAAa,CAAC;IACvB,CAAC,CAAC;IAEF,8BAA8B,CAAC,gBAAgB,CAAC,KAAK,IAAI,EAAE;QACzD,MAAM,OAAO,GAAG,MAAM,UAAU,EAAE,CAAC;QACnC,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,OAAO,CAAC,sBAAsB,CAAC;QACxC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,4BAA4B,CAAC,gBAAgB,CAAC,KAAK,IAAI,EAAE;QACvD,MAAM,OAAO,GAAG,MAAM,UAAU,EAAE,CAAC;QACnC,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,OAAO,CAAC,qBAAqB,CAAC;QACvC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,4BAA4B,CAAC,gBAAgB,CAAC,KAAK,IAAI,EAAE;QACvD,MAAM,OAAO,GAAG,MAAM,UAAU,EAAE,CAAC;QACnC,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,OAAO,CAAC,qBAAqB,CAAC;QACvC,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC"}
|
package/src/api/api-metrics.ts
DELETED
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import { MetricsEngine } from '../metrics/MetricsEngine.js';
|
|
2
|
-
import { APIMetric } from '@powersync/service-types';
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Create and register the core API metrics.
|
|
6
|
-
* @param engine
|
|
7
|
-
*/
|
|
8
|
-
export function createCoreAPIMetrics(engine: MetricsEngine): void {
|
|
9
|
-
engine.createCounter({
|
|
10
|
-
name: APIMetric.DATA_SYNCED_BYTES,
|
|
11
|
-
description: 'Uncompressed size of synced data',
|
|
12
|
-
unit: 'bytes'
|
|
13
|
-
});
|
|
14
|
-
|
|
15
|
-
engine.createCounter({
|
|
16
|
-
name: APIMetric.OPERATIONS_SYNCED,
|
|
17
|
-
description: 'Number of operations synced'
|
|
18
|
-
});
|
|
19
|
-
|
|
20
|
-
engine.createUpDownCounter({
|
|
21
|
-
name: APIMetric.CONCURRENT_CONNECTIONS,
|
|
22
|
-
description: 'Number of concurrent sync connections'
|
|
23
|
-
});
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
/**
|
|
27
|
-
* Initialise the core API metrics. This should be called after the metrics have been created.
|
|
28
|
-
* @param engine
|
|
29
|
-
*/
|
|
30
|
-
export function initializeCoreAPIMetrics(engine: MetricsEngine): void {
|
|
31
|
-
const concurrent_connections = engine.getUpDownCounter(APIMetric.CONCURRENT_CONNECTIONS);
|
|
32
|
-
|
|
33
|
-
// Initialize the metric, so that it reports a value before connections have been opened.
|
|
34
|
-
concurrent_connections.add(0);
|
|
35
|
-
}
|
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
import { logger, ServiceAssertionError } from '@powersync/lib-services-framework';
|
|
2
|
-
import { Counter, UpDownCounter, ObservableGauge, MetricMetadata, MetricsFactory } from './metrics-interfaces.js';
|
|
3
|
-
|
|
4
|
-
export interface MetricsEngineOptions {
|
|
5
|
-
factory: MetricsFactory;
|
|
6
|
-
disable_telemetry_sharing: boolean;
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
export class MetricsEngine {
|
|
10
|
-
private counters: Map<string, Counter>;
|
|
11
|
-
private upDownCounters: Map<string, UpDownCounter>;
|
|
12
|
-
private observableGauges: Map<string, ObservableGauge>;
|
|
13
|
-
|
|
14
|
-
constructor(private options: MetricsEngineOptions) {
|
|
15
|
-
this.counters = new Map();
|
|
16
|
-
this.upDownCounters = new Map();
|
|
17
|
-
this.observableGauges = new Map();
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
private get factory(): MetricsFactory {
|
|
21
|
-
return this.options.factory;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
createCounter(metadata: MetricMetadata): Counter {
|
|
25
|
-
if (this.counters.has(metadata.name)) {
|
|
26
|
-
logger.warn(`Counter with name ${metadata.name} already created and registered, skipping.`);
|
|
27
|
-
return this.counters.get(metadata.name)!;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
const counter = this.factory.createCounter(metadata);
|
|
31
|
-
this.counters.set(metadata.name, counter);
|
|
32
|
-
return counter;
|
|
33
|
-
}
|
|
34
|
-
createUpDownCounter(metadata: MetricMetadata): UpDownCounter {
|
|
35
|
-
if (this.upDownCounters.has(metadata.name)) {
|
|
36
|
-
logger.warn(`UpDownCounter with name ${metadata.name} already created and registered, skipping.`);
|
|
37
|
-
return this.upDownCounters.get(metadata.name)!;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
const upDownCounter = this.factory.createUpDownCounter(metadata);
|
|
41
|
-
this.upDownCounters.set(metadata.name, upDownCounter);
|
|
42
|
-
return upDownCounter;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
createObservableGauge(metadata: MetricMetadata): ObservableGauge {
|
|
46
|
-
if (this.observableGauges.has(metadata.name)) {
|
|
47
|
-
logger.warn(`ObservableGauge with name ${metadata.name} already created and registered, skipping.`);
|
|
48
|
-
return this.observableGauges.get(metadata.name)!;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
const observableGauge = this.factory.createObservableGauge(metadata);
|
|
52
|
-
this.observableGauges.set(metadata.name, observableGauge);
|
|
53
|
-
return observableGauge;
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
getCounter(name: string): Counter {
|
|
57
|
-
const counter = this.counters.get(name);
|
|
58
|
-
if (!counter) {
|
|
59
|
-
throw new ServiceAssertionError(`Counter '${name}' has not been created and registered yet.`);
|
|
60
|
-
}
|
|
61
|
-
return counter;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
getUpDownCounter(name: string): UpDownCounter {
|
|
65
|
-
const upDownCounter = this.upDownCounters.get(name);
|
|
66
|
-
if (!upDownCounter) {
|
|
67
|
-
throw new ServiceAssertionError(`UpDownCounter '${name}' has not been created and registered yet.`);
|
|
68
|
-
}
|
|
69
|
-
return upDownCounter;
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
getObservableGauge(name: string): ObservableGauge {
|
|
73
|
-
const observableGauge = this.observableGauges.get(name);
|
|
74
|
-
if (!observableGauge) {
|
|
75
|
-
throw new ServiceAssertionError(`ObservableGauge '${name}' has not been created and registered yet.`);
|
|
76
|
-
}
|
|
77
|
-
return observableGauge;
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
public async start(): Promise<void> {
|
|
81
|
-
logger.info(
|
|
82
|
-
`
|
|
83
|
-
Attention:
|
|
84
|
-
PowerSync collects completely anonymous telemetry regarding usage.
|
|
85
|
-
This information is used to shape our roadmap to better serve our customers.
|
|
86
|
-
You can learn more, including how to opt-out if you'd not like to participate in this anonymous program, by visiting the following URL:
|
|
87
|
-
https://docs.powersync.com/self-hosting/lifecycle-maintenance/telemetry
|
|
88
|
-
`.trim()
|
|
89
|
-
);
|
|
90
|
-
logger.info(`Anonymous telemetry is currently: ${this.options.disable_telemetry_sharing ? 'disabled' : 'enabled'}`);
|
|
91
|
-
|
|
92
|
-
logger.info('Successfully started Metrics Engine.');
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
public async shutdown(): Promise<void> {
|
|
96
|
-
logger.info('Successfully shut down Metrics Engine.');
|
|
97
|
-
}
|
|
98
|
-
}
|