@weave-js/core 0.11.1 → 0.13.0

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 (116) hide show
  1. package/.eslintrc.js +1 -1
  2. package/jest.config.js +1 -1
  3. package/lib/ExtendableError.js +8 -8
  4. package/lib/broker/context.js +49 -49
  5. package/lib/broker/defaultOptions.js +8 -9
  6. package/lib/broker/index.js +160 -164
  7. package/lib/buildRuntime.js +34 -34
  8. package/lib/cache/adapters/base.js +50 -74
  9. package/lib/cache/adapters/inMemory.js +58 -58
  10. package/lib/cache/adapters/inMemoryLru.js +57 -57
  11. package/lib/cache/adapters/index.js +3 -39
  12. package/lib/cache/getCacheKeyByObject.js +31 -0
  13. package/lib/cache/getPropertyFromDataOrMetadata.js +20 -0
  14. package/lib/cache/lock.js +30 -24
  15. package/lib/constants.js +5 -5
  16. package/lib/errorHandler.js +8 -8
  17. package/lib/errors.js +64 -54
  18. package/lib/helper/defineAction.js +2 -2
  19. package/lib/helper/defineBrokerOptions.js +2 -2
  20. package/lib/helper/defineService.js +2 -2
  21. package/lib/index.js +21 -21
  22. package/lib/logger/base.js +38 -29
  23. package/lib/logger/format/asHumanReadable.js +15 -15
  24. package/lib/logger/format/asJson.js +10 -10
  25. package/lib/logger/format/index.js +3 -3
  26. package/lib/logger/index.js +24 -24
  27. package/lib/logger/levels.js +21 -21
  28. package/lib/logger/tools.js +15 -15
  29. package/lib/logger/utils/colorize.js +23 -23
  30. package/lib/logger/utils/format.js +75 -65
  31. package/lib/metrics/common.js +47 -47
  32. package/lib/metrics/constants.js +44 -44
  33. package/lib/metrics/exporter/base.js +8 -8
  34. package/lib/metrics/exporter/event.js +20 -20
  35. package/lib/metrics/exporter/index.js +15 -15
  36. package/lib/metrics/index.js +2 -2
  37. package/lib/metrics/types/base.js +20 -20
  38. package/lib/metrics/types/counter.js +6 -6
  39. package/lib/metrics/types/gauge.js +24 -24
  40. package/lib/metrics/types/histogram.js +26 -26
  41. package/lib/metrics/types/index.js +6 -6
  42. package/lib/metrics/types/info.js +17 -17
  43. package/lib/middlewares/action-hooks/index.js +38 -38
  44. package/lib/middlewares/bulkhead/index.js +34 -34
  45. package/lib/middlewares/cache/index.js +37 -37
  46. package/lib/middlewares/circuit-breaker/index.js +62 -62
  47. package/lib/middlewares/context-tracker/index.js +39 -39
  48. package/lib/middlewares/error-handler/index.js +47 -15
  49. package/lib/middlewares/index.js +2 -2
  50. package/lib/middlewares/metrics/getMiddlewareWrapper.js +17 -17
  51. package/lib/middlewares/metrics/index.js +29 -29
  52. package/lib/middlewares/retry/index.js +15 -15
  53. package/lib/middlewares/timeout/index.js +16 -16
  54. package/lib/middlewares/tracing/index.js +37 -37
  55. package/lib/middlewares/tracing/tags.js +6 -6
  56. package/lib/middlewares/validator/index.js +31 -31
  57. package/lib/registry/actionEndpoint.js +8 -8
  58. package/lib/registry/collections/actionCollection.js +39 -35
  59. package/lib/registry/collections/endpointCollection.js +63 -63
  60. package/lib/registry/collections/eventCollection.js +62 -62
  61. package/lib/registry/collections/nodeCollection.js +45 -45
  62. package/lib/registry/collections/serviceCollection.js +61 -55
  63. package/lib/registry/eventEndpoint.js +14 -14
  64. package/lib/registry/load-balancer/base.js +3 -3
  65. package/lib/registry/load-balancer/index.js +7 -7
  66. package/lib/registry/node.js +27 -27
  67. package/lib/registry/registry.js +139 -136
  68. package/lib/registry/service/parseAction.js +16 -16
  69. package/lib/registry/service/parseEvent.js +18 -18
  70. package/lib/registry/service/reduceMixins.js +10 -10
  71. package/lib/registry/service/service.js +72 -72
  72. package/lib/registry/serviceItem.js +21 -21
  73. package/lib/runtime/initActionInvoker.js +21 -21
  74. package/lib/runtime/initCache.js +7 -7
  75. package/lib/runtime/initContextFactory.js +22 -22
  76. package/lib/runtime/initEventbus.js +49 -49
  77. package/lib/runtime/initLogger.js +11 -11
  78. package/lib/runtime/initMetrics.js +54 -54
  79. package/lib/runtime/initMiddlewareManager.js +21 -21
  80. package/lib/runtime/initRegistry.js +6 -6
  81. package/lib/runtime/initServiceManager.js +90 -68
  82. package/lib/runtime/initTracing.js +23 -23
  83. package/lib/runtime/initTransport.js +5 -5
  84. package/lib/runtime/initUuidFactory.js +4 -4
  85. package/lib/runtime/initValidator.js +5 -5
  86. package/lib/tracing/collectors/base.js +22 -22
  87. package/lib/tracing/collectors/event.js +33 -33
  88. package/lib/tracing/collectors/index.js +15 -15
  89. package/lib/tracing/span.js +26 -26
  90. package/lib/tracing/time.js +8 -8
  91. package/lib/transport/InboundTransformStream.js +26 -26
  92. package/lib/transport/adapters/adapteBase.js +30 -30
  93. package/lib/transport/adapters/adapters.js +4 -4
  94. package/lib/transport/adapters/dummy/index.js +18 -18
  95. package/lib/transport/adapters/fromURI.js +13 -13
  96. package/lib/transport/adapters/getAdapterByName.js +5 -5
  97. package/lib/transport/adapters/index.js +12 -12
  98. package/lib/transport/adapters/tcp/discovery/codec.js +4 -4
  99. package/lib/transport/adapters/tcp/discovery/index.js +62 -62
  100. package/lib/transport/adapters/tcp/index.js +169 -171
  101. package/lib/transport/adapters/tcp/tcp-messagetypes.js +7 -7
  102. package/lib/transport/adapters/tcp/tcpReader.js +39 -39
  103. package/lib/transport/adapters/tcp/tcpWriteStream.js +26 -26
  104. package/lib/transport/adapters/tcp/tcpWriter.js +57 -57
  105. package/lib/transport/adapters/tcp/utils.js +12 -12
  106. package/lib/transport/createMessage.js +4 -4
  107. package/lib/transport/createTransport.js +254 -254
  108. package/lib/transport/errorPayloadFactory.js +13 -17
  109. package/lib/transport/messageHandlers.js +199 -206
  110. package/lib/transport/messageTypes.js +19 -19
  111. package/lib/types.js +28 -15
  112. package/lib/utils/index.js +1 -1
  113. package/lib/utils/options.js +44 -44
  114. package/lib/utils/restoreError.js +58 -6
  115. package/package.json +4 -4
  116. package/lib/cache/base.js +0 -136
