Add API for obtaining solar data

master
Manuel Kasper 2022-03-30 22:21:30 +02:00
rodzic 04f6e36486
commit 46ecf82c79
4 zmienionych plików z 91 dodań i 1 usunięć

Wyświetl plik

@ -79,3 +79,7 @@ config.mail = {
host: "neon1.net",
port: 587
};
config.solardata = {
apiKey: 'xxxxxxxxxxxxxxxxx'
};

Wyświetl plik

@ -16,6 +16,7 @@ const activations = require('./activations');
const utils = require('./utils');
const photos_router = require('./photos_router')
const tracks_router = require('./tracks_router')
const solardata = require('./solardata')
const maxmind = require('maxmind');
let dbChecker = (req, res, next) => {
@ -40,6 +41,7 @@ app.use('/activations', activations);
app.use('/users', users);
app.use('/photos', photos_router);
app.use('/tracks', tracks_router);
app.use('/solardata', solardata);
let sotaSpotReceiver = new SotaSpotReceiver();
let rbnReceiver = new RbnReceiver();

80
solardata.js 100644
Wyświetl plik

@ -0,0 +1,80 @@
const express = require('express')
const {check, validationResult} = require('express-validator')
const config = require('./config')
const db = require('./db')
let router = express.Router()
module.exports = router
router.get('/:date/:hour',
check("date").matches(/^\d\d\d\d-\d\d-\d\d$/),
check("hour").isInt({gt: -1, lt: 24}),
(req, res) => {
db.getDb().collection('solardata').findOne({date: req.params.date, hour: req.params.hour}, (err, solardata) => {
if (err) {
return res.status(500).end();
}
if (!solardata) {
return res.status(404).end();
}
delete solardata._id
delete solardata.date
delete solardata.hour
return res.json(solardata)
})
})
router.get('/latest', (req, res) => {
db.getDb().collection('solardata').find().sort({date: -1, hour: -1}).limit(1).toArray((err, solardataArr) => {
if (err) {
return res.status(500).end();
}
let solardata = solardataArr[0]
if (!solardata) {
return res.status(404).end();
}
delete solardata._id
delete solardata.date
delete solardata.hour
return res.json(solardata)
})
})
router.post('/:date/:hour',
check("date").matches(/^\d\d\d\d-\d\d-\d\d$/),
check("hour").isInt({gt: -1, lt: 24}),
check(['sfi', 'r', 'a', 'k', 'expK']).isInt(),
check('aurora').isBoolean(),
(req, res) => {
if (req.body.apiKey !== config.solardata.apiKey) {
return res.status(401).end()
}
const errors = validationResult(req);
if (!errors.isEmpty()) {
return res.status(400).json({errors: errors.array()})
}
db.getDb().collection('solardata').replaceOne({date: req.params.date, hour: req.params.hour}, {
date: req.params.date,
hour: req.params.hour,
sfi: req.body.sfi,
r: req.body.r,
a: req.body.a,
k: req.body.k,
expK: req.body.expK,
sa: req.body.sa,
gmf: req.body.gmf,
aurora: req.body.aurora
}, {upsert: true})
return res.status(204).end()
})

Wyświetl plik

@ -47,7 +47,11 @@ class WebSocketManager extends EventEmitter {
return;
}
ws.isAlive = false;
ws.ping();
try {
ws.ping();
} catch (e) {
console.error(e);
}
}, PING_INTERVAL);
});
}