🚑 add more metrics catch (#12917)

This commit is contained in:
songxiaosheng 2023-08-16 20:04:25 +08:00 committed by GitHub
parent 4562932433
commit b87746b19f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 15 additions and 22 deletions

View File

@ -43,7 +43,9 @@ public class MetricsEventBus {
return;
}
MetricsDispatcher dispatcher = event.getMetricsDispatcher();
Optional.ofNullable(dispatcher).ifPresent(d -> d.publishEvent(event));
Optional.ofNullable(dispatcher).ifPresent(d -> {
tryInvoke(() -> d.publishEvent(event));
});
}
/**
@ -70,32 +72,22 @@ public class MetricsEventBus {
*/
public static <T> T post(MetricsEvent event, Supplier<T> targetSupplier, Function<T, Boolean> trFunction) {
T result;
tryInvoke(() -> {
before(event);
});
tryInvoke(() -> before(event));
if (trFunction == null) {
try {
result = targetSupplier.get();
} catch (Throwable e) {
tryInvoke(() -> {
error(event);
});
tryInvoke(() -> error(event));
throw e;
}
tryInvoke(() -> {
after(event, result);
});
tryInvoke(() -> after(event, result));
} else {
// Custom failure status
result = targetSupplier.get();
if (trFunction.apply(result)) {
tryInvoke(() -> {
after(event, result);
});
tryInvoke(() -> after(event, result));
} else {
tryInvoke(() -> {
error(event);
});
tryInvoke(() -> error(event));
}
}
return result;
@ -105,8 +97,7 @@ public class MetricsEventBus {
try {
runnable.run();
} catch (Throwable e) {
logger.warn(COMMON_METRICS_COLLECTOR_EXCEPTION, "" +
"", "", "invoke metric event error" + e.getMessage());
logger.warn(COMMON_METRICS_COLLECTOR_EXCEPTION, "", "", "invoke metric event error" + e.getMessage());
}
}
@ -117,20 +108,22 @@ public class MetricsEventBus {
public static void before(MetricsEvent event) {
MetricsDispatcher dispatcher = validate(event);
if (dispatcher == null) return;
dispatcher.publishEvent(event);
tryInvoke(() -> dispatcher.publishEvent(event));
}
public static void after(MetricsEvent event, Object result) {
MetricsDispatcher dispatcher = validate(event);
if (dispatcher == null) return;
event.customAfterPost(result);
dispatcher.publishFinishEvent((TimeCounterEvent) event);
tryInvoke(() -> {
event.customAfterPost(result);
dispatcher.publishFinishEvent((TimeCounterEvent) event);
});
}
public static void error(MetricsEvent event) {
MetricsDispatcher dispatcher = validate(event);
if (dispatcher == null) return;
dispatcher.publishErrorEvent((TimeCounterEvent) event);
tryInvoke(() -> dispatcher.publishErrorEvent((TimeCounterEvent) event));
}
private static MetricsDispatcher validate(MetricsEvent event) {