@sentio/runtime 2.40.0-rc.23 → 2.40.0-rc.25

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sentio/runtime",
3
- "version": "2.40.0-rc.23",
3
+ "version": "2.40.0-rc.25",
4
4
  "license": "Apache-2.0",
5
5
  "type": "module",
6
6
  "exports": {
package/src/db-context.ts CHANGED
@@ -24,7 +24,7 @@ const STORE_BATCH_SIZE = process.env['STORE_BATCH_SIZE'] ? parseInt(process.env[
24
24
  type Request = Omit<DBRequest, 'opId'>
25
25
  type RequestType = keyof Request
26
26
 
27
- export const timeoutError = Symbol()
27
+ export const timeoutError = new Error('timeout')
28
28
 
29
29
  export class StoreContext {
30
30
  private static opCounter = 0n
@@ -181,7 +181,7 @@ export class StoreContext {
181
181
  private sendBatch() {
182
182
  if (this.upsertBatch) {
183
183
  const { request, opId, timer } = this.upsertBatch
184
- console.debug('sending batch upsert', opId, 'batch size', request?.entity.length)
184
+ // console.debug('sending batch upsert', opId, 'batch size', request?.entity.length)
185
185
  clearTimeout(timer)
186
186
  this.upsertBatch = undefined
187
187
  this.subject.next({
@@ -7,9 +7,9 @@ import { compressionAlgorithms } from '@grpc/grpc-js'
7
7
  import commandLineArgs from 'command-line-args'
8
8
  import { createServer } from 'nice-grpc'
9
9
  import { errorDetailsServerMiddleware } from 'nice-grpc-error-details'
10
- import { registry as niceGrpcRegistry, prometheusServerMiddleware } from 'nice-grpc-prometheus'
10
+ // import { registry as niceGrpcRegistry } from 'nice-grpc-prometheus'
11
11
  import { openTelemetryServerMiddleware } from 'nice-grpc-opentelemetry'
12
- import { register as globalRegistry, Registry } from 'prom-client'
12
+ // import { register as globalRegistry, Registry } from 'prom-client'
13
13
  import http from 'http'
14
14
  // @ts-ignore inspector promises is not included in @type/node
15
15
  import { Session } from 'node:inspector/promises'
@@ -21,23 +21,17 @@ import { FullProcessorServiceImpl } from './full-service.js'
21
21
  import { ChainConfig } from './chain-config.js'
22
22
  import { setupLogger } from './logger.js'
23
23
 
24
- import { NodeSDK } from '@opentelemetry/sdk-node'
24
+ // import { NodeSDK } from '@opentelemetry/sdk-node'
25
+ import { envDetector } from '@opentelemetry/resources'
25
26
  import { OTLPMetricExporter } from '@opentelemetry/exporter-metrics-otlp-grpc'
26
27
  import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-grpc'
27
- import { PeriodicExportingMetricReader } from '@opentelemetry/sdk-metrics'
28
- import { diag, DiagConsoleLogger, DiagLogLevel } from '@opentelemetry/api'
28
+ import { PeriodicExportingMetricReader, MeterProvider } from '@opentelemetry/sdk-metrics'
29
+ import { BatchSpanProcessor } from '@opentelemetry/sdk-trace-base'
30
+ import { NodeTracerProvider } from '@opentelemetry/sdk-trace-node'
31
+ import { diag, DiagConsoleLogger, DiagLogLevel, metrics, trace } from '@opentelemetry/api'
32
+ import { PrometheusExporter } from '@opentelemetry/exporter-prometheus'
29
33
 
30
- const sdk = new NodeSDK({
31
- traceExporter: new OTLPTraceExporter(),
32
- metricReader: new PeriodicExportingMetricReader({
33
- exporter: new OTLPMetricExporter()
34
- })
35
- // instrumentations: [getNodeAutoInstrumentations()],
36
- })
37
-
38
- sdk.start()
39
-
40
- const mergedRegistry = Registry.merge([globalRegistry, niceGrpcRegistry])
34
+ // const mergedRegistry = Registry.merge([globalRegistry, niceGrpcRegistry])
41
35
 
42
36
  const optionDefinitions = [
43
37
  { name: 'target', type: String, defaultOption: true },
@@ -68,6 +62,46 @@ if (options.debug) {
68
62
  diag.setLogger(new DiagConsoleLogger(), DiagLogLevel.DEBUG)
69
63
  }
70
64
 
65
+ const resource = await envDetector.detect()
66
+
67
+ const meterProvider = new MeterProvider({
68
+ resource,
69
+ readers: [
70
+ new PeriodicExportingMetricReader({
71
+ exporter: new OTLPMetricExporter()
72
+ }),
73
+ new PrometheusExporter({
74
+ // http://localhost:4041/metrics
75
+ port: 4041
76
+ })
77
+ ]
78
+ })
79
+
80
+ const traceProvider = new NodeTracerProvider({
81
+ resource: resource
82
+ })
83
+ const exporter = new OTLPTraceExporter() // new ConsoleSpanExporter();
84
+ const processor = new BatchSpanProcessor(exporter)
85
+ traceProvider.addSpanProcessor(processor)
86
+ traceProvider.register()
87
+
88
+ metrics.setGlobalMeterProvider(meterProvider)
89
+ trace.setGlobalTracerProvider(traceProvider)
90
+ ;['SIGINT', 'SIGTERM'].forEach((signal) => {
91
+ process.on(signal as any, () => shutdownProvider())
92
+ })
93
+
94
+ export async function shutdownProvider() {
95
+ const traceProvider = trace.getTracerProvider()
96
+ if (traceProvider instanceof NodeTracerProvider) {
97
+ traceProvider.shutdown().catch(console.error)
98
+ }
99
+ const meterProvider = metrics.getMeterProvider()
100
+ if (meterProvider instanceof MeterProvider) {
101
+ meterProvider.shutdown().catch(console.error)
102
+ }
103
+ }
104
+
71
105
  Error.stackTraceLimit = 20
72
106
 
73
107
  const fullPath = path.resolve(options['chains-config'])
@@ -106,7 +140,7 @@ const server = createServer({
106
140
  'grpc.max_receive_message_length': 384 * 1024 * 1024,
107
141
  'grpc.default_compression_algorithm': compressionAlgorithms.gzip
108
142
  })
109
- .use(prometheusServerMiddleware())
143
+ // .use(prometheusServerMiddleware())
110
144
  .use(openTelemetryServerMiddleware())
111
145
  .use(errorDetailsServerMiddleware)
112
146
  const baseService = new ProcessorServiceImpl(async () => {
@@ -129,10 +163,10 @@ const httpServer = http
129
163
  const reqUrl = new URL(req.url, `http://${req.headers.host}`)
130
164
  const queries = reqUrl.searchParams
131
165
  switch (reqUrl.pathname) {
132
- case '/metrics':
133
- const metrics = await mergedRegistry.metrics()
134
- res.write(metrics)
135
- break
166
+ // case '/metrics':
167
+ // const metrics = await mergedRegistry.metrics()
168
+ // res.write(metrics)
169
+ // break
136
170
  case '/profile': {
137
171
  try {
138
172
  const profileTime = parseInt(queries.get('t') || '1000', 10) || 1000
package/src/service.ts CHANGED
@@ -403,7 +403,7 @@ export class ProcessorServiceImpl implements ProcessorServiceImplementation {
403
403
 
404
404
  for await (const request of requests) {
405
405
  try {
406
- console.debug('received request:', request)
406
+ // console.debug('received request:', request)
407
407
  if (request.binding) {
408
408
  process_binding_count.add(1)
409
409
  const binding = request.binding