Remove lru-cache-live in favor of Now CDN

pull/5/head
Amio 2018-07-12 17:09:20 +08:00
rodzic 042387cb33
commit c5f0d8beb0
3 zmienionych plików z 19 dodań i 59 usunięć

Wyświetl plik

@ -26,7 +26,7 @@ async function d (period, args) {
const stats = await r2(endpoint).json
return {
subject: 'downloads',
status: millify(stats.downloads) + period.replace('last-', '%2F'),
status: millify(stats.downloads) + period.replace('last-', '/'),
color: 'green'
}
}

Wyświetl plik

@ -1,27 +0,0 @@
const LRU = require('lru-cache')
const cache = LRU({
max: 5000,
maxAge: 12e4, // 2 minutes
stale: true
})
function listCache (req, res) {
res.writeHead(200)
res.end(`Total ${cache.length}\n${cache.keys().join('\n')}`)
}
function clearCache (req, res) {
const count = cache.length
const keys = cache.keys().join('\n')
cache.reset()
res.writeHead(200)
res.end(`Cleared ${count}\n${keys}`)
}
module.exports = {
cache,
listCache,
clearCache
}

Wyświetl plik

@ -1,5 +1,5 @@
const badgen = require('badgen')
const liveFns = require('./live-fns/_index.js')
const { cache, listCache, clearCache } = require('./lru-cache-live.js')
module.exports = function (router) {
Object.entries(liveFns).forEach(([name, fn]) => {
@ -10,42 +10,29 @@ module.exports = function (router) {
color = 'grey'
} = await fetchLiveParams(name, fn, params['*'])
res.writeHead(302, {
Location: `/badge/${subject}/${status}/${color}`
res.writeHead(200, {
'Content-Type': 'image/svg+xml;charset=utf-8',
'Cache-Control': 'public, max-age=60, s-maxage=60'
})
res.end()
res.end(badgen({subject, status, color}))
})
})
router.get('/list-cache-live', listCache)
router.get('/clear-cache-live', clearCache)
}
async function fetchLiveParams (scope, fn, paramsPath) {
const cached = cache.get(paramsPath)
if (cached) {
return cached
} else {
const cacheKey = `#${scope} ${paramsPath}`
console.time(cacheKey)
return timeout(fn(...paramsPath.split('/')), 30000)
.then(fetched => {
// Update cache if deleted (after got stale)
cache.has(paramsPath) || cache.set(cacheKey, fetched)
return fetched
}, e => {
console.error(e)
return {}
}).then(result => {
console.timeEnd(cacheKey)
return result
})
}
const params = paramsPath.split('/')
const logKey = `#${scope} ${paramsPath}`
return timeout(fn(...params), 30000, logKey)
}
function timeout (promise, period) {
return Promise.race([
new Promise((resolve, reject) => setTimeout(reject, period)),
promise
])
function timeout (task, period, logKey) {
console.time(logKey)
const timer = new Promise((resolve, reject) => setTimeout(reject, period))
return Promise.race([task, timer]).catch(e => {
console.error(e)
return {}
}).then(result => {
console.timeEnd(logKey)
return result
})
}