@@ -1,13 +1,11 @@
1
1
 
2
- const { defaultsDeep } = require('@weave-js/utils')
3
- const TransportBase = require('../adapteBase')
4
- const Swim = require('./discovery/index')
5
- const MessageTypes = require('../../messageTypes')
6
- const TCPReader = require('./tcpReader')
7
- const TCPWriter = require('./tcpWriter')
8
- const { createMessage } = require('../../createMessage')
9
-
10
- // const TCPMessageTypeHelper = require('./tcp-messagetypes')
2
+ const { defaultsDeep } = require('@weave-js/utils');
3
+ const TransportBase = require('../adapteBase');
4
+ const Swim = require('./discovery/index');
5
+ const MessageTypes = require('../../messageTypes');
6
+ const TCPReader = require('./tcpReader');
7
+ const TCPWriter = require('./tcpWriter');
8
+ const { createMessage } = require('../../createMessage');
11
9
 
12
10
  const defaultOptions = {
13
11
  port: null,
@@ -21,37 +19,37 @@ const defaultOptions = {
21
19
  },
22
20
  gossipTimerInterval: 2000,
23
21
  maxPacketSize: 1024 * 1024 * 50
24
- }
22
+ };
25
23
 
26
24
  module.exports = function SwimTransport (adapterOptions) {
27
- adapterOptions = defaultsDeep(adapterOptions, defaultOptions)
25
+ adapterOptions = defaultsDeep(adapterOptions, defaultOptions);
28
26
 
29
- const self = TransportBase(adapterOptions)
30
- let tcpReader
31
- let tcpWriter
32
- let gossipTimer
27
+ const self = TransportBase(adapterOptions);
28
+ let tcpReader;
29
+ let tcpWriter;
30
+ let gossipTimer;
33
31
 
34
- self.afterInit = function () {
35
- self.nodes = this.broker.registry.nodeCollection
36
- self.registry = self.broker.registry
37
- self.swim = Swim(self, adapterOptions)
38
- }
32
+ self.afterInit = async function () {
33
+ self.nodes = this.broker.registry.nodeCollection;
34
+ self.registry = self.broker.registry;
35
+ self.swim = Swim(self, adapterOptions);
36
+ };
39
37
 
40
38
  self.connect = async () => {
41
- const port = await startTCPServer()
39
+ const port = await startTCPServer();
42
40
 
43
- await startDiscoveryServer(port)
44
- await startTimers()
41
+ await startDiscoveryServer(port);
42
+ await startTimers();
45
43
 
46
- self.log.info('TCP transport adapter started.')
44
+ self.log.info('TCP transport adapter started.');
47
45
 
48
- self.broker.registry.nodeCollection.localNode.port = port
49
- self.broker.registry.generateLocalNodeInfo()
46
+ self.broker.registry.nodeCollection.localNode.port = port;
47
+ self.broker.registry.generateLocalNodeInfo();
50
48
 
51
- self.connected({ wasReconnect: false, useHeartbeatTimer: false, useRemoteNodeCheckTimer: false, useOfflineCheckTimer: true })
49
+ self.connected({ wasReconnect: false, useHeartbeatTimer: false, useRemoteNodeCheckTimer: false, useOfflineCheckTimer: true });
52
50
 
53
- return Promise.resolve()
54
- }
51
+ return Promise.resolve();
52
+ };
55
53
 
