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