blah
This commit is contained in:
parent
b3f2f4e5f6
commit
a7e1a0028e
@ -842,5 +842,4 @@ module.exports = {
|
||||
getSensorDataById,
|
||||
getData,
|
||||
getDatabyRange,
|
||||
getAverage,
|
||||
};
|
||||
|
@ -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");
|
||||
|
@ -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'));
|
||||
|
||||
|
@ -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
15
package-lock.json
generated
@ -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",
|
||||
|
@ -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",
|
||||
|
Loading…
x
Reference in New Issue
Block a user