56
54
  self.send = (message) => {
57
55
  if (!message.targetNodeId || ![
@@ -70,252 +68,252 @@ module.exports = function SwimTransport (adapterOptions) {
70
68
  ].includes(message.type)) {
71
69
  if (message.type === MessageTypes.MESSAGE_DISCONNECT) {
72
70
  // send a disconnect message to all connected nodes
73
- return publishNodeDisconnect(message)
71
+ return publishNodeDisconnect(message);
74
72
  }
75
- return Promise.resolve()
73
+ return Promise.resolve();
76
74
  }
77
75
 
78
- const data = self.serialize(message)
79
- return tcpWriter.send(message.targetNodeId, message.type, data)
80
- }
76
+ const data = self.serialize(message);
77
+ return tcpWriter.send(message.targetNodeId, message.type, data);
78
+ };
81
79
 
82
80
  self.sendHello = nodeId => {
83
- const node = self.broker.registry.nodeCollection.get(nodeId)
81
+ const node = self.broker.registry.nodeCollection.get(nodeId);
84
82
 
85
83
  if (!node) {
86
- return Promise.reject(new Error('Node not found.'))
84
+ return Promise.reject(new Error('Node not found.'));
87
85
  }
88
86
 
89
- const localNode = self.broker.registry.nodeCollection.localNode
87
+ const localNode = self.broker.registry.nodeCollection.localNode;
90
88
 
91
89
  const message = createMessage(MessageTypes.MESSAGE_GOSSIP_HELLO, nodeId, {
92
90
  host: localNode.IPList[0],
93
91
  port: localNode.port
94
- })
92
+ });
95
93
 
