use yarn and prettier

This commit is contained in:
Patrick McDonagh
2018-03-14 17:29:43 -05:00
parent f0a94fe100
commit 3a4b1cbaaf
5 changed files with 7158 additions and 282 deletions

View File

@@ -1,61 +1,72 @@
var express = require('express');
var express = require("express");
var app = express();
var cors = require('cors');
var session = require('express-session')
var morgan = require('morgan');
var bodyParser = require('body-parser');
var MongoStore = require('connect-mongo')(session);
var cors = require("cors");
var session = require("express-session");
var morgan = require("morgan");
var bodyParser = require("body-parser");
var MongoStore = require("connect-mongo")(session);
app.use(express.static(__dirname + "/public"));
app.use(morgan('dev'));
app.use(morgan("dev"));
let whitelist = ['localhost:3000',
'localhost:8080',
'http://localhost:8080',
'http://api.henrypump.cloud',
'http://api.henrypump.cloud:3000',
'api.henrypump.cloud',
'http://reports.henrypump.cloud',
'reports.henrypump.cloud'];
let whitelist = [
"localhost:3000",
"localhost:8080",
"http://localhost:8080",
"http://api.henrypump.cloud",
"http://api.henrypump.cloud:3000",
"api.henrypump.cloud",
"http://reports.henrypump.cloud",
"reports.henrypump.cloud"
];
// let whitelist = ['api.henrypump.cloud', 'http://api.henrypump.cloud', 'http://api.henrypump.cloud:3000', ];
var corsOptions = {
origin: function(origin, callback) {
if (whitelist.indexOf(origin) !== -1) {
callback(null, true)
callback(null, true);
} else {
callback(new Error('Not allowed by CORS: ' + origin))
callback(new Error("Not allowed by CORS: " + origin));
}
}, credentials: true
}
app.use(function(req,res,next){ req.headers.origin = req.headers.origin || req.headers.host; next(); })
},
credentials: true
};
app.use(function(req, res, next) {
req.headers.origin = req.headers.origin || req.headers.host;
next();
});
app.use(cors(corsOptions));
app.set('trust proxy', 1) // trust first proxy
app.use(session({
secret: 'keyboard cat',
app.set("trust proxy", 1); // trust first proxy
app.use(
session({
secret: "keyboard cat",
resave: false,
saveUninitialized: true,
store: new MongoStore({ url: 'mongodb://localhost:27017/pocloud-live-reports-server' })
}))
store: new MongoStore({
url: "mongodb://localhost:27017/pocloud-live-reports-server"
})
})
);
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
app.use(
bodyParser.urlencoded({
extended: true
}));
})
);
app.get('/', require('./routes').index);
app.get('/deviceTypes', require('./routes').deviceTypes);
app.get('/devices/:deviceId/values', require('./routes').channelValues);
app.get('/devices', require('./routes').devices);
app.get('/companies', require('./routes').companies);
app.get('/alldata', require('./routes').getAllData);
app.post('/login', require('./routes').login);
app.get('/login', require('./routes').getLogin);
app.get('/logout', require('./routes').logout);
app.get("/", require("./routes").index);
app.get("/deviceTypes", require("./routes").deviceTypes);
app.get("/devices/:deviceId/values", require("./routes").channelValues);
app.get("/devices", require("./routes").devices);
app.get("/companies", require("./routes").companies);
app.get("/alldata", require("./routes").getAllData);
app.post("/login", require("./routes").login);
app.get("/login", require("./routes").getLogin);
app.get("/logout", require("./routes").logout);
app.listen(3000, function() {
console.log('Listening on port 3000!')
})
console.log("Listening on port 3000!");
});

View File

@@ -4,7 +4,7 @@
"description": "Live Reporting Server for POCloud Data",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
"precommit": "lint-staged"
},
"author": "Patrick McDonagh",
"license": "ISC",
@@ -20,5 +20,13 @@
"mongoose": "^4.11.11",
"morgan": "^1.8.2",
"redis": "^2.8.0"
},
"devDependencies": {
"husky": "^0.14.3",
"lint-staged": "^7.0.0",
"prettier": "^1.11.1"
},
"lint-staged": {
"*.{js,json,css,md}": ["prettier --write", "git add"]
}
}

View File

