@powersync/service-core 1.10.3 → 1.11.1

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.
Files changed (155) hide show
  1. package/CHANGELOG.md +13 -2
  2. package/dist/api/api-index.d.ts +1 -0
  3. package/dist/api/api-index.js +1 -0
  4. package/dist/api/api-index.js.map +1 -1
  5. package/dist/api/api-metrics.d.ts +11 -0
  6. package/dist/api/api-metrics.js +30 -0
  7. package/dist/api/api-metrics.js.map +1 -0
  8. package/dist/index.d.ts +2 -2
  9. package/dist/index.js +2 -2
  10. package/dist/index.js.map +1 -1
  11. package/dist/metrics/MetricsEngine.d.ts +21 -0
  12. package/dist/metrics/MetricsEngine.js +79 -0
  13. package/dist/metrics/MetricsEngine.js.map +1 -0
  14. package/dist/metrics/metrics-index.d.ts +5 -0
  15. package/dist/metrics/metrics-index.js +6 -0
  16. package/dist/metrics/metrics-index.js.map +1 -0
  17. package/dist/metrics/metrics-interfaces.d.ts +36 -0
  18. package/dist/metrics/metrics-interfaces.js +6 -0
  19. package/dist/metrics/metrics-interfaces.js.map +1 -0
  20. package/dist/metrics/open-telemetry/OpenTelemetryMetricsFactory.d.ts +10 -0
  21. package/dist/metrics/open-telemetry/OpenTelemetryMetricsFactory.js +51 -0
  22. package/dist/metrics/open-telemetry/OpenTelemetryMetricsFactory.js.map +1 -0
  23. package/dist/metrics/open-telemetry/util.d.ts +6 -0
  24. package/dist/metrics/open-telemetry/util.js +62 -0
  25. package/dist/metrics/open-telemetry/util.js.map +1 -0
  26. package/dist/metrics/register-metrics.d.ts +11 -0
  27. package/dist/metrics/register-metrics.js +44 -0
  28. package/dist/metrics/register-metrics.js.map +1 -0
  29. package/dist/replication/AbstractReplicationJob.d.ts +2 -0
  30. package/dist/replication/AbstractReplicationJob.js.map +1 -1
  31. package/dist/replication/AbstractReplicator.d.ts +3 -0
  32. package/dist/replication/AbstractReplicator.js +3 -0
  33. package/dist/replication/AbstractReplicator.js.map +1 -1
  34. package/dist/replication/ReplicationModule.d.ts +7 -0
  35. package/dist/replication/ReplicationModule.js +1 -0
  36. package/dist/replication/ReplicationModule.js.map +1 -1
  37. package/dist/replication/replication-index.d.ts +1 -0
  38. package/dist/replication/replication-index.js +1 -0
  39. package/dist/replication/replication-index.js.map +1 -1
  40. package/dist/replication/replication-metrics.d.ts +11 -0
  41. package/dist/replication/replication-metrics.js +39 -0
  42. package/dist/replication/replication-metrics.js.map +1 -0
  43. package/dist/routes/endpoints/socket-route.js +5 -5
  44. package/dist/routes/endpoints/socket-route.js.map +1 -1
  45. package/dist/routes/endpoints/sync-stream.js +6 -6
  46. package/dist/routes/endpoints/sync-stream.js.map +1 -1
  47. package/dist/storage/storage-index.d.ts +1 -0
  48. package/dist/storage/storage-index.js +1 -0
  49. package/dist/storage/storage-index.js.map +1 -1
  50. package/dist/storage/storage-metrics.d.ts +4 -0
  51. package/dist/storage/storage-metrics.js +56 -0
  52. package/dist/storage/storage-metrics.js.map +1 -0
  53. package/dist/sync/RequestTracker.d.ts +3 -0
  54. package/dist/sync/RequestTracker.js +8 -3
  55. package/dist/sync/RequestTracker.js.map +1 -1
  56. package/dist/system/ServiceContext.d.ts +3 -3
  57. package/dist/system/ServiceContext.js +7 -3
  58. package/dist/system/ServiceContext.js.map +1 -1
  59. package/dist/util/config/compound-config-collector.js +1 -0
  60. package/dist/util/config/compound-config-collector.js.map +1 -1
  61. package/dist/util/config/types.d.ts +1 -0
  62. package/dist/util/env.d.ts +0 -1
  63. package/dist/util/env.js +0 -4
  64. package/dist/util/env.js.map +1 -1
  65. package/package.json +7 -7
  66. package/src/api/api-index.ts +1 -0
  67. package/src/api/api-metrics.ts +35 -0
  68. package/src/index.ts +2 -2
  69. package/src/metrics/MetricsEngine.ts +98 -0
  70. package/src/metrics/metrics-index.ts +5 -0
  71. package/src/metrics/metrics-interfaces.ts +41 -0
  72. package/src/metrics/open-telemetry/OpenTelemetryMetricsFactory.ts +66 -0
  73. package/src/metrics/open-telemetry/util.ts +80 -0
  74. package/src/metrics/register-metrics.ts +56 -0
  75. package/src/replication/AbstractReplicationJob.ts +2 -0
  76. package/src/replication/AbstractReplicator.ts +7 -0
  77. package/src/replication/ReplicationModule.ts +10 -0
  78. package/src/replication/replication-index.ts +1 -0
  79. package/src/replication/replication-metrics.ts +45 -0
  80. package/src/routes/endpoints/socket-route.ts +6 -5
  81. package/src/routes/endpoints/sync-stream.ts +7 -6
  82. package/src/storage/storage-index.ts +1 -0
  83. package/src/storage/storage-metrics.ts +67 -0
  84. package/src/sync/RequestTracker.ts +9 -3
  85. package/src/system/ServiceContext.ts +9 -4
  86. package/src/util/config/compound-config-collector.ts +1 -0
  87. package/src/util/config/types.ts +1 -0
  88. package/src/util/env.ts +0 -4
  89. package/tsconfig.tsbuildinfo +1 -1
  90. package/.probes/poll +0 -1
  91. package/dist/metrics/Metrics.d.ts +0 -30
  92. package/dist/metrics/Metrics.js +0 -202
  93. package/dist/metrics/Metrics.js.map +0 -1
  94. package/src/metrics/Metrics.ts +0 -255
  95. package/test/dist/auth.test.d.ts +0 -1
  96. package/test/dist/auth.test.js +0 -332
  97. package/test/dist/auth.test.js.map +0 -1
  98. package/test/dist/broadcast_iterable.test.d.ts +0 -1
  99. package/test/dist/broadcast_iterable.test.js +0 -131
  100. package/test/dist/broadcast_iterable.test.js.map +0 -1
  101. package/test/dist/bucket_validation.d.ts +0 -26
  102. package/test/dist/bucket_validation.js +0 -56
  103. package/test/dist/bucket_validation.js.map +0 -1
  104. package/test/dist/bucket_validation.test.d.ts +0 -1
  105. package/test/dist/bucket_validation.test.js +0 -134
  106. package/test/dist/bucket_validation.test.js.map +0 -1
  107. package/test/dist/checksum_cache.test.d.ts +0 -1
  108. package/test/dist/checksum_cache.test.js +0 -375
  109. package/test/dist/checksum_cache.test.js.map +0 -1
  110. package/test/dist/compacting.test.d.ts +0 -1
  111. package/test/dist/compacting.test.js +0 -254
  112. package/test/dist/compacting.test.js.map +0 -1
  113. package/test/dist/data_storage.test.d.ts +0 -1
  114. package/test/dist/data_storage.test.js +0 -1306
  115. package/test/dist/data_storage.test.js.map +0 -1
  116. package/test/dist/demultiplexer.test.d.ts +0 -1
  117. package/test/dist/demultiplexer.test.js +0 -166
  118. package/test/dist/demultiplexer.test.js.map +0 -1
  119. package/test/dist/env.d.ts +0 -3
  120. package/test/dist/env.js +0 -5
  121. package/test/dist/env.js.map +0 -1
  122. package/test/dist/merge_iterable.test.d.ts +0 -1
  123. package/test/dist/merge_iterable.test.js +0 -321
  124. package/test/dist/merge_iterable.test.js.map +0 -1
  125. package/test/dist/routes/probes.integration.test.d.ts +0 -1
  126. package/test/dist/routes/probes.integration.test.js +0 -192
  127. package/test/dist/routes/probes.integration.test.js.map +0 -1
  128. package/test/dist/routes/probes.test.d.ts +0 -1
  129. package/test/dist/routes/probes.test.js +0 -119
  130. package/test/dist/routes/probes.test.js.map +0 -1
  131. package/test/dist/setup.d.ts +0 -1
  132. package/test/dist/setup.js +0 -7
  133. package/test/dist/setup.js.map +0 -1
  134. package/test/dist/stream_utils.d.ts +0 -6
  135. package/test/dist/stream_utils.js +0 -37
  136. package/test/dist/stream_utils.js.map +0 -1
  137. package/test/dist/sync/BucketChecksumState.test.d.ts +0 -1
  138. package/test/dist/sync/BucketChecksumState.test.js +0 -499
  139. package/test/dist/sync/BucketChecksumState.test.js.map +0 -1
  140. package/test/dist/sync/checksum_state.test.d.ts +0 -1
  141. package/test/dist/sync/checksum_state.test.js +0 -21
  142. package/test/dist/sync/checksum_state.test.js.map +0 -1
  143. package/test/dist/sync/util.test.d.ts +0 -1
  144. package/test/dist/sync/util.test.js +0 -28
  145. package/test/dist/sync/util.test.js.map +0 -1
  146. package/test/dist/sync.test.d.ts +0 -1
  147. package/test/dist/sync.test.js +0 -428
  148. package/test/dist/sync.test.js.map +0 -1
  149. package/test/dist/util.d.ts +0 -36
  150. package/test/dist/util.js +0 -114
  151. package/test/dist/util.js.map +0 -1
  152. package/test/dist/util.test.d.ts +0 -1
  153. package/test/dist/util.test.js +0 -45
  154. package/test/dist/util.test.js.map +0 -1
  155. package/test/tsconfig.tsbuildinfo +0 -1
