Skip to content

Commit c655147

Browse files
committed
Updated service runners to initialize the MetricsEngine and the existing metrics
1 parent 82385bd commit c655147

File tree

3 files changed

+43
-24
lines changed

3 files changed

+43
-24
lines changed

service/src/metrics.ts

Lines changed: 40 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,17 @@
11
import * as core from '@powersync/service-core';
2+
import {
3+
createCoreAPIMetrics,
4+
createCoreReplicationMetrics,
5+
createCoreStorageMetrics,
6+
initializeCoreAPIMetrics,
7+
initializeCoreReplicationMetrics,
8+
initializeCoreStorageMetrics
9+
} from '@powersync/service-core';
210

311
export enum MetricModes {
412
API = 'api',
5-
REPLICATION = 'replication'
13+
REPLICATION = 'replication',
14+
STORAGE = 'storage'
615
}
716

817
export type MetricsRegistrationOptions = {
@@ -13,28 +22,38 @@ export type MetricsRegistrationOptions = {
1322
export const registerMetrics = async (options: MetricsRegistrationOptions) => {
1423
const { service_context, modes } = options;
1524

16-
// This requires an instantiated bucket storage, which is only created when the lifecycle starts
17-
service_context.lifeCycleEngine.withLifecycle(null, {
18-
start: async () => {
19-
const instanceId = await service_context.storageEngine.activeBucketStorage.getPowerSyncInstanceId();
20-
await core.metrics.Metrics.initialise({
21-
powersync_instance_id: instanceId,
22-
disable_telemetry_sharing: service_context.configuration.telemetry.disable_telemetry_sharing,
23-
internal_metrics_endpoint: service_context.configuration.telemetry.internal_service_endpoint
24-
});
25-
26-
// TODO remove singleton
27-
const instance = core.Metrics.getInstance();
28-
service_context.register(core.metrics.Metrics, instance);
29-
30-
if (modes.includes(MetricModes.API)) {
31-
instance.configureApiMetrics();
32-
}
25+
const metricsFactory = core.metrics.createOpenTelemetryMetricsFactory(service_context);
26+
const metricsEngine = new core.metrics.MetricsEngine({
27+
factory: metricsFactory,
28+
disable_telemetry_sharing: service_context.configuration.telemetry.disable_telemetry_sharing
29+
});
30+
service_context.register(core.metrics.MetricsEngine, metricsEngine);
31+
32+
if (modes.includes(MetricModes.API)) {
33+
createCoreAPIMetrics(metricsEngine);
34+
initializeCoreAPIMetrics(metricsEngine);
35+
}
3336

34-
if (modes.includes(MetricModes.REPLICATION)) {
35-
instance.configureReplicationMetrics(service_context.storageEngine.activeBucketStorage);
37+
if (modes.includes(MetricModes.REPLICATION)) {
38+
createCoreReplicationMetrics(metricsEngine);
39+
initializeCoreReplicationMetrics(metricsEngine);
40+
}
41+
42+
if (modes.includes(MetricModes.STORAGE)) {
43+
createCoreStorageMetrics(metricsEngine);
44+
45+
// This requires an instantiated bucket storage, which is only created when the lifecycle starts
46+
service_context.storageEngine.registerListener({
47+
storageActivated: (bucketStorage) => {
48+
initializeCoreStorageMetrics(metricsEngine, bucketStorage);
3649
}
50+
});
51+
}
52+
53+
service_context.lifeCycleEngine.withLifecycle(metricsEngine, {
54+
start: async () => {
55+
await metricsEngine.start();
3756
},
38-
stop: () => service_context.metrics!.shutdown()
57+
stop: () => metricsEngine.shutdown()
3958
});
4059
};

service/src/runners/stream-worker.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,14 @@ export const startStreamRunner = async (runnerConfig: core.utils.RunnerConfig) =
2121

2222
const config = await core.utils.loadConfig(runnerConfig);
2323

24-
// Self hosted version allows for automatic migrations
24+
// Self-hosted version allows for automatic migrations
2525
const serviceContext = new core.system.ServiceContextContainer(config);
2626

2727
registerReplicationServices(serviceContext);
2828

2929
await registerMetrics({
3030
service_context: serviceContext,
31-
modes: [MetricModes.REPLICATION]
31+
modes: [MetricModes.REPLICATION, MetricModes.STORAGE]
3232
});
3333

3434
const moduleManager = container.getImplementation(core.modules.ModuleManager);

service/src/runners/unified-runner.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ export const startUnifiedRunner = async (runnerConfig: core.utils.RunnerConfig)
2020

2121
await registerMetrics({
2222
service_context: serviceContext,
23-
modes: [MetricModes.API, MetricModes.REPLICATION]
23+
modes: [MetricModes.API, MetricModes.REPLICATION, MetricModes.STORAGE]
2424
});
2525

2626
const moduleManager = container.getImplementation(core.modules.ModuleManager);

0 commit comments

Comments
 (0)