Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 9 additions & 9 deletions core/src/main/java/dev/faststats/ErrorHelper.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,9 @@
import java.util.regex.Pattern;

final class ErrorHelper {
private static final int MESSAGE_LENGTH = Math.min(1000, Integer.getInteger("faststats.message-length", 500));
private static final int STACK_TRACE_LENGTH = Math.min(500, Integer.getInteger("faststats.stack-trace-length", 300));
private static final int STACK_TRACE_LIMIT = Math.min(50, Integer.getInteger("faststats.stack-trace-limit", 15));
public static final int MAX_MESSAGE_LENGTH = 1000;
public static final int MAX_FRAME_SIZE = 300;
public static final int MAX_STACK_SIZE = 30;

private static final Set<String> allowedNames = Set.of("minecraft", "server", "root", "ubuntu");
private static final List<Map.Entry<Pattern, String>> defaultAnonymizationEntries = defaultAnonymizationEntries();
Expand Down Expand Up @@ -48,7 +48,7 @@ private static JsonObject compileAll(final TrackedError trackedError, @Nullable
final var stack = collapseStackTrace(elements);
final var list = new ArrayList<>(stack);
if (suppress != null) list.removeAll(suppress);
final var traces = Math.min(list.size(), STACK_TRACE_LIMIT);
final var traces = Math.min(list.size(), MAX_STACK_SIZE);

populateTraces(traces, list, elements, stacktrace);
appendCauseChain(error.getCause(), stack, suppress, stacktrace, customPatterns);
Expand Down Expand Up @@ -85,7 +85,7 @@ private static void appendCauseChain(@Nullable Throwable cause, final List<Strin
final var causeStack = collapseStackTrace(causeElements);
final var causeList = new ArrayList<>(causeStack);
causeList.removeAll(toSuppress);
final var causeTraces = Math.min(causeList.size(), STACK_TRACE_LIMIT);
final var causeTraces = Math.min(causeList.size(), MAX_STACK_SIZE);
populateTraces(causeTraces, causeList, causeElements, stacktrace);

cause = cause.getCause();
Expand All @@ -96,8 +96,8 @@ private static void populateTraces(final int traces, final List<String> list, fi
final JsonArray stacktrace) {
for (var i = 0; i < traces; i++) {
final var string = list.get(i);
if (string.length() <= STACK_TRACE_LENGTH) stacktrace.add(" at " + string);
else stacktrace.add(" at " + string.substring(0, STACK_TRACE_LENGTH) + "...");
if (MAX_FRAME_SIZE < 0 || string.length() <= MAX_FRAME_SIZE) stacktrace.add(" at " + string);
else stacktrace.add(" at " + string.substring(0, MAX_FRAME_SIZE) + "...");
}
if (traces > 0 && traces < list.size()) {
stacktrace.add(" ... " + (list.size() - traces) + " more");
Expand Down Expand Up @@ -216,8 +216,8 @@ private static boolean isSameClassLoader(final ClassLoader classLoader, final Cl
private static @Nullable String getAnonymizedMessage(final Throwable error, final List<Map.Entry<Pattern, String>> customPatterns) {
final var message = error.getMessage();
if (message == null) return null;
var truncated = message.length() > MESSAGE_LENGTH
? message.substring(0, MESSAGE_LENGTH) + "..."
var truncated = message.length() > MAX_MESSAGE_LENGTH
? message.substring(0, MAX_MESSAGE_LENGTH) + "..."
: message;
for (final var entry : customPatterns) {
truncated = entry.getKey().matcher(truncated).replaceAll(entry.getValue());
Expand Down
4 changes: 2 additions & 2 deletions core/src/test/java/dev/faststats/ErrorTrackerTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -285,13 +285,13 @@ public void repeatingStackFramesAreCollapsed() {

@Test
public void longMessagesAreTruncatedBeforeSerialization() {
final var message = "a".repeat(600);
final var message = "a".repeat(ErrorHelper.MAX_MESSAGE_LENGTH * 2);

tracker.trackError(message);

final var report = tracker.getFullData().get(0).getAsJsonObject();
final var serialized = report.get("message").getAsString();
assertEquals(503, serialized.length());
assertEquals(ErrorHelper.MAX_MESSAGE_LENGTH + 3, serialized.length());
assertTrue(serialized.endsWith("..."));
assertEquals("java.lang.RuntimeException: " + serialized, report.getAsJsonArray("stack").get(0).getAsString());
}
Expand Down