Define global logger instance to be used for all logging
Summary: The advantage of this is that anyone can now log without needing to carry around a Logger object. Primary reason is for making metrics less intrusive in the codebase. Reviewed By: passy Differential Revision: D13671368 fbshipit-source-id: 162ab1351a124683aef13983fc3bcec01385cd1a
This commit is contained in:
committed by
Facebook Github Bot
parent
e71804fe9e
commit
3bcb079f87
@@ -1,58 +0,0 @@
|
||||
/**
|
||||
* Copyright 2018-present Facebook.
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
* @format
|
||||
*/
|
||||
import {recordSuccessMetric} from '../metrics';
|
||||
import type Logger from '../../fb-stubs/Logger';
|
||||
|
||||
//$FlowFixMe pretend logger is the right type
|
||||
const logger: Logger = {
|
||||
track: jest.fn(),
|
||||
};
|
||||
|
||||
beforeAll(() => {
|
||||
logger.track.mockClear();
|
||||
});
|
||||
|
||||
test('Wrapping a successful promise preserves result and logs correctly', () => {
|
||||
const successPromise = Promise.resolve('Yay!');
|
||||
const wrappedPromise = recordSuccessMetric(
|
||||
successPromise,
|
||||
'test metric',
|
||||
logger,
|
||||
);
|
||||
return wrappedPromise
|
||||
.then(wrappedValue => {
|
||||
expect(wrappedValue).toBe('Yay!');
|
||||
})
|
||||
.then(() => {
|
||||
expect(logger.track).toHaveBeenCalledWith(
|
||||
'success-rate',
|
||||
'test metric',
|
||||
1,
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
test('Wrapping a rejected promise preserves result and logs correctly', () => {
|
||||
const successPromise = Promise.reject('Oh no!');
|
||||
const wrappedPromise = recordSuccessMetric(
|
||||
successPromise,
|
||||
'test metric',
|
||||
logger,
|
||||
);
|
||||
expect.assertions(2); // Make sure to fail if catch block isn't visited
|
||||
return wrappedPromise
|
||||
.catch(wrappedValue => {
|
||||
expect(wrappedValue).toBe('Oh no!');
|
||||
})
|
||||
.then(() => {
|
||||
expect(logger.track).toHaveBeenCalledWith(
|
||||
'success-rate',
|
||||
'test metric',
|
||||
0,
|
||||
);
|
||||
});
|
||||
});
|
||||
@@ -5,7 +5,7 @@
|
||||
* @format
|
||||
*/
|
||||
|
||||
import type Logger from '../fb-stubs/Logger';
|
||||
import {getInstance} from '../fb-stubs/Logger';
|
||||
|
||||
/*
|
||||
* Wraps a Promise, preserving it's functionality but logging the success or
|
||||
@@ -15,15 +15,14 @@ import type Logger from '../fb-stubs/Logger';
|
||||
export function recordSuccessMetric(
|
||||
promise: Promise<*>,
|
||||
name: string,
|
||||
logger: Logger,
|
||||
): Promise<*> {
|
||||
return promise.then(
|
||||
fulfilledValue => {
|
||||
logger.track('success-rate', name, 1);
|
||||
getInstance().track('success-rate', name, 1);
|
||||
return fulfilledValue;
|
||||
},
|
||||
rejectionReason => {
|
||||
logger.track('success-rate', name, 0);
|
||||
getInstance().track('success-rate', name, 0);
|
||||
return Promise.reject(rejectionReason);
|
||||
},
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user