From 87d77efa57eccfa9b9f038336b8a9b2c83ad5673 Mon Sep 17 00:00:00 2001 From: Nick O'Leary Date: Fri, 20 Nov 2015 22:48:06 +0000 Subject: [PATCH] Add flow reload admin api --- locales/en-US/runtime.json | 3 ++- red/api/flows.js | 24 +++++++++++++++++------- red/runtime/storage/localfilesystem.js | 8 ++++++-- 3 files changed, 25 insertions(+), 10 deletions(-) diff --git a/locales/en-US/runtime.json b/locales/en-US/runtime.json index bbb4053d5..32b440d85 100644 --- a/locales/en-US/runtime.json +++ b/locales/en-US/runtime.json @@ -41,7 +41,8 @@ "api": { "flows": { - "error-save": "Error saving flows: __message__" + "error-save": "Error saving flows: __message__", + "error-reload": "Error reloading flows: __message__" }, "library": { "error-load-entry": "Error loading library entry '__path__': __message__", diff --git a/red/api/flows.js b/red/api/flows.js index 9167f3e8d..021b59583 100644 --- a/red/api/flows.js +++ b/red/api/flows.js @@ -32,12 +32,22 @@ module.exports = { var flows = req.body; var deploymentType = req.get("Node-RED-Deployment-Type")||"full"; log.audit({event: "flows.set",type:deploymentType},req); - redNodes.setFlows(flows,deploymentType).then(function() { - res.status(204).end(); - }).otherwise(function(err) { - log.warn(log._("api.flows.error-save",{message:err.message})); - log.warn(err.stack); - res.status(500).json({error:"unexpected_error", message:err.message}); - }); + if (deploymentType === 'reload') { + redNodes.loadFlows().then(function() { + res.status(204).end(); + }).otherwise(function(err) { + log.warn(log._("api.flows.error-reload",{message:err.message})); + log.warn(err.stack); + res.status(500).json({error:"unexpected_error", message:err.message}); + }); + } else { + redNodes.setFlows(flows,deploymentType).then(function() { + res.status(204).end(); + }).otherwise(function(err) { + log.warn(log._("api.flows.error-save",{message:err.message})); + log.warn(err.stack); + res.status(500).json({error:"unexpected_error", message:err.message}); + }); + } } } diff --git a/red/runtime/storage/localfilesystem.js b/red/runtime/storage/localfilesystem.js index 7fe7468cd..08dda1b4b 100644 --- a/red/runtime/storage/localfilesystem.js +++ b/red/runtime/storage/localfilesystem.js @@ -25,6 +25,7 @@ var log = require("../log"); var promiseDir = nodeFn.lift(mkdirp); +var initialFlowLoadComplete = false; var settings; var flowsFile; var flowsFullPath; @@ -191,8 +192,11 @@ var localfilesystem = { getFlows: function() { return when.promise(function(resolve) { - log.info(log._("storage.localfilesystem.user-dir",{path:settings.userDir})); - log.info(log._("storage.localfilesystem.flows-file",{path:flowsFullPath})); + if (!initialFlowLoadComplete) { + initialFlowLoadComplete = true; + log.info(log._("storage.localfilesystem.user-dir",{path:settings.userDir})); + log.info(log._("storage.localfilesystem.flows-file",{path:flowsFullPath})); + } fs.readFile(flowsFullPath,'utf8',function(err,data) { if (!err) { return resolve(JSON.parse(data));