diff --git a/.changeset/small-clouds-collect.md b/.changeset/small-clouds-collect.md new file mode 100644 index 000000000..76a1b8d58 --- /dev/null +++ b/.changeset/small-clouds-collect.md @@ -0,0 +1,6 @@ +--- +'@powersync/service-module-mongodb-storage': patch +'@powersync/service-core': patch +--- + +Fixed opentelemetry observable gauge value provider ignoring 0 values diff --git a/modules/module-mongodb-storage/src/storage/MongoBucketStorage.ts b/modules/module-mongodb-storage/src/storage/MongoBucketStorage.ts index 23fd90b0b..7d4f92176 100644 --- a/modules/module-mongodb-storage/src/storage/MongoBucketStorage.ts +++ b/modules/module-mongodb-storage/src/storage/MongoBucketStorage.ts @@ -306,7 +306,7 @@ export class MongoBucketStorage } async getStorageMetrics(): Promise { - const ignoreNotExiting = (e: unknown) => { + const ignoreNotExisting = (e: unknown) => { if (lib_mongo.isMongoServerError(e) && e.codeName == 'NamespaceNotFound') { // Collection doesn't exist - return 0 return [{ storageStats: { size: 0 } }]; @@ -333,7 +333,7 @@ export class MongoBucketStorage } ]) .toArray() - .catch(ignoreNotExiting); + .catch(ignoreNotExisting); const parameters_aggregate = await this.db.bucket_parameters .aggregate([ @@ -344,7 +344,7 @@ export class MongoBucketStorage } ]) .toArray() - .catch(ignoreNotExiting); + .catch(ignoreNotExisting); const replication_aggregate = await this.db.current_data .aggregate([ @@ -355,7 +355,7 @@ export class MongoBucketStorage } ]) .toArray() - .catch(ignoreNotExiting); + .catch(ignoreNotExisting); return { operations_size_bytes: Number(operations_aggregate[0].storageStats.size), diff --git a/packages/service-core/src/metrics/open-telemetry/OpenTelemetryMetricsFactory.ts b/packages/service-core/src/metrics/open-telemetry/OpenTelemetryMetricsFactory.ts index 13013cb50..f90b972c9 100644 --- a/packages/service-core/src/metrics/open-telemetry/OpenTelemetryMetricsFactory.ts +++ b/packages/service-core/src/metrics/open-telemetry/OpenTelemetryMetricsFactory.ts @@ -35,7 +35,7 @@ export class OpenTelemetryMetricsFactory implements MetricsFactory { gauge.addCallback(async (result) => { const value = await valueProvider(); - if (value) { + if (value != undefined) { result.observe(value); } }); diff --git a/packages/service-core/src/storage/storage-metrics.ts b/packages/service-core/src/storage/storage-metrics.ts index 5ce8f66c1..12b07d2f7 100644 --- a/packages/service-core/src/storage/storage-metrics.ts +++ b/packages/service-core/src/storage/storage-metrics.ts @@ -34,7 +34,7 @@ export function initializeCoreStorageMetrics(engine: MetricsEngine, storage: Buc let cacheTimestamp = 0; const getMetrics = () => { - if (cachedRequest == null || Date.now() - cacheTimestamp > MINIMUM_INTERVAL) { + if (!cachedRequest || Date.now() - cacheTimestamp > MINIMUM_INTERVAL) { cachedRequest = storage.getStorageMetrics().catch((e) => { logger.error(`Failed to get storage metrics`, e); return null;