@sentio/runtime 2.11.0-rc.6 → 2.11.0-rc.8
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/lib/endpoints.js +2 -1
- package/lib/endpoints.js.map +1 -1
- package/lib/logger.d.ts +1 -0
- package/lib/logger.js +26 -0
- package/lib/logger.js.map +1 -0
- package/lib/logger.test.d.ts +1 -0
- package/lib/logger.test.js.map +1 -0
- package/lib/plugin.js +2 -1
- package/lib/plugin.js.map +1 -1
- package/lib/processor-runner.js +2 -20
- package/lib/processor-runner.js.map +1 -1
- package/lib/state.js +2 -1
- package/lib/state.js.map +1 -1
- package/package.json +4 -4
- package/src/logger.ts +31 -0
- package/src/processor-runner.ts +2 -26
package/lib/endpoints.js
CHANGED
package/lib/endpoints.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"endpoints.js","sourceRoot":"","sources":["../src/endpoints.ts"],"names":[],"mappings":"AAAA,
|
1
|
+
{"version":3,"file":"endpoints.js","sourceRoot":"","sources":["../src/endpoints.ts"],"names":[],"mappings":"AAAA,MAAa,SAAS;IACpB,MAAM,CAAC,QAAQ,GAAc,IAAI,SAAS,EAAE,CAAA;IAE5C,WAAW,GAAG,CAAC,CAAA;IACf,aAAa,GAAG,EAAE,CAAA;IAClB,YAAY,GAAG,EAAE,CAAA;IAEjB,WAAW,GAAG,IAAI,GAAG,EAAkB,CAAA;;SAP5B,SAAS","sourcesContent":["export class Endpoints {\n static INSTANCE: Endpoints = new Endpoints()\n\n concurrency = 4\n chainQueryAPI = ''\n priceFeedAPI = ''\n\n chainServer = new Map<string, string>()\n}\n"]}
|
package/lib/logger.d.ts
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
export declare function setupJsonLogger(): void;
|
package/lib/logger.js
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
import util from 'util';
|
2
|
+
import { createLogger, format, transports } from 'winston';
|
3
|
+
export function setupJsonLogger() {
|
4
|
+
const utilFormatter = {
|
5
|
+
transform: (info) => {
|
6
|
+
const args = info[Symbol.for('splat')];
|
7
|
+
if (args) {
|
8
|
+
info.message = util.format(info.message, ...args);
|
9
|
+
}
|
10
|
+
else {
|
11
|
+
info.message = util.format(info.message);
|
12
|
+
}
|
13
|
+
return info;
|
14
|
+
},
|
15
|
+
};
|
16
|
+
const logger = createLogger({
|
17
|
+
format: format.combine(format.timestamp({ format: 'YYYY-MM-DDTHH:mm:ss.SSSZ' }), utilFormatter, format.errors({ stack: true }), format.json()),
|
18
|
+
transports: [new transports.Console()],
|
19
|
+
});
|
20
|
+
console.log = (...args) => logger.info.call(logger, ...args);
|
21
|
+
console.info = (...args) => logger.info.call(logger, ...args);
|
22
|
+
console.warn = (...args) => logger.warn.call(logger, ...args);
|
23
|
+
console.error = (...args) => logger.error.call(logger, ...args);
|
24
|
+
console.debug = (...args) => logger.debug.call(logger, ...args);
|
25
|
+
}
|
26
|
+
//# sourceMappingURL=logger.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAE1D,MAAM,UAAU,eAAe;IAC7B,MAAM,aAAa,GAAG;QACpB,SAAS,EAAE,CAAC,IAAS,EAAE,EAAE;YACvB,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAA;YACtC,IAAI,IAAI,EAAE;gBACR,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAA;aAClD;iBAAM;gBACL,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;aACzC;YACD,OAAO,IAAI,CAAA;QACb,CAAC;KACF,CAAA;IACD,MAAM,MAAM,GAAG,YAAY,CAAC;QAC1B,MAAM,EAAE,MAAM,CAAC,OAAO,CACpB,MAAM,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,0BAA0B,EAAE,CAAC,EACxD,aAAa,EACb,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAC9B,MAAM,CAAC,IAAI,EAAE,CACd;QACD,UAAU,EAAE,CAAC,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;KACvC,CAAC,CAAA;IAEF,OAAO,CAAC,GAAG,GAAG,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAA;IAC5D,OAAO,CAAC,IAAI,GAAG,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAA;IAC7D,OAAO,CAAC,IAAI,GAAG,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAA;IAC7D,OAAO,CAAC,KAAK,GAAG,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAA;IAC/D,OAAO,CAAC,KAAK,GAAG,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAA;AACjE,CAAC","sourcesContent":["import util from 'util'\nimport { createLogger, format, transports } from 'winston'\n\nexport function setupJsonLogger() {\n const utilFormatter = {\n transform: (info: any) => {\n const args = info[Symbol.for('splat')]\n if (args) {\n info.message = util.format(info.message, ...args)\n } else {\n info.message = util.format(info.message)\n }\n return info\n },\n }\n const logger = createLogger({\n format: format.combine(\n format.timestamp({ format: 'YYYY-MM-DDTHH:mm:ss.SSSZ' }),\n utilFormatter,\n format.errors({ stack: true }),\n format.json()\n ),\n transports: [new transports.Console()],\n })\n\n console.log = (...args) => logger.info.call(logger, ...args)\n console.info = (...args) => logger.info.call(logger, ...args)\n console.warn = (...args) => logger.warn.call(logger, ...args)\n console.error = (...args) => logger.error.call(logger, ...args)\n console.debug = (...args) => logger.debug.call(logger, ...args)\n}\n"]}
|
@@ -0,0 +1 @@
|
|
1
|
+
export {};
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"logger.test.js","sourceRoot":"","sources":["../src/logger.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAE7C,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAC3B,IAAI,CAAC,kBAAkB,EAAE,GAAG,EAAE;QAC5B,eAAe,EAAE,CAAA;QACjB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QACnB,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QACpB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QAEnB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,CAAA;IACvC,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA","sourcesContent":["import { setupJsonLogger } from './logger.js'\n\ndescribe('Test logger', () => {\n test('check log output', () => {\n setupJsonLogger()\n console.log('asdf')\n console.log(console)\n console.log('asdf')\n\n console.log({ a: 'asdf', b: 'Asdf' })\n })\n})\n"]}
|
package/lib/plugin.js
CHANGED
@@ -11,7 +11,7 @@ export class Plugin {
|
|
11
11
|
return ProcessResult.fromPartial({});
|
12
12
|
}
|
13
13
|
}
|
14
|
-
|
14
|
+
class PluginManager {
|
15
15
|
static INSTANCE = new PluginManager();
|
16
16
|
plugins = [];
|
17
17
|
typesToPlugin = new Map();
|
@@ -45,4 +45,5 @@ export class PluginManager {
|
|
45
45
|
return plugin.processBinding(request);
|
46
46
|
}
|
47
47
|
}
|
48
|
+
export { PluginManager };
|
48
49
|
//# sourceMappingURL=plugin.js.map
|
package/lib/plugin.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmD,aAAa,EAAgB,MAAM,gBAAgB,CAAA;AAE7G,MAAM,OAAgB,MAAM;IAC1B,IAAI,CAAQ;IACZ,iBAAiB,GAAkB,EAAE,CAAA;IAErC,KAAK,CAAC,SAAS,CAAC,MAA6B,IAAkB,CAAC;IAChE,KAAK,CAAC,KAAK,CAAC,KAAmB,IAAkB,CAAC;IAClD,SAAS,CAAC,MAA6B;QACrC,OAAO,KAAK,CAAA;IACd,CAAC;IACD,KAAK,CAAC,cAAc,CAAC,OAAoB;QACvC,OAAO,aAAa,CAAC,WAAW,CAAC,EAAE,CAAC,CAAA;IACtC,CAAC;CACF;AAED,
|
1
|
+
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmD,aAAa,EAAgB,MAAM,gBAAgB,CAAA;AAE7G,MAAM,OAAgB,MAAM;IAC1B,IAAI,CAAQ;IACZ,iBAAiB,GAAkB,EAAE,CAAA;IAErC,KAAK,CAAC,SAAS,CAAC,MAA6B,IAAkB,CAAC;IAChE,KAAK,CAAC,KAAK,CAAC,KAAmB,IAAkB,CAAC;IAClD,SAAS,CAAC,MAA6B;QACrC,OAAO,KAAK,CAAA;IACd,CAAC;IACD,KAAK,CAAC,cAAc,CAAC,OAAoB;QACvC,OAAO,aAAa,CAAC,WAAW,CAAC,EAAE,CAAC,CAAA;IACtC,CAAC;CACF;AAED,MAAa,aAAa;IACxB,MAAM,CAAC,QAAQ,GAAG,IAAI,aAAa,EAAE,CAAA;IAErC,OAAO,GAAa,EAAE,CAAA;IACtB,aAAa,GAAG,IAAI,GAAG,EAAuB,CAAA;IAE9C,QAAQ,CAAC,MAAc;QACrB,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,CAAC,EAAE;YACpD,OAAM;SACP;QACD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QAEzB,KAAK,MAAM,WAAW,IAAI,MAAM,CAAC,iBAAiB,EAAE;YAClD,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;YACnD,IAAI,OAAO,EAAE;gBACX,MAAM,IAAI,KAAK,CAAC,wBAAwB,WAAW,KAAK,OAAO,CAAC,IAAI,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC,CAAA;aAC3F;YACD,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC,CAAA;SAC5C;IACH,CAAC;IAED,SAAS,CAAC,MAA6B;QACrC,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;IAC5E,CAAC;IAED,KAAK,CAAC,KAAmB;QACvB,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IACvE,CAAC;IAED,SAAS,CAAC,MAA6B;QACrC,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAA;IAChE,CAAC;IAED,cAAc,CAAC,OAAoB;QACjC,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;QAC1D,IAAI,CAAC,MAAM,EAAE;YACX,MAAM,IAAI,KAAK,CAAC,iBAAiB,OAAO,CAAC,WAAW,EAAE,CAAC,CAAA;SACxD;QACD,OAAO,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,CAAA;IACvC,CAAC;;SAvCU,aAAa","sourcesContent":["import { DataBinding, HandlerType, ProcessConfigResponse, ProcessResult, StartRequest } from '@sentio/protos'\n\nexport abstract class Plugin {\n name: string\n supportedHandlers: HandlerType[] = []\n\n async configure(config: ProcessConfigResponse): Promise<void> {}\n async start(start: StartRequest): Promise<void> {}\n stateDiff(config: ProcessConfigResponse): boolean {\n return false\n }\n async processBinding(request: DataBinding): Promise<ProcessResult> {\n return ProcessResult.fromPartial({})\n }\n}\n\nexport class PluginManager {\n static INSTANCE = new PluginManager()\n\n plugins: Plugin[] = []\n typesToPlugin = new Map<HandlerType, Plugin>()\n\n register(plugin: Plugin) {\n if (this.plugins.find((p) => p.name === plugin.name)) {\n return\n }\n this.plugins.push(plugin)\n\n for (const handlerType of plugin.supportedHandlers) {\n const exsited = this.typesToPlugin.get(handlerType)\n if (exsited) {\n throw new Error(`Duplicate plugin for ${handlerType}: ${exsited.name} and ${plugin.name}`)\n }\n this.typesToPlugin.set(handlerType, plugin)\n }\n }\n\n configure(config: ProcessConfigResponse) {\n return Promise.all(this.plugins.map((plugin) => plugin.configure(config)))\n }\n\n start(start: StartRequest) {\n return Promise.all(this.plugins.map((plugin) => plugin.start(start)))\n }\n\n stateDiff(config: ProcessConfigResponse): boolean {\n return this.plugins.some((plugin) => plugin.stateDiff(config))\n }\n\n processBinding(request: DataBinding): Promise<ProcessResult> {\n const plugin = this.typesToPlugin.get(request.handlerType)\n if (!plugin) {\n throw new Error(`No plugin for ${request.handlerType}`)\n }\n return plugin.processBinding(request)\n }\n}\n"]}
|
package/lib/processor-runner.js
CHANGED
@@ -1,10 +1,8 @@
|
|
1
1
|
#!/usr/bin/env node
|
2
2
|
import path from 'path';
|
3
3
|
import fs from 'fs-extra';
|
4
|
-
import * as util from 'util';
|
5
4
|
import commandLineArgs from 'command-line-args';
|
6
5
|
import { createServer } from 'nice-grpc';
|
7
|
-
import { createLogger, transports, format } from 'winston';
|
8
6
|
import { compressionAlgorithms } from '@grpc/grpc-js';
|
9
7
|
import { register as globalRegistry, Registry } from 'prom-client';
|
10
8
|
import { registry as niceGrpcRegistry, prometheusServerMiddleware } from 'nice-grpc-prometheus';
|
@@ -14,6 +12,7 @@ import { ProcessorDefinition } from './gen/processor/protos/processor.js';
|
|
14
12
|
import { ProcessorServiceImpl } from './service.js';
|
15
13
|
import { Endpoints } from './endpoints.js';
|
16
14
|
import { FullProcessorServiceImpl } from './full-service.js';
|
15
|
+
import { setupJsonLogger } from './logger.js';
|
17
16
|
const optionDefinitions = [
|
18
17
|
{ name: 'target', type: String, defaultOption: true },
|
19
18
|
{ name: 'port', alias: 'p', type: String, defaultValue: '4000' },
|
@@ -32,24 +31,7 @@ const optionDefinitions = [
|
|
32
31
|
];
|
33
32
|
const options = commandLineArgs(optionDefinitions, { partial: true });
|
34
33
|
if (options['log-format'] === 'json') {
|
35
|
-
|
36
|
-
transform: (info) => {
|
37
|
-
const args = info[Symbol.for('splat')];
|
38
|
-
if (args) {
|
39
|
-
info.message = util.format(info.message, ...args);
|
40
|
-
}
|
41
|
-
return info;
|
42
|
-
},
|
43
|
-
};
|
44
|
-
const logger = createLogger({
|
45
|
-
format: format.combine(format.timestamp({ format: 'YYYY-MM-DDTHH:mm:ss.SSSZ' }), utilFormatter, format.errors({ stack: true }), format.json()),
|
46
|
-
transports: [new transports.Console()],
|
47
|
-
});
|
48
|
-
console.log = (...args) => logger.info.call(logger, ...args);
|
49
|
-
console.info = (...args) => logger.info.call(logger, ...args);
|
50
|
-
console.warn = (...args) => logger.warn.call(logger, ...args);
|
51
|
-
console.error = (...args) => logger.error.call(logger, ...args);
|
52
|
-
console.debug = (...args) => logger.debug.call(logger, ...args);
|
34
|
+
setupJsonLogger();
|
53
35
|
}
|
54
36
|
if (options.debug) {
|
55
37
|
console.log('Starting with', options.target);
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"processor-runner.js","sourceRoot":"","sources":["../src/processor-runner.ts"],"names":[],"mappings":";AAEA,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,EAAE,MAAM,UAAU,CAAA;
|
1
|
+
{"version":3,"file":"processor-runner.js","sourceRoot":"","sources":["../src/processor-runner.ts"],"names":[],"mappings":"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","sourcesContent":["#!/usr/bin/env node\n\nimport path from 'path'\nimport fs from 'fs-extra'\n\nimport commandLineArgs from 'command-line-args'\nimport { createServer } from 'nice-grpc'\nimport { compressionAlgorithms } from '@grpc/grpc-js'\n\nimport { register as globalRegistry, Registry } from 'prom-client'\nimport { registry as niceGrpcRegistry, prometheusServerMiddleware } from 'nice-grpc-prometheus'\nimport http from 'http'\n\nconst mergedRegistry = Registry.merge([globalRegistry, niceGrpcRegistry])\n\nimport { ProcessorDefinition } from './gen/processor/protos/processor.js'\nimport { ProcessorServiceImpl } from './service.js'\nimport { Endpoints } from './endpoints.js'\n\nimport { FullProcessorServiceImpl } from './full-service.js'\nimport { ChainConfig } from './chain-config.js'\nimport { setupJsonLogger } from './logger.js'\n\nconst optionDefinitions = [\n { name: 'target', type: String, defaultOption: true },\n { name: 'port', alias: 'p', type: String, defaultValue: '4000' },\n { name: 'concurrency', type: Number, defaultValue: 4 },\n // { name: 'use-chainserver', type: Boolean, defaultValue: false },\n {\n name: 'chains-config',\n alias: 'c',\n type: String,\n defaultValue: 'chains-config.json',\n },\n { name: 'chainquery-server', type: String, defaultValue: '' },\n { name: 'pricefeed-server', type: String, defaultValue: '' },\n { name: 'log-format', type: String, defaultValue: 'console' },\n { name: 'debug', type: Boolean, defaultValue: false },\n]\n\nconst options = commandLineArgs(optionDefinitions, { partial: true })\n\nif (options['log-format'] === 'json') {\n setupJsonLogger()\n}\nif (options.debug) {\n console.log('Starting with', options.target)\n}\n\nconst fullPath = path.resolve(options['chains-config'])\nconst chainsConfig = fs.readJsonSync(fullPath)\n\nEndpoints.INSTANCE.concurrency = options.concurrency\nEndpoints.INSTANCE.chainQueryAPI = options['chainquery-server']\nEndpoints.INSTANCE.priceFeedAPI = options['pricefeed-server']\n\nfor (const [id, config] of Object.entries(chainsConfig)) {\n const chainConfig = config as ChainConfig\n if (chainConfig.ChainServer) {\n Endpoints.INSTANCE.chainServer.set(id, chainConfig.ChainServer)\n } else {\n const http = chainConfig.Https?.[0]\n if (http) {\n Endpoints.INSTANCE.chainServer.set(id, http)\n } else {\n console.error('not valid config for chain', id)\n }\n }\n}\n\nif (options.debug) {\n console.log('Starting Server', options)\n}\n\nconst server = createServer({\n 'grpc.max_send_message_length': 128 * 1024 * 1024,\n 'grpc.max_receive_message_length': 128 * 1024 * 1024,\n 'grpc.default_compression_algorithm': compressionAlgorithms.gzip,\n}).use(prometheusServerMiddleware())\n\nconst baseService = new ProcessorServiceImpl(async () => {\n const m = await import(options.target)\n if (options.debug) {\n console.log('Module loaded', m)\n }\n return m\n}, server.shutdown)\nconst service = new FullProcessorServiceImpl(baseService)\n\nserver.add(ProcessorDefinition, service)\n\nserver.listen('0.0.0.0:' + options.port)\n\nconsole.log('Processor Server Started at:', options.port)\n\nconst metricsPort = 4040\nconst httpServer = http\n .createServer(async function (req, res) {\n if (req.url && new URL(req.url, `http://${req.headers.host}`).pathname === '/metrics') {\n const metrics = await mergedRegistry.metrics()\n res.write(metrics)\n } else {\n res.writeHead(404)\n }\n res.end()\n })\n .listen(metricsPort)\n\nconsole.log('Metric Server Started at:', metricsPort)\n\nprocess.on('SIGINT', function () {\n server.forceShutdown()\n console.log('RPC server shut down')\n\n httpServer.close(function () {\n console.log('Http server shut down')\n process.exit(0)\n })\n})\n"]}
|
package/lib/state.js
CHANGED
@@ -1,10 +1,11 @@
|
|
1
|
-
|
1
|
+
class State {
|
2
2
|
stateMap = new Map();
|
3
3
|
static INSTANCE = new State();
|
4
4
|
static reset() {
|
5
5
|
State.INSTANCE = new State();
|
6
6
|
}
|
7
7
|
}
|
8
|
+
export { State };
|
8
9
|
export class StateStorage {
|
9
10
|
// TODO learn how to define single instance for all subclasses
|
10
11
|
constructor() {
|
package/lib/state.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"state.js","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"AAAA,
|
1
|
+
{"version":3,"file":"state.js","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"AAAA,MAAa,KAAK;IAChB,QAAQ,GAAG,IAAI,GAAG,EAAe,CAAA;IAEjC,MAAM,CAAC,QAAQ,GAAG,IAAI,KAAK,EAAE,CAAA;IAE7B,MAAM,CAAC,KAAK;QACV,KAAK,CAAC,QAAQ,GAAG,IAAI,KAAK,EAAE,CAAA;IAC9B,CAAC;;SAPU,KAAK;AAUlB,MAAM,OAAgB,YAAY;IAChC,8DAA8D;IAE9D;QACE,EAAE;IACJ,CAAC;IAID,GAAG;QACD,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAA;IAC9B,CAAC;IAED,aAAa;QACX,IAAI,WAAW,GAAM,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAA;QAC5D,IAAI,CAAC,WAAW,EAAE;YAChB,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,CAAA;YAC9B,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,WAAW,CAAC,CAAA;SACrD;QACD,OAAO,WAAW,CAAA;IACpB,CAAC;CACF;AAED,MAAM,OAAgB,eAAmB,SAAQ,YAA4B;IAC3E,SAAS;QACP,OAAO,IAAI,GAAG,EAAa,CAAA;IAC7B,CAAC;IAED,QAAQ,CAAC,GAAW;QAClB,MAAM,CAAC,GAAG,IAAI,CAAC,aAAa,EAAE,CAAA;QAC9B,OAAO,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IACnB,CAAC;IAED,SAAS;QACP,MAAM,CAAC,GAAG,IAAI,CAAC,aAAa,EAAE,CAAA;QAC9B,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAA;IAC/B,CAAC;IAED,aAAa,CAAC,GAAW,EAAE,KAAQ;QACjC,MAAM,CAAC,GAAG,IAAI,CAAC,aAAa,EAAE,CAAA;QAC9B,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAC3B,IAAI,QAAQ,EAAE;YACZ,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,iDAAiD,CAAC,CAAA;YACpE,OAAO,QAAQ,CAAA;SAChB;QACD,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;QACjB,OAAO,KAAK,CAAA;IACd,CAAC;CACF;AAED,MAAM,OAAgB,gBAAoB,SAAQ,YAAiB;IACjE,SAAS;QACP,OAAO,EAAE,CAAA;IACX,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,aAAa,EAAE,CAAA;IAC7B,CAAC;IAED,QAAQ,CAAC,KAAQ;QACf,MAAM,CAAC,GAAG,IAAI,CAAC,aAAa,EAAE,CAAA;QAC9B,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACb,OAAO,KAAK,CAAA;IACd,CAAC;CACF","sourcesContent":["export class State {\n stateMap = new Map<string, any>()\n\n static INSTANCE = new State()\n\n static reset() {\n State.INSTANCE = new State()\n }\n}\n\nexport abstract class StateStorage<T> {\n // TODO learn how to define single instance for all subclasses\n\n protected constructor() {\n //\n }\n\n abstract initValue(): T\n\n key(): string {\n return this.constructor.name\n }\n\n getOrRegister(): T {\n let metricState: T = State.INSTANCE.stateMap.get(this.key())\n if (!metricState) {\n metricState = this.initValue()\n State.INSTANCE.stateMap.set(this.key(), metricState)\n }\n return metricState\n }\n}\n\nexport abstract class MapStateStorage<T> extends StateStorage<Map<string, T>> {\n initValue() {\n return new Map<string, T>()\n }\n\n getValue(key: string): T | undefined {\n const m = this.getOrRegister()\n return m.get(key)\n }\n\n getValues(): T[] {\n const m = this.getOrRegister()\n return Array.from(m.values())\n }\n\n getOrSetValue(key: string, value: T): T {\n const m = this.getOrRegister()\n const oldValue = m.get(key)\n if (oldValue) {\n console.warn(key, 'has been registered twice, use the previous one')\n return oldValue\n }\n m.set(key, value)\n return value\n }\n}\n\nexport abstract class ListStateStorage<T> extends StateStorage<T[]> {\n initValue() {\n return []\n }\n\n getValues(): T[] {\n return this.getOrRegister()\n }\n\n addValue(value: T): T {\n const m = this.getOrRegister()\n m.push(value)\n return value\n }\n}\n"]}
|
package/package.json
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
{
|
2
2
|
"name": "@sentio/runtime",
|
3
3
|
"license": "Apache-2.0",
|
4
|
-
"version": "2.11.0-rc.
|
4
|
+
"version": "2.11.0-rc.8",
|
5
5
|
"scripts": {
|
6
6
|
"compile": "tsc",
|
7
7
|
"build": "yarn compile",
|
@@ -13,11 +13,11 @@
|
|
13
13
|
"start_js": "ts-node-esm --files ./lib/processor-runner.js $PWD/../../debug/dist/lib.js"
|
14
14
|
},
|
15
15
|
"dependencies": {
|
16
|
-
"@sentio/protos": "^2.11.0-rc.
|
16
|
+
"@sentio/protos": "^2.11.0-rc.8",
|
17
17
|
"command-line-args": "^5.2.1",
|
18
18
|
"command-line-usage": "^7.0.1",
|
19
19
|
"fs-extra": "^11.0.0",
|
20
|
-
"google-protobuf": "^3.
|
20
|
+
"google-protobuf": "^3.21.2",
|
21
21
|
"nice-grpc": "^2.1.0",
|
22
22
|
"nice-grpc-client-middleware-retry": "^3.1.2",
|
23
23
|
"nice-grpc-prometheus": "^0.1.2",
|
@@ -45,5 +45,5 @@
|
|
45
45
|
"!{lib,src}/tests",
|
46
46
|
"!**/*.test.{js,ts}"
|
47
47
|
],
|
48
|
-
"gitHead": "
|
48
|
+
"gitHead": "5a8d13d49176b40f23c941261146dc4a246e720e"
|
49
49
|
}
|
package/src/logger.ts
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
import util from 'util'
|
2
|
+
import { createLogger, format, transports } from 'winston'
|
3
|
+
|
4
|
+
export function setupJsonLogger() {
|
5
|
+
const utilFormatter = {
|
6
|
+
transform: (info: any) => {
|
7
|
+
const args = info[Symbol.for('splat')]
|
8
|
+
if (args) {
|
9
|
+
info.message = util.format(info.message, ...args)
|
10
|
+
} else {
|
11
|
+
info.message = util.format(info.message)
|
12
|
+
}
|
13
|
+
return info
|
14
|
+
},
|
15
|
+
}
|
16
|
+
const logger = createLogger({
|
17
|
+
format: format.combine(
|
18
|
+
format.timestamp({ format: 'YYYY-MM-DDTHH:mm:ss.SSSZ' }),
|
19
|
+
utilFormatter,
|
20
|
+
format.errors({ stack: true }),
|
21
|
+
format.json()
|
22
|
+
),
|
23
|
+
transports: [new transports.Console()],
|
24
|
+
})
|
25
|
+
|
26
|
+
console.log = (...args) => logger.info.call(logger, ...args)
|
27
|
+
console.info = (...args) => logger.info.call(logger, ...args)
|
28
|
+
console.warn = (...args) => logger.warn.call(logger, ...args)
|
29
|
+
console.error = (...args) => logger.error.call(logger, ...args)
|
30
|
+
console.debug = (...args) => logger.debug.call(logger, ...args)
|
31
|
+
}
|
package/src/processor-runner.ts
CHANGED
@@ -2,11 +2,9 @@
|
|
2
2
|
|
3
3
|
import path from 'path'
|
4
4
|
import fs from 'fs-extra'
|
5
|
-
import * as util from 'util'
|
6
5
|
|
7
6
|
import commandLineArgs from 'command-line-args'
|
8
7
|
import { createServer } from 'nice-grpc'
|
9
|
-
import { createLogger, transports, format } from 'winston'
|
10
8
|
import { compressionAlgorithms } from '@grpc/grpc-js'
|
11
9
|
|
12
10
|
import { register as globalRegistry, Registry } from 'prom-client'
|
@@ -21,6 +19,7 @@ import { Endpoints } from './endpoints.js'
|
|
21
19
|
|
22
20
|
import { FullProcessorServiceImpl } from './full-service.js'
|
23
21
|
import { ChainConfig } from './chain-config.js'
|
22
|
+
import { setupJsonLogger } from './logger.js'
|
24
23
|
|
25
24
|
const optionDefinitions = [
|
26
25
|
{ name: 'target', type: String, defaultOption: true },
|
@@ -42,30 +41,7 @@ const optionDefinitions = [
|
|
42
41
|
const options = commandLineArgs(optionDefinitions, { partial: true })
|
43
42
|
|
44
43
|
if (options['log-format'] === 'json') {
|
45
|
-
|
46
|
-
transform: (info: any) => {
|
47
|
-
const args = info[Symbol.for('splat')]
|
48
|
-
if (args) {
|
49
|
-
info.message = util.format(info.message, ...args)
|
50
|
-
}
|
51
|
-
return info
|
52
|
-
},
|
53
|
-
}
|
54
|
-
const logger = createLogger({
|
55
|
-
format: format.combine(
|
56
|
-
format.timestamp({ format: 'YYYY-MM-DDTHH:mm:ss.SSSZ' }),
|
57
|
-
utilFormatter,
|
58
|
-
format.errors({ stack: true }),
|
59
|
-
format.json()
|
60
|
-
),
|
61
|
-
transports: [new transports.Console()],
|
62
|
-
})
|
63
|
-
|
64
|
-
console.log = (...args) => logger.info.call(logger, ...args)
|
65
|
-
console.info = (...args) => logger.info.call(logger, ...args)
|
66
|
-
console.warn = (...args) => logger.warn.call(logger, ...args)
|
67
|
-
console.error = (...args) => logger.error.call(logger, ...args)
|
68
|
-
console.debug = (...args) => logger.debug.call(logger, ...args)
|
44
|
+
setupJsonLogger()
|
69
45
|
}
|
70
46
|
if (options.debug) {
|
71
47
|
console.log('Starting with', options.target)
|