Cache all badges to show them if the vendor is not accessible.

This commit is contained in:
Thaddee Tyl 2014-04-30 10:46:13 +00:00
parent 3b570b4248
commit 784fcbbbf7

View File

@ -5,6 +5,7 @@ var camp = require('camp').start({
var https = require('https');
var request = require('request');
var fs = require('fs');
var LruCache = require('./lru-cache.js');
var badge = require('./badge.js');
var svg2img = require('./svg-to-img.js');
var serverStartTime = new Date((new Date()).toGMTString());
@ -96,6 +97,9 @@ camp.ajax.on('analytics/v1', function(json, end) { end(analytics); });
var cacheTimeout = 60000; // 1 minute.
var cacheFromIndex = Object.create(null);
// Request cache size of size 1_000_000 (~1GB, 1kB/image).
var requestCache = new LruCache(1000000);
function cache(f) {
return function getRequest(data, match, end, ask) {
// Cache management - no cache, so it won't be cached by GitHub's CDN.
@ -113,6 +117,11 @@ function cache(f) {
// In case our vendor servers are unresponsive.
var serverUnresponsive = false;
var serverResponsive = setTimeout(function() {
if (requestCache.has(cacheIndex)) {
var cached = requestCache.get(cacheIndex);
badge(cached.badgeData, makeSend(cached.format, ask.res, end));
return;
}
var badgeData = getBadgeData('vendor', data);
badgeData.text[1] = 'unresponsive';
serverUnresponsive = true;
@ -123,6 +132,7 @@ function cache(f) {
if (serverUnresponsive) { return; }
clearTimeout(serverResponsive);
cacheFromIndex[cacheIndex] = { format: format, badgeData: badgeData };
requestCache.set(cacheIndex, { format: format, badgeData: badgeData });
setTimeout(function clearCache() {
delete cacheFromIndex[cacheIndex];
}, cacheTimeout);