96
- self.send(message)
94
+ self.send(message);
97
95
 
98
- return Promise.resolve()
99
- }
96
+ return Promise.resolve();
97
+ };
100
98
 
101
99
  self.close = () => {
102
- clearInterval(gossipTimer)
100
+ clearInterval(gossipTimer);
103
101
  if (tcpReader) {
104
- tcpReader.close()
102
+ tcpReader.close();
105
103
  }
106
104
  if (tcpWriter) {
107
- tcpWriter.close()
105
+ tcpWriter.close();
108
106
  }
109
107
  if (tcpReader) {
110
- tcpReader.close()
108
+ tcpReader.close();
111
109
  }
112
110
 
113
- self.swim.close()
111
+ self.swim.close();
114
112
 
115
- return Promise.resolve()
116
- }
113
+ return Promise.resolve();
114
+ };
117
115
 
118
116
  // Send a disconnect message to all connected nodes.
119
117
  function publishNodeDisconnect (message) {
120
- const nodes = self.broker.registry.nodeCollection.toArray()
118
+ const nodes = self.broker.registry.nodeCollection.toArray();
121
119
  return Promise.all(
122
120
  nodes
123
121
  .filter(node => node.isAvailable && !node.isLocal)
124
122
  .map(node => {
125
- const data = self.serialize(message)
126
- return tcpWriter.send(node.id, message.type, data)
123
+ const data = self.serialize(message);
124
+ return tcpWriter.send(node.id, message.type, data);
127
125
  })
128
- )
126
+ );
129
127
  }
130
128
 
131
129
  function addDiscoveredNode (nodeId, host, port) {
132
- const node = self.broker.registry.nodeCollection.createNode(nodeId)
133
-
134
- node.isLocal = false
135
- node.isAvailable = false
136
- node.IPList = [host]
137
- node.hostname = host
138
- node.port = port
139
- node.sequence = 0
140
- node.offlineTime = Date.now()
141
- self.broker.registry.nodeCollection.add(node.id, node)
142
-
143
- return node
130
+ const node = self.broker.registry.nodeCollection.createNode(nodeId);
131
+
132
+ node.isLocal = false;
133
+ node.isAvailable = false;
134
+ node.IPList = [host];
135
+ node.hostname = host;
136
+ node.port = port;
137
+ node.sequence = 0;
138
+ node.offlineTime = Date.now();
139
+ self.broker.registry.nodeCollection.add(node.id, node);
140
+
141
+ return node;
144
142
  }
145
143
 
146
144
  self.onIncomingMessage = (type, data, socket) => {
147
145
  switch (type) {
148
146
  case MessageTypes.MESSAGE_GOSSIP_HELLO:
149
- return onGossipHelloMessage(data, socket)
147
+ return onGossipHelloMessage(data, socket);
150
148
  case MessageTypes.MESSAGE_GOSSIP_REQUEST:
151
- return onGossipRequestMessage(data, socket)
149
+ return onGossipRequestMessage(data, socket);
152
150
  case MessageTypes.MESSAGE_GOSSIP_RESPONSE:
153
- return onGossipResponseMessage(data, socket)
151
+ return onGossipResponseMessage(data, socket);
154
152
  default:
155
- return self.incomingMessage(type, data)
153
+ return self.incomingMessage(type, data);
156
154
  }
157
- }
155
+ };
158
156
 
159
157
  function startDiscoveryServer (port) {
160
158
  self.swim.bus.on('message', ({ nodeId, host, port }) => {
161
159
  if (nodeId && nodeId !== self.broker.nodeId) {
162
- let node = self.broker.registry.nodeCollection.get(nodeId)
160
+ let node = self.broker.registry.nodeCollection.get(nodeId);
163
161
  if (!node) {
164
- self.log.debug(`Discoverd a new node ${nodeId}`)
162
+ self.log.debug(`Discoverd a new node ${nodeId}`);
165
163
 
166
- node = addDiscoveredNode(nodeId, host, port)
164
+ node = addDiscoveredNode(nodeId, host, port);
167
165
  } else if (!node.isAvailable) {
168
166
  // update tcp port
169
- node.port = port
170
- self.log.debug(`Node is still not available: ${node.id}`)
167
+ node.port = port;
168
+ self.log.debug(`Node is still not available: ${node.id}`);
171
169
  }
172
170
  }
173
- })
171
+ });
174
172
 
