Initial commit for OpenECOMP SDN-C OA&M
[sdnc/oam.git] / admportal / server / router / routes / network.js
diff --git a/admportal/server/router/routes/network.js b/admportal/server/router/routes/network.js
new file mode 100644 (file)
index 0000000..c64beae
--- /dev/null
@@ -0,0 +1,400 @@
+\r
+// Helper functions for processing a NETWORK worksheet\r
+\r
+var helpers = require('./helpers.js');\r
+var _ = require('lodash');\r
+var csvtojson = require('csvtojson');\r
+var async = require('async');\r
+var uuid = require('node-uuid');   // generate a uuid with "uuid.v1()"\r
+var path = require('path');\r
+var fs = require("fs");\r
+var moment = require("moment");\r
+\r
+var network = module.exports;\r
+var getParam = helpers.getParam;\r
+\r
+var indir;\r
+var csvGeneral, csvSubnets, csvVpnBindings, csvPolicies, csvNetRoutes;\r
+var rawJson={}\r
+var finalJson={};  \r
+var platform;\r
+var req,res;\r
+var preloadVersion;  // 1607, 1610, etc...\r
+\r
+puts = helpers.puts;\r
+putd = helpers.putd;\r
+\r
+network.go = function(lreq,lres,cb,dir) {\r
+  puts("Processing NETWORK workbook");\r
+  req = lreq;\r
+  res = lres;\r
+  callback = cb;\r
+  if (dir!="") {\r
+    platform="pc";\r
+    indir=dir;\r
+  } else {\r
+    platform="portal";\r
+    indir=process.cwd() + "/uploads/";\r
+  }\r
+  doGeneral();\r
+}\r
+\r
+// READ WORKSHEET: GENERAL\r
+\r
+function doGeneral() {\r
+  puts("Reading General worksheet");\r
+  var csvFilename="General.csv";\r
+  var newFileName = helpers.getFileName(req, csvFilename);\r
+  if ( newFileName != null ) {\r
+    helpers.readCsv(indir, newFileName, gotGeneral);\r
+  }\r
+  else {\r
+    callback(csvFilename + ' file is missing from upload.');\r
+  }\r
+}\r
+\r
+function gotGeneral(err, jsonObj) {\r
+  if (err) {\r
+    puts("\nError!");\r
+    putd(err);\r
+    callback('General.csv file is missing from upload.');\r
+    return;\r
+  }\r
+  csvGeneral = jsonObj;\r
+  puts("\nRead this: ");\r
+  putd(csvGeneral);\r
+  puts("\n");\r
+  doSubnets();\r
+}\r
+\r
+// READ WORKSHEET: SUBNETS\r
+\r
+function doSubnets() {\r
+  puts("Reading Subnets worksheet");\r
+  var csvFilename="Subnets.csv";\r
+  var newFileName = helpers.getFileName(req, csvFilename);\r
+  if ( newFileName != null ) {\r
+    helpers.readCsv(indir, newFileName, gotSubnets);\r
+  }\r
+  else {\r
+    callback(csvFilename + ' file is missing from upload.');\r
+  }\r
+}\r
+\r
+function gotSubnets(err, jsonObj) {\r
+  if (err) {\r
+    puts("\nError!");\r
+    putd(err);\r
+    callback('Subnets.csv file is missing from upload.');\r
+    return;\r
+  }\r
+  csvSubnets = jsonObj;\r
+  csvSubnets = _.reject(csvSubnets, 'field2', 'Subnets');\r
+  csvSubnets = _.reject(csvSubnets, 'field2', 'start-address');\r
+  csvSubnets = _.reject(csvSubnets, 'field2', '');\r
+  puts("\nRead this: ");\r
+  putd(csvSubnets);\r
+  puts("\n");\r
+  doVpnBindings();\r
+}\r
+\r
+// READ WORKSHEET: VPN-BINDINGS\r
+\r
+function doVpnBindings() {\r
+  puts("Reading VPN-Bindings worksheet");\r
+  var csvFilename="VPN-Bindings.csv";\r
+  var newFileName = helpers.getFileName(req, csvFilename);\r
+  if ( newFileName != null ) {\r
+    helpers.readCsv(indir, newFileName, gotVpnBindings);\r
+  }\r
+  else {\r
+    callback(csvFilename + ' file is missing from upload.');\r
+  }\r
+}\r
+\r
+function gotVpnBindings(err, jsonObj) {\r
+  if (err) {\r
+    puts("\nError!");\r
+    putd(err);\r
+    callback('VPN-Bindings.csv file is missing from upload.');\r
+    return;\r
+  }\r
+  csvVpnBindings = jsonObj;\r
+  csvVpnBindings = _.reject(csvVpnBindings, 'field2', 'VPN-Bindings');\r
+  csvVpnBindings = _.reject(csvVpnBindings, 'field2', 'vpn-binding-id');\r
+  csvVpnBindings = _.reject(csvVpnBindings, function(o) { return (_.trim(o.field2)=="") && (_.trim(o.field3)==""); } );\r
+  puts("\nRead this: ");\r
+  putd(csvVpnBindings);\r
+  puts("\n");\r
+  doPolicies();\r
+}\r
+\r
+\r
+// READ WORKSHEET: POLICIES\r
+\r
+function doPolicies() {\r
+  puts("Reading Policies worksheet");\r
+  var csvFilename="Policies.csv";\r
+  var newFileName = helpers.getFileName(req, csvFilename);\r
+  if ( newFileName != null ) {\r
+    helpers.readCsv(indir, newFileName, gotPolicies);\r
+  }\r
+  else {\r
+    callback(csvFilename + ' file is missing from upload.');\r
+  }\r
+}\r
+\r
+function gotPolicies(err, jsonObj) {\r
+  if (err) {\r
+    puts("\nError!");\r
+    putd(err);\r
+    callback('Policies.csv file is missing from upload.');\r
+    return;\r
+  }\r
+  csvPolicies = jsonObj;\r
+  csvPolicies = _.reject(csvPolicies, 'field2', 'Policies');\r
+  csvPolicies = _.reject(csvPolicies, 'field2', 'network-policy-fqdn');\r
+  csvPolicies = _.reject(csvPolicies, 'field2', '');\r
+  puts("\nRead this: ");\r
+  putd(csvPolicies);\r
+  puts("\n");\r
+  doNetRoutes();\r
+}\r
+\r
+\r
+// READ WORKSHEET: NETWORK-ROUTES\r
+\r
+function doNetRoutes() {\r
+  puts("Reading Network-Routes worksheet");\r
+  var csvFilename="Network-Routes.csv";\r
+  var newFileName = helpers.getFileName(req, csvFilename);\r
+  preloadVersion = getParam(csvGeneral, 'field2', 'preload-version', 'field3');\r
+  if ( preloadVersion == '1607' ) {\r
+    puts("This is a 1607 spreadsheet. Skipping Network-Routes.csv.");\r
+    gotNetRoutes(null,{});\r
+    return;\r
+  }\r
+  if ( newFileName != null ) {\r
+    helpers.readCsv(indir, newFileName, gotNetRoutes);\r
+  }\r
+  else {\r
+    callback(csvFilename + ' file is missing from upload.');\r
+  }\r
+}\r
+\r
+function gotNetRoutes(err, jsonObj) {\r
+  if (err) {\r
+    puts("\nError!");\r
+    putd(err);\r
+    callback('Network-Routes.csv file is missing from upload.');\r
+    return;\r
+  }\r
+  csvNetRoutes = jsonObj;\r
+  csvNetRoutes = _.reject(csvNetRoutes, 'field2', 'Network-Routes');\r
+  csvNetRoutes = _.reject(csvNetRoutes, 'field2', 'route-table-reference-fqdn');\r
+  csvNetRoutes = _.reject(csvNetRoutes, 'field2', '');\r
+  puts("\nRead this: ");\r
+  putd(csvNetRoutes);\r
+  puts("\n");\r
+  doneReadingFiles();\r
+}\r
+\r
+\r
+// DONE READING FILES\r
+\r
+function doneReadingFiles() {\r
+  puts("\n");\r
+  puts("DONE READING FILES!");\r
+  puts("\n");\r
+  processJson();\r
+}\r
+\r
+\r
+// PROCESS THE CSV FILES INTO OBJECTS TO BE ASSEMBLED INTO FINAL OUTPUT\r
+function processJson() {\r
+  processGeneral();\r
+  processSubnets();\r
+  processVpnBindings();\r
+  processPolicies();\r
+  processNetRoutes();\r
+  assembleJson();\r
+}\r
+\r
+// ASSEMBLE AND OUTPUT RESULTS\r
+\r
+function assembleJson() {\r
+  puts("\n");\r
+  puts("Using raw JSON and assembling final ouptut JSON.");\r
+  puts("\n");\r
+\r
+  networkTopoID = { "network-name": rawJson['network-name'],\r
+               "network-role": rawJson['network-role'],\r
+               "network-type": rawJson['network-type'],\r
+               "network-technology": rawJson['network-technology'] };\r
+\r
+  providerInfo = { "physical-network-name": rawJson['physical-network-name'],\r
+               "is-provider-network": rawJson['is-provider-network'],\r
+               "is-shared-network": rawJson['is-shared-network'],\r
+               "is-external-network": rawJson['is-external-network'] };\r
+\r
+  networkSubnets = rawJson['subnets'];\r
+\r
+  networkVpnBindings = rawJson['vpn-bindings'];\r
+\r
+  networkPolicies = rawJson['network-policy-fqdns'];\r
+\r
+  networkRoutes = rawJson['route-table-reference'];\r
+\r
+  networkTopo = { "network-topology-identifier": networkTopoID,\r
+             "provider-network-information": providerInfo,\r
+              "subnets": networkSubnets,\r
+              "vpn-bindings": networkVpnBindings,\r
+              "network-policy": networkPolicies,\r
+              "route-table-reference": networkRoutes};\r
+\r
+  networkInput = {'network-topology-information': networkTopo};\r
+\r
+  finalJson = {"input": networkInput};\r
+\r
+  outputJson();\r
+}\r
+\r
+function outputJson() {\r
+  puts("\n");\r
+  puts("\n");\r
+  puts(JSON.stringify(finalJson,null,2));\r
+  puts("\n");\r
+  puts("\n");\r
+  var unixTime, fullpath_filename, filename;\r
+  unixTime = moment().unix();\r
+  if (platform=='portal') {\r
+    fullpath_filename = process.cwd() + "/uploads/" + unixTime + ".net_worksheet.json";\r
+    filename = unixTime + ".net_worksheet.json.";\r
+  } else {\r
+    fullpath_filename = "./output.json."+unixTime;\r
+    filename = "output.json." + unixTime;\r
+  }\r
+  helpers.writeOutput(req, fullpath_filename, JSON.stringify(finalJson,null,2), callback);\r
+  callback(null,  finalJson, filename);\r
+}\r
+\r
+\r
+// Gather functions that actually process data after it is all read\r
+\r
+function processGeneral() {\r
+  preloadVersion = getParam(csvGeneral, 'field2', 'preload-version', 'field3');\r
+  rawJson['preload-version'] = preloadVersion;\r
+  puts("Preload version: " + preloadVersion);\r
+\r
+  if ( (preloadVersion!='1607') && (preloadVersion!='1610') ) {\r
+    puts("\nError - incorrect version of preload worksheet.");\r
+    callback('Error - incorrect version of preload worksheet.');\r
+  }\r
+\r
+  rawJson['network-name'] = getParam(csvGeneral, 'field2', 'network-name', 'field3');\r
+  rawJson['network-role'] = getParam(csvGeneral, 'field2', 'network-role', 'field3');\r
+  rawJson['network-type'] = getParam(csvGeneral, 'field2', 'network-type', 'field3');\r
+  rawJson['network-technology'] = getParam(csvGeneral, 'field2', 'network-technology', 'field3');\r
+\r
+  if ( preloadVersion!='1607' ) {\r
+    rawJson['physical-network-name'] = getParam(csvGeneral, 'field2', 'physical-network-name', 'field3');\r
+    rawJson['is-provider-network'] = getParam(csvGeneral, 'field2', 'is-provider-network', 'field3');\r
+    rawJson['is-shared-network'] = getParam(csvGeneral, 'field2', 'is-shared-network', 'field3');\r
+    rawJson['is-external-network'] = getParam(csvGeneral, 'field2', 'is-external-network', 'field3');\r
+  }\r
+\r
+  rawJson['request-action'] = "PreloadNetworkRequest";\r
+  rawJson['svc-request-id'] = uuid.v1();\r
+  rawJson['svc-action'] = "reserve";\r
+  puts('rawJson:');\r
+  putd(rawJson);\r
+  puts("\n");\r
+}\r
+\r
+function processSubnets() {\r
+  var newSubnets = [];\r
+  csvSubnets.forEach( function(subnet) {\r
+    var subnetJson = {};\r
+    subnetJson["start-address"] = subnet.field2;\r
+    if (subnet.field3!='') {\r
+      subnetJson["dhcp-start-address"] = subnet.field3;\r
+    }\r
+    if (subnet.field4!='') {\r
+      subnetJson["dhcp-end-address"] = subnet.field4;\r
+    }\r
+    if (subnet.field5!='') {\r
+      subnetJson["gateway-address"] = subnet.field5;\r
+    }\r
+    subnetJson["cidr-mask"] = subnet.field6;\r
+    subnetJson["ip-version"] = subnet.field7;\r
+    subnetJson["dhcp-enabled"] = subnet.field8;\r
+    subnetJson["subnet-name"] = subnet.field9;\r
+    newSubnets.push(subnetJson);\r
+    }\r
+  );\r
+  puts("subnets:");\r
+  putd(newSubnets);\r
+  puts("\n");\r
+  rawJson["subnets"] = newSubnets;\r
+}\r
+\r
+function processVpnBindings() {\r
+  var newVpnBindings = [];\r
+\r
+  csvVpnBindings.forEach( function(vpn) {\r
+    var vpnJson = {};\r
+    bindid = _.trim(vpn.field2);\r
+    vpnJson["vpn-binding-id"] = bindid;\r
+    if (bindid!="") {\r
+      newVpnBindings.push(vpnJson);\r
+    }\r
+    });\r
+\r
+  puts("VPN-Bindings:");\r
+  putd(newVpnBindings);\r
+  puts("\n");\r
+  rawJson["vpn-bindings"] = newVpnBindings;\r
+}\r
+\r
+function processPolicies() {\r
+  var newPolicies = [];\r
+\r
+  csvPolicies.forEach( function(policy) {\r
+    var policyJson = {};\r
+    fqdn = _.trim(policy.field2);\r
+    if (fqdn != "") {\r
+      policyJson["network-policy-fqdn"] = fqdn;\r
+      newPolicies.push(policyJson);\r
+    }\r
+\r
+    }\r
+  );\r
+\r
+  puts("Policies:");\r
+  putd(newPolicies);\r
+  puts("\n");\r
+  rawJson["network-policy-fqdns"] = newPolicies;\r
+}\r
+\r
+function processNetRoutes() {\r
+  var newNetRoutes = [];\r
+\r
+  csvNetRoutes.forEach( function(netroute) {\r
+    var netrouteJson = {};\r
+    fqdn = _.trim(netroute.field2);\r
+    if (fqdn != "") {\r
+      netrouteJson["route-table-reference-fqdn"] = fqdn;\r
+      newNetRoutes.push(netrouteJson);\r
+    }\r
+\r
+    }\r
+  );\r
+\r
+  puts("Network-Routes:");\r
+  putd(newNetRoutes);\r
+  puts("\n");\r
+  rawJson["route-table-reference"] = newNetRoutes;\r
+}\r
+\r
+\r
+\r