package/CHANGELOG.md CHANGED
@@ -1,10 +1,21 @@
1
1
  # @powersync/service-core
2
2
 
3
- ## 1.10.3
3
+ ## 1.11.1
4
4
 
5
5
  ### Patch Changes
6
6
 
7
- - 4f7bd0f: Fix slow clearing of bucket_parameters collection.
7
+ - 08e6e92: Fix slow clearing of bucket_parameters collection.
8
+
9
+ ## 1.11.0
10
+
11
+ ### Minor Changes
12
+
13
+ - d1b83ce: Refactored Metrics to use a MetricsEngine which is telemetry framework agnostic.
14
+
15
+ ### Patch Changes
16
+
17
+ - Updated dependencies [d1b83ce]
18
+ - @powersync/service-types@0.10.0
8
19
 
9
20
  ## 1.10.2
10
21
 
@@ -1,3 +1,4 @@
1
1
  export * from './diagnostics.js';
2
2
  export * from './RouteAPI.js';
3
3
  export * from './schema.js';
4
+ export * from './api-metrics.js';
@@ -1,4 +1,5 @@
1
1
  export * from './diagnostics.js';
2
2
  export * from './RouteAPI.js';
3
3
  export * from './schema.js';
4
+ export * from './api-metrics.js';
4
5
  //# sourceMappingURL=api-index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"api-index.js","sourceRoot":"","sources":["../../src/api/api-index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC"}