175
- self.swim.start(port)
173
+ self.swim.start(port);
176
174
  }
177
175
 
178
176
  function startTCPServer () {
179
- tcpReader = TCPReader(self, adapterOptions)
180
- tcpWriter = TCPWriter(self, adapterOptions)
177
+ tcpReader = TCPReader(self, adapterOptions);
178
+ tcpWriter = TCPWriter(self, adapterOptions);
181
179
 
182
- tcpReader.on('message', onMessage)
180
+ tcpReader.on('message', onMessage);
183
181
 
184
182
  tcpWriter.on('error', (error, nodeId) => {
185
- self.log.debug('TCP client error on ', error)
186
- self.broker.registry.nodeDisconnected(nodeId, false)
187
- })
183
+ self.log.debug('TCP client error on ', error);
184
+ self.broker.registry.nodeDisconnected(nodeId, false);
185
+ });
188
186
 
189
187
  tcpWriter.on('end', nodeId => {
190
- self.log.debug('TCP connection ended with')
191
- self.broker.registry.nodeDisconnected(nodeId, false)
192
- })
188
+ self.log.debug('TCP connection ended with');
189
+ self.broker.registry.nodeDisconnected(nodeId, false);
190
+ });
193
191
 
194
192
  // tcpWriter.on('error', (_, nodeId) => {
195
193
  // self.log.debug('TCP server error on ')
196
194
  // // this.nodes.disconnected(nodeId, false)
197
195
  // })
198
196
 
199
- return tcpReader.listen()
197
+ return tcpReader.listen();
200
198
  }
201
199
 
202
200
  function startTimers () {
203
- gossipTimer = setInterval(() => sendGossipRequest(), adapterOptions.gossipTimerInterval)
204
- gossipTimer.unref()
201
+ gossipTimer = setInterval(() => sendGossipRequest(), adapterOptions.gossipTimerInterval);
202
+ gossipTimer.unref();
205
203
  }
206
204
 
207
205
  function sendGossipRequest () {
208
- const list = self.broker.registry.nodeCollection.toArray()
206
+ const list = self.broker.registry.nodeCollection.toArray();
209
207
  if (!list || list.length === 0) {
210
- return
208
+ return;
211
209
  }
212
210
 
213
211
  const payload = {
214
212
  online: {},
215
213
  offline: {}
216
- }
214
+ };
217
215
 
218
- const onlineNodes = []
219
- const offlineNodes = []
216
+ const onlineNodes = [];
217
+ const offlineNodes = [];
220
218
 
221
219
  list.forEach(node => {
222
220
  if (node.isAvailable) {
223
- payload.online[node.id] = [node.sequence, node.cpuSequence || 0, node.cpu || 0]
221
+ payload.online[node.id] = [node.sequence, node.cpuSequence || 0, node.cpu || 0];
224
222
 
225
223
  if (!node.isLocal) {
226
- onlineNodes.push(node)
224
+ onlineNodes.push(node);
227
225
  }
228
226
  } else {
229
227
  if (node.sequence > 0) {
230
- payload.offline[node.id] = node.sequence
228
+ payload.offline[node.id] = node.sequence;
231
229
  }
232
- offlineNodes.push(node)
230
+ offlineNodes.push(node);
233
231
  }
234
- })
232
+ });
235
233
 
236
234
  if (Object.keys(payload.online).length === 0) {
237
- delete payload.online
235
+ delete payload.online;
238
236
  }
239
237
 
240
238
  if (Object.keys(payload.offline).length === 0) {
241
- delete payload.offline
239
+ delete payload.offline;
242
240
  }
243
241
 