@@ -1,114 +1,118 @@
var https = require('https');
var dcopy = require('deep-copy');
var https = require("https");
var dcopy = require("deep-copy");
const meshifyOptions = {
protocol: 'https:',
hostname: 'henrypump.meshify.com',
path: '/api/v3/',
protocol: "https:",
hostname: "henrypump.meshify.com",
path: "/api/v3/",
port: 443,
headers: { 'Content-Type': 'application/json', 'Access-Control-Allow-Origin': '*' },
headers: {
"Content-Type": "application/json",
"Access-Control-Allow-Origin": "*"
}
};
const hiddenDevices = ["gen", "mainHP", "mainMeshify", "M1"];
const deviceChannels = {
advvfdipp: [
'wellstatus',
'flowtotalyesterday',
'flowtotal',
'energytotalyesterday',
'energytotal',
'fluidlevel',
'flowrate',
'vfdcurrent',
'vfd_fault',
'pidcontrolmode',
'downholesensorstatus',
'intakepressure',
'intaketemperature',
'tubingpressure',
"wellstatus",
"flowtotalyesterday",
"flowtotal",
"energytotalyesterday",
"energytotal",
"fluidlevel",
"flowrate",
"vfdcurrent",
"vfd_fault",
"pidcontrolmode",
"downholesensorstatus",
"intakepressure",
"intaketemperature",
"tubingpressure"
],
abbflow: [
'yesterday_volume',
'today_volume',
'volume_flow',
'differential_pressure',
'static_pressure',
'temperature',
'battery_voltage',
'last_calculation_period_volume'
"yesterday_volume",
"today_volume",
"volume_flow",
"differential_pressure",
"static_pressure",
"temperature",
"battery_voltage",
"last_calculation_period_volume"
],
flowmonitor: [
'gal_total_yesterday',
'bbl_total_yesterday',
'gal_total',
'bbl_total',
'gpm_flow',
'bpd_flow',
'run_status'
"gal_total_yesterday",
"bbl_total_yesterday",
"gal_total",
"bbl_total",
"gpm_flow",
"bpd_flow",
"run_status"
],
poc: [
'go_percent_run',
'go_kwh',
'go_kwh_regen',
'go_electricity_cost',
'go_peak_load',
'go_min_load',
'go_average_spm',
'go_production_calculated',
'go_polished_rod_hp',
'go_lifting_cost',
'go_fluid_above_pump',
'go_pump_intake_pressure',
'go_inflow_rate',
'dt_percent_run',
'dt_kwh',
'dt_kwh_regen',
'dt_electricity_cost',
'dt_peak_load',
'dt_min_load',
'dt_average_spm',
'dt_production_calculated',
'dt_polished_rod_hp',
'dt_lifting_cost',
'dt_fluid_above_pump',
'dt_pump_intake_pressure',
'dt_inflow_rate',
"go_percent_run",
"go_kwh",
"go_kwh_regen",
"go_electricity_cost",
"go_peak_load",
"go_min_load",
"go_average_spm",
"go_production_calculated",
"go_polished_rod_hp",
"go_lifting_cost",
"go_fluid_above_pump",
"go_pump_intake_pressure",
"go_inflow_rate",
"dt_percent_run",
"dt_kwh",
"dt_kwh_regen",
"dt_electricity_cost",
"dt_peak_load",
"dt_min_load",
"dt_average_spm",
"dt_production_calculated",
"dt_polished_rod_hp",
"dt_lifting_cost",
"dt_fluid_above_pump",
"dt_pump_intake_pressure",
"dt_inflow_rate"
],
rigpump: [
'device_status',
'flow_rate',
'discharge_pressure',
'vfd_current',
'vfd_frequency',
'auto_manual',
'auto_control_mode',
'watchdog'
"device_status",
"flow_rate",
"discharge_pressure",
"vfd_current",
"vfd_frequency",
"auto_manual",
"auto_control_mode",
"watchdog"
]
}
};
const allowedDeviceTypes = Object.keys(deviceChannels);
exports.index = function(req, res) {
res.render('index', { });
res.render("index", {});
};
var checkLogin = function(req, authToken) {
console.log("token in checkLogin: " + authToken)
console.log("token in checkLogin: " + authToken);
let prom = new Promise(function(resolve, reject) {
if (typeof authToken === 'undefined'){
reject({status: "failure", reason:"no token specified"})
if (typeof authToken === "undefined") {
reject({ status: "failure", reason: "no token specified" });
}
let options = dcopy(meshifyOptions);
options.path += "users/me";
options.headers.Authorization = authToken;
const apiReq = https.get(options, (apiRes) => {
let body = '';
apiRes.on('data', function(d) {
const apiReq = https
.get(options, apiRes => {
let body = "";
apiRes.on("data", function(d) {
body += d;
});
apiRes.on('end', function() {
apiRes.on("end", function() {
let parsed;
try {
parsed = JSON.parse(body);
@@ -116,116 +120,120 @@ var checkLogin = function(req, authToken){
console.log("Got an error: ", e);
reject({ status: "failure", reason: "bad username or password" });
}
resolve({status: 'success', user: parsed});
resolve({ status: "success", user: parsed });
});
})
}).on('error', function(e){
.on("error", function(e) {
console.log("Got an error: ", e);
reject({ status: "failure", reason: "bad username or password" });
});
});
return prom;
}
};
exports.login = function(req, res) {
console.log(req.body);
console.log("# Username set to " + req.body.username);
res.setHeader('Access-Control-Allow-Credentials', 'true')
res.setHeader("Access-Control-Allow-Credentials", "true");
checkLogin(req, req.body.authToken).then(function(userCheck){
req.session['username'] = req.body.username;
req.session['authorization'] = req.body.authToken;
checkLogin(req, req.body.authToken)
.then(function(userCheck) {
req.session["username"] = req.body.username;
req.session["authorization"] = req.body.authToken;
req.session.save();
res.json({status:'success', username:req.session.username});
}).catch(function(userCheck){
res.json({ status: "success", username: req.session.username });
})
.catch(function(userCheck) {
console.log("couldn't verify login");
console.log(userCheck);
res.json(userCheck);
})
}
});
};
exports.getLogin = function(req, res) {
console.log("# Client Username check " + req.session.username);
checkLogin(req, req.session.authorization).then(function(userCheck){
res.json({status:'success', username:req.session.username});
}).catch(function(userCheck){
checkLogin(req, req.session.authorization)
.then(function(userCheck) {
res.json({ status: "success", username: req.session.username });
})
.catch(function(userCheck) {
console.log("couldn't verify login");
console.log(userCheck);
res.json(userCheck);
})
}
});
};
exports.logout = function(req, res) {
req.session.destroy();
res.end();
}
};
var getMeshifyPromise = function(req, path) {
if (typeof req.session['authorization'] !== 'undefined'){
if (typeof req.session["authorization"] !== "undefined") {
let prom = new Promise(function(resolve, reject) {
let options = dcopy(meshifyOptions);
options.path += path;
options.headers.Authorization = req.session['authorization'];
options.headers.Authorization = req.session["authorization"];
const apiReq = https.get(options, (apiRes) => {
let body = '';
apiRes.on('data', function(d) {
const apiReq = https.get(options, apiRes => {
let body = "";
apiRes.on("data", function(d) {
body += d;
});
apiRes.on('end', function() {
apiRes.on("end", function() {
const parsed = JSON.parse(body);
resolve(parsed);
})
})
});
});
});
return prom;
} else {
return;
}
}
};
exports.deviceTypes = function(req, res) {
getMeshifyPromise(req, 'devicetypes').then(function(jsData){
getMeshifyPromise(req, "devicetypes").then(function(jsData) {
if (jsData) {
res.json(jsData);
} else {
res.json({status: 'error', message: 'no token specified'});
res.json({ status: "error", message: "no token specified" });
}
});
};
exports.devices = function(req, res) {
getMeshifyPromise(req, 'devices').then(function(jsData){
getMeshifyPromise(req, "devices").then(function(jsData) {
if (jsData) {
res.json(jsData);
} else {
res.json({status: 'error', message: 'no token specified'});
res.json({ status: "error", message: "no token specified" });
}
});
};
exports.companies = function(req, res) {
getMeshifyPromise(req, 'companies').then(function(jsData){
getMeshifyPromise(req, "companies").then(function(jsData) {
if (jsData) {
res.json(jsData);
} else {
res.json({status: 'error', message: 'no token specified'});
res.json({ status: "error", message: "no token specified" });
}
});
};
exports.channelValues = function(req, res) {
getMeshifyPromise(req, "devices/" + req.params.deviceId + "/values").then(function(jsData){
getMeshifyPromise(req, "devices/" + req.params.deviceId + "/values").then(
function(jsData) {
if (jsData) {
res.json(jsData);
} else {
res.json({status: 'error', message: 'no token specified'});
res.json({ status: "error", message: "no token specified" });
}
});
}
);
};
exports.getAllData = function(req, res) {
var cleanData = [];
var deviceTypeMap = {};
@@ -233,7 +241,12 @@ exports.getAllData = function(req, res){
var devicetypes;
var devices;
let getData = Promise.all([getMeshifyPromise(req, 'companies'), getMeshifyPromise(req, 'devicetypes'), getMeshifyPromise(req, 'devices')]).then(function(results){
let getData = Promise.all([
getMeshifyPromise(req, "companies"),
getMeshifyPromise(req, "devicetypes"),
getMeshifyPromise(req, "devices")
])
.then(function(results) {
companies = results[0];
devicetypes = results[1];
devices = results[2];
@@ -245,10 +258,11 @@ exports.getAllData = function(req, res){
tenantId: c.tenantId,
addressId: c.addressId,
devices: {}
}
};
return newCompany;
});
}).then(function(compList){
})
.then(function(compList) {
cleanData = compList;
let i = 0;
while (i < devicetypes.length) {
@@ -258,13 +272,17 @@ exports.getAllData = function(req, res){
return;
}
}
}).then(function(){
return Promise.all(devices.map(function(device){
return getMeshifyPromise(req, 'devices/' + device.id + '/values');
}))
})
.then(function() {
return Promise.all(
devices.map(function(device) {
return getMeshifyPromise(req, "devices/" + device.id + "/values");
})
);
});
getData.then(function(allDeviceValues){
getData
.then(function(allDeviceValues) {
return allDeviceValues.map(function(devValObj, i) {
const thisDeviceType = deviceTypeMap[devices[i].deviceTypeId];
if (allowedDeviceTypes.indexOf(thisDeviceType) > -1) {
@@ -277,17 +295,18 @@ exports.getAllData = function(req, res){
channel: valkeys[v],
timestamp: devValObj[valkeys[v]].timestamp,
value: devValObj[valkeys[v]].value
}
};
values.push(newVal);
}
v++;
if (v == valkeys.length) {
return values
return values;
}
}
}
});
})
}).then(function(allDevValuesClean){
.then(function(allDevValuesClean) {
return devices.map(function(device, i) {
return {
id: device.id,
@@ -300,18 +319,26 @@ exports.getAllData = function(req, res){
macAddress: device.macAddress,
vanityName: device.vanityName,
values: allDevValuesClean[i]
}
};
});
})
}).then(function(devicesWithValues){
.then(function(devicesWithValues) {
let i = 0;
while (i < devicesWithValues.length) {
for (let c = 0; c < cleanData.length; c++) {
if (cleanData[c].id === devicesWithValues[i].companyId) {
if(allowedDeviceTypes.indexOf(devicesWithValues[i].deviceType) >= 0){
if (typeof cleanData[c].devices[devicesWithValues[i].deviceType] === 'undefined'){
if (
allowedDeviceTypes.indexOf(devicesWithValues[i].deviceType) >= 0
) {
if (
typeof cleanData[c].devices[devicesWithValues[i].deviceType] ===
"undefined"
) {
cleanData[c].devices[devicesWithValues[i].deviceType] = [];
}
cleanData[c].devices[devicesWithValues[i].deviceType].push(devicesWithValues[i]);
cleanData[c].devices[devicesWithValues[i].deviceType].push(
devicesWithValues[i]
);
}
}
}
@@ -320,7 +347,8 @@ exports.getAllData = function(req, res){
return cleanData;
}
}
}).then(function(data){
res.json(data);
})
.then(function(data) {
res.json(data);
});
};

2660
server/yarn.lock Normal file

File diff suppressed because it is too large Load Diff

4169
yarn.lock Normal file

File diff suppressed because it is too large Load Diff