52 lines
1.2 KiB
JavaScript
52 lines
1.2 KiB
JavaScript
/**
|
|
* profiler.js: TODO: add file header description.
|
|
*
|
|
* (C) 2010 Charlie Robbins
|
|
* MIT LICENCE
|
|
*/
|
|
|
|
'use strict';
|
|
|
|
/**
|
|
* TODO: add class description.
|
|
* @type {Profiler}
|
|
* @private
|
|
*/
|
|
module.exports = class Profiler {
|
|
/**
|
|
* Constructor function for the Profiler instance used by
|
|
* `Logger.prototype.startTimer`. When done is called the timer will finish
|
|
* and log the duration.
|
|
* @param {!Logger} logger - TODO: add param description.
|
|
* @private
|
|
*/
|
|
constructor(logger) {
|
|
if (!logger) {
|
|
throw new Error('Logger is required for profiling.');
|
|
}
|
|
|
|
this.logger = logger;
|
|
this.start = Date.now();
|
|
}
|
|
|
|
/**
|
|
* Ends the current timer (i.e. Profiler) instance and logs the `msg` along
|
|
* with the duration since creation.
|
|
* @returns {mixed} - TODO: add return description.
|
|
* @private
|
|
*/
|
|
done(...args) {
|
|
if (typeof args[args.length - 1] === 'function') {
|
|
// eslint-disable-next-line no-console
|
|
console.warn('Callback function no longer supported as of winston@3.0.0');
|
|
args.pop();
|
|
}
|
|
|
|
const info = typeof args[args.length - 1] === 'object' ? args.pop() : {};
|
|
info.level = info.level || 'info';
|
|
info.durationMs = (Date.now()) - this.start;
|
|
|
|
return this.logger.write(info);
|
|
}
|
|
};
|