244
242
  if (onlineNodes.length > 0) {
245
- sendGossipRequestToRandomEndpoint(payload, onlineNodes)
243
+ sendGossipRequestToRandomEndpoint(payload, onlineNodes);
246
244
  }
247
245
 
248
246
  if (offlineNodes.length > 0) {
249
- sendGossipRequestToRandomEndpoint(payload, offlineNodes)
247
+ sendGossipRequestToRandomEndpoint(payload, offlineNodes);
250
248
  }
251
249
  }
252
250
 
253
251
  function sendGossipRequestToRandomEndpoint (payload, nodes) {
254
252
  if (!nodes || nodes.length === 0) {
255
- return
253
+ return;
256
254
  }
257
255
 
258
- const destinationNode = nodes[Math.floor(Math.random() * nodes.length)]
256
+ const destinationNode = nodes[Math.floor(Math.random() * nodes.length)];
259
257
  if (destinationNode) {
260
- const message = createMessage(MessageTypes.MESSAGE_GOSSIP_REQUEST, destinationNode.id, payload)
258
+ const message = createMessage(MessageTypes.MESSAGE_GOSSIP_REQUEST, destinationNode.id, payload);
261
259
 
262
260
  self.send(message).catch(() => {
263
- self.log.debug(`Unable to send gossip response to ${destinationNode.id}`)
264
- })
261
+ self.log.debug(`Unable to send gossip response to ${destinationNode.id}`);
262
+ });
265
263
  }
266
264
  }
267
265
 
268
266
  function onGossipHelloMessage (packet, socket) {
269
267
  try {
270
- const message = self.deserialize(packet)
271
- const payload = message.payload
272
- const nodeId = payload.sender
273
- const node = self.broker.registry.nodeCollection.get(nodeId)
268
+ const message = self.deserialize(packet);
269
+ const payload = message.payload;
270
+ const nodeId = payload.sender;
271
+ const node = self.broker.registry.nodeCollection.get(nodeId);
274
272
 
275
273
  if (!node) {
276
- addDiscoveredNode(nodeId, payload.host, payload.port)
274
+ addDiscoveredNode(nodeId, payload.host, payload.port);
277
275
  }
278
276
  } catch (error) {
279
- self.log.error('Invalid gossip hello message.', error.message)
277
+ self.log.error('Invalid gossip hello message.', error.message);
280
278
  }
281
279
  }
282
280
 
283
281
  // Handle incoming gossip request
