wildduck/lib/counters.js

69 lines
2 KiB
JavaScript
Raw Normal View History

'use strict';
2017-10-03 16:18:23 +08:00
const fs = require('fs');
const ttlCounterScript = fs.readFileSync(__dirname + '/lua/ttlcounter.lua', 'utf-8');
const cachedCounterScript = fs.readFileSync(__dirname + '/lua/cachedcounter.lua', 'utf-8');
const limitedCounterScript = fs.readFileSync(__dirname + '/lua/limitedcounter.lua', 'utf-8');
const clientVersion = Date.now();
2017-07-18 16:17:36 +08:00
module.exports = redis => {
2017-10-03 16:18:23 +08:00
redis.defineCommand('ttlcounter', {
numberOfKeys: 1,
lua: ttlCounterScript
});
redis.defineCommand('cachedcounter', {
numberOfKeys: 1,
lua: cachedCounterScript
});
redis.defineCommand('limitedcounter', {
numberOfKeys: 1,
lua: limitedCounterScript
});
return {
ttlcounter(key, count, max, windowSize, callback) {
2017-11-12 21:13:32 +08:00
if (!max || isNaN(max)) {
return callback(null, {
success: true,
value: 0,
ttl: 0
});
}
2017-10-03 16:18:23 +08:00
redis.ttlcounter(key, count, max, windowSize || 86400, (err, res) => {
if (err) {
return callback(err);
}
2017-10-03 16:18:23 +08:00
return callback(null, {
success: !!((res && res[0]) || 0),
value: (res && res[1]) || 0,
ttl: (res && res[2]) || 0
});
});
2017-07-18 16:17:36 +08:00
},
cachedcounter(key, count, ttl, callback) {
2017-10-03 16:18:23 +08:00
redis.cachedcounter(key, count, ttl, (err, res) => {
2017-07-18 16:17:36 +08:00
if (err) {
return callback(err);
}
2017-10-03 16:18:23 +08:00
callback(null, res);
2017-07-18 16:17:36 +08:00
});
},
limitedcounter(key, entry, count, limit, callback) {
redis.limitedcounter(key, entry, count, limit, clientVersion, (err, res) => {
if (err) {
return callback(err);
}
return callback(null, {
success: !!((res && res[0]) || 0),
value: (res && res[1]) || 0
});
});
}
};
};