From b994c836c35b98c28a92a2c36c8285b9918066f8 Mon Sep 17 00:00:00 2001 From: Nattapon Wongpaet Date: Wed, 8 Aug 2018 10:16:16 +0700 Subject: [PATCH] first commit --- .gitignore | 30 ++++++++++++++++++++++++++++++ app.js | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ app_srfp.js | 93 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ bin/www | 90 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ config/config.js | 25 +++++++++++++++++++++++++ config/log4js.json | 45 +++++++++++++++++++++++++++++++++++++++++++++ config/logger.js | 3 +++ config/writeLog.rar | Bin 0 -> 5114 bytes logTest/DESKTOP-G5SEAPD_SRFP_Genesis_201805210945.detail | 1 + logTest/DESKTOP-G5SEAPD_SRFP_Genesis_201805210945.stat | 3 +++ logTest/DESKTOP-G5SEAPD_SRFP_Genesis_201805210945.summary | 1 + logTest/DESKTOP-G5SEAPD_SRFP_Genesis_201805211000.detail | 1 + logTest/DESKTOP-G5SEAPD_SRFP_Genesis_201805211000.stat | 3 +++ logTest/DESKTOP-G5SEAPD_SRFP_Genesis_201805211000.summary | 1 + package-lock.json | 1109 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ package.json | 18 ++++++++++++++++++ public/image/image.jpg | Bin 0 -> 58363 bytes public/stylesheets/style.css | 8 ++++++++ routes/CMF/customerMembership.js | 9 +++++++++ routes/CMF/index.js | 11 +++++++++++ routes/CMF/vizCard.js | 41 +++++++++++++++++++++++++++++++++++++++++ routes/users.js | 9 +++++++++ srfp_genesis.js | 323 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ srfp_genesis_backup.js | 278 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ srfp_genesis_backup_2.js | 316 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ utils/SutisAlarm.js | 35 +++++++++++++++++++++++++++++++++++ utils/SutisDetail.js | 70 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ utils/SutisLog.js | 288 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ utils/SutisLogSummary.js | 75 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ utils/SutisStat.js | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ views/error.jade | 5 +++++ views/index.jade | 5 +++++ views/layout.jade | 7 +++++++ 33 files changed, 3015 insertions(+), 0 deletions(-) create mode 100644 .gitignore create mode 100644 app.js create mode 100644 app_srfp.js create mode 100644 bin/www create mode 100644 config/config.js create mode 100644 config/log4js.json create mode 100644 config/logger.js create mode 100644 config/writeLog.rar create mode 100644 logTest/DESKTOP-G5SEAPD_SRFP_Genesis_201805210945.detail create mode 100644 logTest/DESKTOP-G5SEAPD_SRFP_Genesis_201805210945.stat create mode 100644 logTest/DESKTOP-G5SEAPD_SRFP_Genesis_201805210945.summary create mode 100644 logTest/DESKTOP-G5SEAPD_SRFP_Genesis_201805211000.detail create mode 100644 logTest/DESKTOP-G5SEAPD_SRFP_Genesis_201805211000.stat create mode 100644 logTest/DESKTOP-G5SEAPD_SRFP_Genesis_201805211000.summary create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 public/image/image.jpg create mode 100644 public/stylesheets/style.css create mode 100644 routes/CMF/customerMembership.js create mode 100644 routes/CMF/index.js create mode 100644 routes/CMF/vizCard.js create mode 100644 routes/users.js create mode 100644 srfp_genesis.js create mode 100644 srfp_genesis_backup.js create mode 100644 srfp_genesis_backup_2.js create mode 100644 utils/SutisAlarm.js create mode 100644 utils/SutisDetail.js create mode 100644 utils/SutisLog.js create mode 100644 utils/SutisLogSummary.js create mode 100644 utils/SutisStat.js create mode 100644 views/error.jade create mode 100644 views/index.jade create mode 100644 views/layout.jade diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..392150b --- /dev/null +++ b/.gitignore @@ -0,0 +1,30 @@ +# Logs +logs +*.log + +# Runtime data +pids +*.pid +*.seed + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directory +# https://docs.npmjs.com/cli/shrinkwrap#caveats +node_modules + +# Debug log from npm +npm-debug.log diff --git a/app.js b/app.js new file mode 100644 index 0000000..ace18d1 --- /dev/null +++ b/app.js @@ -0,0 +1,48 @@ +var express = require('express'); +var path = require('path'); +var favicon = require('serve-favicon'); +var logger = require('morgan'); +var cookieParser = require('cookie-parser'); +var bodyParser = require('body-parser'); + +var index = require('./routes/CMF/index'); +var users = require('./routes/users'); + +var app = express(); +var prefixUrl = '/appName/v2' + +// view engine setup +app.set('views', path.join(__dirname, 'views')); +app.set('view engine', 'jade'); + +// uncomment after placing your favicon in /public +//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico'))); +app.use(logger('dev')); +app.use(bodyParser.json()); +app.use(bodyParser.urlencoded({ extended: false })); +app.use(cookieParser()); +app.use(express.static(path.join(__dirname, 'public'))); + +app.use(prefixUrl + '/', index); +app.use('/users', users); +app.listen(3000, () => console.log('Example app listening on port 3000!')) + +// catch 404 and forward to error handler +app.use(function(req, res, next) { + var err = new Error('Not Found'); + err.status = 404; + next(err); +}); + +// error handler +app.use(function(err, req, res, next) { + // set locals, only providing error in development + res.locals.message = err.message; + res.locals.error = req.app.get('env') === 'development' ? err : {}; + + // render the error page + res.status(err.status || 500); + res.render('error'); +}); + +module.exports = app; diff --git a/app_srfp.js b/app_srfp.js new file mode 100644 index 0000000..34251ae --- /dev/null +++ b/app_srfp.js @@ -0,0 +1,93 @@ +var express = require('express'); +var path = require('path'); +var favicon = require('serve-favicon'); +var logger = require('morgan'); +var cookieParser = require('cookie-parser'); +var bodyParser = require('body-parser'); +var index = require('./routes/index'); +var users = require('./routes/users'); +var app = express(); +var fs = require('fs'); +var util = require('util'); +var crypto = require('crypto'); +var http = require("http"); +var url = require("url"); + +app.listen(3000, function () { + console.log('Example app listening on port 3000!') +}); + +/*const now=(unit)=>{ + + const hrTime=process.hrtime(); + switch (unit) { + case 'milli':return hrTime[0] * 1000 + hrTime[1] / 1000000; + case 'micro':return hrTime[0] * 1000000 + hrTime[1] / 1000; + case 'nano':return hrTime[0] * 1000000000 + hrTime[1] ; + break; + default:return hrTime[0] * 1000000000 + hrTime[1] ; + } +}*/ + +app.get('/multiMedia.json',function (req, res) { + var name = req.query.name; + var type = req.query.type; + var commadId = req.query.commandId; + var pathfile = null; + + if (type === 'audio') { + pathfile = './audio/' + name; + } else if (type === 'video') { + pathfile = './video/' + name; + } else if (type === 'image') { + pathfile = 'D:\\PROJECT@AIS\\SRFP_Node\\Genesis-SRFP\\public\\image\\' + name; + } else { + console.log('Access Denied'); + } + + // if (type === 'audio') { + // pathfile = path.join('D:', 'Node','Audio' , name); + // } else if (type === 'video') { + // pathfile = path.join('D:', 'Node','Video' , name); + // } else if (type === 'image') { + // pathfile = path.join('D:', 'Node','Image' , name); + // } else { + // console.log('Access Denied'); + // } + + var file = fs.readFileSync(pathfile); + var value = Buffer.from(file).toString('base64'); + + var stats = fs.statSync(pathfile); + var mtime = stats.mtime; + var size = stats.size; + + console.log(mtime.toISOString().replace(/T/, ' ').replace(/\..+/, '')); + // console.log(mtime.getTime()); + + // Get the if-modified-since header from the request + var reqModDate = req.headers['if-modified-since']; + // console.log('If-modify ' + new Date(reqModDate).toISOString().replace(/T/, ' ').replace(/\..+/, '')); + + if (reqModDate != null) { + reqModDate = new Date(reqModDate); + if (reqModDate.getTime() == mtime.getTime()) { + console.log("load from cache"); + res.writeHead(304, { + "Last-Modified": mtime.toUTCString() + }); + res.end(); + } else { + console.log("no cache"); + var fileName = "test.jpg"; + res.download(pathfile, fileName); + res.end(); + } + } else { + res.writeHead(304, { + "Last-Modified": mtime.toUTCString() + }); + res.end(); + } + // res.send(value.toString()); +}); diff --git a/bin/www b/bin/www new file mode 100644 index 0000000..a2b33e4 --- /dev/null +++ b/bin/www @@ -0,0 +1,90 @@ +#!/usr/bin/env node + +/** + * Module dependencies. + */ + +var app = require('../app'); +var debug = require('debug')('srfpgenesis:server'); +var http = require('http'); + +/** + * Get port from environment and store in Express. + */ + +var port = normalizePort(process.env.PORT || '3000'); +app.set('port', port); + +/** + * Create HTTP server. + */ + +var server = http.createServer(app); + +/** + * Listen on provided port, on all network interfaces. + */ + +server.listen(port); +server.on('error', onError); +server.on('listening', onListening); + +/** + * Normalize a port into a number, string, or false. + */ + +function normalizePort(val) { + var port = parseInt(val, 10); + + if (isNaN(port)) { + // named pipe + return val; + } + + if (port >= 0) { + // port number + return port; + } + + return false; +} + +/** + * Event listener for HTTP server "error" event. + */ + +function onError(error) { + if (error.syscall !== 'listen') { + throw error; + } + + var bind = typeof port === 'string' + ? 'Pipe ' + port + : 'Port ' + port; + + // handle specific listen errors with friendly messages + switch (error.code) { + case 'EACCES': + console.error(bind + ' requires elevated privileges'); + process.exit(1); + break; + case 'EADDRINUSE': + console.error(bind + ' is already in use'); + process.exit(1); + break; + default: + throw error; + } +} + +/** + * Event listener for HTTP server "listening" event. + */ + +function onListening() { + var addr = server.address(); + var bind = typeof addr === 'string' + ? 'pipe ' + addr + : 'port ' + addr.port; + debug('Listening on ' + bind); +} diff --git a/config/config.js b/config/config.js new file mode 100644 index 0000000..e50d85b --- /dev/null +++ b/config/config.js @@ -0,0 +1,25 @@ +'use strict'; + +var config = {}; + +// config.statCodeTbl = {}; +config.log = {}; +config.mediaPath={}; + +config.log.logPath = 'D:\\PROJECT@AIS\\SRFP_Node\\SRFPGenesis_TestLog\\logTest\\'; +config.log.summaryPath = 'D:\\PROJECT@AIS\\SRFP_Node\\SRFPGenesis_TestLog\\logTest\\'; +config.log.statPath = 'D:\\PROJECT@AIS\\SRFP_Node\\SRFPGenesis_TestLog\\logTest\\'; +config.log.alarmPath = 'D:\\PROJECT@AIS\\SRFP_Node\\SRFPGenesis_TestLog\\logTest\\'; +config.log.detailPath = 'D:\\PROJECT@AIS\\SRFP_Node\\SRFPGenesis_TestLog\\logTest\\'; +config.log.projectName = 'SRFP_Genesis'; +config.log.logTime = 15; //Minute +config.log.statTime = 5; //Minute +config.log.alarmTime = 5; //Minute +config.log.detailTime = 15; //Minute +config.log.summaryTime = 15; //Minute + +config.mediaPath.video ="D:\\PROJECT@AIS\\SRFP_Node\\SRFPGenesis_TestLog\\source\\video\\";// --> mp4.m4a +config.mediaPath.image ='D:\\PROJECT@AIS\\SRFP_Node\\SRFPGenesis_TestLog\\source\\image\\';// --> jpg,jpeg,png +config.mediaPath.audio ='D:\\PROJECT@AIS\\SRFP_Node\\SRFPGenesis_TestLog\\source\\audio\\';// --> mp3,m4a + +module.exports = config; diff --git a/config/log4js.json b/config/log4js.json new file mode 100644 index 0000000..55b5002 --- /dev/null +++ b/config/log4js.json @@ -0,0 +1,45 @@ +{ + "appenders": { + "access": { + "type": "dateFile", + "filename": "log/access", + "pattern": ".yyyy-MM-dd-hh-mm.log", + "compress": false, + "category": "serverLog", + "layout": { + "type": "pattern", + "pattern": "%h %d{dd/MM/yyyy hh:mm} %m" + } + }, + "app": { + "type": "file", + "filename": "log/app.log", + "maxLogSize": 10485760, + "numBackups": 3 + }, + "errorFile": { + "type": "file", + "filename": "log/errors.log" + }, + "errors": { + "type": "logLevelFilter", + "level": "ERROR", + "appender": "errorFile" + } + }, + "categories": { + "default": { + "appenders": [ + "app", + "errors" + ], + "level": "DEBUG" + }, + "serverLog": { + "appenders": [ + "access" + ], + "level": "DEBUG" + } + } +} \ No newline at end of file diff --git a/config/logger.js b/config/logger.js new file mode 100644 index 0000000..dc44f0e --- /dev/null +++ b/config/logger.js @@ -0,0 +1,3 @@ +var SutisLog = require('../utils/SutisLog') +var logger = new SutisLog() +module.exports = logger \ No newline at end of file diff --git a/config/writeLog.rar b/config/writeLog.rar new file mode 100644 index 0000000..a4aa9db Binary files /dev/null and b/config/writeLog.rar differ diff --git a/logTest/DESKTOP-G5SEAPD_SRFP_Genesis_201805210945.detail b/logTest/DESKTOP-G5SEAPD_SRFP_Genesis_201805210945.detail new file mode 100644 index 0000000..9ff09bb --- /dev/null +++ b/logTest/DESKTOP-G5SEAPD_SRFP_Genesis_201805210945.detail @@ -0,0 +1 @@ +20180521 09:49:19|DESKTOP-G5SEAPD|SRFP_Genesis - detail: {"SRFP-Genesis.Details":{"Session":"1","Scenario":"getMultimedia","Identity":"","InputTimeStamp":"20180521 09:49:19.959","Input":[{"Event":"SRFP-Genesis.getMultimedia","Type":"REQ","RawData":"http://localhost:3000/mulitiMedia.json?name=girl.jpg&type=image&commandId=1","Data":{"Name":"girl.jpg","Type":"image","CommandId":"1"}}],"OutputTimeStamp":"20180521 09:49:19.959","Output":[{"Event":"SRFP-Genesis.getMultimedia","Type":"RES","RawData":"girl.jpg","Data":{"Size":"null","Modified":"null"}}],"ProcessingTime":"0 ms"}} diff --git a/logTest/DESKTOP-G5SEAPD_SRFP_Genesis_201805210945.stat b/logTest/DESKTOP-G5SEAPD_SRFP_Genesis_201805210945.stat new file mode 100644 index 0000000..d005f90 --- /dev/null +++ b/logTest/DESKTOP-G5SEAPD_SRFP_Genesis_201805210945.stat @@ -0,0 +1,3 @@ +20180521 09:49:19|DESKTOP-G5SEAPD|SRFP_Genesis - stat: SRFP-Genesis Returned Unknown URL +20180521 09:49:19|DESKTOP-G5SEAPD|SRFP_Genesis - stat: SRFP-Genesis Received Unknown URL Request +20180521 09:49:19|DESKTOP-G5SEAPD|SRFP_Genesis - stat: SRFP-Genesis Received Unknown URL Request diff --git a/logTest/DESKTOP-G5SEAPD_SRFP_Genesis_201805210945.summary b/logTest/DESKTOP-G5SEAPD_SRFP_Genesis_201805210945.summary new file mode 100644 index 0000000..1f493d3 --- /dev/null +++ b/logTest/DESKTOP-G5SEAPD_SRFP_Genesis_201805210945.summary @@ -0,0 +1 @@ +20180521 09:49:19|DESKTOP-G5SEAPD|SRFP_Genesis - summary: 20180521 09:49:19|null||getMultimedia|null|40400|Unknown URL|[client; getMultimedia(1); [40400; Unknown URL(1)]]|20180521 09:49:19|0 diff --git a/logTest/DESKTOP-G5SEAPD_SRFP_Genesis_201805211000.detail b/logTest/DESKTOP-G5SEAPD_SRFP_Genesis_201805211000.detail new file mode 100644 index 0000000..3cd0f15 --- /dev/null +++ b/logTest/DESKTOP-G5SEAPD_SRFP_Genesis_201805211000.detail @@ -0,0 +1 @@ +20180521 10:02:46|DESKTOP-G5SEAPD|SRFP_Genesis|{"SRFP-Genesis.Details":{"Session":"1","Scenario":"getMultimedia","Identity":"","InputTimeStamp":"20180521 10:02:46.944","Input":[{"Event":"SRFP-Genesis.getMultimedia","Type":"REQ","RawData":"http://localhost:3000/mulitiMedia.json?name=girl.jpg&type=image&commandId=1","Data":{"Name":"girl.jpg","Type":"image","CommandId":"1"}}],"OutputTimeStamp":"20180521 10:02:46.944","Output":[{"Event":"SRFP-Genesis.getMultimedia","Type":"RES","RawData":"girl.jpg","Data":{"Size":"null","Modified":"null"}}],"ProcessingTime":"0 ms"}} diff --git a/logTest/DESKTOP-G5SEAPD_SRFP_Genesis_201805211000.stat b/logTest/DESKTOP-G5SEAPD_SRFP_Genesis_201805211000.stat new file mode 100644 index 0000000..2ba71b0 --- /dev/null +++ b/logTest/DESKTOP-G5SEAPD_SRFP_Genesis_201805211000.stat @@ -0,0 +1,3 @@ +20180521 10:02:46|DESKTOP-G5SEAPD|SRFP_Genesis|SRFP-Genesis Received Unknown URL Request +20180521 10:02:46|DESKTOP-G5SEAPD|SRFP_Genesis|SRFP-Genesis Returned Unknown URL +20180521 10:02:46|DESKTOP-G5SEAPD|SRFP_Genesis|SRFP-Genesis Received Unknown URL Request diff --git a/logTest/DESKTOP-G5SEAPD_SRFP_Genesis_201805211000.summary b/logTest/DESKTOP-G5SEAPD_SRFP_Genesis_201805211000.summary new file mode 100644 index 0000000..ba95dd9 --- /dev/null +++ b/logTest/DESKTOP-G5SEAPD_SRFP_Genesis_201805211000.summary @@ -0,0 +1 @@ +20180521 10:02:46|null||getMultimedia|null|40400|Unknown URL|[client; getMultimedia(1); [40400; Unknown URL(1)]]|20180521 10:02:46|1 diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..8eda2af --- /dev/null +++ b/package-lock.json @@ -0,0 +1,1109 @@ +{ + "name": "srfpgenesis", + "version": "0.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "accepts": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.4.tgz", + "integrity": "sha1-hiRnWMfdbSGmR0/whKR0DsBesh8=", + "requires": { + "mime-types": "2.1.17", + "negotiator": "0.6.1" + } + }, + "acorn": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-2.7.0.tgz", + "integrity": "sha1-q259nYhqrKiwhbwzEreaGYQz8Oc=" + }, + "acorn-globals": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-1.0.9.tgz", + "integrity": "sha1-VbtemGkVB7dFedBRNBMhfDgMVM8=", + "requires": { + "acorn": "2.7.0" + } + }, + "ajv": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "requires": { + "co": "4.6.0", + "fast-deep-equal": "1.1.0", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.3.1" + } + }, + "align-text": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", + "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", + "requires": { + "kind-of": "3.2.2", + "longest": "1.0.1", + "repeat-string": "1.6.1" + } + }, + "amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=" + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + }, + "asap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/asap/-/asap-1.0.0.tgz", + "integrity": "sha1-sqRdpf36ILBJb8N2jMJ8EvqRan0=" + }, + "asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "requires": { + "safer-buffer": "2.1.2" + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" + }, + "aws4": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", + "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" + }, + "basic-auth": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.0.tgz", + "integrity": "sha1-AV2z81PgLlY3d1X5YnQuiYHnu7o=", + "requires": { + "safe-buffer": "5.1.1" + } + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "optional": true, + "requires": { + "tweetnacl": "0.14.5" + } + }, + "body-parser": { + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz", + "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=", + "requires": { + "bytes": "3.0.0", + "content-type": "1.0.4", + "debug": "2.6.9", + "depd": "1.1.2", + "http-errors": "1.6.2", + "iconv-lite": "0.4.19", + "on-finished": "2.3.0", + "qs": "6.5.1", + "raw-body": "2.3.2", + "type-is": "1.6.15" + } + }, + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" + }, + "camelcase": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=" + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + }, + "center-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", + "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", + "requires": { + "align-text": "0.1.4", + "lazy-cache": "1.0.4" + } + }, + "character-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-1.2.1.tgz", + "integrity": "sha1-wN3kqxgnE7kZuXCVmhI+zBow/NY=" + }, + "clean-css": { + "version": "3.4.28", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-3.4.28.tgz", + "integrity": "sha1-vxlF6C/ICPVWlebd6uwBQA79A/8=", + "requires": { + "commander": "2.8.1", + "source-map": "0.4.4" + }, + "dependencies": { + "commander": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz", + "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=", + "requires": { + "graceful-readlink": "1.0.1" + } + } + } + }, + "cliui": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", + "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "requires": { + "center-align": "0.1.3", + "right-align": "0.1.3", + "wordwrap": "0.0.2" + }, + "dependencies": { + "wordwrap": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=" + } + } + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" + }, + "combined-stream": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", + "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", + "requires": { + "delayed-stream": "1.0.0" + } + }, + "commander": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.6.0.tgz", + "integrity": "sha1-nfflL7Kgyw+4kFjugMMQQiXzfh0=" + }, + "constantinople": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-3.0.2.tgz", + "integrity": "sha1-S5RdmTeQe82Y7ldRIsOBdRZUQUE=", + "requires": { + "acorn": "2.7.0" + } + }, + "content-disposition": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", + "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + }, + "cookie": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" + }, + "cookie-parser": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.3.tgz", + "integrity": "sha1-D+MfoZ0AC5X0qt8fU/3CuKIDuqU=", + "requires": { + "cookie": "0.3.1", + "cookie-signature": "1.0.6" + } + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "css": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/css/-/css-1.0.8.tgz", + "integrity": "sha1-k4aBHKgrzMnuf7WnMrHioxfIo+c=", + "requires": { + "css-parse": "1.0.4", + "css-stringify": "1.0.5" + } + }, + "css-parse": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/css-parse/-/css-parse-1.0.4.tgz", + "integrity": "sha1-OLBQP7+dqfVOnB29pg4UXHcRe90=" + }, + "css-stringify": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/css-stringify/-/css-stringify-1.0.5.tgz", + "integrity": "sha1-sNBClG2ylTu50pKQCmy19tASIDE=" + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "requires": { + "assert-plus": "1.0.0" + } + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "easysoap": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/easysoap/-/easysoap-2.0.1.tgz", + "integrity": "sha512-pMLbaDcR3BGVy94yTEyZbsY7OXKm4xmM5FLy+bOz1mYSNt2drNOQSuj7bim2WGiJwoE648wtqa8wHnZbNjuFQw==", + "requires": { + "request": "2.87.0", + "underscore": "1.9.1", + "wsdlrdr": "0.4.0", + "xmldoc": "1.1.2" + } + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "optional": true, + "requires": { + "jsbn": "0.1.1", + "safer-buffer": "2.1.2" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + }, + "express": { + "version": "4.15.5", + "resolved": "https://registry.npmjs.org/express/-/express-4.15.5.tgz", + "integrity": "sha1-ZwI1ypWYiQpa6BcLg9tyK4Qu2Sc=", + "requires": { + "accepts": "1.3.4", + "array-flatten": "1.1.1", + "content-disposition": "0.5.2", + "content-type": "1.0.4", + "cookie": "0.3.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "1.1.2", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "etag": "1.8.1", + "finalhandler": "1.0.6", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "1.1.2", + "on-finished": "2.3.0", + "parseurl": "1.3.2", + "path-to-regexp": "0.1.7", + "proxy-addr": "1.1.5", + "qs": "6.5.0", + "range-parser": "1.2.0", + "send": "0.15.6", + "serve-static": "1.12.6", + "setprototypeof": "1.0.3", + "statuses": "1.3.1", + "type-is": "1.6.15", + "utils-merge": "1.0.0", + "vary": "1.1.2" + }, + "dependencies": { + "qs": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.0.tgz", + "integrity": "sha512-fjVFjW9yhqMhVGwRExCXLhJKrLlkYSaxNWdyc9rmHlrVZbk35YHH312dFd7191uQeXkI3mKLZTIbSvIeFwFemg==" + }, + "statuses": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", + "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=" + } + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" + }, + "fast-deep-equal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=" + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" + }, + "finalhandler": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.0.6.tgz", + "integrity": "sha1-AHrqM9Gk0+QgF/YkhIrVjSEvgU8=", + "requires": { + "debug": "2.6.9", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "on-finished": "2.3.0", + "parseurl": "1.3.2", + "statuses": "1.3.1", + "unpipe": "1.0.0" + }, + "dependencies": { + "statuses": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", + "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=" + } + } + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" + }, + "form-data": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", + "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.6", + "mime-types": "2.1.17" + } + }, + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "requires": { + "assert-plus": "1.0.0" + } + }, + "graceful-readlink": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", + "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=" + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" + }, + "har-validator": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", + "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", + "requires": { + "ajv": "5.5.2", + "har-schema": "2.0.0" + } + }, + "http-errors": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", + "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", + "requires": { + "depd": "1.1.1", + "inherits": "2.0.3", + "setprototypeof": "1.0.3", + "statuses": "1.4.0" + }, + "dependencies": { + "depd": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", + "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=" + } + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "requires": { + "assert-plus": "1.0.0", + "jsprim": "1.4.1", + "sshpk": "1.14.2" + } + }, + "iconv-lite": { + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", + "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==" + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "ipaddr.js": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.4.0.tgz", + "integrity": "sha1-KWrKh4qCGBbluF0KKFqZvP9FgvA=" + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=" + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + }, + "jade": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/jade/-/jade-1.11.0.tgz", + "integrity": "sha1-nIDlOMEtP7lcjZu5VZ+gzAQEBf0=", + "requires": { + "character-parser": "1.2.1", + "clean-css": "3.4.28", + "commander": "2.6.0", + "constantinople": "3.0.2", + "jstransformer": "0.0.2", + "mkdirp": "0.5.1", + "transformers": "2.1.0", + "uglify-js": "2.8.29", + "void-elements": "2.0.1", + "with": "4.0.3" + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "optional": true + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" + }, + "json-schema-traverse": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=" + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "jstransformer": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-0.0.2.tgz", + "integrity": "sha1-eq4pqQPRls+glz2IXT5HlH7Ndqs=", + "requires": { + "is-promise": "2.1.0", + "promise": "6.1.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "1.1.6" + } + }, + "lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=" + }, + "longest": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", + "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=" + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + }, + "mime": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz", + "integrity": "sha1-EV+eO2s9rylZmDyzjxSaLUDrXVM=" + }, + "mime-db": { + "version": "1.30.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz", + "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=" + }, + "mime-types": { + "version": "2.1.17", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz", + "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=", + "requires": { + "mime-db": "1.30.0" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "requires": { + "minimist": "0.0.8" + } + }, + "morgan": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.9.0.tgz", + "integrity": "sha1-0B+mxlhZt2/PMbPLU6OCGjEdgFE=", + "requires": { + "basic-auth": "2.0.0", + "debug": "2.6.9", + "depd": "1.1.2", + "on-finished": "2.3.0", + "on-headers": "1.0.1" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "negotiator": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", + "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" + }, + "oauth-sign": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=" + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz", + "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=" + }, + "optimist": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.3.7.tgz", + "integrity": "sha1-yQlBrVnkJzMokjB00s8ufLxuwNk=", + "requires": { + "wordwrap": "0.0.3" + } + }, + "parseurl": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", + "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=" + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + }, + "promise": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/promise/-/promise-6.1.0.tgz", + "integrity": "sha1-LOcp9rlLRcJoka0GAsXJDgTG7vY=", + "requires": { + "asap": "1.0.0" + } + }, + "proxy-addr": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-1.1.5.tgz", + "integrity": "sha1-ccDuOxAt4/IC87ZPYI0XP8uhqRg=", + "requires": { + "forwarded": "0.1.2", + "ipaddr.js": "1.4.0" + } + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + }, + "qs": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", + "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==" + }, + "range-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" + }, + "raw-body": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz", + "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=", + "requires": { + "bytes": "3.0.0", + "http-errors": "1.6.2", + "iconv-lite": "0.4.19", + "unpipe": "1.0.0" + } + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" + }, + "request": { + "version": "2.87.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.87.0.tgz", + "integrity": "sha512-fcogkm7Az5bsS6Sl0sibkbhcKsnyon/jV1kF3ajGmF0c8HrttdKTPRT9hieOaQHA5HEq6r8OyWOo/o781C1tNw==", + "requires": { + "aws-sign2": "0.7.0", + "aws4": "1.8.0", + "caseless": "0.12.0", + "combined-stream": "1.0.6", + "extend": "3.0.2", + "forever-agent": "0.6.1", + "form-data": "2.3.2", + "har-validator": "5.0.3", + "http-signature": "1.2.0", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.17", + "oauth-sign": "0.8.2", + "performance-now": "2.1.0", + "qs": "6.5.1", + "safe-buffer": "5.1.1", + "tough-cookie": "2.3.4", + "tunnel-agent": "0.6.0", + "uuid": "3.3.2" + } + }, + "right-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", + "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", + "requires": { + "align-text": "0.1.4" + } + }, + "safe-buffer": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, + "send": { + "version": "0.15.6", + "resolved": "https://registry.npmjs.org/send/-/send-0.15.6.tgz", + "integrity": "sha1-IPI6nJJbdiq4JwX+L52yUqzkfjQ=", + "requires": { + "debug": "2.6.9", + "depd": "1.1.2", + "destroy": "1.0.4", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "etag": "1.8.1", + "fresh": "0.5.2", + "http-errors": "1.6.2", + "mime": "1.3.4", + "ms": "2.0.0", + "on-finished": "2.3.0", + "range-parser": "1.2.0", + "statuses": "1.3.1" + }, + "dependencies": { + "statuses": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", + "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=" + } + } + }, + "serve-favicon": { + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/serve-favicon/-/serve-favicon-2.4.5.tgz", + "integrity": "sha512-s7F8h2NrslMkG50KxvlGdj+ApSwaLex0vexuJ9iFf3GLTIp1ph/l1qZvRe9T9TJEYZgmq72ZwJ2VYiAEtChknw==", + "requires": { + "etag": "1.8.1", + "fresh": "0.5.2", + "ms": "2.0.0", + "parseurl": "1.3.2", + "safe-buffer": "5.1.1" + } + }, + "serve-static": { + "version": "1.12.6", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.12.6.tgz", + "integrity": "sha1-uXN3P2NEmTTaVOW+ul4x2fQhFXc=", + "requires": { + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "parseurl": "1.3.2", + "send": "0.15.6" + } + }, + "setprototypeof": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", + "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=" + }, + "source-map": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "requires": { + "amdefine": "1.0.1" + } + }, + "sshpk": { + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.2.tgz", + "integrity": "sha1-xvxhZIo9nE52T9P8306hBeSSupg=", + "requires": { + "asn1": "0.2.4", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.2", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.2", + "getpass": "0.1.7", + "jsbn": "0.1.1", + "safer-buffer": "2.1.2", + "tweetnacl": "0.14.5" + } + }, + "statuses": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" + }, + "tough-cookie": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", + "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", + "requires": { + "punycode": "1.4.1" + } + }, + "transformers": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/transformers/-/transformers-2.1.0.tgz", + "integrity": "sha1-XSPLNVYd2F3Gf7hIIwm0fVPM6ac=", + "requires": { + "css": "1.0.8", + "promise": "2.0.0", + "uglify-js": "2.2.5" + }, + "dependencies": { + "is-promise": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-1.0.1.tgz", + "integrity": "sha1-MVc3YcBX4zwukaq56W2gjO++duU=" + }, + "promise": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/promise/-/promise-2.0.0.tgz", + "integrity": "sha1-RmSKqdYFr10ucMMCS/WUNtoCuA4=", + "requires": { + "is-promise": "1.0.1" + } + }, + "source-map": { + "version": "0.1.43", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", + "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", + "requires": { + "amdefine": "1.0.1" + } + }, + "uglify-js": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.2.5.tgz", + "integrity": "sha1-puAqcNg5eSuXgEiLe4sYTAlcmcc=", + "requires": { + "optimist": "0.3.7", + "source-map": "0.1.43" + } + } + } + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "requires": { + "safe-buffer": "5.1.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "optional": true + }, + "type-is": { + "version": "1.6.15", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.15.tgz", + "integrity": "sha1-yrEPtJCeRByChC6v4a1kbIGARBA=", + "requires": { + "media-typer": "0.3.0", + "mime-types": "2.1.17" + } + }, + "uglify-js": { + "version": "2.8.29", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", + "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", + "requires": { + "source-map": "0.5.7", + "uglify-to-browserify": "1.0.2", + "yargs": "3.10.0" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + } + } + }, + "uglify-to-browserify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", + "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", + "optional": true + }, + "underscore": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz", + "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==" + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + }, + "utils-merge": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.0.tgz", + "integrity": "sha1-ApT7kiu5N1FTVBxPcJYjHyh8ivg=" + }, + "uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "requires": { + "assert-plus": "1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "1.3.0" + } + }, + "void-elements": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", + "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=" + }, + "window-size": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", + "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=" + }, + "with": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/with/-/with-4.0.3.tgz", + "integrity": "sha1-7v0VTp550sjTQXtkeo8U2f7M4U4=", + "requires": { + "acorn": "1.2.2", + "acorn-globals": "1.0.9" + }, + "dependencies": { + "acorn": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-1.2.2.tgz", + "integrity": "sha1-yM4n3grMdtiW0rH6099YjZ6C8BQ=" + } + } + }, + "wordwrap": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=" + }, + "wsdlrdr": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/wsdlrdr/-/wsdlrdr-0.4.0.tgz", + "integrity": "sha512-9JZLfnxRx4j8nABatZwYt+DN5p0/4NW5LAIk4oac3rt6sdn9O2pxsoHVrgvk8hPrKya0lw1Ql30sdKzNn4hSWg==", + "requires": { + "request": "2.87.0", + "xmldoc": "1.1.2" + } + }, + "xmldoc": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/xmldoc/-/xmldoc-1.1.2.tgz", + "integrity": "sha512-ruPC/fyPNck2BD1dpz0AZZyrEwMOrWTO5lDdIXS91rs3wtm4j+T8Rp2o+zoOYkkAxJTZRPOSnOGei1egoRmKMQ==", + "requires": { + "sax": "1.2.4" + } + }, + "yargs": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", + "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "requires": { + "camelcase": "1.2.1", + "cliui": "2.1.0", + "decamelize": "1.2.0", + "window-size": "0.1.0" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..0078b82 --- /dev/null +++ b/package.json @@ -0,0 +1,18 @@ +{ + "name": "srfpgenesis", + "version": "0.0.0", + "private": true, + "scripts": { + "start": "node ./bin/www" + }, + "dependencies": { + "body-parser": "~1.18.2", + "cookie-parser": "~1.4.3", + "debug": "~2.6.9", + "easysoap": "^2.0.1", + "express": "^4.15.5", + "jade": "~1.11.0", + "morgan": "~1.9.0", + "serve-favicon": "~2.4.5" + } +} diff --git a/public/image/image.jpg b/public/image/image.jpg new file mode 100644 index 0000000..fd15f5f Binary files /dev/null and b/public/image/image.jpg differ diff --git a/public/stylesheets/style.css b/public/stylesheets/style.css new file mode 100644 index 0000000..9453385 --- /dev/null +++ b/public/stylesheets/style.css @@ -0,0 +1,8 @@ +body { + padding: 50px; + font: 14px "Lucida Grande", Helvetica, Arial, sans-serif; +} + +a { + color: #00B7FF; +} diff --git a/routes/CMF/customerMembership.js b/routes/CMF/customerMembership.js new file mode 100644 index 0000000..39d7aa6 --- /dev/null +++ b/routes/CMF/customerMembership.js @@ -0,0 +1,9 @@ +var express = require('express'); +var router = express.Router(); + +/* GET users listing. */ +router.get('/', function(req, res, next) { + res.send('customer membership'); +}); + +module.exports = router; diff --git a/routes/CMF/index.js b/routes/CMF/index.js new file mode 100644 index 0000000..c1b7b27 --- /dev/null +++ b/routes/CMF/index.js @@ -0,0 +1,11 @@ +let express = require('express'); +let router = express.Router(); + +// load controllers +const vizCard = require('./vizCard'); +const customerMembership = require('./customerMembership'); + +router.use('/vizCard.json', vizCard); +router.use('/customerMembership.json', customerMembership); + +module.exports = router; \ No newline at end of file diff --git a/routes/CMF/vizCard.js b/routes/CMF/vizCard.js new file mode 100644 index 0000000..a076869 --- /dev/null +++ b/routes/CMF/vizCard.js @@ -0,0 +1,41 @@ +'use strict'; +var express = require('express'); +var router = express.Router(); +const EasySoap = require('easysoap'); + +/* GET users listing. */ +router.get('/', function(req, res, next) { + + // define soap params + const params = { + host: 'www.sample.com', + path: '/path/soap/', + + // set soap headers (optional) + headers: [{ + 'name' : 'item_name', + 'value' : 'item_value', + 'namespace': 'item_namespace' + }] + } + + /* + * create the client + */ + var soapClient = EasySoap(params); + + console.log(soapClient); + + /* + * get all available functions + */ + soapClient.getAllFunctions() + .then((functionArray) => { console.log(functionArray); }) + .catch((err) => { throw new Error(err); }); + + + res.send('viz card id'); + +}); + +module.exports = router; diff --git a/routes/users.js b/routes/users.js new file mode 100644 index 0000000..623e430 --- /dev/null +++ b/routes/users.js @@ -0,0 +1,9 @@ +var express = require('express'); +var router = express.Router(); + +/* GET users listing. */ +router.get('/', function(req, res, next) { + res.send('respond with a resource'); +}); + +module.exports = router; diff --git a/srfp_genesis.js b/srfp_genesis.js new file mode 100644 index 0000000..f4e2b63 --- /dev/null +++ b/srfp_genesis.js @@ -0,0 +1,323 @@ +var express = require('express'); +var path = require('path'); +var app = express(); +var fs = require('fs'); +var logger = require('./config/logger'); +var config = require('./config/config'); + +function checkReq(req) { + var regex_filetype = /^.*\.(jpg|jpeg|png|mp3|mp4|m4a)$/ig; + var regex_datetime = /(Mon|Tue|Wed|Thu|Fri|Sat|Sun),\s\d{1,2}\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s\d{4}\s([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]\sGMT$/g; + var regex_commandId = /^\d+$/g; + + var reqModDate = req.get('If-Modified-Since'); + var errorCase = null; + // logger.error('>>>>>>>>> ' + req.url); + + if (reqModDate != null) { + // logger.error('Req Header Not null'); + if (!regex_datetime.test(reqModDate)) { + logger.error('[invalid] date format: ' + reqModDate); + errorCase = 'req.If-Modified-Since=' + reqModDate; + + var resc = '40300'; + var desc = 'Missing or invalid parameter'; + var prompt = '{"prompt":{"resultCode":"' + resc + '","developerMessage":"' + desc + '"}}'; + var missingInvalid = errorCase; + return [resc, desc, prompt, missingInvalid]; + } + } + + if (req.query.name && req.query.type && req.query.commandId) { + if (regex_filetype.test(req.query.name)) { + return true; + } + } + + if (!req.query.name) { + logger.error('[missing or invalid]: name'); + errorCase = 'req.name=' + req.query.name; + } else if (!req.query.type) { + logger.error('[missing or invalid]: type'); + errorCase = 'req.type=' + req.query.type; + } else if (!req.query.commandId) { + logger.error('[missing or invalid]: commandId'); + errorCase = 'req.commandId=' + req.query.commandId; + } + + var resc = '40300'; + var desc = 'Missing or invalid parameter'; + var prompt = '{"prompt":{"resultCode":"' + resc + '","developerMessage":"' + desc + '"}}'; + var missingInvalid = errorCase; + return [resc, desc, prompt, missingInvalid]; + +}; + +function checkFile(req) { + var path; + if (req.query.type === 'audio') { + path = config.mediaPath.audio + req.query.name; + } else if (req.query.type === 'video') { + path = config.mediaPath.video + req.query.name; + } else if (req.query.type === 'image') { + path = config.mediaPath.image + req.query.name; + } else { + var resc = '40401'; + var desc = 'File not found'; + var prompt = '{"prompt":{"resultCode":"' + resc + '","developerMessage":"' + desc + '"}}'; + var missingInvalid = 'req.name=' + req.query.name; + return [resc, desc, prompt, missingInvalid]; + } + + if (fs.existsSync(path)) { + try { + fs.accessSync(path, fs.constants.R_OK); + var file_name = req.query.name; + return [true, file_name, path]; + } catch (err) { + var resc = '40101'; + var desc = 'Access denied'; + var prompt = '{"prompt":{"resultCode":"' + resc + '","developerMessage":"' + desc + '"}}'; + var missingInvalid = 'req.name=' + req.query.name; + return [resc, desc, prompt, missingInvalid]; + } + } else { + var resc = '40401'; + var desc = 'File not found'; + var prompt = '{"prompt":{"resultCode":"' + resc + '","developerMessage":"' + desc + '"}}'; + var missingInvalid = 'req.name=' + req.query.name; + return [resc, desc, prompt, missingInvalid]; + } +}; + +function checkHeader(req, path_file) { + try { + // var reqModDate = req.headers['If-Modified-Since']; + var reqModDate = req.get('If-Modified-Since'); + var stats = fs.statSync(path_file); + var mtime = stats.mtime; + var size = stats['size']; + + if (reqModDate != null) { + reqModDate = new Date(reqModDate); + + logger.info('[If-Modified-Since]: ' + reqModDate.toUTCString()); + logger.info('[Modified-File] : ' + mtime.toUTCString()); + + if (reqModDate.toUTCString() == mtime.toUTCString()) { + logger.info('[Req Header]: If-Modified-Since == Modified File'); + return [304, mtime, size]; + } else { + logger.info('[Req Header]: If-Modified-Since != Modified File'); + return [200, mtime, size]; + } + } else { + logger.info('[Req Header]: No-header: If-Modified-Since'); + logger.info('[Modified-File]: ' + mtime.toUTCString()); + return [200, mtime, size]; + } + } catch (error) { + logger.error('[Error check header!!!]'); + return [200, mtime, size]; + } +}; + +function writeApplog(req) { + + logger.info('[Start getMultimedia Validate Parameter]: ' + 'name: ' + req.query.name + ', type=' + req.query.type + ', commandId=' + req.query.commandId); + logger.info('[incommigHeader: If-Modified-Since]: ' + req.get('If-Modified-Since')); + logger.info('[incomming url]: ' + req.protocol + '://' + req.get('host') + req.originalUrl); +} + +app.listen(8080, function() { + logger.info('============================='); + logger.info('SRFP-Genesis on port 8080!'); +}); + +app.get('/multiMedia.json', function(req, res) { + var summaryLog; + var request = checkReq(req); + var fileReq = checkFile(req); + // var headerReq = checkHeader(req, fileReq[2]); + + var session = req.query.commandId; + var cmd = 'getMultimedia'; + var identity = ''; + var reqfile = req.query.name; + + writeApplog(req); + + // [Check Request] + if (request == true && fileReq[0] == true) { + var resc = '20000'; + var desc = 'Success'; + + var headerReq = checkHeader(req, fileReq[2]); + var statusCode = headerReq[0]; + var mtime = headerReq[1]; + var size = headerReq[2]; + + summaryLog = logger.summary(session, cmd, identity, resc, desc); + summaryLog.addSuccessBlock('client', cmd, 'null', 'Success'); + summaryLog.addSuccessBlock('null', 'getFile', resc, desc); + + logger.statRecv(cmd, resc); + logger.statRetn(cmd, resc); + logger.detail(req, cmd, size, mtime.toUTCString()); + + var content_type; + var regex_image = /^.*\.(jpg|jpeg)$/ig; + var regex_png = /^.*\.(png)$/ig; + var regex_mp3 = /^.*\.(mp3)$/ig; + var regex_mp4 = /^.*\.(mp4)$/ig; + var regex_m4a = /^.*\.(m4a)$/ig; + + if (regex_image.test(checkFile(req)[1])) { + content_type = 'image/jpeg'; + } else if (regex_png.test(checkFile(req)[1])) { + content_type = 'image/png'; + } else if (regex_mp3.test(checkFile(req)[1])) { + content_type = 'audio/mpeg'; + } else if (regex_mp4.test(checkFile(req)[1])) { + content_type = 'video/mp4'; + } else if (regex_m4a.test(checkFile(req)[1])) { + content_type = 'audio/m4a'; + } + + logger.info('[Path File]: ' + fileReq[2]); + + if (statusCode == 200) { + logger.info('[statusCode]: 200'); + var resc = '20000'; + var desc = 'Success'; + + logger.info('[resultCode]: ' + resc + ', [developerMessage]: ' + desc); + + res.writeHead(200, { + "Last-Modified": mtime.toUTCString(), + "Content-Disposition": 'attachment; filename="' + checkFile(req)[1] + '"', + "Content-Type": content_type, + "Content-Length": size + }); + fs.createReadStream(checkFile(req)[2]).pipe(res); + // res.write(img); + // res.end(); + + } + // return 304! + else { + logger.info('[statusCode]: 304'); + var resc = '20000'; + var desc = 'Success'; + + logger.info('[resultCode]: ' + resc + ', [developerMessage]: ' + desc); + + res.writeHead(304, { + // "Content-Disposition": 'attachment; filename="' + checkFile(req)[1] + '"', + "Content-Type": content_type, + "Content-Length": size + }); + res.end(); + + } + } else if (request == true && fileReq[0] != true) { + var status_code = fileReq[0].substring(0, 3); + + logger.error('[statusCode]: ' + status_code); + logger.error('[resultCode]: ' + fileReq[0] + ', [developerMessage]: ' + fileReq[1]); + + summaryLog = logger.summary(session, cmd, identity, fileReq[0], fileReq[1]); + summaryLog.addSuccessBlock('client', cmd, 'null', 'Success'); + summaryLog.addErrorBlock('null', 'getFile', fileReq[0], fileReq[1], fileReq[3]); + + logger.statRecv(cmd, fileReq[0]); + logger.statRetn(cmd, fileReq[0]); + logger.detail(req, cmd, null, null); + + res.writeHead(status_code, { + // "Content-Disposition": 'attachment; filename="' + req.query.name + '"', + "Content-Type": 'application/json' + }); + res.write(fileReq[2]); + res.end(); + + } else if (request != true) { + var status_code = request[0].substring(0, 3); + + logger.error('[statusCode]: ' + status_code); + logger.error('[resultCode]: ' + request[0] + ', [developerMessage]: ' + request[1]); + + summaryLog = logger.summary(session, cmd, identity, request[0], request[1]); + summaryLog.addErrorBlock('client', cmd, request[0], request[1], request[3]); + + logger.statRecv(cmd, request[0]); + logger.statRetn(cmd, request[0]); + logger.alarm(cmd, request[0]); + logger.detail(req, cmd, null, null); + + res.writeHead(status_code, { + // "Content-Disposition": 'attachment; filename="' + req.query.name + '"', + "Content-Type": 'application/json' + }); + res.write(request[2]); + res.end(); + + } else { + var resc = '50000'; + var desc = 'System error'; + var prompt = '{"prompt":{"resultCode":"' + resc + '","developerMessage":"' + desc + '"}}';; + + logger.error('[statusCode]: 500'); + logger.error('[resultCode]: ' + resc + ', [developerMessage]: ' + desc); + + summaryLog = logger.summary(session, cmd, identity, resc, desc); + summaryLog.addErrorBlock('client', cmd, resc, desc, 'system_error'); + + logger.statRecv(cmd, resc); + logger.statRetn(cmd, resc); + logger.alarm(cmd, resc); + logger.detail(req, cmd, null, null); + + res.writeHead(500, { + // "Content-Disposition": 'attachment; filename="' + req.query.name + '"', + "Content-Type": 'application/json' + }); + res.write(prompt); + res.end(); + } + summaryLog.flush(); + logger.info('============================='); +}); + +app.use(function(req, res, next) { + writeApplog(req); + var resc = '40400'; + var desc = 'Unknown URL'; + var prompt = '{"prompt":{"resultCode":"' + resc + '","developerMessage":"' + desc + '"}}'; + + var session = 'null'; + var cmd = 'getMultimedia'; + var identity = 'null'; + + logger.error('[statusCode]: 404'); + logger.error('[resultCode]: ' + resc + ', [developerMessage]: ' + desc); + + logger.statRecv(cmd, resc); + logger.statRetn(cmd, resc); + logger.alarm(cmd, resc); + logger.detail(req, cmd, null, null); + + summaryLog = logger.summary(session, cmd, identity, resc, desc); + summaryLog.addErrorBlock('client', cmd, resc, desc, 'req.url=' + req.url); + summaryLog.flush(); + + + res.writeHead(404, { + // "Content-Disposition": 'attachment; filename="' + req.query.name + '"', + "Content-Type": 'application/json' + }); + res.write(prompt); + res.end(); + + logger.info('============================='); +}); diff --git a/srfp_genesis_backup.js b/srfp_genesis_backup.js new file mode 100644 index 0000000..231e3f3 --- /dev/null +++ b/srfp_genesis_backup.js @@ -0,0 +1,278 @@ +var express = require('express'); +var path = require('path'); +var app = express(); +var fs = require('fs'); +var util = require('util'); +var crypto = require('crypto'); +var http = require("http"); +var url = require("url"); +//var logger = require('./config/logger'); +var config = require('./config/config'); +var stat = require('./utils/SutisStat'); +var detail = require('./utils/SutisDetail'); +//var summaryLog = require('./utils/SutisLogSummary'); +var logger = require('./utils/SutisLogSummary'); + +function checkReq(req) { + var regex_filetype = /^.*\.(jpg|jpeg|png|mp3|mp4|m4a)$/ig; + var regex_datetime = /(Mon|Tue|Wed|Thu|Fri|Sat|Sun),\s\d{1,2}\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s\d{4}\s[0-2][0-3]:[0-5][0-9]:[0-5][0-9]\sGMT$/g; + + // var reqModDate = req.get('If-Modified-Since') + // logger.error('>>>>>>>>> ' + req.url); + + if (req.query.name != null && req.query.type != null && req.query.commandId != null) { + if (regex_filetype.test(req.query.name) == true) { + return true; + } + } + + var resc = '40300'; + var desc = 'Missing or invalid parameter'; + var prompt = '{"prompt":{"resultCode":"' + resc + '","developerMessage":"' + desc + '"}}'; + return [resc, desc, prompt]; + +}; + +function checkFile(req) { + var path; + if (req.query.type === 'audio') { + path = config.mediaPath.audio + req.query.name; + } else if (req.query.type === 'video') { + path = config.mediaPath.video + req.query.name; + } else if (req.query.type === 'image') { + path = config.mediaPath.image + req.query.name; + } else { + var resc = '40401'; + var desc = 'File not found'; + var prompt = '{"prompt":{"resultCode":"' + resc + '","developerMessage":"' + desc + '"}}';; + return [resc, desc, prompt]; + } + + if (fs.existsSync(path)) { + try { + fs.accessSync(path, fs.constants.R_OK); + var file_name = req.query.name; + return [true, file_name, path]; + } catch (err) { + var resc = '40101'; + var desc = 'Access denied'; + var prompt = '{"prompt":{"resultCode":"' + resc + '","developerMessage":"' + desc + '"}}';; + return [resc, desc, prompt]; + } + } else { + var resc = '40401'; + var desc = 'File not found'; + var prompt = '{"prompt":{"resultCode":"' + resc + '","developerMessage":"' + desc + '"}}';; + return [resc, desc, prompt]; + } +}; + +function checkHeader(req, path_file) { + try { + // var reqModDate = req.headers['If-Modified-Since']; + var reqModDate = req.get('If-Modified-Since') + var stats = fs.statSync(path_file); + var mtime = stats.mtime; + var size = stats['size']; + + if (reqModDate != null) { + reqModDate = new Date(reqModDate); + + logger.info('[If-Modified-Since]: ' + reqModDate.toUTCString()); + logger.info('[Modified-File] : ' + mtime.toUTCString()); + + if (reqModDate.toUTCString() == mtime.toUTCString()) { + logger.info('[Req Header]: If-Modified-Since == Modified File'); + return [304, mtime, size]; + } else { + logger.info('[Req Header]: If-Modified-Since != Modified File'); + return [200, mtime, size]; + } + } else { + logger.info('[Req Header]: No-header: If-Modified-Since'); + logger.info('[Modified-File]: ' + mtime.toUTCString()); + return [200, mtime, size]; + } + } catch (error) { + logger.error('[Error check header!!!]'); + return [200, mtime, size]; + } +}; + +function writeApplog(req) { + + logger.info('[Start getMultimedia Validate Parameter]: ' + 'name: ' + req.query.name + ', type=' + req.query.type + ', commandId=' + req.query.commandId); + logger.info('[incommigHeader: If-Modified-Since]: ' + req.get('If-Modified-Since')); + logger.info('[incomming url]: ' + req.protocol + '://' + req.get('host') + req.originalUrl); +} + +app.listen(3000, function() { + logger.info('============================='); + logger.info('SRFP-Genesis on port 3000!'); +}); + +app.get('/multiMedia.json', function(req, res) { + var sumaryLog; + var request = checkReq(req); + var fileReq = checkFile(req); + + var session = req.query.commandId; + var cmd = 'getMultimedia'; + var identiry = 'null'; + + writeApplog(req); + + // [Check Request] + if (request == true && fileReq[0] == true) { + var headerReq = checkHeader(req, fileReq[2]); + var statusCode = headerReq[0]; + var mtime = headerReq[1]; + var size = headerReq[2]; + + // logger.info('>>> Last-Modified: ' + mtime.toUTCString()); + + var content_type; + var regex_image = /^.*\.(jpg|jpeg)$/ig; + var regex_png = /^.*\.(png)$/ig; + var regex_mp3 = /^.*\.(mp3)$/ig; + var regex_mp4 = /^.*\.(mp4)$/ig; + var regex_m4a = /^.*\.(m4a)$/ig; + + if (regex_image.test(checkFile(req)[1])) { + content_type = 'image/jpeg'; + } else if (regex_png.test(checkFile(req)[1])) { + content_type = 'image/png'; + } else if (regex_mp3.test(checkFile(req)[1])) { + content_type = 'audio/mpeg'; + } else if (regex_mp4.test(checkFile(req)[1])) { + content_type = 'video/mp4'; + } else if (regex_m4a.test(checkFile(req)[1])) { + content_type = 'audio/m4a'; + } + + logger.info('[Path File]: ' + fileReq[2]); + + if (statusCode == 200) { + logger.info('[statusCode]: 200'); + var resc = '20000'; + var desc = 'Success'; + + logger.info('[resultCode]: ' + resc + ', [developerMessage]: ' + desc); + + sumaryLog = logger.summary(session, cmd, identiry); + sumaryLog.addSuccessBlock('client', cmd, resc, desc); + stat.recv(cmd, resc); + stat.retn(cmd, resc); + detail.write(req, cmd, size, mtime); + + res.writeHead(200, { + "Last-Modified": mtime.toUTCString(), + "Content-Disposition": 'attachment; filename="' + checkFile(req)[1] + '"', + "Content-Type": content_type, + "Content-Length": size + }); + fs.createReadStream(checkFile(req)[2]).pipe(res); + // res.write(img); + // res.end(); + + } + // return 304! + else { + logger.info('[statusCode]: 304'); + var resc = '20000'; + var desc = 'Success'; + + logger.info('[resultCode]: ' + resc + ', [developerMessage]: ' + desc); + + sumaryLog = logger.summary(session, cmd, identiry); + sumaryLog.addSuccessBlock('client', cmd, resc, desc); + stat.recv(cmd, resc); + stat.retn(cmd, resc); + detail.write(req, cmd, size, mtime); + + res.writeHead(304, { + // "Content-Disposition": 'attachment; filename="' + checkFile(req)[1] + '"', + "Content-Type": content_type, + "Content-Length": size + }); + res.end(); + + } + } else { + if (request != true) { + logger.error('[resultCode]: ' + request[0] + ', [developerMessage]: ' + request[1]); + sumaryLog = logger.summary(session, cmd, identiry); + sumaryLog.addErrorBlock('client', cmd, request[0], request[1]); + stat.recv(cmd, request[0]); + stat.retn(cmd, request[0]); + detail.write(req, cmd, size, mtime); + + res.writeHead(request[0].substring(0, 3), { + // "Content-Disposition": 'attachment; filename="' + req.query.name + '"', + "Content-Type": 'application/json' + }); + res.write(request[2]); + res.end(); + // res.send(); + + } else if (fileReq != true) { + + logger.error('[resultCode]: ' + fileReq[0] + ', [developerMessage]: ' + fileReq[1]); + sumaryLog = logger.summary(session, cmd, identiry); + sumaryLog.addErrorBlock('client', cmd, fileReq[0], fileReq[1]); + stat.recv(cmd, fileReq[0]); + stat.retn(cmd, fileReq[0]); + detail.write(req, cmd, size, mtime); + + res.writeHead(fileReq[0].substring(0, 3), { + // "Content-Disposition": 'attachment; filename="' + req.query.name + '"', + "Content-Type": 'application/json' + }); + res.write(fileReq[2]); + res.end(); + } else { + var resc = '50000'; + var desc = 'System error'; + var prompt = '{"prompt":{"resultCode":"' + resc + '","developerMessage":"' + desc + '"}}';; + + logger.error('[resultCode]: ' + resc + ', [developerMessage]: ' + desc); + sumaryLog = logger.summary(session, cmd, identiry); + sumaryLog.addErrorBlock('client', cmd, resc, desc); + stat.recv(cmd, resc); + stat.retn(cmd, resc); + detail.write(req, cmd, null, null); + + res.writeHead(500, { + // "Content-Disposition": 'attachment; filename="' + req.query.name + '"', + "Content-Type": 'application/json' + }); + res.write(prompt); + res.end(); + } + } + sumaryLog.flush(); + logger.info('============================='); +}); + +app.use(function(req, res, next) { + writeApplog(req); + var resc = '40400'; + var desc = 'Unknown URL'; + var prompt = '{"prompt":{"resultCode":"' + resc + '","developerMessage":"' + desc + '"}}'; + + var session = 'null'; + var cmd = 'getMultimedia'; + var identiry = 'null'; + + logger.error('[resultCode]: ' + resc + ', [developerMessage]: ' + desc); + sumaryLog = logger.summary(session, cmd, identiry); + sumaryLog.addErrorBlock('client', cmd, resc, desc); + stat.recv(cmd, resc); + stat.retn(cmd, resc); + detail.write(req, cmd, null, null); + sumaryLog.flush(); + + res.status(404).send(prompt); + + logger.info('============================='); +}); \ No newline at end of file diff --git a/srfp_genesis_backup_2.js b/srfp_genesis_backup_2.js new file mode 100644 index 0000000..623f227 --- /dev/null +++ b/srfp_genesis_backup_2.js @@ -0,0 +1,316 @@ +var express = require('express'); +var path = require('path'); +var app = express(); +var fs = require('fs'); +// var util = require('util'); +// var crypto = require('crypto'); +// var http = require("http"); +var url = require("url"); +var custom_log = require('./config/logger'); +var config = require('./config/config'); +var stat = require('./utils/SutisStat'); +var alarm = require('./utils/SutisAlarm'); +var detail = require('./utils/SutisDetail'); +var logger = require('./utils/SutisLogSummary'); + +function checkReq(req) { + var regex_filetype = /^.*\.(jpg|jpeg|png|mp3|mp4|m4a)$/ig; + var regex_datetime = /(Mon|Tue|Wed|Thu|Fri|Sat|Sun),\s\d{1,2}\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s\d{4}\s([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]\sGMT$/g; + var regex_commandId = /^\d+$/g; + + var reqModDate = req.get('If-Modified-Since'); + var errorCase = null; + // logger.error('>>>>>>>>> ' + req.url); + + if (reqModDate != null) { + // logger.error('Req Header Not null'); + if (!regex_datetime.test(reqModDate)) { + logger.error('[invalid] date format: ' + reqModDate); + errorCase = 'req.If-Modified-Since=' + reqModDate; + + var resc = '40300'; + var desc = 'Missing or invalid parameter'; + var prompt = '{"prompt":{"resultCode":"' + resc + '","developerMessage":"' + desc + '"}}'; + var missingInvalid = errorCase; + return [resc, desc, prompt, missingInvalid]; + } + } + + if (req.query.name && req.query.type && req.query.commandId) { + if (regex_filetype.test(req.query.name)) { + return true; + } + } + + if (!req.query.name) { + logger.error('[missing or invalid]: name'); + errorCase = 'req.name=' + req.query.name; + } else if (!req.query.type) { + logger.error('[missing or invalid]: type'); + errorCase = 'req.type=' + req.query.type; + } else if (!req.query.commandId) { + logger.error('[missing or invalid]: commandId'); + errorCase = 'req.commandId=' + req.query.commandId; + } + + var resc = '40300'; + var desc = 'Missing or invalid parameter'; + var prompt = '{"prompt":{"resultCode":"' + resc + '","developerMessage":"' + desc + '"}}'; + var missingInvalid = errorCase; + return [resc, desc, prompt, missingInvalid]; + +}; + +function checkFile(req) { + var path; + if (req.query.type === 'audio') { + path = config.mediaPath.audio + req.query.name; + } else if (req.query.type === 'video') { + path = config.mediaPath.video + req.query.name; + } else if (req.query.type === 'image') { + path = config.mediaPath.image + req.query.name; + } else { + var resc = '40401'; + var desc = 'File not found'; + var prompt = '{"prompt":{"resultCode":"' + resc + '","developerMessage":"' + desc + '"}}'; + var missingInvalid = 'req.name=' + req.query.name; + return [resc, desc, prompt, missingInvalid]; + } + + if (fs.existsSync(path)) { + try { + fs.accessSync(path, fs.constants.R_OK); + var file_name = req.query.name; + return [true, file_name, path]; + } catch (err) { + var resc = '40101'; + var desc = 'Access denied'; + var prompt = '{"prompt":{"resultCode":"' + resc + '","developerMessage":"' + desc + '"}}'; + var missingInvalid = 'req.name=' + req.query.name; + return [resc, desc, prompt, missingInvalid]; + } + } else { + var resc = '40401'; + var desc = 'File not found'; + var prompt = '{"prompt":{"resultCode":"' + resc + '","developerMessage":"' + desc + '"}}'; + var missingInvalid = 'req.name=' + req.query.name; + return [resc, desc, prompt, missingInvalid]; + } +}; + +function checkHeader(req, path_file) { + try { + // var reqModDate = req.headers['If-Modified-Since']; + var reqModDate = req.get('If-Modified-Since'); + var stats = fs.statSync(path_file); + var mtime = stats.mtime; + var size = stats['size']; + + if (reqModDate != null) { + reqModDate = new Date(reqModDate); + + logger.info('[If-Modified-Since]: ' + reqModDate.toUTCString()); + logger.info('[Modified-File] : ' + mtime.toUTCString()); + + if (reqModDate.toUTCString() == mtime.toUTCString()) { + logger.info('[Req Header]: If-Modified-Since == Modified File'); + return [304, mtime, size]; + } else { + logger.info('[Req Header]: If-Modified-Since != Modified File'); + return [200, mtime, size]; + } + } else { + logger.info('[Req Header]: No-header: If-Modified-Since'); + logger.info('[Modified-File]: ' + mtime.toUTCString()); + return [200, mtime, size]; + } + } catch (error) { + logger.error('[Error check header!!!]'); + return [200, mtime, size]; + } +}; + +function writeApplog(req) { + + logger.info('[Start getMultimedia Validate Parameter]: ' + 'name: ' + req.query.name + ', type=' + req.query.type + ', commandId=' + req.query.commandId); + logger.info('[incommigHeader: If-Modified-Since]: ' + req.get('If-Modified-Since')); + logger.info('[incomming url]: ' + req.protocol + '://' + req.get('host') + req.originalUrl); +} + +app.listen(3000, function () { + logger.info('============================='); + logger.info('SRFP-Genesis on port 3000!'); +}); + +app.get('/multiMedia.json', function (req, res) { + var sumaryLog; + var request = checkReq(req); + var fileReq = checkFile(req); + // var headerReq = checkHeader(req, fileReq[2]); + + var session = req.query.commandId; + var cmd = 'getMultimedia'; + var identity = ''; + var reqfile = req.query.name; + + writeApplog(req); + + // [Check Request] + if (request == true && fileReq[0] == true) { + var resc = '20000'; + var desc = 'Success'; + + var headerReq = checkHeader(req, fileReq[2]); + var statusCode = headerReq[0]; + var mtime = headerReq[1]; + var size = headerReq[2]; + + sumaryLog = logger.summary(session, cmd, identity, resc, desc); + sumaryLog.addSuccessBlock('client', cmd, 'null', 'Success'); + sumaryLog.addSuccessBlock('null', 'getFile', resc, desc); + stat.recv(cmd, resc); + stat.retn(cmd, resc); + detail.write(req, cmd, size, mtime.toUTCString()); + + var content_type; + var regex_image = /^.*\.(jpg|jpeg)$/ig; + var regex_png = /^.*\.(png)$/ig; + var regex_mp3 = /^.*\.(mp3)$/ig; + var regex_mp4 = /^.*\.(mp4)$/ig; + var regex_m4a = /^.*\.(m4a)$/ig; + + if (regex_image.test(checkFile(req)[1])) { + content_type = 'image/jpeg'; + } else if (regex_png.test(checkFile(req)[1])) { + content_type = 'image/png'; + } else if (regex_mp3.test(checkFile(req)[1])) { + content_type = 'audio/mpeg'; + } else if (regex_mp4.test(checkFile(req)[1])) { + content_type = 'video/mp4'; + } else if (regex_m4a.test(checkFile(req)[1])) { + content_type = 'audio/m4a'; + } + + logger.info('[Path File]: ' + fileReq[2]); + + if (statusCode == 200) { + logger.info('[statusCode]: 200'); + var resc = '20000'; + var desc = 'Success'; + + logger.info('[resultCode]: ' + resc + ', [developerMessage]: ' + desc); + + res.writeHead(200, { + "Last-Modified": mtime.toUTCString(), + "Content-Disposition": 'attachment; filename="' + checkFile(req)[1] + '"', + "Content-Type": content_type, + "Content-Length": size + }); + fs.createReadStream(checkFile(req)[2]).pipe(res); + // res.write(img); + // res.end(); + + } + // return 304! + else { + logger.info('[statusCode]: 304'); + var resc = '20000'; + var desc = 'Success'; + + logger.info('[resultCode]: ' + resc + ', [developerMessage]: ' + desc); + + res.writeHead(304, { + // "Content-Disposition": 'attachment; filename="' + checkFile(req)[1] + '"', + "Content-Type": content_type, + "Content-Length": size + }); + res.end(); + + } + } else if (request == true && fileReq[0] != true) { + sumaryLog = logger.summary(session, cmd, identity, fileReq[0], fileReq[1]); + sumaryLog.addSuccessBlock('client', cmd, 'null', 'Success'); + sumaryLog.addErrorBlock('null', 'getFile', fileReq[0], fileReq[1], fileReq[3]); + stat.recv(cmd, fileReq[0]); + stat.retn(cmd, fileReq[0]); + detail.write(req, cmd, null, null); + + } else if (request != true) { + var status_code = request[0].substring(0, 3); + logger.error('[statusCode]: ' + status_code); + logger.error('[resultCode]: ' + request[0] + ', [developerMessage]: ' + request[1]); + sumaryLog = logger.summary(session, cmd, identity, request[0], request[1]); + sumaryLog.addErrorBlock('client', cmd, request[0], request[1], request[3]); + stat.recv(cmd, request[0]); + stat.retn(cmd, request[0]); + alarm.recv(cmd, request[0]); + detail.write(req, cmd, null, null); + + res.writeHead(status_code, { + // "Content-Disposition": 'attachment; filename="' + req.query.name + '"', + "Content-Type": 'application/json' + }); + res.write(request[2]); + res.end(); + + + } else { + var resc = '50000'; + var desc = 'System error'; + var prompt = '{"prompt":{"resultCode":"' + resc + '","developerMessage":"' + desc + '"}}';; + + logger.error('[statusCode]: 500'); + logger.error('[resultCode]: ' + resc + ', [developerMessage]: ' + desc); + sumaryLog = logger.summary(session, cmd, identity, resc, desc); + sumaryLog.addErrorBlock('client', cmd, resc, desc, 'system_error'); + stat.recv(cmd, resc); + stat.retn(cmd, resc); + alarm.recv(cmd, resc); + detail.write(req, cmd, null, null); + + res.writeHead(500, { + // "Content-Disposition": 'attachment; filename="' + req.query.name + '"', + "Content-Type": 'application/json' + }); + res.write(prompt); + res.end(); + } + sumaryLog.flush(); + logger.info('============================='); +}); + +app.use(function (req, res, next) { + writeApplog(req); + var resc = '40400'; + var desc = 'Unknown URL'; + var prompt = '{"prompt":{"resultCode":"' + resc + '","developerMessage":"' + desc + '"}}'; + + var session = 'null'; + var cmd = 'getMultimedia'; + var identity = 'null'; + + var summaryLog; + + custom_log.error('[statusCode]: 404'); + custom_log.error('[resultCode]: ' + resc + ', [developerMessage]: ' + desc); + + + custom_log.statRecv(cmd, resc); + custom_log.statRetn(cmd, resc); + custom_log.alarm(cmd, resc); + + summaryLog = custom_log.summaryLog(session, cmd, identity, resc, desc); + summaryLog.addErrorBlock('client', cmd, resc, desc, 'req.url=' + req.url); + summaryLog.flush(); + + custom_log.detail(req, cmd, null, null); + + res.writeHead(404, { + "Content-Type": 'application/json' + }); + res.write(prompt); + res.end(); + + // logger.info('============================='); + custom_log.info('============================='); +}); diff --git a/utils/SutisAlarm.js b/utils/SutisAlarm.js new file mode 100644 index 0000000..3d35c49 --- /dev/null +++ b/utils/SutisAlarm.js @@ -0,0 +1,35 @@ +'use strict'; +var logger = require('./SutisLogSummary'); +var alarm ={}; +var nodeName = 'SRFP-Genesis'; +// var statTbl = require('../config/config'); + +alarm.recv=function(cmd, errCode){ + + var alarmName = nodeName; + if (errCode == 40400) { + alarmName = alarmName + ' Received Unknown URL Request'; + }else if (errCode == 40300) { + alarmName = alarmName + ' Received Bad '+ cmd + ' Request'; + } + else{ + // statName = statName + ' Received ' + cmd + ' err ' + statDesc; + } + logger.alarm(alarmName); +}; + +// stat.retn=function(cmd, errCode){ + +// var statName = nodeName; +// if(errCode == 20000){ +// statName = statName + ' Returned ' + cmd + ' Success'; +// } else if (errCode == 40400) { +// statName = statName + ' Returned Unknown URL'; +// } else if (errCode == 40300 || errCode == 40401 || errCode == 40101) { +// statName = statName + ' Returned ' + cmd + ' Error'; +// } else{ +// // statName = statName + ' Received ' + cmd + ' err ' + statDesc; +// } +// logger.stat(statName); +// }; +module.exports = alarm; diff --git a/utils/SutisDetail.js b/utils/SutisDetail.js new file mode 100644 index 0000000..c2566d1 --- /dev/null +++ b/utils/SutisDetail.js @@ -0,0 +1,70 @@ +'use strict'; +var logger = require('./SutisLogSummary'); +var detail ={}; +var nodeName = 'SRFP-Genesis'; +var dateFormat = require('dateformat'); +// var dateFMT = 'l'; +var dateFMT = 'yyyymmdd HH:MM:ss.l'; + +function dateTimeReq(dateFMT) { + var date = new Date(); + var dateMs = 'l'; + var dateFor = dateFormat(date, dateFMT); + var dateForms = dateFormat(date, dateMs); + return [dateFor, dateForms] +} + +function dateTimeRes(dateFMT) { + // var time = new Date(); + // var dateTime = formatDate(new Date(), dateFMT) + // return [dateTime,time.getTime()]; + + var date = new Date(); + var dateMs = 'l'; + var dateFor = dateFormat(date, dateFMT); + var dateForms = dateFormat(date, dateMs); + return [dateFor, dateForms] +} + +detail.write=function(req, cmd, size, mtime){ + var requestTime = dateTimeReq(dateFMT); + var responseTime = dateTimeRes(dateFMT); + var processTime = parseInt(responseTime[1]-requestTime[1]); + + var appDetail = '{'+ + '"' + nodeName + '.Details' + '":{' + + '"Session":"'+ req.query.commandId +'",' + + '"Scenario":"'+ cmd +'",' + + '"Identity":"",' + + '"InputTimeStamp":"'+ requestTime[0] +'",' + + '"Input":' + '[' + + '{'+ + '"Event":"'+ nodeName +'.'+ cmd +'",' + + '"Type":"REQ",' + + '"RawData":"' + req.protocol + '://' + req.get('host') + req.originalUrl +'",' + + '"Data":' + '{'+ + '"Name":"'+ req.query.name + '",' + + '"Type":"'+ req.query.type + '",' + + '"CommandId":"'+ req.query.commandId + '"' + + '}' + + '}'+ + '],'+ + '"OutputTimeStamp":"'+ responseTime[0] +'",' + + '"Output":' + '[' + + '{'+ + '"Event":"'+ nodeName +'.'+ cmd +'",' + + '"Type":"' + 'RES",' + + '"RawData":"'+ req.query.name +'",' + + '"Data":' + '{'+ + '"Size":"'+ size + '",' + + '"Modified":"'+ mtime + '"' + + '}' + + '}'+ + '],'+ + '"ProcessingTime":"'+ processTime +' ms"' + + '}' + + '}' + logger.detail(appDetail); +}; + +module.exports = detail; diff --git a/utils/SutisLog.js b/utils/SutisLog.js new file mode 100644 index 0000000..d3bd728 --- /dev/null +++ b/utils/SutisLog.js @@ -0,0 +1,288 @@ +var fs = require('fs'); +var os = require("os"); +var config = null; +var logCfg = require('../config/config'); + +var dateFormat = require('dateformat'); + +function SutisLog() { +} +function getDateTimeFormat(time) { + + var years = new Date().getFullYear(); + var months = new Date().getMonth() + 1; + var day = new Date().getDate(); + var hours = new Date().getHours(); + var mins = new Date().getMinutes(); + var monthFormatted = months < 10 ? "0" + months : months; + var dayFormatted = day < 10 ? "0" + day : day; + var hourFormatted = hours < 10 ? "0" + hours : hours; + var result = ""; + var minFormatted = null; + var div = null; + + if ((mins % time) > 0) { + minFormatted = ((Math.floor(mins / time)) * time); + } else { + minFormatted = mins; + } + + minFormatted = minFormatted < 10 ? "0" + minFormatted : minFormatted; + result = '' + years + monthFormatted + dayFormatted + hourFormatted + minFormatted; + return result; +} + +function getDateTimeLogFormat() { + var dates = new Date(); + var years = dates.getFullYear(); + var months = dates.getMonth() + 1; + var day = dates.getDate(); + var hours = dates.getHours(); + var minutes = dates.getMinutes(); + var second = new Date().getSeconds(); + var millisecs = dates.getMilliseconds(); + var monthFormatted = months < 10 ? "0" + months : months; + var dayFormatted = day < 10 ? "0" + day : day; + var hourFormatted = hours < 10 ? "0" + hours : hours; + var minFormatted = minutes < 10 ? "0" + minutes : minutes; + var secFormatted = second < 10 ? "0" + second : second; + var milliFormatted = null; + + if (millisecs < 10) { + milliFormatted = "00" + millisecs; + } + else if (millisecs < 100) { + milliFormatted = "0" + millisecs; + } + else { + milliFormatted = millisecs; + } + + // return '[' + years + '-' + monthFormatted + '-' + dayFormatted + ' ' + hourFormatted + ':' + minFormatted + ':' + secFormatted + ':' + milliFormatted + ']'; + var detail = years + monthFormatted + dayFormatted + ' ' + hourFormatted + ':' + minFormatted + ':' + secFormatted + '|' + os.hostname() + '|' + logCfg.log.projectName + '|'; + return detail; +} + +function getLogFileName() { + return os.hostname() + '_' + logCfg.log.projectName + '_' + getDateTimeFormat(logCfg.log.logTime) + '.log'; +} +function getStatFileName() { + return os.hostname() + '_' + logCfg.log.projectName + '_' + getDateTimeFormat(logCfg.log.statTime) + '.stat'; +} +function getAlarmFileName() { + return os.hostname() + '_' + logCfg.log.projectName + '_' + getDateTimeFormat(logCfg.log.alarmTime) + '.stat'; +} +function getSummaryFileName() { + return os.hostname() + '_' + logCfg.log.projectName + '_' + getDateTimeFormat(logCfg.log.summaryTime) + '.summary'; +} +function getDetailFileName() { + return os.hostname() + '_' + logCfg.log.projectName + '_' + getDateTimeFormat(logCfg.log.detailTime) + '.detail'; +} + +SutisLog.prototype.info = function (logMessage) { + var stream = fs.createWriteStream(logCfg.log.logPath + '/' + getLogFileName(), { 'flags': 'a' }); + stream.once('open', function (fd) { + stream.write(getDateTimeLogFormat() + ' - info: ' + logMessage + '\n'); + stream.end(); + }); +}; + +SutisLog.prototype.error = function (logMessage) { + var stream = fs.createWriteStream(logCfg.log.logPath + '/' + getLogFileName(), { 'flags': 'a' }); + + stream.once('open', function (fd) { + stream.write(getDateTimeLogFormat() + ' - error: ' + logMessage + '\n'); + stream.end(); + }); +}; +// session, cmd, identity, resultCode, resultDescription +SutisLog.prototype.summaryLog = function (session, cmd, identity, resultCode, resultDescription) { + var dateFMT = 'yyyymmdd HH:MM:ss'; + + var stream = fs.createWriteStream(logCfg.log.summaryPath + '/' + getSummaryFileName(), { 'flags': 'a' }); + + // var test = { + // x1: function() { + // stream.once('open', function (fd) { + // stream.write(getDateTimeLogFormat() + ' - summary: ' + 'txt-+-+-+dhjsdhfjkshfjsd' + '\n'); + // stream.end(); + // }); + // } + // } + // return test; + + var summaryLog = { + requestTime: new Date(), + session: session, + initInvoke: '', //only equinox platform + cmd: cmd, + identity: identity, + resultCode: resultCode, + resultDescription: resultDescription, + blockDetail: [], + + addSuccessBlock: function(node, cmd, statusCode, detail){ + this.blockDetail.push('['+ node+'; '+cmd+'(1); ['+ statusCode+'; '+detail+'(1)]]'); + }, + + addErrorBlock: function(node, cmd, statusCode, detail, errorDetail){ + this.blockDetail.push('['+ node+'; '+cmd+'(1); ['+ statusCode+'; '+detail+'(1)]]'); + }, + + flush : function(){ + var endTime = new Date(); + + var txt = dateFormat(this.requestTime, dateFMT) + '|'; + txt += this.session +'|'; + txt += this.initInvoke +'|' + txt += this.cmd +'|' + txt += this.identity +'|' + txt += this.resultCode +'|' + txt += this.resultDescription +'|' + txt += this.blockDetail +'|' + txt += dateFormat(endTime, dateFMT) +'|' + txt += (endTime.getTime() - this.requestTime.getTime()); + + stream.once('open', function (fd) { + stream.write(txt + '\n'); + stream.end(); + }); + + } + }; + return summaryLog; +}; + +SutisLog.prototype.detail = function (req, cmd, size, mtime) { + var stream = fs.createWriteStream(logCfg.log.detailPath + '/' + getDetailFileName(), { 'flags': 'a' }); + + var nodeName = 'SRFP-Genesis'; + var dateFormat = require('dateformat'); + // var dateFMT = 'l'; + var dateFMT = 'yyyymmdd HH:MM:ss.l'; + + function dateTimeReq(dateFMT) { + var date = new Date(); + var dateMs = 'l'; + var dateFor = dateFormat(date, dateFMT); + var dateForms = dateFormat(date, dateMs); + return [dateFor, dateForms] + } + + function dateTimeRes(dateFMT) { + // var time = new Date(); + // var dateTime = formatDate(new Date(), dateFMT) + // return [dateTime,time.getTime()]; + + var date = new Date(); + var dateMs = 'l'; + var dateFor = dateFormat(date, dateFMT); + var dateForms = dateFormat(date, dateMs); + return [dateFor, dateForms] + } + + var requestTime = dateTimeReq(dateFMT); + var responseTime = dateTimeRes(dateFMT); + var processTime = parseInt(responseTime[1] - requestTime[1]); + + var appDetail = '{' + + '"' + nodeName + '.Details' + '":{' + + '"Session":"' + req.query.commandId + '",' + + '"Scenario":"' + cmd + '",' + + '"Identity":"",' + + '"InputTimeStamp":"' + requestTime[0] + '",' + + '"Input":' + '[' + + '{' + + '"Event":"' + nodeName + '.' + cmd + '",' + + '"Type":"REQ",' + + '"RawData":"' + req.protocol + '://' + req.get('host') + req.originalUrl + '",' + + '"Data":' + '{' + + '"Name":"' + req.query.name + '",' + + '"Type":"' + req.query.type + '",' + + '"CommandId":"' + req.query.commandId + '"' + + '}' + + '}' + + '],' + + '"OutputTimeStamp":"' + responseTime[0] + '",' + + '"Output":' + '[' + + '{' + + '"Event":"' + nodeName + '.' + cmd + '",' + + '"Type":"' + 'RES",' + + '"RawData":"' + req.query.name + '",' + + '"Data":' + '{' + + '"Size":"' + size + '",' + + '"Modified":"' + mtime + '"' + + '}' + + '}' + + '],' + + '"ProcessingTime":"' + processTime + ' ms"' + + '}' + + '}'; + + stream.once('open', function (fd) { + stream.write(getDateTimeLogFormat() + appDetail + '\n'); + stream.end(); + }); +}; + +SutisLog.prototype.statRecv = function (cmd, errCode) { + var nodeName = 'SRFP-Genesis'; + var stream = fs.createWriteStream(logCfg.log.statPath + '/' + getStatFileName(), { 'flags': 'a' }); + + var statName = nodeName; + if (errCode == 20000 || errCode == 40401 || errCode == 40101) { + statName = statName + ' Received Request'; + } else if (errCode == 40400) { + statName = statName + ' Received Unknown URL Request'; + } else if (errCode == 40300) { + statName = statName + ' Received Bad ' + cmd + ' Request'; + } + else { + statName = statName + ' Received ' + cmd + ' error'; + } + stream.once('open', function (fd) { + stream.write(getDateTimeLogFormat() + statName + '\n'); + stream.end(); + }); +}; + +SutisLog.prototype.statRetn = function (cmd, errCode) { + var nodeName = 'SRFP-Genesis'; + var stream = fs.createWriteStream(logCfg.log.statPath + '/' + getStatFileName(), { 'flags': 'a' }); + + var statName = nodeName; + if (errCode == 20000) { + statName = statName + ' Returned ' + cmd + ' Success'; + } else if (errCode == 40400) { + statName = statName + ' Returned Unknown URL'; + } else if (errCode == 40300 || errCode == 40401 || errCode == 40101 || errCode == 50000) { + statName = statName + ' Returned ' + cmd + ' Error'; + } else { + // statName = statName + ' Returned ' + cmd + ' err ' + statDesc; + } + stream.once('open', function (fd) { + stream.write(getDateTimeLogFormat() + statName + '\n'); + stream.end(); + }); +}; + +SutisLog.prototype.alarm = function (cmd, errCode) { + var nodeName = 'SRFP-Genesis'; + var stream = fs.createWriteStream(logCfg.log.alarmPath + '/' + getAlarmFileName(), { 'flags': 'a' }); + + var alarmName = nodeName; + if (errCode == 40400) { + alarmName = alarmName + ' Received Unknown URL Request'; + } else if (errCode == 40300) { + alarmName = alarmName + ' Received Bad ' + cmd + ' Request'; + } + else { + // alarmName = alarmName + ' Received ' + cmd + ' err ' + statDesc; + } + stream.once('open', function (fd) { + stream.write(getDateTimeLogFormat() + alarmName + '\n'); + stream.end(); + }); +}; +module.exports = SutisLog; + diff --git a/utils/SutisLogSummary.js b/utils/SutisLogSummary.js new file mode 100644 index 0000000..04921ba --- /dev/null +++ b/utils/SutisLogSummary.js @@ -0,0 +1,75 @@ +var log4js = require('log4js'); +log4js.configure('./config/log4js.json'); + +var log = log4js.getLogger('serverLog'); +var stat = log4js.getLogger('statLog'); +var alarm = log4js.getLogger('alarmLog'); +var detail = log4js.getLogger('datailLog'); +var summary = log4js.getLogger('summaryLog'); + +var dateFMT = 'yyyymmdd HH:MM:ss'; +var dateFormat = require('dateformat'); + + +var l = {}; +l.debug = function(_log){ + log.debug(_log); +} +l.info = function(_log){ + log.info(_log); +} +l.warn = function(_log){ + log.warn(_log); +} +l.error = function(_log){ + log.error(_log); +} +l.stat = function(statName){ + stat.info(statName); +} +l.alarm = function(alarmName){ + alarm.info(alarmName); +} +l.detail = function(appDetail){ + detail.info(appDetail); +} + +l.summary = function(session, cmd, identity, resultCode, resultDescription){ + var summaryLog = { + requestTime: new Date(), + session: session, + initInvoke: '', //only equinox platform + cmd: cmd, + identity: identity, + resultCode: resultCode, + resultDescription: resultDescription, + blockDetail: [], + + addSuccessBlock: function(node, cmd, statusCode, detail){ + this.blockDetail.push('['+ node+'; '+cmd+'(1); ['+ statusCode+'; '+detail+'(1)]]'); + }, + + addErrorBlock: function(node, cmd, statusCode, detail, errorDetail){ + this.blockDetail.push('['+ node+'; '+cmd+'(1); ['+ statusCode+'; '+detail+'(1)]]'); + }, + + flush : function(){ + var endTime = new Date(); + + var txt = dateFormat(this.requestTime, dateFMT) + '|'; + txt += this.session +'|'; + txt += this.initInvoke +'|' + txt += this.cmd +'|' + txt += this.identity +'|' + txt += this.resultCode +'|' + txt += this.resultDescription +'|' + txt += this.blockDetail +'|' + txt += dateFormat(endTime, dateFMT) +'|' + txt += (endTime.getTime() - this.requestTime.getTime()); + + summary.info(txt); + } + }; + return summaryLog; +} +module.exports = l; \ No newline at end of file diff --git a/utils/SutisStat.js b/utils/SutisStat.js new file mode 100644 index 0000000..57646e4 --- /dev/null +++ b/utils/SutisStat.js @@ -0,0 +1,64 @@ +'use strict'; +var logger = require('./SutisLogSummary'); +var stat ={}; +var nodeName = 'SRFP-Genesis'; +// var statTbl = require('../config/config'); + +// stat.sendReq=function(cmd){ +// var statName = nodeName + ' send ' + cmd + ' req.'; +// logger.stat(statName); +// }; + +// stat.sendRes=function(cmd, errCode){ +// var statDesc; +// if(!errCode){ +// errCode = "50000"; + +// }else{ +// statDesc = statTbl[errCode]; +// if(!statDesc){ +// errCode = "90000"; +// } +// } +// statDesc = statTbl[errCode]; + +// var statName = nodeName; +// if(errCode == '20000'){ +// statName = statName + ' send ' + cmd + ' success res '+ errCode +'.'; +// }else{ +// statName = statName + ' send ' + cmd + ' err ' + statDesc.toLowerCase() +' res '+ errCode +'.'; +// } +// logger.stat(statName); +// }; + +stat.recv=function(cmd, errCode){ + + var statName = nodeName; + if(errCode == 20000 || errCode == 40401 || errCode == 40101){ + statName = statName + ' Received Request'; + } else if (errCode == 40400) { + statName = statName + ' Received Unknown URL Request'; + }else if (errCode == 40300) { + statName = statName + ' Received Bad '+ cmd + ' Request'; + } + else{ + statName = statName + ' Received ' + cmd + ' error'; + } + logger.stat(statName); +}; + +stat.retn=function(cmd, errCode){ + + var statName = nodeName; + if(errCode == 20000){ + statName = statName + ' Returned ' + cmd + ' Success'; + } else if (errCode == 40400) { + statName = statName + ' Returned Unknown URL'; + } else if (errCode == 40300 || errCode == 40401 || errCode == 40101 || errCode == 50000) { + statName = statName + ' Returned ' + cmd + ' Error'; + } else{ + // statName = statName + ' Returned ' + cmd + ' err ' + statDesc; + } + logger.stat(statName); +}; +module.exports = stat; diff --git a/views/error.jade b/views/error.jade new file mode 100644 index 0000000..43a41a7 --- /dev/null +++ b/views/error.jade @@ -0,0 +1,5 @@ +extends layout + +block content + h1= message + h2= error.status diff --git a/views/index.jade b/views/index.jade new file mode 100644 index 0000000..3d63b9a --- /dev/null +++ b/views/index.jade @@ -0,0 +1,5 @@ +extends layout + +block content + h1= title + p Welcome to #{title} diff --git a/views/layout.jade b/views/layout.jade new file mode 100644 index 0000000..15af079 --- /dev/null +++ b/views/layout.jade @@ -0,0 +1,7 @@ +doctype html +html + head + title= title + link(rel='stylesheet', href='/stylesheets/style.css') + body + block content -- libgit2 0.21.2