summaryrefslogtreecommitdiffstats
path: root/dgbuilder/nodes/dge/dgemain/dgstart.js
diff options
context:
space:
mode:
Diffstat (limited to 'dgbuilder/nodes/dge/dgemain/dgstart.js')
-rw-r--r--dgbuilder/nodes/dge/dgemain/dgstart.js594
1 files changed, 594 insertions, 0 deletions
diff --git a/dgbuilder/nodes/dge/dgemain/dgstart.js b/dgbuilder/nodes/dge/dgemain/dgstart.js
new file mode 100644
index 00000000..f2b4815e
--- /dev/null
+++ b/dgbuilder/nodes/dge/dgemain/dgstart.js
@@ -0,0 +1,594 @@
+/**
+ * Copyright 2013 IBM Corp.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ **/
+
+
+module.exports = function(RED) {
+ "use strict";
+ var util = require("util");
+ var vm = require("vm");
+ //var dgxml=require("/home/users/schinthakayala/nodered/sheshi/dgxml/dgxml2");
+ var _=require('lodash');
+ var fs=require('fs');
+ var path = require('path');
+ var appDir = path.dirname(require.main.filename);
+ var userDir = appDir + "/" + RED.settings.userDir;
+ var dbHost = RED.settings.dbHost;
+ var request = require('request');
+ var sharedDir = appDir + "/" + RED.settings.sharedDir;
+ var xmlDir = appDir + "/" + RED.settings.xmlPath;
+
+ //console.log("appDir:" + appDir);
+ //var dgeraw=fs.readFileSync(appDir + "/dge.json").toString();
+ //var dgejson=JSON.parse(dgeraw);
+ //var uploadUrl=dgejson.slaHost + dgejson.uploadUrl;
+ //var slaUrl=dgejson.slaHost + dgejson.slaUrl;
+ //var uploadUrl=RED.settings.slaHost + RED.settings.uploadUrl;
+ //var slaUrl=RED.settings.slaHost + RED.settings.slaUrl;
+ var uploadUrl="";
+ var slaUrl="";
+ //console.log("Upload url: " + uploadUrl);
+
+ function dgstart(n) {
+ RED.nodes.createNode(this,n);
+ this.name = n.name;
+ this.topic = n.topic;
+ }
+
+ function writeHtmlToFile(fileName,str){
+ var localfile = appDir + "/" + RED.settings.htmlPath + fileName;
+ try{
+ fs.writeFileSync(localfile,str);
+ }catch(e){
+ console.log("Error:" + e);
+ }
+ }
+
+ function writeXmlToFile(fileName,str){
+ var localfile = appDir + "/" + RED.settings.xmlPath + fileName;
+ try{
+ fs.writeFileSync(localfile,str);
+ }catch(e){
+ console.log("Error:" + e);
+ }
+ }
+
+ function sendXml(fileName,res) {
+ var needle, localfile, data;
+ needle = require('needle')
+ localfile = appDir + "/" + RED.settings.xmlPath + fileName;
+ console.log("localfile:" + localfile);
+ data={
+ uploadedfile: { file: localfile, content_type: 'text/xml' }
+ }
+ needle.post(uploadUrl, data, { multipart: true }, function(err, resp, body) {
+ //console.log(body)
+ if(resp != undefined && resp != null){
+ console.log("resp Code for sendXml:" + resp.statusCode);
+ }
+ fs.unlink(localfile, function (error) {
+ if (error) {
+ console.log("Error deleting file "+localfile);
+ }else{
+ //console.log("deleted file:" + localfile);
+ }
+ });
+
+ if(err){
+ console.log("Error posting to slaUrl:" + slaUrl);
+ console.log("Error:" +err);
+ res.json({"error":err});
+ }else{
+ //console.dir(resp);
+ //console.log("slaUrl:" + slaUrl);
+ res.json({"url":slaUrl});
+ }
+
+ });
+ }
+
+ function oldsendXml(fileName) {
+ console.log("In sendXML for file: " + fileName);
+ var fileStream, formdata, localfile;
+ localfile = appDir + "/" + RED.settings.xmlPath + fileName;
+
+ formdata = {
+ MAX_FILE_SIZE: "100000",
+ uploadedfile: {
+ options: {
+ contentType: 'audio/mpeg'
+ }
+ }
+
+ };
+
+ console.log("Attempting to upload file: " + localfile);
+ console.log("Sending to: " + uploadUrl);
+ formdata.uploadedfile.value = fs.createReadStream(localfile);
+ fileStream = formdata.uploadedfile.value;
+
+//console.log("Formdata:");
+//console.dir(formdata);
+
+ request.post({
+ url: uploadUrl,
+ proxy: false,
+ formData: formdata
+ }, function(err, resp, body) {
+ fileStream.close();
+ console.log("err: " + err);
+ return console.log("body: " + body);
+ });
+
+ };
+
+ RED.nodes.registerType("dgstart",dgstart);
+/*
+ RED.httpAdmin.post("/uploadxml", function(req,res) {
+ console.dir(req);
+ console.log("USER:" + req.user);
+ console.log("Got request to upload xml to SDN-C.");
+ console.log("Requested filename to upload: " + req.params.fileName);
+ console.log("Requested xml to upload: " + req.params.xmlStr);
+ writeToFile( req.params.fileName,req.params.xmlStr);
+
+ sendXml(req.params.fileName,res);
+ // res.send("Attempt complete.");
+ // res.redirect(slaUrl);
+ });
+*/
+
+ RED.httpAdmin.post("/OldUploadxml", function(req,res) {
+ //console.dir(req);
+ //console.log("USER:" + req.user);
+ var qs = require('querystring');
+ var body = '';
+ req.on('data', function (data) {
+ body += data;
+ // Too much POST data, kill the connection!
+ /*if (body.length > 1e6)
+ request.connection.destroy();
+ */
+ });
+ req.on('end', function () {
+ //console.log("BODY:" + body);
+ var d = new Date().getTime();
+ var user = req.user;
+ var fileName= user + "_" + d +".xml";
+ var post = qs.parse(body);
+ //console.log(JSON.stringify(post));
+ // use post['blah'], etc.
+ var localfile = appDir + "/" + RED.settings.xmlPath + fileName;
+ //console.log("localfile:" + localfile);
+ var xmlStr = post['flowXml'];
+ writeXmlToFile(fileName,xmlStr);
+ sendXml(fileName,res);
+
+ });
+
+ });
+
+ RED.httpAdmin.post("/uploadxml", function(req,res) {
+ //console.dir(req);
+ //console.log("USER:" + req.user);
+ var qs = require('querystring');
+ var body = '';
+ req.on('data', function (data) {
+ body += data;
+ // Too much POST data, kill the connection!
+ /*if (body.length > 1e6)
+ request.connection.destroy();
+ */
+ });
+ req.on('end', function () {
+ //console.log("BODY:" + body);
+ var d = new Date().getTime();
+ var user = req.user;
+ var fileName= user + "_" + d +".xml";
+ var post = qs.parse(body);
+ //console.log(JSON.stringify(post));
+ // use post['blah'], etc.
+ var localfile = appDir + "/" + RED.settings.xmlPath + fileName;
+ //console.log("localfile:" + localfile);
+ var xmlStr = post['flowXml'];
+ var moduleName = post['module'];
+ var rpc = post['rpc'];
+ writeXmlToFile(fileName,xmlStr);
+ uploadDG(localfile,moduleName,rpc,res);
+ });
+
+ });
+
+
+function uploadDG(filePath,moduleName,rpc,res){
+ console.log("called uploadDG...");
+ var exec = require('child_process').exec;
+ var commandToExec = appDir + "/svclogic/svclogic.sh load " + filePath + " " + userDir + "/conf/svclogic.properties";
+ console.log("commandToExec:" + commandToExec);
+ var child = exec(commandToExec ,function (error,stdout,stderr){
+ //console.log(error);
+ console.log("stdout:" + stdout);
+ console.log("stderr:" + stderr);
+ if(error){
+ console.log("Error occured:" + error);
+ if(stderr){
+ //console.log("stderr:" + stderr);
+ res.send(500,{'error':error,'stderr':stderr});
+ }else{
+ res.send(500,{'error':error});
+ }
+ //console.log("stdout :" + stdout);
+ }else{
+ if(stdout ){
+ //console.log("output:" + stdout);
+ if(stdout.indexOf('Compiler error') != -1){
+ //console.log("compileError occured.");
+
+ var resp = {
+ 'stdout':stdout,
+ 'stderr':"COMPILE_ERROR",
+ 'url':dbHost,
+ 'module':moduleName,
+ 'rpc':rpc
+ }
+ res.send(500,resp);
+ }else{
+ res.send(200,{'stdout':stdout,'stderr':stderr,"url":dbHost,"module" : moduleName,"rpc" : rpc});
+ }
+ }
+ if(stderr && !stdout){
+ //console.log("stderr:" + stderr);
+ if(stderr.indexOf("Saving SvcLogicGraph to database") != -1){
+ res.send(200,{'error':error,'stdout' :'','stderr':stderr,"url":dbHost,"module" : moduleName,"rpc" : rpc});
+ }else{
+ res.send(500,{'error':error,'stdout' :'','stderr':stderr});
+ }
+ }
+ }
+ });
+}
+
+ RED.httpAdmin.get("/displayXml", function(req,res) {
+ var _module = req.query._module;
+ var rpc = req.query.rpc;
+ var version = req.query.version;
+ var mode = req.query.mode;
+ var d = new Date().getTime();
+ displayXml(_module,rpc,version,mode,res);
+ });
+
+function displayXml(_module,rpc,version,mode,res){
+ var exec = require('child_process').exec;
+ var msg = {
+ '_module' : _module,
+ 'rpc' : rpc,
+ 'version' : version,
+ 'mode' : mode
+ }
+ var commandToExec = appDir + "/svclogic/svclogic.sh get-source " + _module + " "
+ + rpc + " " + mode + " " + version + " " + userDir + "/conf/svclogic.properties";
+ console.log("commandToExec:" + commandToExec);
+ var child = exec(commandToExec ,{'maxBuffer':16*1024*1024},function (error,stdout,stderr){
+ if(error){
+ console.log("Error occured:" + error);
+ if(stderr){
+ //console.log("stderr:" + stderr);
+ res.send(500,{'error':error,'stderr':stderr,'msg':msg});
+ }else{
+ res.send(500,{'error':error,'msg':msg});
+ }
+ }else{
+ if(stderr){
+ console.log("stderr:" + stderr);
+ }
+ if(stdout){
+ res.send({'xmldata' : "<xmp>" + stdout + "</xmp>"});
+ }
+ }
+ });
+}
+
+
+ RED.httpAdmin.post("/downloadDGXml", function(req,res) {
+ //console.dir(req);
+ var qs = require('querystring');
+ var body = '';
+ req.on('data', function (data) {
+ body += data;
+ });
+
+ req.on('end', function () {
+ var post = qs.parse(body);
+ var _module = post._module;
+ var rpc = post.rpc;
+ var version = post.version;
+ var mode = post.mode;
+ var d = new Date().getTime();
+ downloadDGXml(_module,rpc,version,mode,res);
+ });
+ });
+
+function downloadDGXml(_module,rpc,version,mode,res){
+ var exec = require('child_process').exec;
+ var msg = {
+ '_module' : _module,
+ 'rpc' : rpc,
+ 'version' : version,
+ 'mode' : mode
+ }
+ var commandToExec = appDir + "/svclogic/svclogic.sh get-source " + _module + " "
+ + rpc + " " + mode + " " + version + " " + userDir + "/conf/svclogic.properties";
+ console.log("commandToExec:" + commandToExec);
+ var child = exec(commandToExec ,function (error,stdout,stderr){
+ if(error){
+ console.log("Error occured:" + error);
+ if(stderr){
+ //console.log("stderr:" + stderr);
+ res.send(500,{'error':error,'stderr':stderr,'msg':msg});
+ }else{
+ res.send(500,{'error':error,'msg':msg});
+ }
+ }else{
+ if(stderr){
+ console.log("stderr:" + stderr);
+ }
+ if(stdout){
+ //console.log("output:" + stdout);
+ //var newOutput = "<pre>" + stdout.replace(/\n/g,'<br>') + "</pre>";
+ //res.json({'stdout': stdout ,'stderr':stderr,"msg":msg});
+ //res.set('Content-Type', 'text/xml');
+ //res.set('Content-Type', 'application/octet-stream');
+ //res.end("<code>" + stdout + "</code>" );
+ //var newOutput ="<html><body>" + stdout + "</body></html>";
+ //res.send(new Buffer( "<code>" + newOutput + "</code>" ) );
+ //res.send(newOutput);
+
+ /*
+ var xslStr = '<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">' +
+ '<xsl:output omit-xml-declaration="yes" indent="yes"/>' +
+ '<xsl:template match="node()|@*">' +
+ '<xsl:copy>' +
+ '<xsl:apply-templates select="node()|@*"/>' +
+ '</xsl:copy>' +
+ '</xsl:template>' +
+ '</xsl:stylesheet>';
+ */
+
+ var formatted_date = getCurrentDate();
+ var fileName= "db_" + _module + "_" +rpc+ "_" + version + "_" + formatted_date + ".html";
+ var file = xmlDir + "/" + fileName;
+ var xmlStr = '<xmp>' + stdout + "</xmp>";
+ //var xmlStr = "<![CDATA[" + stdout + "]]";
+ //var xmlStr = stdout.replace(/</g,"&lt;");
+ //xmlStr = xmlStr.replace(/>/g,"&gt;");
+ //xmlStr = xmlStr.replace(/\n>/g,"<br>");
+ //xmlStr = xmlStr.replace(/\t>/g,"&nbsp;&nbsp;&nbsp;");
+
+ writeToFile(file,"<html><body>" +xmlStr+ "</body></html>");
+ //console.log("xmlStr:" + xmlStr);
+ res.setHeader('Content-disposition', 'attachment; filename=' + file);
+ //res.setHeader('Content-type', 'text/html');
+ res.setHeader('Content-type', 'text/xml');
+ res.download(file);
+ }
+ }
+ });
+}
+
+
+ RED.httpAdmin.get("/displayAsGv", function(req,res) {
+ var _module = req.query._module;
+ var rpc = req.query.rpc;
+ var version = req.query.version;
+ var mode = req.query.mode;
+ var d = new Date().getTime();
+ displayAsGv(_module,rpc,version,mode,res);
+ });
+
+function displayAsGv(_module,rpc,version,mode,res){
+ var exec = require('child_process').exec;
+ var msg = {
+ '_module' : _module,
+ 'rpc' : rpc,
+ 'version' : version,
+ 'mode' : mode
+ }
+ var commandToExec = appDir + "/svclogic/svclogic.sh print " +
+ _module + " " + rpc + " " + mode + " " + version + " "
+ //+ userDir + "/conf/svclogic.properties | dot -Tpng ";
+ //the label="""" is giving an error so replacing it with "null"
+ + userDir + "/conf/svclogic.properties |sed -e 's%label=\"\"\"\"%label=\"null\"%g'| dot -Tsvg ";
+ console.log("commandToExec:" + commandToExec);
+ //+ userDir + "/conf/svclogic.properties | dot -Tsvg ";
+ //var child = exec(commandToExec ,function (error,stdout,stderr){
+ //var child = exec(commandToExec ,{maxBuffer:16*1024*1024},function (error,stdout,stderr){
+ //var child = exec(commandToExec ,{encoding:'base64',maxBuffer:20*1024*1024},function (error,stdout,stderr){
+ var child = exec(commandToExec ,{maxBuffer:20*1024*1024},function (error,stdout,stderr){
+ if(error){
+ console.log("Error occured:" + error);
+ if(stderr){
+ console.log("stderr:" + stderr);
+ res.send(500,{'error':error,'stderr':stderr,"msg":msg});
+ }else{
+ res.send(500,{'error':error,"msg":msg});
+ }
+ }else{
+ if(stderr){
+ console.log("stderr:" + stderr);
+ //To convert base64 to ascii
+ //console.log(new Buffer(stderr, 'base64').toString('ascii'));
+ }
+ if(stdout){
+ //console.log(stdout.length);
+ //console.log("output:" + stdout);
+ //var svg_html = stdout ;
+ //var image = "<img src='data:image/png;base64," + stdout + "'>";
+ //var image = "<iframe width='1200' height='750' src='data:image/png;base64," + stdout + "'></frame>";
+ //var image = "<iframe width='1200' height='750' src='data:image/svg+xml;base64," + stdout + "'></frame>";
+ //var image = "<iframe width='1200' height='750' src='data:image/gif;base64," + stdout + "'></frame>";
+ var image = "<iframe width='1200' height='750' src='data:image/svg+xml;UTF-8," + stdout + "'></frame>";
+ //console.log(image);
+ res.send({'svg_html':image});
+ }
+ }
+ });
+}
+
+ RED.httpAdmin.post("/shareFlow", function(req,res) {
+ //console.dir(req);
+ //console.log("USER:" + req.user);
+ var qs = require('querystring');
+ var body = '';
+ req.on('data', function (data) {
+ body += data;
+ // Too much POST data, kill the connection!
+ /*if (body.length > 1e6)
+ request.connection.destroy();
+ */
+ });
+ req.on('end', function () {
+ var post = qs.parse(body);
+
+ var nodeSet = JSON.parse(post['flowData']);
+ var activeWorkspace=post['activeWorkspace'];
+ var methodName = "";
+ var moduleName = "";
+ for(var i=0;nodeSet != null && i<nodeSet.length;i++){
+ var node = nodeSet[i];
+ if(node.type == 'module' ){
+ moduleName= node.name;
+ moduleName=moduleName.replace(/ /g,"-");
+ }
+ if(node.type == 'method' ){
+ methodName= node.name;
+ methodName=methodName.replace(/ /g,"-");
+ }
+ }
+ //console.log("BODY:" + body);
+ var d = new Date().getTime();
+ var user = req.user;
+ var fileName= moduleName + "_" +methodName+".json";
+ var localfile = sharedDir + "/" + fileName;
+ //console.log("localfile:" + localfile);
+
+ writeToFile(localfile,JSON.stringify(nodeSet));
+ res.send({"fileName": fileName});
+ });
+
+ });
+
+
+ RED.httpAdmin.post("/sendEmail", function(req,res) {
+ //console.dir(req);
+ console.log("USER:" + req.user);
+ var fromAddr = RED.settings.emailAddress;
+ var toAddr = RED.settings.emailAddress;
+ var qs = require('querystring');
+ var body = '';
+ req.on('data', function (data) {
+ body += data;
+ // Too much POST data, kill the connection!
+ /*if (body.length > 1e6)
+ request.connection.destroy();
+ */
+ });
+ req.on('end', function () {
+ //console.log("BODY:" + body);
+ var d = new Date().getTime();
+ var user = req.user;
+ var fileName= user + "_" + d +".html";
+ var post = qs.parse(body);
+ //console.log(JSON.stringify(post));
+ // use post['blah'], etc.
+ var localfile = appDir + "/" + RED.settings.htmlPath + fileName;
+ //console.log("localfile:" + localfile);
+ var nodemailer = require("nodemailer");
+ nodemailer.sendmail = true;
+ var transporter = nodemailer.createTransport();
+ var ua = req.headers['user-agent'];
+ var host = req.headers.host;
+ var fullHtml="<!doctype html><html><head>" + post['flowHtml'];
+ //fullHtml+="<div style='fill:both'></div>";
+ fullHtml+="<div style='margin-left:10px;'><p>XML</p><br><textarea rows='50' cols='150'>" + post['flowXml'] + "</textarea>";
+ fullHtml+="<p>JSON</p><br><textarea rows='50' cols='150'>" + post['flowJson'] + "</textarea></div>";
+ fullHtml+="</body></html>";
+ writeHtmlToFile(fileName,fullHtml);
+
+ transporter.sendMail({
+ from: fromAddr,
+ to: toAddr,
+ html: "<p>DG Node Flow. click on the attachment to view</p>",
+ subject: 'Node flow from Host:<' + host + '>',
+ attachments : [{'filename': fileName,
+ 'contentType': "text/html",
+ /*'filePath': localfile*/
+ 'content': fs.createReadStream(localfile)
+ }]
+
+ }, function(err, response) {
+ var fullPathtoFileName = appDir + "/" + RED.settings.htmlPath + fileName;
+ fs.unlink(fullPathtoFileName, function (error) {
+ if (error) {
+ console.log("Error deleting file "+fullPathtoFileName);
+ }else{
+ //console.log("deleted file:" + fullPathtoFileName);
+ }
+ });
+
+ if(err){
+ console.log("Error:" + err);
+ res.json(err);
+ }else{
+ res.json(response);
+ }
+ console.log(response);
+ });
+
+ });
+
+
+ });
+/*
+ RED.httpAdmin.post("/doxml/:id", function(req,res) {
+ var node = RED.nodes.getNode(req.params.id);
+ if (node != null) {
+ try {
+ // node.receive();
+ //console.log("doxml was called for node: ");
+ //console.dir(node);
+ //console.log("calling getJson");
+ var nrjson=dgxml.getJson();
+ console.log("calling nodered2xml");
+ var results=[];
+ results=dgxml.nodered2xml(nrjson,node.id);
+ var nrxml=results[0];
+ fileName=results[1];
+ console.log("Got this filename: " + fileName);
+ // res.send(200);
+ console.log("appDir: " + appDir);
+ fs.writeFileSync(appDir + "/public/xml/"+fileName,nrxml);
+ // res.send("XML generated! See help on right for link.");
+ res.send(fileName);
+ } catch(err) {
+ res.send(500);
+ node.error("doxml failed:"+err);
+ console.log(err.stack);
+ }
+ } else {
+ res.send(404);
+ }
+ });
+*/
+}