Skip to content

Commit 7c358b8

Browse files
committed
Moved the prometheus metrics port from an env variable to the collected powersync config
1 parent 511ff94 commit 7c358b8

File tree

6 files changed

+16
-10
lines changed

6 files changed

+16
-10
lines changed

modules/module-mongodb/test/src/env.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,5 @@ export const env = utils.collectEnvironmentVariables({
77
CI: utils.type.boolean.default('false'),
88
SLOW_TESTS: utils.type.boolean.default('false'),
99
TEST_MONGO_STORAGE: utils.type.boolean.default('true'),
10-
TEST_POSTGRES_STORAGE: utils.type.boolean.default('false')
10+
TEST_POSTGRES_STORAGE: utils.type.boolean.default('true')
1111
});

packages/service-core/src/metrics/open-telemetry/util.ts

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
import { MeterProvider, MetricReader, PeriodicExportingMetricReader } from '@opentelemetry/sdk-metrics';
2-
import { env } from '../../util/env.js';
32
import { PrometheusExporter } from '@opentelemetry/exporter-prometheus';
43
import { OTLPMetricExporter } from '@opentelemetry/exporter-metrics-otlp-http';
54
import { Resource } from '@opentelemetry/resources';
65
import { ServiceContext } from '../../system/ServiceContext.js';
76
import { OpenTelemetryMetricsFactory } from './OpenTelemetryMetricsFactory.js';
87
import { MetricsFactory } from '../metrics-interfaces.js';
8+
import { logger } from '@powersync/lib-services-framework';
99

1010
export interface RuntimeMetadata {
1111
[key: string]: string | number | undefined;
@@ -15,12 +15,18 @@ export function createOpenTelemetryMetricsFactory(context: ServiceContext): Metr
1515
const { configuration, lifeCycleEngine, storageEngine } = context;
1616
const configuredExporters: MetricReader[] = [];
1717

18-
if (env.METRICS_PORT) {
19-
const prometheusExporter = new PrometheusExporter({ port: env.METRICS_PORT, preventServerStart: true });
18+
if (configuration.telemetry.prometheus_port) {
19+
const prometheusExporter = new PrometheusExporter({
20+
port: configuration.telemetry.prometheus_port,
21+
preventServerStart: true
22+
});
2023
configuredExporters.push(prometheusExporter);
2124

2225
lifeCycleEngine.withLifecycle(prometheusExporter, {
23-
start: () => prometheusExporter.startServer()
26+
start: async () => {
27+
await prometheusExporter.startServer();
28+
logger.info(`Prometheus metric export enabled on port:${configuration.telemetry.prometheus_port}`);
29+
}
2430
});
2531
}
2632

packages/service-core/src/util/config/compound-config-collector.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,7 @@ export class CompoundConfigCollector {
154154
metadata: baseConfig.metadata ?? {},
155155
migrations: baseConfig.migrations,
156156
telemetry: {
157+
prometheus_port: baseConfig.telemetry?.prometheus_port,
157158
disable_telemetry_sharing: baseConfig.telemetry?.disable_telemetry_sharing ?? false,
158159
internal_service_endpoint:
159160
baseConfig.telemetry?.internal_service_endpoint ?? 'https://pulse.journeyapps.com/v1/metrics'

packages/service-core/src/util/config/types.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ export type ResolvedPowerSyncConfig = {
5555
};
5656

5757
telemetry: {
58+
prometheus_port?: number;
5859
disable_telemetry_sharing: boolean;
5960
internal_service_endpoint: string;
6061
};

packages/service-core/src/util/env.ts

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,6 @@ export const env = utils.collectEnvironmentVariables({
1919
* Runner to be started in this process
2020
*/
2121
PS_RUNNER_TYPE: utils.type.string.default(ServiceRunner.UNIFIED),
22-
/**
23-
* Port for metrics
24-
*/
25-
METRICS_PORT: utils.type.number.optional(),
2622

2723
NODE_ENV: utils.type.string.optional()
2824
});

packages/types/src/config/PowerSyncConfig.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ export type StrictJwk = t.Decoded<typeof jwk>;
104104

105105
export const BaseStorageConfig = t.object({
106106
type: t.string,
107-
// Maximum number of conncetions to the storage database, per process.
107+
// Maximum number of connections to the storage database, per process.
108108
// Defaults to 8.
109109
max_pool_size: t.number.optional()
110110
});
@@ -200,6 +200,8 @@ export const powerSyncConfig = t.object({
200200

201201
telemetry: t
202202
.object({
203+
// When set, metrics will be available on this port for scraping by Prometheus.
204+
prometheus_port: portCodec.optional(),
203205
disable_telemetry_sharing: t.boolean,
204206
internal_service_endpoint: t.string.optional()
205207
})

0 commit comments

Comments
 (0)