blah
This commit is contained in:
parent
b3f2f4e5f6
commit
a7e1a0028e
@ -842,5 +842,4 @@ module.exports = {
|
|||||||
getSensorDataById,
|
getSensorDataById,
|
||||||
getData,
|
getData,
|
||||||
getDatabyRange,
|
getDatabyRange,
|
||||||
getAverage,
|
|
||||||
};
|
};
|
||||||
|
@ -3,11 +3,9 @@ const client = require("./modules/mqtt");
|
|||||||
const { validateData } = require("./functions/validateData.js");
|
const { validateData } = require("./functions/validateData.js");
|
||||||
const { insertData } = require("./functions/database.js");
|
const { insertData } = require("./functions/database.js");
|
||||||
/*
|
/*
|
||||||
1) validate data from IoT sensor
|
1) on data received, validate data
|
||||||
2) upload data to database
|
2) websocket to another server
|
||||||
3) add more routes to api
|
|
||||||
4) add swagger documentation
|
|
||||||
5) add middleware for authentication
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// Event handlers
|
// Event handlers
|
||||||
@ -23,6 +21,8 @@ client.on('connect', () => {
|
|||||||
//upload to db logic here
|
//upload to db logic here
|
||||||
insertData(data);
|
insertData(data);
|
||||||
|
|
||||||
|
//websocket logic here??
|
||||||
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
console.log("Data is invalid");
|
console.log("Data is invalid");
|
||||||
|
@ -1,24 +1,34 @@
|
|||||||
/*
|
|
||||||
1) api route
|
|
||||||
2) enforce best practice for api routes
|
|
||||||
*/
|
|
||||||
const express = require("express");
|
const express = require("express");
|
||||||
const helmet = require("helmet");
|
const helmet = require("helmet");
|
||||||
|
const { rateLimit } = require("express-rate-limit");
|
||||||
const { APIlogger } = require('../middleware/apiLogger.js');
|
const { APIlogger } = require('../middleware/apiLogger.js');
|
||||||
|
|
||||||
const app = express();
|
const app = express();
|
||||||
app.use(helmet());
|
app.use(helmet());
|
||||||
const port = 80;
|
const port = 80;
|
||||||
|
|
||||||
|
//express-rate-limit stolen from docs
|
||||||
|
const limiter = rateLimit({
|
||||||
|
windowMs: 15 * 60 * 1000, // 15 minutes
|
||||||
|
limit: 600, // Limit each IP to 100 requests per `window` (here, per 15 minutes).
|
||||||
|
standardHeaders: 'draft-7', // draft-6: `RateLimit-*` headers; draft-7: combined `RateLimit` header
|
||||||
|
legacyHeaders: false, // Disable the `X-RateLimit-*` headers.
|
||||||
|
})
|
||||||
|
|
||||||
|
// Apply the rate limiting middleware to all requests.
|
||||||
|
app.use(limiter)
|
||||||
|
|
||||||
//disable x-powered-by header for security reasons
|
//disable x-powered-by header for security reasons
|
||||||
app.disable("x-powered-by");
|
app.disable("x-powered-by");
|
||||||
|
|
||||||
|
//parse json body format
|
||||||
app.use(express.json());
|
app.use(express.json());
|
||||||
app.set("json spaces", 2);
|
app.set("json spaces", 2);
|
||||||
|
|
||||||
|
|
||||||
//middleware logic ( called by next() )
|
/*
|
||||||
|
middleware logic ( called by next() )
|
||||||
|
*/
|
||||||
//app.use('/api/v0', require('../middleware/ApiKey.js'));
|
//app.use('/api/v0', require('../middleware/ApiKey.js'));
|
||||||
app.use('/api/v0', APIlogger, require('../routes/api_route.js'));
|
app.use('/api/v0', APIlogger, require('../routes/api_route.js'));
|
||||||
|
|
||||||
|
@ -64,19 +64,23 @@ function nextDataRow(currentRow, interval) {
|
|||||||
measurement: {
|
measurement: {
|
||||||
psi: numberWithinPercent(currentRow.measurement.psi),
|
psi: numberWithinPercent(currentRow.measurement.psi),
|
||||||
humidity: Math.floor(Math.random() * (90 - 80 + 1) + 80),
|
humidity: Math.floor(Math.random() * (90 - 80 + 1) + 80),
|
||||||
o3: Math.floor(Math.random() * (100 - 20 + 1) + 30),
|
o3: numberWithinPercent(currentRow.measurement.o3),
|
||||||
no2: numberWithinPercent(currentRow.measurement.no2),
|
no2: numberWithinPercent(currentRow.measurement.no2),
|
||||||
so2: numberWithinPercent(currentRow.measurement.so2),
|
so2: numberWithinPercent(currentRow.measurement.so2),
|
||||||
co: Math.floor(Math.random() * 25 - 0.5),
|
co: numberWithinPercent(currentRow.measurement.co),
|
||||||
temperature: Math.floor(Math.random() * (30 - 23 + 1) + 25),
|
temperature: Math.floor(Math.random() * (30 - 23 + 1) + 25),
|
||||||
windspeed: Math.floor(Math.random() * (10 - 1 + 1) + 1),
|
windspeed: Math.floor(Math.random() * (10 - 1 + 1) + 1),
|
||||||
},
|
},
|
||||||
|
//add 15 minutes to current row time to get next row time in UTC
|
||||||
createdAt: moment(currentRow.createdAt).add(interval, "m").toDate(),
|
createdAt: moment(currentRow.createdAt).add(interval, "m").toDate(),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
function numberWithinPercent(inputNumber) {
|
function numberWithinPercent(inputNumber) {
|
||||||
const range = inputNumber * 0.003;
|
//random percent with max of 1 and min of -1
|
||||||
|
const percent = Math.random() * 1 - Math.random();
|
||||||
|
|
||||||
|
const range = inputNumber * percent;
|
||||||
|
|
||||||
const randomOffset = Math.random() * range;
|
const randomOffset = Math.random() * range;
|
||||||
|
|
||||||
@ -84,22 +88,6 @@ function numberWithinPercent(inputNumber) {
|
|||||||
|
|
||||||
return Math.floor(newNumber);
|
return Math.floor(newNumber);
|
||||||
}
|
}
|
||||||
/*
|
|
||||||
function randomizeDataPoint(value, delta, maxDelta){
|
|
||||||
// https://stackoverflow.com/a/36756480
|
|
||||||
delta = Math.random() < 0.9 ? delta : maxDelta
|
|
||||||
return Math.floor(Math.random() * ((value+delta) - Math.abs(delta-value)) + Math.abs(delta-value));
|
|
||||||
}
|
|
||||||
|
|
||||||
let count = 0
|
|
||||||
let currentValue = 85
|
|
||||||
while(count <50){
|
|
||||||
count++
|
|
||||||
console.log(currentValue)
|
|
||||||
currentValue = randomizeDataPoint(currentValue, 2, 5)
|
|
||||||
}
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
//add seed
|
//add seed
|
||||||
router.post("/new", async (req, res, next) => {
|
router.post("/new", async (req, res, next) => {
|
||||||
@ -130,6 +118,4 @@ POST /api/v0/seed/sensordata
|
|||||||
2) nextDataRow(lastRow, interval)
|
2) nextDataRow(lastRow, interval)
|
||||||
3) seedSensorData({post object from abovr})
|
3) seedSensorData({post object from abovr})
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
15
package-lock.json
generated
15
package-lock.json
generated
@ -14,6 +14,7 @@
|
|||||||
"dotenv": "^16.3.1",
|
"dotenv": "^16.3.1",
|
||||||
"ejs": "^3.1.9",
|
"ejs": "^3.1.9",
|
||||||
"express": "^4.18.2",
|
"express": "^4.18.2",
|
||||||
|
"express-rate-limit": "^7.1.5",
|
||||||
"express-session": "^1.17.3",
|
"express-session": "^1.17.3",
|
||||||
"express-validator": "^7.0.1",
|
"express-validator": "^7.0.1",
|
||||||
"helmet": "^7.1.0",
|
"helmet": "^7.1.0",
|
||||||
@ -891,6 +892,20 @@
|
|||||||
"node": ">= 0.10.0"
|
"node": ">= 0.10.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/express-rate-limit": {
|
||||||
|
"version": "7.1.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-7.1.5.tgz",
|
||||||
|
"integrity": "sha512-/iVogxu7ueadrepw1bS0X0kaRC/U0afwiYRSLg68Ts+p4Dc85Q5QKsOnPS/QUjPMHvOJQtBDrZgvkOzf8ejUYw==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 16"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/express-rate-limit"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"express": "4 || 5 || ^5.0.0-beta.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/express-session": {
|
"node_modules/express-session": {
|
||||||
"version": "1.17.3",
|
"version": "1.17.3",
|
||||||
"resolved": "https://registry.npmjs.org/express-session/-/express-session-1.17.3.tgz",
|
"resolved": "https://registry.npmjs.org/express-session/-/express-session-1.17.3.tgz",
|
||||||
|
@ -22,6 +22,7 @@
|
|||||||
"dotenv": "^16.3.1",
|
"dotenv": "^16.3.1",
|
||||||
"ejs": "^3.1.9",
|
"ejs": "^3.1.9",
|
||||||
"express": "^4.18.2",
|
"express": "^4.18.2",
|
||||||
|
"express-rate-limit": "^7.1.5",
|
||||||
"express-session": "^1.17.3",
|
"express-session": "^1.17.3",
|
||||||
"express-validator": "^7.0.1",
|
"express-validator": "^7.0.1",
|
||||||
"helmet": "^7.1.0",
|
"helmet": "^7.1.0",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user