@powersync/service-core 0.0.0-dev-20250325131118 → 0.0.0-dev-20250326092547

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  # @powersync/service-core
2
2
 
3
- ## 0.0.0-dev-20250325131118
3
+ ## 0.0.0-dev-20250326092547
4
4
 
5
5
  ### Minor Changes
6
6
 
@@ -9,7 +9,7 @@
9
9
  ### Patch Changes
10
10
 
11
11
  - Updated dependencies [d239244]
12
- - @powersync/service-types@0.0.0-dev-20250325131118
12
+ - @powersync/service-types@0.0.0-dev-20250326092547
13
13
 
14
14
  ## 1.10.0
15
15
 
@@ -1,4 +1,5 @@
1
1
  export * from './MetricsEngine.js';
2
2
  export * from './metrics-interfaces.js';
3
+ export * from './register-metrics.js';
3
4
  export * from './open-telemetry/OpenTelemetryMetricsFactory.js';
4
5
  export * from './open-telemetry/util.js';
@@ -1,5 +1,6 @@
1
1
  export * from './MetricsEngine.js';
2
2
  export * from './metrics-interfaces.js';
3
+ export * from './register-metrics.js';
3
4
  export * from './open-telemetry/OpenTelemetryMetricsFactory.js';
4
5
  export * from './open-telemetry/util.js';
5
6
  //# sourceMappingURL=metrics-index.js.map
@@ -1 +1 @@
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
+ {"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,uBAAuB,CAAC;AACtC,cAAc,iDAAiD,CAAC;AAChE,cAAc,0BAA0B,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { ServiceContextContainer } from '../system/ServiceContext.js';
2
+ export declare enum MetricModes {
3
+ API = "api",
4
+ REPLICATION = "replication",
5
+ STORAGE = "storage"
6
+ }
7
+ export type MetricsRegistrationOptions = {
8
+ service_context: ServiceContextContainer;
9
+ modes: MetricModes[];
10
+ };
11
+ export declare const registerMetrics: (options: MetricsRegistrationOptions) => Promise<void>;
@@ -0,0 +1,44 @@
1
+ import { createOpenTelemetryMetricsFactory } from './open-telemetry/util.js';
2
+ import { MetricsEngine } from './MetricsEngine.js';
3
+ import { createCoreAPIMetrics, initializeCoreAPIMetrics } from '../api/api-metrics.js';
4
+ import { createCoreReplicationMetrics, initializeCoreReplicationMetrics } from '../replication/replication-metrics.js';
5
+ import { createCoreStorageMetrics, initializeCoreStorageMetrics } from '../storage/storage-metrics.js';
6
+ export var MetricModes;
7
+ (function (MetricModes) {
8
+ MetricModes["API"] = "api";
9
+ MetricModes["REPLICATION"] = "replication";
10
+ MetricModes["STORAGE"] = "storage";
11
+ })(MetricModes || (MetricModes = {}));
12
+ export const registerMetrics = async (options) => {
13
+ const { service_context, modes } = options;
14
+ const metricsFactory = createOpenTelemetryMetricsFactory(service_context);
15
+ const metricsEngine = new MetricsEngine({
16
+ factory: metricsFactory,
17
+ disable_telemetry_sharing: service_context.configuration.telemetry.disable_telemetry_sharing
18
+ });
19
+ service_context.register(MetricsEngine, metricsEngine);
20
+ if (modes.includes(MetricModes.API)) {
21
+ createCoreAPIMetrics(metricsEngine);
22
+ initializeCoreAPIMetrics(metricsEngine);
23
+ }
24
+ if (modes.includes(MetricModes.REPLICATION)) {
25
+ createCoreReplicationMetrics(metricsEngine);
26
+ initializeCoreReplicationMetrics(metricsEngine);
27
+ }
28
+ if (modes.includes(MetricModes.STORAGE)) {
29
+ createCoreStorageMetrics(metricsEngine);
30
+ // This requires an instantiated bucket storage, which is only created when the lifecycle starts
31
+ service_context.storageEngine.registerListener({
32
+ storageActivated: (bucketStorage) => {
33
+ initializeCoreStorageMetrics(metricsEngine, bucketStorage);
34
+ }
35
+ });
36
+ }
37
+ service_context.lifeCycleEngine.withLifecycle(metricsEngine, {
38
+ start: async () => {
39
+ await metricsEngine.start();
40
+ },
41
+ stop: () => metricsEngine.shutdown()
42
+ });
43
+ };
44
+ //# sourceMappingURL=register-metrics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register-metrics.js","sourceRoot":"","sources":["../../src/metrics/register-metrics.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iCAAiC,EAAE,MAAM,0BAA0B,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACvF,OAAO,EAAE,4BAA4B,EAAE,gCAAgC,EAAE,MAAM,uCAAuC,CAAC;AACvH,OAAO,EAAE,wBAAwB,EAAE,4BAA4B,EAAE,MAAM,+BAA+B,CAAC;AAEvG,MAAM,CAAN,IAAY,WAIX;AAJD,WAAY,WAAW;IACrB,0BAAW,CAAA;IACX,0CAA2B,CAAA;IAC3B,kCAAmB,CAAA;AACrB,CAAC,EAJW,WAAW,KAAX,WAAW,QAItB;AAOD,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,EAAE,OAAmC,EAAE,EAAE;IAC3E,MAAM,EAAE,eAAe,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;IAE3C,MAAM,cAAc,GAAG,iCAAiC,CAAC,eAAe,CAAC,CAAC;IAC1E,MAAM,aAAa,GAAG,IAAI,aAAa,CAAC;QACtC,OAAO,EAAE,cAAc;QACvB,yBAAyB,EAAE,eAAe,CAAC,aAAa,CAAC,SAAS,CAAC,yBAAyB;KAC7F,CAAC,CAAC;IACH,eAAe,CAAC,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;IAEvD,IAAI,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;QACpC,oBAAoB,CAAC,aAAa,CAAC,CAAC;QACpC,wBAAwB,CAAC,aAAa,CAAC,CAAC;IAC1C,CAAC;IAED,IAAI,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,WAAW,CAAC,EAAE,CAAC;QAC5C,4BAA4B,CAAC,aAAa,CAAC,CAAC;QAC5C,gCAAgC,CAAC,aAAa,CAAC,CAAC;IAClD,CAAC;IAED,IAAI,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC;QACxC,wBAAwB,CAAC,aAAa,CAAC,CAAC;QAExC,gGAAgG;QAChG,eAAe,CAAC,aAAa,CAAC,gBAAgB,CAAC;YAC7C,gBAAgB,EAAE,CAAC,aAAa,EAAE,EAAE;gBAClC,4BAA4B,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;YAC7D,CAAC;SACF,CAAC,CAAC;IACL,CAAC;IAED,eAAe,CAAC,eAAe,CAAC,aAAa,CAAC,aAAa,EAAE;QAC3D,KAAK,EAAE,KAAK,IAAI,EAAE;YAChB,MAAM,aAAa,CAAC,KAAK,EAAE,CAAC;QAC9B,CAAC;QACD,IAAI,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE;KACrC,CAAC,CAAC;AACL,CAAC,CAAC"}
package/package.json CHANGED
@@ -5,7 +5,7 @@
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },
8
- "version": "0.0.0-dev-20250325131118",
8
+ "version": "0.0.0-dev-20250326092547",
9
9
  "main": "dist/index.js",
