Include error messages in success-rate metrics
Summary: At the moment, we can see the %-success of instrumented operations, but it's hard to attribute the ones that fail to actual errors. This will allow us to see for every session-event row, the error messages that caused each of the failures. Then if necessary, you can search for that error message in logview to get more info like the stack trace. Requires a corresponding change in puma, since this is changing a number to a json value. Reviewed By: danielbuechele Differential Revision: D15099185 fbshipit-source-id: b966e6e55ab82f1cb9a4cfd7bf02034a1df01929
This commit is contained in:
committed by
Facebook Github Bot
parent
c01edec88d
commit
bc993596ca
@@ -20,11 +20,11 @@ export function reportPlatformFailures<T>(
|
|||||||
): Promise<T> {
|
): Promise<T> {
|
||||||
return promise.then(
|
return promise.then(
|
||||||
fulfilledValue => {
|
fulfilledValue => {
|
||||||
getInstance().track('success-rate', name, 1);
|
logPlatformSuccessRate(name, {isSuccess: true});
|
||||||
return fulfilledValue;
|
return fulfilledValue;
|
||||||
},
|
},
|
||||||
rejectionReason => {
|
rejectionReason => {
|
||||||
getInstance().track('success-rate', name, 0);
|
logPlatformSuccessRate(name, {isSuccess: false, error: rejectionReason});
|
||||||
return Promise.reject(rejectionReason);
|
return Promise.reject(rejectionReason);
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
@@ -44,11 +44,14 @@ export function reportPluginFailures<T>(
|
|||||||
): Promise<T> {
|
): Promise<T> {
|
||||||
return promise.then(
|
return promise.then(
|
||||||
fulfilledValue => {
|
fulfilledValue => {
|
||||||
getInstance().track('success-rate', name, 1, plugin);
|
logPluginSuccessRate(name, plugin, {isSuccess: true});
|
||||||
return fulfilledValue;
|
return fulfilledValue;
|
||||||
},
|
},
|
||||||
rejectionReason => {
|
rejectionReason => {
|
||||||
getInstance().track('success-rate', name, 0, plugin);
|
logPluginSuccessRate(name, plugin, {
|
||||||
|
isSuccess: false,
|
||||||
|
error: rejectionReason,
|
||||||
|
});
|
||||||
return Promise.reject(rejectionReason);
|
return Promise.reject(rejectionReason);
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
@@ -64,10 +67,43 @@ export function tryCatchReportPlatformFailures<T>(
|
|||||||
): T {
|
): T {
|
||||||
try {
|
try {
|
||||||
const result = closure();
|
const result = closure();
|
||||||
getInstance().track('success-rate', name, 1);
|
logPlatformSuccessRate(name, {isSuccess: true});
|
||||||
return result;
|
return result;
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
getInstance().track('success-rate', name, 0);
|
logPlatformSuccessRate(name, {isSuccess: false, error: e});
|
||||||
throw e;
|
throw e;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type Result = {isSuccess: true} | {isSuccess: false, error: any};
|
||||||
|
|
||||||
|
function logPlatformSuccessRate(name: string, result: Result) {
|
||||||
|
if (result.isSuccess) {
|
||||||
|
getInstance().track('success-rate', name, {value: 1});
|
||||||
|
} else {
|
||||||
|
getInstance().track('success-rate', name, {
|
||||||
|
value: 0,
|
||||||
|
error: extractMessage(result.error),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function logPluginSuccessRate(name: string, plugin: string, result: Result) {
|
||||||
|
if (result.isSuccess) {
|
||||||
|
getInstance().track('success-rate', name, {value: 1}, plugin);
|
||||||
|
} else {
|
||||||
|
getInstance().track(
|
||||||
|
'success-rate',
|
||||||
|
name,
|
||||||
|
{value: 1, error: extractMessage(result.error)},
|
||||||
|
plugin,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function extractMessage(error: any) {
|
||||||
|
if (error instanceof Error) {
|
||||||
|
return error.message;
|
||||||
|
}
|
||||||
|
return JSON.stringify(error);
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user