From ba1b6fa6d21575846623e1bcc20dd9ea48d69965 Mon Sep 17 00:00:00 2001 From: Jon Nordby Date: Mon, 19 Feb 2018 16:42:08 +0100 Subject: [PATCH 1/2] Network: Catch errors when starting initial graph --- src/Base.coffee | 7 +++-- src/protocol/Network.coffee | 63 ++++++++++++++++++++----------------- 2 files changed, 38 insertions(+), 32 deletions(-) diff --git a/src/Base.coffee b/src/Base.coffee index 5a4c28d..c013d06 100644 --- a/src/Base.coffee +++ b/src/Base.coffee @@ -23,10 +23,11 @@ class BaseTransport if @options.defaultGraph? @options.defaultGraph.baseDir = @options.baseDir - path = 'default/main' + graphName = 'default/main' @context = 'none' - @graph.registerGraph path, @options.defaultGraph - @network.startNetwork @options.defaultGraph, { graph: path }, @context + @graph.registerGraph graphName, @options.defaultGraph + @network._startNetwork @options.defaultGraph, graphName, @context, (err) -> + throw err if err if @options.captureOutput? and @options.captureOutput # Start capturing so that we can send it to the UI when it connects diff --git a/src/protocol/Network.coffee b/src/protocol/Network.coffee index 114e6ef..6abcaa7 100644 --- a/src/protocol/Network.coffee +++ b/src/protocol/Network.coffee @@ -1,10 +1,10 @@ noflo = require 'noflo' EventEmitter = require('events').EventEmitter -prepareSocketEvent = (event, req) -> +prepareSocketEvent = (event, graphName) -> payload = id: event.id - graph: req.graph + graph: graphName if event.socket.from payload.src = node: event.socket.from.process.id @@ -120,15 +120,15 @@ class NetworkProtocol extends EventEmitter sign = getSocketSignature(event.socket) return @networks[graph].filters[sign] - initNetwork: (graph, payload, context, callback) -> + initNetwork: (graph, graphName, context, callback) -> # Ensure we stop previous network - if @networks[payload.graph] and @networks[payload.graph].network - network = @networks[payload.graph].network + if @networks[graphName] and @networks[graphName].network + network = @networks[graphName].network network.stop (err) => return callback err if err - delete @networks[payload.graph] - @emit 'removenetwork', network, payload.graph, @networks - @initNetwork graph, payload, context, callback + delete @networks[graphName] + @emit 'removenetwork', network, graphName, @networks + @initNetwork graph, graphName, context, callback return graph.componentLoader = @transport.component.getLoader graph.baseDir, @transport.options @@ -136,24 +136,24 @@ class NetworkProtocol extends EventEmitter opts.delay = true noflo.createNetwork graph, (err, network) => return callback err if err - if @networks[payload.graph] and @networks[payload.graph].network - @networks[payload.graph].network = network + if @networks[graphName] and @networks[graphName].network + @networks[graphName].network = network else - @networks[payload.graph] = + @networks[graphName] = network: network filters: {} - @emit 'addnetwork', network, payload.graph, @networks - @subscribeNetwork network, payload, context + @emit 'addnetwork', network, graphName, @networks + @subscribeNetwork network, graphName, context # Run the network network.connect callback , opts - subscribeNetwork: (network, payload, context) -> + subscribeNetwork: (network, graphName, context) -> network.on 'start', (event) => @sendAll 'started', time: event.start - graph: payload.graph + graph: graphName running: network.isRunning() started: network.isStarted() , context @@ -161,15 +161,15 @@ class NetworkProtocol extends EventEmitter @sendAll 'stopped', time: new Date uptime: event.uptime - graph: payload.graph + graph: graphName running: network.isRunning() started: network.isStarted() , context network.on 'icon', (event) => - event.graph = payload.graph + event.graph = graphName @sendAll 'icon', event, context network.on 'ip', (event) => - return unless @eventFiltered(payload.graph, event) + return unless @eventFiltered(graphName, event) protocolEvent = id: event.id socket: event.socket @@ -187,7 +187,7 @@ class NetworkProtocol extends EventEmitter when 'closeBracket' protocolEvent.type = 'endgroup' protocolEvent.group = event.data - @sendAll protocolEvent.type, prepareSocketEvent(protocolEvent, payload), context + @sendAll protocolEvent.type, prepareSocketEvent(protocolEvent, graphName), context network.on 'process-error', (event) => error = event.error.message # If we can get a backtrace, send 3 levels @@ -198,23 +198,28 @@ class NetworkProtocol extends EventEmitter @sendAll 'processerror', id: event.id error: error - graph: payload.graph + graph: graphName , context - startNetwork: (graph, payload, context) -> + _startNetwork: (graph, graphName, context, callback) -> doStart = (net) => net.start (err) => - return @send 'error', err, content if err - network = @networks[payload.graph] + return callback err + + network = @networks[graphName] if network and network.network # already initialized - doStart network.network - return + return doStart network.network + + @initNetwork graph, graphName, context, (err) => + return callback err if err + network = @networks[graphName] + return doStart network.network - @initNetwork graph, payload, context, (err) => - return @send 'error', err, context if err - network = @networks[payload.graph] - doStart network.network + startNetwork: (graph, payload, context) -> + @_startNetwork graph, payload.graph, context, (err) -> + @send 'error', err, context if err + return stopNetwork: (graph, payload, context) -> return unless @networks[payload.graph] From e317521d5806a87b118dddc048cf2d230a44d859 Mon Sep 17 00:00:00 2001 From: Jon Nordby Date: Mon, 19 Feb 2018 17:14:39 +0100 Subject: [PATCH 2/2] Network: Fix lint issues --- src/protocol/Network.coffee | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/protocol/Network.coffee b/src/protocol/Network.coffee index 6abcaa7..3e70b19 100644 --- a/src/protocol/Network.coffee +++ b/src/protocol/Network.coffee @@ -201,9 +201,9 @@ class NetworkProtocol extends EventEmitter graph: graphName , context - _startNetwork: (graph, graphName, context, callback) -> - doStart = (net) => - net.start (err) => + _startNetwork: (graph, graphName, context, callback) -> + doStart = (net) -> + net.start (err) -> return callback err network = @networks[graphName]