1
+ {"version":3,"file":"api-index.js","sourceRoot":"","sources":["../../src/api/api-index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC"}
@@ -0,0 +1,11 @@
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;
@@ -0,0 +1,30 @@
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
@@ -0,0 +1 @@
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"}
package/dist/index.d.ts CHANGED
@@ -5,8 +5,8 @@ export * as auth from './auth/auth-index.js';
5
5
  export * from './entry/entry-index.js';
6
6
  export * as entry from './entry/entry-index.js';
7
7
  export * as framework from '@powersync/lib-services-framework';
8
- export * from './metrics/Metrics.js';
9
- export * as metrics from './metrics/Metrics.js';
8
+ export * from './metrics/metrics-index.js';
9
+ export * as metrics from './metrics/metrics-index.js';
10
10
  export * from './migrations/migrations-index.js';
11
11
  export * as migrations from './migrations/migrations-index.js';
12
12
  export * from './modules/modules-index.js';
package/dist/index.js CHANGED
@@ -7,8 +7,8 @@ export * from './entry/entry-index.js';
7
7
  export * as entry from './entry/entry-index.js';
8
8
  // Re-export framework for easy use of Container API
9
9
  export * as framework from '@powersync/lib-services-framework';
10
- export * from './metrics/Metrics.js';
11
- export * as metrics from './metrics/Metrics.js';
10
+ export * from './metrics/metrics-index.js';
11
+ export * as metrics from './metrics/metrics-index.js';
12
12
  export * from './migrations/migrations-index.js';
13
13
  export * as migrations from './migrations/migrations-index.js';
14
14
  export * from './modules/modules-index.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,yCAAyC;AAEzC,cAAc,oBAAoB,CAAC;AACnC,OAAO,KAAK,GAAG,MAAM,oBAAoB,CAAC;AAE1C,cAAc,sBAAsB,CAAC;AACrC,OAAO,KAAK,IAAI,MAAM,sBAAsB,CAAC;AAE7C,cAAc,wBAAwB,CAAC;AACvC,OAAO,KAAK,KAAK,MAAM,wBAAwB,CAAC;AAEhD,oDAAoD;AACpD,OAAO,KAAK,SAAS,MAAM,mCAAmC,CAAC;AAE/D,cAAc,sBAAsB,CAAC;AACrC,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAEhD,cAAc,kCAAkC,CAAC;AACjD,OAAO,KAAK,UAAU,MAAM,kCAAkC,CAAC;AAE/D,cAAc,4BAA4B,CAAC;AAC3C,OAAO,KAAK,OAAO,MAAM,4BAA4B,CAAC;AAEtD,cAAc,oCAAoC,CAAC;AACnD,OAAO,KAAK,WAAW,MAAM,oCAAoC,CAAC;AAElE,cAAc,0BAA0B,CAAC;AACzC,OAAO,KAAK,MAAM,MAAM,0BAA0B,CAAC;AAEnD,cAAc,4BAA4B,CAAC;AAC3C,OAAO,KAAK,OAAO,MAAM,4BAA4B,CAAC;AAEtD,cAAc,sBAAsB,CAAC;AACrC,OAAO,KAAK,IAAI,MAAM,sBAAsB,CAAC;AAE7C,cAAc,0BAA0B,CAAC;AACzC,OAAO,KAAK,MAAM,MAAM,0BAA0B,CAAC;AAEnD,cAAc,sBAAsB,CAAC;AACrC,OAAO,KAAK,KAAK,MAAM,sBAAsB,CAAC;AAE9C,cAAc,4BAA4B,CAAC;AAC3C,OAAO,KAAK,OAAO,MAAM,4BAA4B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,yCAAyC;AAEzC,cAAc,oBAAoB,CAAC;AACnC,OAAO,KAAK,GAAG,MAAM,oBAAoB,CAAC;AAE1C,cAAc,sBAAsB,CAAC;AACrC,OAAO,KAAK,IAAI,MAAM,sBAAsB,CAAC;AAE7C,cAAc,wBAAwB,CAAC;AACvC,OAAO,KAAK,KAAK,MAAM,wBAAwB,CAAC;AAEhD,oDAAoD;AACpD,OAAO,KAAK,SAAS,MAAM,mCAAmC,CAAC;AAE/D,cAAc,4BAA4B,CAAC;AAC3C,OAAO,KAAK,OAAO,MAAM,4BAA4B,CAAC;AAEtD,cAAc,kCAAkC,CAAC;AACjD,OAAO,KAAK,UAAU,MAAM,kCAAkC,CAAC;AAE/D,cAAc,4BAA4B,CAAC;AAC3C,OAAO,KAAK,OAAO,MAAM,4BAA4B,CAAC;AAEtD,cAAc,oCAAoC,CAAC;AACnD,OAAO,KAAK,WAAW,MAAM,oCAAoC,CAAC;AAElE,cAAc,0BAA0B,CAAC;AACzC,OAAO,KAAK,MAAM,MAAM,0BAA0B,CAAC;AAEnD,cAAc,4BAA4B,CAAC;AAC3C,OAAO,KAAK,OAAO,MAAM,4BAA4B,CAAC;AAEtD,cAAc,sBAAsB,CAAC;AACrC,OAAO,KAAK,IAAI,MAAM,sBAAsB,CAAC;AAE7C,cAAc,0BAA0B,CAAC;AACzC,OAAO,KAAK,MAAM,MAAM,0BAA0B,CAAC;AAEnD,cAAc,sBAAsB,CAAC;AACrC,OAAO,KAAK,KAAK,MAAM,sBAAsB,CAAC;AAE9C,cAAc,4BAA4B,CAAC;AAC3C,OAAO,KAAK,OAAO,MAAM,4BAA4B,CAAC"}
@@ -0,0 +1,21 @@
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
+ }
@@ -0,0 +1,79 @@
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MetricsEngine.js","sourceRoot":"","sources":["../../src/metrics/MetricsEngine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export * from './MetricsEngine.js';
2
+ export * from './metrics-interfaces.js';
3
+ export * from './register-metrics.js';
4
+ export * from './open-telemetry/OpenTelemetryMetricsFactory.js';
5
+ export * from './open-telemetry/util.js';
@@ -0,0 +1,6 @@
1
+ export * from './MetricsEngine.js';
2
+ export * from './metrics-interfaces.js';
3
+ export * from './register-metrics.js';
4
+ export * from './open-telemetry/OpenTelemetryMetricsFactory.js';
5
+ export * from './open-telemetry/util.js';
6
+ //# sourceMappingURL=metrics-index.js.map
@@ -0,0 +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,uBAAuB,CAAC;AACtC,cAAc,iDAAiD,CAAC;AAChE,cAAc,0BAA0B,CAAC"}
@@ -0,0 +1,36 @@
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
+ }
@@ -0,0 +1,6 @@
1
+ export var Precision;
2
+ (function (Precision) {
3
+ Precision["INT"] = "int";
4
+ Precision["DOUBLE"] = "double";
5
+ })(Precision || (Precision = {}));
6
+ //# sourceMappingURL=metrics-interfaces.js.map
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,10 @@
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
+ }
@@ -0,0 +1,51 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,6 @@
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;
@@ -0,0 +1,62 @@
1
+ import { MeterProvider, PeriodicExportingMetricReader } from '@opentelemetry/sdk-metrics';
2
+ import { PrometheusExporter } from '@opentelemetry/exporter-prometheus';
3
+ import { OTLPMetricExporter } from '@opentelemetry/exporter-metrics-otlp-http';
4
+ import { Resource } from '@opentelemetry/resources';
5
+ import { OpenTelemetryMetricsFactory } from './OpenTelemetryMetricsFactory.js';
6
+ import { logger } from '@powersync/lib-services-framework';
7
+ export function createOpenTelemetryMetricsFactory(context) {
8
+ const { configuration, lifeCycleEngine, storageEngine } = context;
9
+ const configuredExporters = [];
10
+ if (configuration.telemetry.prometheus_port) {
11
+ const prometheusExporter = new PrometheusExporter({
12
+ port: configuration.telemetry.prometheus_port,
13
+ preventServerStart: true
14
+ });
15
+ configuredExporters.push(prometheusExporter);
16
+ lifeCycleEngine.withLifecycle(prometheusExporter, {
17
+ start: async () => {
18
+ await prometheusExporter.startServer();
19
+ logger.info(`Prometheus metric export enabled on port:${configuration.telemetry.prometheus_port}`);
20
+ }
21
+ });
22
+ }
23
+ if (!configuration.telemetry.disable_telemetry_sharing) {
24
+ const periodicExporter = new PeriodicExportingMetricReader({
25
+ exporter: new OTLPMetricExporter({
26
+ url: configuration.telemetry.internal_service_endpoint
27
+ }),
28
+ exportIntervalMillis: 1000 * 60 * 5 // 5 minutes
29
+ });
30
+ configuredExporters.push(periodicExporter);
31
+ }
32
+ let resolvedMetadata;
33
+ const runtimeMetadata = new Promise((resolve) => {
34
+ resolvedMetadata = resolve;
35
+ });
36
+ lifeCycleEngine.withLifecycle(null, {
37
+ start: async () => {
38
+ const bucketStorage = storageEngine.activeBucketStorage;
39
+ try {
40
+ const instanceId = await bucketStorage.getPowerSyncInstanceId();
41
+ resolvedMetadata({ ['instance_id']: instanceId });
42
+ }
43
+ catch (err) {
44
+ resolvedMetadata({ ['instance_id']: 'Unknown' });
45
+ }
46
+ }
47
+ });
48
+ const meterProvider = new MeterProvider({
49
+ resource: new Resource({
50
+ ['service']: 'PowerSync'
51
+ }, runtimeMetadata),
52
+ readers: configuredExporters
53
+ });
54
+ lifeCycleEngine.withLifecycle(meterProvider, {
55
+ stop: async () => {
56
+ await meterProvider.shutdown();
57
+ }
58
+ });
59
+ const meter = meterProvider.getMeter('powersync');
60
+ return new OpenTelemetryMetricsFactory(meter);
61
+ }
62
+ //# sourceMappingURL=util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../../../src/metrics/open-telemetry/util.ts"],"names":[],"mappings":"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"}
@@ -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"}
@@ -1,9 +1,11 @@
1
1
  import winston from 'winston';
