| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- /*
- * decaffeinate suggestions:
- * DS101: Remove unnecessary use of Array.from
- * DS102: Remove unnecessary code created because of implicit returns
- * DS201: Simplify complex destructure assignments
- * DS207: Consider shorter variations of null checks
- * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
- */
- module.exports = function(obj, methodName, prefix, logger) {
- let modifedMethodName;
- const metrics = require('./metrics');
- if (typeof obj[methodName] !== 'function') {
- throw new Error(`[Metrics] expected object property '${methodName}' to be a function`);
- }
- const key = `${prefix}.${methodName}`;
- const realMethod = obj[methodName];
- const splitPrefix = prefix.split(".");
- const startPrefix = splitPrefix[0];
- if (splitPrefix[1] != null) {
- modifedMethodName = `${splitPrefix[1]}_${methodName}`;
- } else {
- modifedMethodName = methodName;
- }
- return obj[methodName] = function(...originalArgs) {
- const adjustedLength = Math.max(originalArgs.length, 1), firstArgs = originalArgs.slice(0, adjustedLength - 1), callback = originalArgs[adjustedLength - 1];
- if ((callback == null) || (typeof callback !== 'function')) {
- if (logger != null) {
- logger.log(`[Metrics] expected wrapped method '${methodName}' to be invoked with a callback`);
- }
- return realMethod.apply(this, originalArgs);
- }
- const timer = new metrics.Timer(startPrefix, 1, {method: modifedMethodName});
- return realMethod.call(this, ...Array.from(firstArgs), function(...callbackArgs) {
- const elapsedTime = timer.done();
- const possibleError = callbackArgs[0];
- if (possibleError != null) {
- metrics.inc(`${startPrefix}_result`, 1, {status:"failed", method: modifedMethodName});
- } else {
- metrics.inc(`${startPrefix}_result`, 1, {status:"success", method: modifedMethodName});
- }
- if (logger != null) {
- const loggableArgs = {};
- try {
- for (let idx = 0; idx < firstArgs.length; idx++) {
- const arg = firstArgs[idx];
- if (arg.toString().match(/^[0-9a-f]{24}$/)) {
- loggableArgs[`${idx}`] = arg;
- }
- }
- } catch (error) {}
- logger.log({key, args: loggableArgs, elapsedTime}, "[Metrics] timed async method call");
- }
- return callback.apply(this, callbackArgs);
- });
- };
- };
|