This commit is contained in:
newtbot 2024-01-13 02:47:01 +08:00
parent b3f2f4e5f6
commit a7e1a0028e
6 changed files with 47 additions and 36 deletions

View File

@ -842,5 +842,4 @@ module.exports = {
getSensorDataById,
getData,
getDatabyRange,
getAverage,
};

View File

@ -3,11 +3,9 @@ const client = require("./modules/mqtt");
const { validateData } = require("./functions/validateData.js");
const { insertData } = require("./functions/database.js");
/*
1) validate data from IoT sensor
2) upload data to database
3) add more routes to api
4) add swagger documentation
5) add middleware for authentication
1) on data received, validate data
2) websocket to another server
*/
// Event handlers
@ -23,6 +21,8 @@ client.on('connect', () => {
//upload to db logic here
insertData(data);
//websocket logic here??
}
else {
console.log("Data is invalid");

View File

@ -1,24 +1,34 @@
/*
1) api route
2) enforce best practice for api routes
*/
const express = require("express");
const helmet = require("helmet");
const { rateLimit } = require("express-rate-limit");
const { APIlogger } = require('../middleware/apiLogger.js');
const app = express();
app.use(helmet());
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
app.disable("x-powered-by");
//parse json body format
app.use(express.json());
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', APIlogger, require('../routes/api_route.js'));

View File

@ -64,19 +64,23 @@ function nextDataRow(currentRow, interval) {
measurement: {
psi: numberWithinPercent(currentRow.measurement.psi),
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),
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),
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(),
};
}
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;
@ -84,22 +88,6 @@ function numberWithinPercent(inputNumber) {
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
router.post("/new", async (req, res, next) => {
@ -130,6 +118,4 @@ POST /api/v0/seed/sensordata
2) nextDataRow(lastRow, interval)
3) seedSensorData({post object from abovr})
*/

15
package-lock.json generated
View File

@ -14,6 +14,7 @@
"dotenv": "^16.3.1",
"ejs": "^3.1.9",
"express": "^4.18.2",
"express-rate-limit": "^7.1.5",
"express-session": "^1.17.3",
"express-validator": "^7.0.1",
"helmet": "^7.1.0",
@ -891,6 +892,20 @@
"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": {
"version": "1.17.3",
"resolved": "https://registry.npmjs.org/express-session/-/express-session-1.17.3.tgz",

View File

@ -22,6 +22,7 @@
"dotenv": "^16.3.1",
"ejs": "^3.1.9",
"express": "^4.18.2",
"express-rate-limit": "^7.1.5",
"express-session": "^1.17.3",
"express-validator": "^7.0.1",
"helmet": "^7.1.0",