2
2
  import * as storage from '../storage/storage-index.js';
3
3
  import { ErrorRateLimiter } from './ErrorRateLimiter.js';
4
+ import { MetricsEngine } from '../metrics/MetricsEngine.js';
4
5
  export interface AbstractReplicationJobOptions {
5
6
  id: string;
6
7
  storage: storage.SyncRulesBucketStorage;
8
+ metrics: MetricsEngine;
7
9
  lock: storage.ReplicationLock;
8
10
  rateLimiter: ErrorRateLimiter;
9
11
  }
@@ -1 +1 @@
1
- {"version":3,"file":"AbstractReplicationJob.js","sourceRoot":"","sources":["../../src/replication/AbstractReplicationJob.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AAYtE,MAAM,OAAgB,sBAAsB;IAKV;IAJtB,MAAM,CAAiB;IACvB,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;IACxC,oBAAoB,GAAyB,IAAI,CAAC;IAE5D,YAAgC,OAAsC;QAAtC,YAAO,GAAP,OAAO,CAA+B;QACpE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,mBAAmB,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IACrE,CAAC;IAYD;;OAEG;IACI,KAAK,CAAC,KAAK;QAChB,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,SAAS,EAAE;aACzC,KAAK,CAAC,CAAC,EAAE,EAAE,EAAE;YACZ,SAAS,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,EAAE;gBACtC,QAAQ,EAAE;oBACR,UAAU,EAAE,IAAI,CAAC,EAAE;iBACpB;aACF,CAAC,CAAC;YACH,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAC;QAC/C,CAAC,CAAC;aACD,OAAO,CAAC,KAAK,IAAI,EAAE;YAClB,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;YAC7B,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QACpC,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,IAAI;QACf,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,qDAAqD,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC/F,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;QAC7B,MAAM,IAAI,CAAC,oBAAoB,CAAC;IAClC,CAAC;IAED,IAAW,EAAE;QACX,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;IACzB,CAAC;IAED,IAAW,OAAO;QAChB,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;IAC9B,CAAC;IAED,IAAc,IAAI;QAChB,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;IAC3B,CAAC;IAED,IAAc,WAAW;QACvB,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;IAClC,CAAC;IAED,IAAW,SAAS;QAClB,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC;IAC7C,CAAC;CACF"}
1
+ {"version":3,"file":"AbstractReplicationJob.js","sourceRoot":"","sources":["../../src/replication/AbstractReplicationJob.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AActE,MAAM,OAAgB,sBAAsB;IAKV;IAJtB,MAAM,CAAiB;IACvB,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;IACxC,oBAAoB,GAAyB,IAAI,CAAC;IAE5D,YAAgC,OAAsC;QAAtC,YAAO,GAAP,OAAO,CAA+B;QACpE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,mBAAmB,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IACrE,CAAC;IAYD;;OAEG;IACI,KAAK,CAAC,KAAK;QAChB,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,SAAS,EAAE;aACzC,KAAK,CAAC,CAAC,EAAE,EAAE,EAAE;YACZ,SAAS,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,EAAE;gBACtC,QAAQ,EAAE;oBACR,UAAU,EAAE,IAAI,CAAC,EAAE;iBACpB;aACF,CAAC,CAAC;YACH,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAC;QAC/C,CAAC,CAAC;aACD,OAAO,CAAC,KAAK,IAAI,EAAE;YAClB,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;YAC7B,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QACpC,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,IAAI;QACf,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,qDAAqD,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC/F,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;QAC7B,MAAM,IAAI,CAAC,oBAAoB,CAAC;IAClC,CAAC;IAED,IAAW,EAAE;QACX,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;IACzB,CAAC;IAED,IAAW,OAAO;QAChB,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;IAC9B,CAAC;IAED,IAAc,IAAI;QAChB,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;IAC3B,CAAC;IAED,IAAc,WAAW;QACvB,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;IAClC,CAAC;IAED,IAAW,SAAS;QAClB,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC;IAC7C,CAAC;CACF"}
@@ -5,6 +5,7 @@ import { SyncRulesProvider } from '../util/config/sync-rules/sync-rules-provider
5
5
  import { AbstractReplicationJob } from './AbstractReplicationJob.js';
6
6
  import { ErrorRateLimiter } from './ErrorRateLimiter.js';
7
7
  import { ConnectionTestResult } from './ReplicationModule.js';
8
+ import { MetricsEngine } from '../metrics/MetricsEngine.js';
8
9
  export interface CreateJobOptions {
9
10
  lock: storage.ReplicationLock;
10
11
  storage: storage.SyncRulesBucketStorage;
@@ -12,6 +13,7 @@ export interface CreateJobOptions {
12
13
  export interface AbstractReplicatorOptions {
13
14
  id: string;
14
15
  storageEngine: StorageEngine;
16
+ metricsEngine: MetricsEngine;
15
17
  syncRuleProvider: SyncRulesProvider;
16
18
  /**
17
19
  * This limits the effect of retries when there is a persistent issue.
@@ -45,6 +47,7 @@ export declare abstract class AbstractReplicator<T extends AbstractReplicationJo
45
47
  protected get storage(): storage.BucketStorageFactory;
46
48
  protected get syncRuleProvider(): SyncRulesProvider;
47
49
  protected get rateLimiter(): ErrorRateLimiter;
50
+ protected get metrics(): MetricsEngine;
48
51
  start(): Promise<void>;
49
52
  stop(): Promise<void>;
50
53
  private runLoop;
@@ -35,6 +35,9 @@ export class AbstractReplicator {
35
35
  get rateLimiter() {
36
36
  return this.options.rateLimiter;
37
37
  }
38
+ get metrics() {
39
+ return this.options.metricsEngine;
40
+ }
38
41
  async start() {
39
42
  this.runLoop().catch((e) => {
40
43
  this.logger.error('Data source fatal replication error', e);
@@ -1 +1 @@
1
- {"version":3,"file":"AbstractReplicator.js","sourceRoot":"","sources":["../../src/replication/AbstractReplicator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAStC,YAAY;AACZ,MAAM,aAAa,GAAG,WAAc,GAAG,IAAI,CAAC;AAiB5C;;;;GAIG;AACH,MAAM,OAAgB,kBAAkB;IAaR;IAZpB,MAAM,CAAiB;IACjC;;;;OAIG;IACK,eAAe,GAAG,IAAI,GAAG,EAAa,CAAC;IACvC,OAAO,GAAG,KAAK,CAAC;IAExB,wDAAwD;IAChD,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;IAEnC,YAA8B,OAAkC;QAAlC,YAAO,GAAP,OAAO,CAA2B;QAC9D,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,cAAc,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IACnE,CAAC;IAUD,IAAW,EAAE;QACX,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;IACzB,CAAC;IAED,IAAc,OAAO;QACnB,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,mBAAmB,CAAC;IACxD,CAAC;IAED,IAAc,gBAAgB;QAC5B,OAAO,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC;IACvC,CAAC;IAED,IAAc,WAAW;QACvB,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;IAClC,CAAC;IAEM,KAAK,CAAC,KAAK;QAChB,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;YACzB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,qCAAqC,EAAE,CAAC,CAAC,CAAC;YAC5D,SAAS,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;YACvC,UAAU,CAAC,GAAG,EAAE;gBACd,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC,EAAE,IAAI,CAAC,CAAC;QACX,CAAC,CAAC,CAAC;IACL,CAAC;IAEM,KAAK,CAAC,IAAI;QACf,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,QAAQ,GAAoB,EAAE,CAAC;QACnC,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,EAAE,CAAC;YAChD,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;QAC5B,CAAC;QACD,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC9B,CAAC;IAEO,KAAK,CAAC,OAAO;QACnB,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,CAAC;QAEpD,IAAI,cAAc,GAAwC,SAAS,CAAC;QACpE,IAAI,SAAS,IAAI,IAAI,EAAE,CAAC;YACtB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;YACtC,IAAI,CAAC;gBACH,kDAAkD;gBAClD,2GAA2G;gBAE3G,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC;oBACrD,OAAO,EAAE,SAAS;oBAClB,IAAI,EAAE,IAAI;oBACV,QAAQ,EAAE,IAAI,CAAC,gBAAgB,CAAC,WAAW;iBAC5C,CAAC,CAAC;gBACH,IAAI,IAAI,EAAE,CAAC;oBACT,cAAc,GAAG,IAAI,CAAC;gBACxB,CAAC;YACH,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,4BAA4B;gBAC5B,4EAA4E;gBAC5E,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,gDAAgD,EAAE,CAAC,CAAC,CAAC;gBACvE,MAAM,CAAC,CAAC;YACV,CAAC;QACH,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;QACnE,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YACrB,MAAM,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAC/B,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE,eAAe,EAAE,cAAc,EAAE,CAAC,CAAC;gBACxD,+CAA+C;gBAC/C,cAAc,GAAG,SAAS,CAAC;gBAE3B,gEAAgE;gBAChE,6EAA6E;gBAC7E,IAAI,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,EAAE,CAAC;oBAC/B,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;oBAC5B,IAAI,GAAG,GAAG,IAAI,CAAC,QAAQ,IAAI,aAAa,EAAE,CAAC;wBACzC,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,EAAE,CAAC;4BACtD,MAAM,SAAS,CAAC,SAAS,EAAE,CAAC;wBAC9B,CAAC;wBAED,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC;oBACtB,CAAC;gBACH,CAAC;YACH,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,oCAAoC,EAAE,CAAC,CAAC,CAAC;YAC7D,CAAC;YACD,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,OAAO,CAAC,OAAuD;QAC3E,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,OAAO;QACT,CAAC;QAED,IAAI,cAAc,GAAG,OAAO,EAAE,eAAe,CAAC;QAE9C,MAAM,YAAY,GAAG,IAAI,GAAG,CAAY,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC,CAAC;QACxE,MAAM,oBAAoB,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,uBAAuB,EAAE,CAAC;QAC1E,MAAM,OAAO,GAAG,IAAI,GAAG,EAAa,CAAC;QACrC,KAAK,IAAI,SAAS,IAAI,oBAAoB,EAAE,CAAC;YAC3C,MAAM,WAAW,GAAG,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;YACnD,IAAI,WAAW,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC;gBAC1C,YAAY;gBACZ,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;gBAClC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;YACzC,CAAC;iBAAM,IAAI,WAAW,IAAI,WAAW,CAAC,SAAS,EAAE,CAAC;gBAChD,8BAA8B;gBAC9B,gEAAgE;gBAChE,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;YACpC,CAAC;iBAAM,CAAC;gBACN,sDAAsD;gBACtD,IAAI,CAAC;oBACH,IAAI,IAA6B,CAAC;oBAClC,IAAI,cAAc,EAAE,aAAa,IAAI,SAAS,CAAC,EAAE,EAAE,CAAC;wBAClD,IAAI,GAAG,cAAc,CAAC;oBACxB,CAAC;yBAAM,CAAC;wBACN,IAAI,GAAG,MAAM,SAAS,CAAC,IAAI,EAAE,CAAC;oBAChC,CAAC;oBACD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;oBACpD,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC;wBAC5B,IAAI,EAAE,IAAI;wBACV,OAAO,EAAE,OAAO;qBACjB,CAAC,CAAC;oBAEH,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;oBAClC,MAAM,CAAC,KAAK,EAAE,CAAC;gBACjB,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC;oBACX,qCAAqC;oBACrC,uDAAuD;oBACvD,gDAAgD;oBAChD,gFAAgF;oBAChF,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,gDAAgD,EAAE,CAAC,CAAC,CAAC;gBACzE,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC;QAE/B,yDAAyD;QACzD,4BAA4B;QAC5B,KAAK,IAAI,GAAG,IAAI,YAAY,CAAC,MAAM,EAAE,EAAE,CAAC;YACtC,0BAA0B;YAC1B,IAAI,CAAC;gBACH,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;YACnB,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,uBAAuB;gBACvB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,qCAAqC,EAAE,CAAC,CAAC,CAAC;YAC7D,CAAC;QACH,CAAC;QAED,2DAA2D;QAC3D,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAAC;QACzD,KAAK,IAAI,SAAS,IAAI,OAAO,EAAE,CAAC;YAC9B,IAAI,CAAC;gBACH,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,SAAS,EAAE,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC1F,MAAM,IAAI,CAAC,kBAAkB,CAAC,eAAe,CAAC,CAAC;YACjD,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,qDAAqD,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;YAC3F,CAAC;QACH,CAAC;IACH,CAAC;IAES,WAAW,CAAC,UAAkB;QACtC,OAAO,GAAG,IAAI,CAAC,EAAE,IAAI,UAAU,EAAE,CAAC;IACpC,CAAC;IAES,KAAK,CAAC,kBAAkB,CAAC,eAA+C;QAChF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,2BAA2B,eAAe,CAAC,QAAQ,KAAK,CAAC,CAAC;QAC3E,MAAM,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;QACpC,MAAM,eAAe,CAAC,SAAS,EAAE,CAAC;QAClC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,uCAAuC,eAAe,CAAC,QAAQ,EAAE,CAAC,CAAC;IACtF,CAAC;CAGF"}
1
+ {"version":3,"file":"AbstractReplicator.js","sourceRoot":"","sources":["../../src/replication/AbstractReplicator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAUtC,YAAY;AACZ,MAAM,aAAa,GAAG,WAAc,GAAG,IAAI,CAAC;AAkB5C;;;;GAIG;AACH,MAAM,OAAgB,kBAAkB;IAcR;IAbpB,MAAM,CAAiB;IAEjC;;;;OAIG;IACK,eAAe,GAAG,IAAI,GAAG,EAAa,CAAC;IACvC,OAAO,GAAG,KAAK,CAAC;IAExB,wDAAwD;IAChD,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;IAEnC,YAA8B,OAAkC;QAAlC,YAAO,GAAP,OAAO,CAA2B;QAC9D,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,cAAc,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IACnE,CAAC;IAUD,IAAW,EAAE;QACX,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;IACzB,CAAC;IAED,IAAc,OAAO;QACnB,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,mBAAmB,CAAC;IACxD,CAAC;IAED,IAAc,gBAAgB;QAC5B,OAAO,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC;IACvC,CAAC;IAED,IAAc,WAAW;QACvB,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;IAClC,CAAC;IAED,IAAc,OAAO;QACnB,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC;IACpC,CAAC;IAEM,KAAK,CAAC,KAAK;QAChB,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;YACzB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,qCAAqC,EAAE,CAAC,CAAC,CAAC;YAC5D,SAAS,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;YACvC,UAAU,CAAC,GAAG,EAAE;gBACd,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC,EAAE,IAAI,CAAC,CAAC;QACX,CAAC,CAAC,CAAC;IACL,CAAC;IAEM,KAAK,CAAC,IAAI;QACf,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,QAAQ,GAAoB,EAAE,CAAC;QACnC,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,EAAE,CAAC;YAChD,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;QAC5B,CAAC;QACD,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC9B,CAAC;IAEO,KAAK,CAAC,OAAO;QACnB,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,CAAC;QAEpD,IAAI,cAAc,GAAwC,SAAS,CAAC;QACpE,IAAI,SAAS,IAAI,IAAI,EAAE,CAAC;YACtB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;YACtC,IAAI,CAAC;gBACH,kDAAkD;gBAClD,2GAA2G;gBAE3G,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC;oBACrD,OAAO,EAAE,SAAS;oBAClB,IAAI,EAAE,IAAI;oBACV,QAAQ,EAAE,IAAI,CAAC,gBAAgB,CAAC,WAAW;iBAC5C,CAAC,CAAC;gBACH,IAAI,IAAI,EAAE,CAAC;oBACT,cAAc,GAAG,IAAI,CAAC;gBACxB,CAAC;YACH,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,4BAA4B;gBAC5B,4EAA4E;gBAC5E,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,gDAAgD,EAAE,CAAC,CAAC,CAAC;gBACvE,MAAM,CAAC,CAAC;YACV,CAAC;QACH,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;QACnE,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YACrB,MAAM,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAC/B,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE,eAAe,EAAE,cAAc,EAAE,CAAC,CAAC;gBACxD,+CAA+C;gBAC/C,cAAc,GAAG,SAAS,CAAC;gBAE3B,gEAAgE;gBAChE,6EAA6E;gBAC7E,IAAI,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,EAAE,CAAC;oBAC/B,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;oBAC5B,IAAI,GAAG,GAAG,IAAI,CAAC,QAAQ,IAAI,aAAa,EAAE,CAAC;wBACzC,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,EAAE,CAAC;4BACtD,MAAM,SAAS,CAAC,SAAS,EAAE,CAAC;wBAC9B,CAAC;wBAED,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC;oBACtB,CAAC;gBACH,CAAC;YACH,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,oCAAoC,EAAE,CAAC,CAAC,CAAC;YAC7D,CAAC;YACD,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,OAAO,CAAC,OAAuD;QAC3E,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,OAAO;QACT,CAAC;QAED,IAAI,cAAc,GAAG,OAAO,EAAE,eAAe,CAAC;QAE9C,MAAM,YAAY,GAAG,IAAI,GAAG,CAAY,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC,CAAC;QACxE,MAAM,oBAAoB,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,uBAAuB,EAAE,CAAC;QAC1E,MAAM,OAAO,GAAG,IAAI,GAAG,EAAa,CAAC;QACrC,KAAK,IAAI,SAAS,IAAI,oBAAoB,EAAE,CAAC;YAC3C,MAAM,WAAW,GAAG,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;YACnD,IAAI,WAAW,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC;gBAC1C,YAAY;gBACZ,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;gBAClC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;YACzC,CAAC;iBAAM,IAAI,WAAW,IAAI,WAAW,CAAC,SAAS,EAAE,CAAC;gBAChD,8BAA8B;gBAC9B,gEAAgE;gBAChE,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;YACpC,CAAC;iBAAM,CAAC;gBACN,sDAAsD;gBACtD,IAAI,CAAC;oBACH,IAAI,IAA6B,CAAC;oBAClC,IAAI,cAAc,EAAE,aAAa,IAAI,SAAS,CAAC,EAAE,EAAE,CAAC;wBAClD,IAAI,GAAG,cAAc,CAAC;oBACxB,CAAC;yBAAM,CAAC;wBACN,IAAI,GAAG,MAAM,SAAS,CAAC,IAAI,EAAE,CAAC;oBAChC,CAAC;oBACD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;oBACpD,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC;wBAC5B,IAAI,EAAE,IAAI;wBACV,OAAO,EAAE,OAAO;qBACjB,CAAC,CAAC;oBAEH,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;oBAClC,MAAM,CAAC,KAAK,EAAE,CAAC;gBACjB,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC;oBACX,qCAAqC;oBACrC,uDAAuD;oBACvD,gDAAgD;oBAChD,gFAAgF;oBAChF,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,gDAAgD,EAAE,CAAC,CAAC,CAAC;gBACzE,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC;QAE/B,yDAAyD;QACzD,4BAA4B;QAC5B,KAAK,IAAI,GAAG,IAAI,YAAY,CAAC,MAAM,EAAE,EAAE,CAAC;YACtC,0BAA0B;YAC1B,IAAI,CAAC;gBACH,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;YACnB,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,uBAAuB;gBACvB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,qCAAqC,EAAE,CAAC,CAAC,CAAC;YAC7D,CAAC;QACH,CAAC;QAED,2DAA2D;QAC3D,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAAC;QACzD,KAAK,IAAI,SAAS,IAAI,OAAO,EAAE,CAAC;YAC9B,IAAI,CAAC;gBACH,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,SAAS,EAAE,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC1F,MAAM,IAAI,CAAC,kBAAkB,CAAC,eAAe,CAAC,CAAC;YACjD,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,qDAAqD,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;YAC3F,CAAC;QACH,CAAC;IACH,CAAC;IAES,WAAW,CAAC,UAAkB;QACtC,OAAO,GAAG,IAAI,CAAC,EAAE,IAAI,UAAU,EAAE,CAAC;IACpC,CAAC;IAES,KAAK,CAAC,kBAAkB,CAAC,eAA+C;QAChF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,2BAA2B,eAAe,CAAC,QAAQ,KAAK,CAAC,CAAC;QAC3E,MAAM,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;QACpC,MAAM,eAAe,CAAC,SAAS,EAAE,CAAC;QAClC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,uCAAuC,eAAe,CAAC,QAAQ,EAAE,CAAC,CAAC;IACtF,CAAC;CAGF"}
@@ -46,6 +46,13 @@ export declare abstract class ReplicationModule<TConfig extends DataSourceConfig
46
46
  * Create the Replicator to be used by the ReplicationEngine.
47
47
  */
48
48
  protected abstract createReplicator(context: system.ServiceContext): AbstractReplicator;
49
+ /**
50
+ * Any additional initialization specific to the module should be added here. Will be called if necessary after the
51
+ * main initialization has been completed
52
+ * @param context
53
+ * @protected
54
+ */
55
+ protected abstract onInitialized(context: system.ServiceContext): Promise<void>;
49
56
  abstract testConnection(config: TConfig): Promise<ConnectionTestResult>;
50
57
  /**
51
58
  * Register this module's Replicators and RouteAPI adapters if the required configuration is present.
@@ -40,6 +40,7 @@ export class ReplicationModule extends modules.AbstractModule {
40
40
  this.decodeConfig(baseMatchingConfig);
41
41
  context.replicationEngine?.register(this.createReplicator(context));
42
42
  context.routerEngine?.registerAPI(this.createRouteAPIAdapter());
43
+ await this.onInitialized(context);
43
44
  }
44
45
  decodeConfig(config) {
45
46
  this.validateConfig(config);