@weave-js/core 0.11.0 → 0.12.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.
- package/.eslintrc.js +1 -1
- package/jest.config.js +1 -1
- package/lib/ExtendableError.js +7 -7
- package/lib/broker/context.js +49 -49
- package/lib/broker/defaultOptions.js +9 -9
- package/lib/broker/index.js +161 -165
- package/lib/buildRuntime.js +34 -34
- package/lib/cache/adapters/base.js +119 -0
- package/lib/cache/adapters/inMemory.js +154 -0
- package/lib/cache/adapters/inMemoryLru.js +140 -0
- package/lib/cache/adapters/index.js +10 -0
- package/lib/cache/getCacheKeyByObject.js +31 -0
- package/lib/cache/getPropertyFromDataOrMetadata.js +20 -0
- package/lib/cache/lock.js +30 -24
- package/lib/constants.js +5 -5
- package/lib/errorHandler.js +8 -8
- package/lib/errors.js +35 -35
- package/lib/helper/defineAction.js +2 -2
- package/lib/helper/defineBrokerOptions.js +2 -2
- package/lib/helper/defineService.js +2 -2
- package/lib/index.js +21 -22
- package/lib/logger/base.js +38 -29
- package/lib/logger/format/asHumanReadable.js +15 -15
- package/lib/logger/format/asJson.js +10 -10
- package/lib/logger/format/index.js +3 -3
- package/lib/logger/index.js +24 -24
- package/lib/logger/levels.js +21 -21
- package/lib/logger/tools.js +15 -15
- package/lib/logger/utils/colorize.js +23 -23
- package/lib/logger/utils/format.js +75 -65
- package/lib/metrics/common.js +47 -47
- package/lib/metrics/constants.js +44 -44
- package/lib/metrics/exporter/base.js +8 -8
- package/lib/metrics/exporter/event.js +20 -20
- package/lib/metrics/exporter/index.js +15 -15
- package/lib/metrics/index.js +2 -2
- package/lib/metrics/types/base.js +20 -20
- package/lib/metrics/types/counter.js +6 -6
- package/lib/metrics/types/gauge.js +24 -24
- package/lib/metrics/types/histogram.js +26 -26
- package/lib/metrics/types/index.js +6 -6
- package/lib/metrics/types/info.js +17 -17
- package/lib/middlewares/action-hooks/index.js +38 -38
- package/lib/middlewares/bulkhead/index.js +34 -34
- package/lib/middlewares/cache/index.js +63 -37
- package/lib/middlewares/circuit-breaker/index.js +62 -62
- package/lib/middlewares/context-tracker/index.js +39 -39
- package/lib/middlewares/error-handler/index.js +47 -15
- package/lib/middlewares/index.js +2 -2
- package/lib/middlewares/metrics/getMiddlewareWrapper.js +17 -17
- package/lib/middlewares/metrics/index.js +29 -29
- package/lib/middlewares/retry/index.js +15 -15
- package/lib/middlewares/timeout/index.js +16 -16
- package/lib/middlewares/tracing/index.js +37 -37
- package/lib/middlewares/tracing/tags.js +6 -6
- package/lib/middlewares/validator/index.js +31 -31
- package/lib/registry/actionEndpoint.js +8 -8
- package/lib/registry/collections/actionCollection.js +39 -35
- package/lib/registry/collections/endpointCollection.js +63 -63
- package/lib/registry/collections/eventCollection.js +62 -62
- package/lib/registry/collections/nodeCollection.js +45 -45
- package/lib/registry/collections/serviceCollection.js +61 -55
- package/lib/registry/eventEndpoint.js +14 -14
- package/lib/registry/load-balancer/base.js +3 -3
- package/lib/registry/load-balancer/index.js +7 -7
- package/lib/registry/node.js +27 -27
- package/lib/registry/registry.js +145 -148
- package/lib/registry/service/parseAction.js +16 -16
- package/lib/registry/service/parseEvent.js +18 -18
- package/lib/registry/service/reduceMixins.js +10 -10
- package/lib/registry/service/service.js +72 -72
- package/lib/registry/serviceItem.js +21 -21
- package/lib/runtime/initActionInvoker.js +21 -21
- package/lib/runtime/initCache.js +14 -5
- package/lib/runtime/initContextFactory.js +22 -22
- package/lib/runtime/initEventbus.js +49 -49
- package/lib/runtime/initLogger.js +11 -11
- package/lib/runtime/initMetrics.js +54 -54
- package/lib/runtime/initMiddlewareManager.js +21 -21
- package/lib/runtime/initRegistry.js +6 -6
- package/lib/runtime/initServiceManager.js +85 -68
- package/lib/runtime/initTracing.js +23 -23
- package/lib/runtime/initTransport.js +5 -5
- package/lib/runtime/initUuidFactory.js +4 -4
- package/lib/runtime/initValidator.js +5 -5
- package/lib/tracing/collectors/base.js +22 -22
- package/lib/tracing/collectors/event.js +33 -33
- package/lib/tracing/collectors/index.js +15 -15
- package/lib/tracing/span.js +26 -26
- package/lib/tracing/time.js +8 -8
- package/lib/transport/InboundTransformStream.js +26 -26
- package/lib/transport/adapters/adapteBase.js +30 -30
- package/lib/transport/adapters/adapters.js +4 -4
- package/lib/transport/adapters/dummy/index.js +18 -18
- package/lib/transport/adapters/fromURI.js +13 -13
- package/lib/transport/adapters/getAdapterByName.js +5 -5
- package/lib/transport/adapters/index.js +12 -12
- package/lib/transport/adapters/tcp/discovery/codec.js +4 -4
- package/lib/transport/adapters/tcp/discovery/index.js +62 -62
- package/lib/transport/adapters/tcp/index.js +169 -171
- package/lib/transport/adapters/tcp/tcp-messagetypes.js +7 -7
- package/lib/transport/adapters/tcp/tcpReader.js +39 -39
- package/lib/transport/adapters/tcp/tcpWriteStream.js +26 -26
- package/lib/transport/adapters/tcp/tcpWriter.js +57 -57
- package/lib/transport/adapters/tcp/utils.js +12 -12
- package/lib/transport/createMessage.js +4 -4
- package/lib/transport/createTransport.js +254 -254
- package/lib/transport/errorPayloadFactory.js +14 -17
- package/lib/transport/messageHandlers.js +200 -200
- package/lib/transport/messageTypes.js +19 -19
- package/lib/types.js +49 -25
- package/lib/utils/index.js +2 -2
- package/lib/utils/options.js +44 -44
- package/lib/utils/restoreError.js +4 -4
- package/package.json +4 -4
- package/lib/cache/base.js +0 -147
- package/lib/cache/inMemory.js +0 -140
- package/lib/cache/index.js +0 -48
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
const dgram = require('dgram')
|
|
2
|
-
const { getIpList } = require('@weave-js/utils')
|
|
3
|
-
const EventEmitter = require('events').EventEmitter
|
|
4
|
-
const Codec = require('./codec')
|
|
5
|
-
const { getBroadcastAddresses } = require('../utils')
|
|
1
|
+
const dgram = require('dgram');
|
|
2
|
+
const { getIpList } = require('@weave-js/utils');
|
|
3
|
+
const EventEmitter = require('events').EventEmitter;
|
|
4
|
+
const Codec = require('./codec');
|
|
5
|
+
const { getBroadcastAddresses } = require('../utils');
|
|
6
6
|
const messageTypes = {
|
|
7
7
|
HELLO: 4
|
|
8
|
-
}
|
|
8
|
+
};
|
|
9
9
|
|
|
10
10
|
const createDiscoveryService = (adapter, options) => {
|
|
11
|
-
const namespace = adapter.broker.options.namespace
|
|
12
|
-
const codec = Codec(options)
|
|
13
|
-
const bus = new EventEmitter()
|
|
14
|
-
const ips = getIpList(false)
|
|
15
|
-
const MESSAGE_TYPE_LENGTH = 1
|
|
11
|
+
const namespace = adapter.broker.options.namespace;
|
|
12
|
+
const codec = Codec(options);
|
|
13
|
+
const bus = new EventEmitter();
|
|
14
|
+
const ips = getIpList(false);
|
|
15
|
+
const MESSAGE_TYPE_LENGTH = 1;
|
|
16
16
|
|
|
17
|
-
let servers = []
|
|
18
|
-
let discoverTimer
|
|
17
|
+
let servers = [];
|
|
18
|
+
let discoverTimer;
|
|
19
19
|
|
|
20
20
|
const startServer = (host, port, multicastAddress) => {
|
|
21
21
|
return new Promise((resolve, reject) => {
|
|
@@ -23,74 +23,74 @@ const createDiscoveryService = (adapter, options) => {
|
|
|
23
23
|
const socket = dgram.createSocket({
|
|
24
24
|
type: options.discovery.type,
|
|
25
25
|
reuseAddr: options.discovery.udpReuseAddress
|
|
26
|
-
})
|
|
26
|
+
});
|
|
27
27
|
|
|
28
|
-
socket.on('message', onMessage)
|
|
28
|
+
socket.on('message', onMessage);
|
|
29
29
|
|
|
30
30
|
socket.bind({ port, exclusive: true }, () => {
|
|
31
31
|
try {
|
|
32
32
|
if (multicastAddress) {
|
|
33
|
-
socket.setMulticastInterface(host)
|
|
34
|
-
socket.addMembership(multicastAddress, host)
|
|
35
|
-
socket.setMulticastTTL(1)
|
|
33
|
+
socket.setMulticastInterface(host);
|
|
34
|
+
socket.addMembership(multicastAddress, host);
|
|
35
|
+
socket.setMulticastTTL(1);
|
|
36
36
|
// Add destination to socket object
|
|
37
37
|
Object.defineProperty(socket, 'destinations', {
|
|
38
38
|
value: [multicastAddress]
|
|
39
|
-
})
|
|
40
|
-
adapter.log.info(`UDP Server is listening on ${host}:${port}. Membership: ${multicastAddress}`)
|
|
39
|
+
});
|
|
40
|
+
adapter.log.info(`UDP Server is listening on ${host}:${port}. Membership: ${multicastAddress}`);
|
|
41
41
|
} else {
|
|
42
|
-
socket.setBroadcast(true)
|
|
42
|
+
socket.setBroadcast(true);
|
|
43
43
|
Object.defineProperty(socket, 'destinations', {
|
|
44
44
|
value: getBroadcastAddresses()
|
|
45
|
-
})
|
|
45
|
+
});
|
|
46
46
|
}
|
|
47
47
|
} catch (error) {
|
|
48
|
-
adapter.log.info(`UDP Multicast membership error: ${error.message}`)
|
|
48
|
+
adapter.log.info(`UDP Multicast membership error: ${error.message}`);
|
|
49
49
|
}
|
|
50
|
-
})
|
|
50
|
+
});
|
|
51
51
|
|
|
52
|
-
servers.push(socket)
|
|
52
|
+
servers.push(socket);
|
|
53
53
|
|
|
54
|
-
resolve(socket)
|
|
54
|
+
resolve(socket);
|
|
55
55
|
} catch (error) {
|
|
56
|
-
reject(error)
|
|
56
|
+
reject(error);
|
|
57
57
|
}
|
|
58
|
-
})
|
|
59
|
-
}
|
|
58
|
+
});
|
|
59
|
+
};
|
|
60
60
|
|
|
61
61
|
const onMessage = (buffer, info) => {
|
|
62
|
-
const messageType = Buffer.prototype.readUInt8.call(buffer, 0)
|
|
63
|
-
const payload = buffer.slice(MESSAGE_TYPE_LENGTH)
|
|
62
|
+
const messageType = Buffer.prototype.readUInt8.call(buffer, 0);
|
|
63
|
+
const payload = buffer.slice(MESSAGE_TYPE_LENGTH);
|
|
64
64
|
|
|
65
65
|
switch (messageType) {
|
|
66
66
|
case messageTypes.HELLO:
|
|
67
|
-
const message = codec.decode(payload)
|
|
68
|
-
message.host = info.address
|
|
67
|
+
const message = codec.decode(payload);
|
|
68
|
+
message.host = info.address;
|
|
69
69
|
|
|
70
70
|
if (message.namespace === namespace) {
|
|
71
|
-
bus.emit('message', message)
|
|
71
|
+
bus.emit('message', message);
|
|
72
72
|
}
|
|
73
|
-
break
|
|
73
|
+
break;
|
|
74
74
|
default:
|
|
75
|
-
adapter.log.debug(`Received an unknown data package from host "${info.address}"`)
|
|
75
|
+
adapter.log.debug(`Received an unknown data package from host "${info.address}"`);
|
|
76
76
|
}
|
|
77
|
-
}
|
|
77
|
+
};
|
|
78
78
|
|
|
79
79
|
function sendMessage (payload) {
|
|
80
|
-
const header = Buffer.alloc(MESSAGE_TYPE_LENGTH)
|
|
81
|
-
Buffer.prototype.writeUInt8.call(header, messageTypes.HELLO, 0)
|
|
80
|
+
const header = Buffer.alloc(MESSAGE_TYPE_LENGTH);
|
|
81
|
+
Buffer.prototype.writeUInt8.call(header, messageTypes.HELLO, 0);
|
|
82
82
|
|
|
83
|
-
const message = Buffer.concat([header, codec.encode(payload)])
|
|
83
|
+
const message = Buffer.concat([header, codec.encode(payload)]);
|
|
84
84
|
|
|
85
85
|
servers.forEach(server => {
|
|
86
86
|
server.destinations.forEach(host => {
|
|
87
87
|
server.send(message, options.discovery.port, host, (error) => {
|
|
88
88
|
if (!error) {
|
|
89
|
-
adapter.log.verbose(`Message sent to ${host}:${options.discovery.port}`)
|
|
89
|
+
adapter.log.verbose(`Message sent to ${host}:${options.discovery.port}`);
|
|
90
90
|
}
|
|
91
|
-
})
|
|
92
|
-
})
|
|
93
|
-
})
|
|
91
|
+
});
|
|
92
|
+
});
|
|
93
|
+
});
|
|
94
94
|
}
|
|
95
95
|
|
|
96
96
|
function sendDiscoveryPackage (port) {
|
|
@@ -98,19 +98,19 @@ const createDiscoveryService = (adapter, options) => {
|
|
|
98
98
|
namespace: adapter.broker.options.namespace,
|
|
99
99
|
nodeId: adapter.broker.nodeId,
|
|
100
100
|
port: port
|
|
101
|
-
})
|
|
101
|
+
});
|
|
102
102
|
}
|
|
103
103
|
|
|
104
104
|
function startDiscovering (port) {
|
|
105
|
-
discoverTimer = setInterval(() => sendDiscoveryPackage(port), 2000)
|
|
106
|
-
discoverTimer.unref()
|
|
105
|
+
discoverTimer = setInterval(() => sendDiscoveryPackage(port), 2000);
|
|
106
|
+
discoverTimer.unref();
|
|
107
107
|
}
|
|
108
108
|
|
|
109
109
|
function stopDiscovery () {
|
|
110
110
|
if (discoverTimer) {
|
|
111
|
-
clearInterval(discoverTimer)
|
|
112
|
-
discoverTimer = null
|
|
113
|
-
adapter.log.info('UDP discovery service stopped')
|
|
111
|
+
clearInterval(discoverTimer);
|
|
112
|
+
discoverTimer = null;
|
|
113
|
+
adapter.log.info('UDP discovery service stopped');
|
|
114
114
|
}
|
|
115
115
|
}
|
|
116
116
|
|
|
@@ -118,32 +118,32 @@ const createDiscoveryService = (adapter, options) => {
|
|
|
118
118
|
bus,
|
|
119
119
|
async start (port) {
|
|
120
120
|
if (!options.discovery.enabled) {
|
|
121
|
-
return Promise.resolve()
|
|
121
|
+
return Promise.resolve();
|
|
122
122
|
}
|
|
123
123
|
|
|
124
124
|
// UDP Multicast
|
|
125
125
|
if (options.discovery.udpMulticast) {
|
|
126
126
|
if (options.discovery.multicastAddress) {
|
|
127
|
-
await Promise.all(ips.map(ip => startServer(ip, options.discovery.port, options.discovery.multicastAddress)))
|
|
127
|
+
await Promise.all(ips.map(ip => startServer(ip, options.discovery.port, options.discovery.multicastAddress)));
|
|
128
128
|
}
|
|
129
129
|
}
|
|
130
130
|
|
|
131
131
|
// UDP Broadcast
|
|
132
132
|
if (options.discovery.udpBroadcast) {
|
|
133
|
-
await startServer(options.discovery.udpBindAddress, options.discovery.port, options.discovery.multicastAddress)
|
|
133
|
+
await startServer(options.discovery.udpBindAddress, options.discovery.port, options.discovery.multicastAddress);
|
|
134
134
|
}
|
|
135
135
|
|
|
136
136
|
// send the first dis
|
|
137
|
-
const timeout = Math.floor(Math.random() * 500) + 500
|
|
138
|
-
setTimeout(() => sendDiscoveryPackage(port), timeout)
|
|
139
|
-
startDiscovering(port)
|
|
137
|
+
const timeout = Math.floor(Math.random() * 500) + 500;
|
|
138
|
+
setTimeout(() => sendDiscoveryPackage(port), timeout);
|
|
139
|
+
startDiscovering(port);
|
|
140
140
|
},
|
|
141
141
|
close () {
|
|
142
|
-
stopDiscovery()
|
|
143
|
-
servers.forEach(server => server.close())
|
|
144
|
-
servers = []
|
|
142
|
+
stopDiscovery();
|
|
143
|
+
servers.forEach(server => server.close());
|
|
144
|
+
servers = [];
|
|
145
145
|
}
|
|
146
|
-
}
|
|
147
|
-
}
|
|
146
|
+
};
|
|
147
|
+
};
|
|
148
148
|
|
|
149
|
-
module.exports = createDiscoveryService
|
|
149
|
+
module.exports = createDiscoveryService;
|