10
10
  "license": "FSL-1.1-Apache-2.0",
11
11
  "type": "module",
@@ -36,7 +36,7 @@
36
36
  "@powersync/service-jsonbig": "0.17.10",
37
37
  "@powersync/service-rsocket-router": "0.0.20",
38
38
  "@powersync/service-sync-rules": "0.25.0",
39
- "@powersync/service-types": "0.0.0-dev-20250325131118"
39
+ "@powersync/service-types": "0.0.0-dev-20250326092547"
40
40
  },
41
41
  "devDependencies": {
42
42
  "@types/async": "^3.2.24",
@@ -1,4 +1,5 @@
1
1
  export * from './MetricsEngine.js';
2
2
  export * from './metrics-interfaces.js';
3
+ export * from './register-metrics.js';
3
4
  export * from './open-telemetry/OpenTelemetryMetricsFactory.js';
4
5
  export * from './open-telemetry/util.js';
@@ -0,0 +1,56 @@
1
+ import { ServiceContextContainer } from '../system/ServiceContext.js';
2
+ import { createOpenTelemetryMetricsFactory } from './open-telemetry/util.js';
3
+ import { MetricsEngine } from './MetricsEngine.js';
4
+ import { createCoreAPIMetrics, initializeCoreAPIMetrics } from '../api/api-metrics.js';
5
+ import { createCoreReplicationMetrics, initializeCoreReplicationMetrics } from '../replication/replication-metrics.js';
6
+ import { createCoreStorageMetrics, initializeCoreStorageMetrics } from '../storage/storage-metrics.js';
7
+
8
+ export enum MetricModes {
9
+ API = 'api',
10
+ REPLICATION = 'replication',
11
+ STORAGE = 'storage'
12
+ }
13
+
14
+ export type MetricsRegistrationOptions = {
15
+ service_context: ServiceContextContainer;
16
+ modes: MetricModes[];
17
+ };
18
+
19
+ export const registerMetrics = async (options: MetricsRegistrationOptions) => {
20
+ const { service_context, modes } = options;
21
+
22
+ const metricsFactory = createOpenTelemetryMetricsFactory(service_context);
23
+ const metricsEngine = new MetricsEngine({
24
+ factory: metricsFactory,
25
+ disable_telemetry_sharing: service_context.configuration.telemetry.disable_telemetry_sharing
26
+ });
27
+ service_context.register(MetricsEngine, metricsEngine);
28
+
29
+ if (modes.includes(MetricModes.API)) {
30
+ createCoreAPIMetrics(metricsEngine);
31
+ initializeCoreAPIMetrics(metricsEngine);
32
+ }
33
+
34
+ if (modes.includes(MetricModes.REPLICATION)) {
35
+ createCoreReplicationMetrics(metricsEngine);
36
+ initializeCoreReplicationMetrics(metricsEngine);
37
+ }
38
+
39
+ if (modes.includes(MetricModes.STORAGE)) {
40
+ createCoreStorageMetrics(metricsEngine);
41
+
42
+ // This requires an instantiated bucket storage, which is only created when the lifecycle starts
43
+ service_context.storageEngine.registerListener({
44
+ storageActivated: (bucketStorage) => {
45
+ initializeCoreStorageMetrics(metricsEngine, bucketStorage);
46
+ }
47
+ });
48
+ }
49
+
50
+ service_context.lifeCycleEngine.withLifecycle(metricsEngine, {
51
+ start: async () => {
52
+ await metricsEngine.start();
53
+ },
54
+ stop: () => metricsEngine.shutdown()
55
+ });
56
+ };