kopia lustrzana https://github.com/manuelkasper/sotlas-api
Add API for obtaining solar data
rodzic
04f6e36486
commit
46ecf82c79
|
@ -79,3 +79,7 @@ config.mail = {
|
||||||
host: "neon1.net",
|
host: "neon1.net",
|
||||||
port: 587
|
port: 587
|
||||||
};
|
};
|
||||||
|
|
||||||
|
config.solardata = {
|
||||||
|
apiKey: 'xxxxxxxxxxxxxxxxx'
|
||||||
|
};
|
||||||
|
|
|
@ -16,6 +16,7 @@ const activations = require('./activations');
|
||||||
const utils = require('./utils');
|
const utils = require('./utils');
|
||||||
const photos_router = require('./photos_router')
|
const photos_router = require('./photos_router')
|
||||||
const tracks_router = require('./tracks_router')
|
const tracks_router = require('./tracks_router')
|
||||||
|
const solardata = require('./solardata')
|
||||||
const maxmind = require('maxmind');
|
const maxmind = require('maxmind');
|
||||||
|
|
||||||
let dbChecker = (req, res, next) => {
|
let dbChecker = (req, res, next) => {
|
||||||
|
@ -40,6 +41,7 @@ app.use('/activations', activations);
|
||||||
app.use('/users', users);
|
app.use('/users', users);
|
||||||
app.use('/photos', photos_router);
|
app.use('/photos', photos_router);
|
||||||
app.use('/tracks', tracks_router);
|
app.use('/tracks', tracks_router);
|
||||||
|
app.use('/solardata', solardata);
|
||||||
|
|
||||||
let sotaSpotReceiver = new SotaSpotReceiver();
|
let sotaSpotReceiver = new SotaSpotReceiver();
|
||||||
let rbnReceiver = new RbnReceiver();
|
let rbnReceiver = new RbnReceiver();
|
||||||
|
|
|
@ -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()
|
||||||
|
})
|
|
@ -47,7 +47,11 @@ class WebSocketManager extends EventEmitter {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
ws.isAlive = false;
|
ws.isAlive = false;
|
||||||
ws.ping();
|
try {
|
||||||
|
ws.ping();
|
||||||
|
} catch (e) {
|
||||||
|
console.error(e);
|
||||||
|
}
|
||||||
}, PING_INTERVAL);
|
}, PING_INTERVAL);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
Ładowanie…
Reference in New Issue