284
282
  function onGossipRequestMessage (data) {
285
283
  try {
286
- const message = self.deserialize(data)
287
- const payload = message.payload
288
- const list = self.broker.registry.nodeCollection.toArray()
284
+ const message = self.deserialize(data);
285
+ const payload = message.payload;
286
+ const list = self.broker.registry.nodeCollection.toArray();
289
287
 
290
288
  // Init gossip response
291
289
  const response = {
292
290
  online: {},
293
291
  offline: {}
294
- }
292
+ };
295
293
 
296
294
  list.forEach(node => {
297
- const online = payload.online ? payload.online[node.id] : null
298
- const offline = payload.offline ? payload.offline[node.id] : null
295
+ const online = payload.online ? payload.online[node.id] : null;
296
+ const offline = payload.offline ? payload.offline[node.id] : null;
299
297
 
300
298
  // eslint-disable-next-line no-unused-vars
301
- let sequence, cpuSequence, cpu
299
+ let sequence, cpuSequence, cpu;
302
300
 
303
301
  if (offline) {
304
- sequence = offline
302
+ sequence = offline;
305
303
  } else if (online) {
306
- [sequence, cpuSequence, cpu] = online
304
+ [sequence, cpuSequence, cpu] = online;
307
305
  }
308
306
 
309
307
  // Local node information are newer
310
308
  if (!sequence || sequence < node.sequence) {
311
309
  // our node info is newer than the
312
310
  if (node.isAvailable) {
313
- const nodeInfo = self.broker.registry.getNodeInfo(node.id)
314
- response.online[node.id] = [nodeInfo, node.cpuSequence || 0, node.cpu || 0]
311
+ const nodeInfo = self.broker.registry.getNodeInfo(node.id);
312
+ response.online[node.id] = [nodeInfo, node.cpuSequence || 0, node.cpu || 0];
315
313
  } else {
316
- response.offline[node.id] = node.sequence
314
+ response.offline[node.id] = node.sequence;
317
315
  }
318
- return
316
+ return;
319
317
  }
320
318
 
321
319
  // sender said node is offline
@@ -324,18 +322,18 @@ module.exports = function SwimTransport (adapterOptions) {
324
322
  if (!node.isAvailable) {
325
323
  // we know node is offline
326
324
  if (sequence > node.sequence) {
327
- node.sequence = sequence
325
+ node.sequence = sequence;
328
326
  }
329
- return
327
+ return;
330
328
  } else if (!node.isLocal) {
331
329
  // we know, the node is offline
332
- self.broker.registry.nodeCollection.disconnected(node.id, false)
333
- node.sequence = sequence
330
+ self.broker.registry.nodeCollection.disconnected(node.id, false);
331
+ node.sequence = sequence;
334
332
  } else if (node.isLocal) {
335
333
  // Remote node said we are offline, but we are online and send back our node information.
336
- node.sequence = sequence + 1
337
- const nodeInfo = self.broker.registry.getLocalNodeInfo(true)
338
- response.online[node.id] = [nodeInfo, node.cpuSequence || 0, node.cpu || 0]
334
+ node.sequence = sequence + 1;
335
+ const nodeInfo = self.broker.registry.getLocalNodeInfo(true);
336
+ response.online[node.id] = [nodeInfo, node.cpuSequence || 0, node.cpu || 0];
339
337
  }
340
338
  } else if (online) {
341
339
  // Remote node said we are online
@@ -344,115 +342,115 @@ module.exports = function SwimTransport (adapterOptions) {
344
342
  node.heartbeat({
345
343
  cpu,
346
344
  cpuSequence
347
- })
345
+ });
348
346
  } else if (cpuSequence < node.cpuSequence) {
349
- response.online[node.id] = [node.cpuSequence || 0, node.cpu || 0]
347
+ response.online[node.id] = [node.cpuSequence || 0, node.cpu || 0];
350
348
  }
351
349
  } else {
352
- return
350
+ return;
353
351
  }
354
352
  }
355
- })
353
+ });
356
354
 
357
355
  if (Object.keys(response.online).length === 0) {
358
- delete response.online
356
+ delete response.online;
359
357
  }
360
358
 
361
359
  if (Object.keys(response.offline).length === 0) {
362
- delete response.offline
360
+ delete response.offline;
363
361
  }
364
362
 
365
363
  if (response.online || response.offline) {
366
- const destinationNode = self.broker.registry.nodeCollection.get(payload.sender)
367
- const message = createMessage(MessageTypes.MESSAGE_GOSSIP_RESPONSE, destinationNode.id, response)
368
- self.send(message).catch(() => {})
364
+ const destinationNode = self.broker.registry.nodeCollection.get(payload.sender);
365
+ const message = createMessage(MessageTypes.MESSAGE_GOSSIP_RESPONSE, destinationNode.id, response);
366
+ self.send(message).catch(() => {});
369
367
  }
370
368
  } catch (error) {
371
- self.log.error(error)
369
+ self.log.error(error);
372
370
  }
373
371
  }
374
372
 
375
373
  // Handle incoming gossip response
