WIP
This commit is contained in:
parent
745eb225df
commit
bcca339ea6
2 changed files with 27 additions and 2 deletions
|
|
@ -14,6 +14,8 @@ module.exports = {
|
||||||
|
|
||||||
const STALE_TICKER = 3 * 60 * 1000
|
const STALE_TICKER = 3 * 60 * 1000
|
||||||
const STALE_BALANCE = 3 * 60 * 1000
|
const STALE_BALANCE = 3 * 60 * 1000
|
||||||
|
const CLOCK_SKEW = 60 * 1000
|
||||||
|
const REQUEST_TTL = 3 * 60 * 1000
|
||||||
|
|
||||||
const pids = {}
|
const pids = {}
|
||||||
const reboots = {}
|
const reboots = {}
|
||||||
|
|
@ -301,7 +303,13 @@ function cacheAndRespond (req, res, _body, _status) {
|
||||||
const body = _body || {}
|
const body = _body || {}
|
||||||
|
|
||||||
return updateCachedAction(req, body, status)
|
return updateCachedAction(req, body, status)
|
||||||
// .then(() => res.status(status).json(body))
|
.then(() => res.status(status).json(body))
|
||||||
|
}
|
||||||
|
|
||||||
|
function pruneIdempotents () {
|
||||||
|
const sql = "delete from idempotents where created < now() - interval '24 hours'"
|
||||||
|
|
||||||
|
return db.none(sql)
|
||||||
}
|
}
|
||||||
|
|
||||||
function httpError (msg, code) {
|
function httpError (msg, code) {
|
||||||
|
|
@ -312,6 +320,18 @@ function httpError (msg, code) {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function filterOldRequests (req, res, next) {
|
||||||
|
const deviceTime = getDeviceTime(req)
|
||||||
|
const delta = Date.now() - deviceTime
|
||||||
|
|
||||||
|
if (delta > CLOCK_SKEW) {
|
||||||
|
logger.error('Clock skew with lamassu-machine too high [%ss], adjust lamassu-machine clock', (delta / 1000).toFixed(2))
|
||||||
|
}
|
||||||
|
|
||||||
|
if (delta > REQUEST_TTL) return res.status(408).end()
|
||||||
|
next()
|
||||||
|
}
|
||||||
|
|
||||||
function init (opts) {
|
function init (opts) {
|
||||||
plugins = opts.plugins
|
plugins = opts.plugins
|
||||||
|
|
||||||
|
|
@ -319,6 +339,7 @@ function init (opts) {
|
||||||
const app = opts.app
|
const app = opts.app
|
||||||
const localApp = opts.localApp
|
const localApp = opts.localApp
|
||||||
|
|
||||||
|
app.use(filterOldRequests)
|
||||||
app.post('*', cacheAction)
|
app.post('*', cacheAction)
|
||||||
|
|
||||||
app.post('/pair', pair)
|
app.post('/pair', pair)
|
||||||
|
|
@ -373,6 +394,8 @@ function init (opts) {
|
||||||
.catch(logger.error)
|
.catch(logger.error)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
setInterval(pruneIdempotents, 60000)
|
||||||
|
|
||||||
return app
|
return app
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
4
todo.txt
4
todo.txt
|
|
@ -117,4 +117,6 @@ v finish idempotency for all calls
|
||||||
|
|
||||||
-------------
|
-------------
|
||||||
|
|
||||||
test pending action (action needs to take a while so we can test)
|
- test pending action (action needs to take a while so we can test)
|
||||||
|
- defaults and validation
|
||||||
|
- tweak install script
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue