mirror of
https://github.com/nodemailer/wildduck.git
synced 2024-11-10 17:47:07 +08:00
68 lines
2 KiB
JavaScript
68 lines
2 KiB
JavaScript
'use strict';
|
|
|
|
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();
|
|
|
|
module.exports = redis => {
|
|
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) {
|
|
if (!max || isNaN(max)) {
|
|
return callback(null, {
|
|
success: true,
|
|
value: 0,
|
|
ttl: 0
|
|
});
|
|
}
|
|
redis.ttlcounter(key, count, max, windowSize || 86400, (err, res) => {
|
|
if (err) {
|
|
return callback(err);
|
|
}
|
|
return callback(null, {
|
|
success: !!((res && res[0]) || 0),
|
|
value: (res && res[1]) || 0,
|
|
ttl: (res && res[2]) || 0
|
|
});
|
|
});
|
|
},
|
|
|
|
cachedcounter(key, count, ttl, callback) {
|
|
redis.cachedcounter(key, count, ttl, (err, res) => {
|
|
if (err) {
|
|
return callback(err);
|
|
}
|
|
callback(null, res);
|
|
});
|
|
},
|
|
|
|
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
|
|
});
|
|
});
|
|
}
|
|
};
|
|
};
|