我想为我的服务提供插件,该插件将测量对 redis 的每次调用并发送带有响应时间的指标。
我该如何包装 ioredis 来做到这一点?
我想使用代理,但它只适用于异步(承诺)方法。
let handler = {
get: (target, name, receiver) => {
const startTime = Date.now();
return (...args) => new Promise((resolve, reject) => {
const apiMethod = Reflect.get(target, name, receiver);
const boundApiMethod = apiMethod.bind(target);
boundApiMethod(...args).then((data) => {
const duration = Date.now() - startTime;
metric({duration});
resolve(data)
}, (err) => {
rawMetering.reportError(err);
reject(err);
});
});
}
};
return new Proxy(redis, handler);