diff --git a/server/index.js b/server/index.js index 973ad10..c8ace07 100644 --- a/server/index.js +++ b/server/index.js @@ -1,4 +1,5 @@ const Bluebird = require('bluebird'); +const Moment = require('moment'); const FS = Bluebird.promisifyAll(require('fs')); const OS = require('os'); const Express = require('express'); @@ -28,6 +29,7 @@ app.use(Compression()) app.use(SpiderDetector.middleware()); app.use(`/`, Express.static(`${__dirname}/www`)); app.get('/.mtime', handleTimestampRequest); +app.get('/.cache', handleCacheStatusRequest); app.get('/json/*', handleJSONRequest); app.get(`/*`, handlePageRequest); app.purge(`/*`, handlePurgeRequest); @@ -47,6 +49,34 @@ async function handleTimestampRequest(req, res, next) { } } +async function handleCacheStatusRequest(req, res, next) { + try { + res.set({ 'X-Accel-Expires': 0 }); + res.type('html'); + res.write(`Nginx Cache`); + res.write(``); + res.write(``); + res.write(``); + let entries = await NginxCache.read(); + let total = 0; + for (let entry of _.orderBy(entries, 'mtime', 'desc')) { + let { url, mtime, size } = entry; + let date = Moment(mtime).format('LLLL'); + let sizeKB = _.round(size / 1024, 2); + res.write(``) + total += size; + } + let totalMB = _.round(total / 1024 / 1024, 2); + res.write(``) + res.write(``); + res.write(`
URLModified timeSize
${url}${date}${sizeKB}KB
Total${totalMB}MB
`); + res.write(``); + res.end(); + } catch (err) { + next(err); + } +} + async function handleJSONRequest(req, res, next) { try { let path = `/wp-json/${req.url.substr(6)}`; diff --git a/server/nginx-cache.js b/server/nginx-cache.js index 9e023ef..d8b771f 100644 --- a/server/nginx-cache.js +++ b/server/nginx-cache.js @@ -58,11 +58,11 @@ let cacheEntryCache = {}; async function loadCacheEntry(md5) { try { let path = `${NGINX_CACHE}/${md5}`; - let { mtime } = await FS.statAsync(path); + let { mtime, size } = await FS.statAsync(path); let entry = cacheEntryCache[md5]; if (!entry || entry.mtime !== mtime) { let url = await loadCacheEntryKey(path); - entry = cacheEntryCache[md5] = { url, mtime, md5 }; + entry = cacheEntryCache[md5] = { url, md5, mtime, size }; } return entry; } catch (err) { @@ -98,4 +98,5 @@ async function removeCacheEntry(entry) { module.exports = { purge, + read: loadCacheEntries, };