376
374
  function onGossipResponseMessage (data, socket) {
377
375
  try {
378
- const message = self.deserialize(data)
379
- const payload = message.payload
376
+ const message = self.deserialize(data);
377
+ const payload = message.payload;
380
378
 
381
379
  // Process online nodes
382
380
  if (payload.online) {
383
381
  Object.keys(payload.online).forEach(nodeId => {
384
382
  if (nodeId === self.broker.nodeId) {
385
- return
383
+ return;
386
384
  }
387
385
 
388
- const item = payload.online[nodeId]
386
+ const item = payload.online[nodeId];
389
387
 
390
388
  if (!Array.isArray(item)) {
391
- return
389
+ return;
392
390
  }
393
391
 
394
- let info
395
- let cpuSequence
396
- let cpu
392
+ let info;
393
+ let cpuSequence;
394
+ let cpu;
397
395
 
398
396
  if (item.length === 1) {
399
- [info] = item
397
+ [info] = item;
400
398
  } else if (item.length === 2) {
401
- [cpuSequence, cpu] = item
399
+ [cpuSequence, cpu] = item;
402
400
  } else if (item.length === 3) {
403
- [info, cpuSequence, cpu] = item
401
+ [info, cpuSequence, cpu] = item;
404
402
  }
405
403
 
406
- const node = self.broker.registry.nodeCollection.get(nodeId)
404
+ const node = self.broker.registry.nodeCollection.get(nodeId);
407
405
 
408
406
  if (info && (!node || node.sequence < info.sequence)) {
409
407
  // if node is a new node or has a higher sequence update local info.
410
- info.sender = nodeId
411
- self.broker.registry.processNodeInfo(info)
408
+ info.sender = nodeId;
409
+ self.broker.registry.processNodeInfo(info);
412
410
  }
413
411
 
414
412
  if (node && node.isAvailable && cpuSequence && cpuSequence > node.cpuSequence) {
415
413
  node.heartbeat({
416
414
  cpu,
417
415
  cpuSequence
418
- })
416
+ });
419
417
  }
420
- })
418
+ });
421
419
  }
422
420
 
423
421
  // Offline nodes
424
422
  if (payload.offline) {
425
423
  Object.keys(payload.offline).forEach(nodeId => {
426
- if (nodeId === self.broker.nodeId) return
424
+ if (nodeId === self.broker.nodeId) return;
427
425
 
428
- const sequence = payload.offline[nodeId]
429
- const node = self.broker.registry.nodeCollection.get(nodeId)
426
+ const sequence = payload.offline[nodeId];
427
+ const node = self.broker.registry.nodeCollection.get(nodeId);
430
428
 
431
429
  if (!node) {
432
- return
430
+ return;
433
431
  }
434
432
 
435
433
  // the remote node is newer
436
434
  if (sequence > node.sequence) {
437
435
  if (node.isAvailable) {
438
- self.broker.registry.nodeCollection.disconnected(node.id, false)
436
+ self.broker.registry.nodeCollection.disconnected(node.id, false);
439
437
  }
440
- node.sequence = sequence
438
+ node.sequence = sequence;
441
439
  }
442
- })
440
+ });
443
441
  }
444
442
  } catch (error) {
445
- self.log.error(error)
443
+ self.log.error(error);
446
444
  }
447
445
  }
448
446
 
449
447
  function onMessage (type, data, socket) {
450
448
  try {
451
- self.onIncomingMessage(type, data, socket)
449
+ self.onIncomingMessage(type, data, socket);
452
450
  } catch (error) {
453
- console.log(error)
451
+ console.log(error);
454
452
  }
455
453
  }
456
454
 
457
- return self
458
- }
455
+ return self;
456
+ };
@@ -1,18 +1,18 @@
1
1
  module.exports = messagetypes => {
2
- const messageTypeIndexes = {}
2
+ const messageTypeIndexes = {};
3
3
 
4
4
  Object
5
5
  .keys(messagetypes)
6
6
  .forEach((messageType, index) => {
7
- messageTypeIndexes[messagetypes[messageType]] = index
8
- })
7
+ messageTypeIndexes[messagetypes[messageType]] = index;
8
+ });
9
9
 
10
10
  return {
11
11
  getIndexByType (messageType) {
12
- return messageTypeIndexes[messageType]
12
+ return messageTypeIndexes[messageType];
13
13
  },
14
14
  getTypeByIndex (index) {
15
- return Object.keys(messageTypeIndexes).find(key => messageTypeIndexes[key] === index)
15
+ return Object.keys(messageTypeIndexes).find(key => messageTypeIndexes[key] === index);
16
16
  }
17
- }
18
- }
17
+ };
18
+ };