Skip to content

Commit 26eb978

Browse files
feat/withPackages method in builder to provide where sdk is used
1 parent f2627ff commit 26eb978

4 files changed

Lines changed: 92 additions & 39 deletions

File tree

.idea/workspace.xml

Lines changed: 38 additions & 29 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

traceo-sdk-core/src/main/java/com/traceo/sdk/ClientOptions.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,11 @@ public class ClientOptions {
4747
*/
4848
private IHttpAsyncClient httpClient;
4949

50+
/**
51+
* List of packages where SDK is used.
52+
*/
53+
private List<String> packages = new ArrayList<>();
54+
5055
public ClientOptions() {}
5156

5257
public ClientOptions(ClientOptions configuration) {
@@ -57,6 +62,15 @@ public ClientOptions(ClientOptions configuration) {
5762
this.isCatchUncaughtException = configuration.isCatchUncaughtException();
5863
this.handlers = configuration.getHandlers();
5964
this.httpClient = configuration.getHttpClient();
65+
this.packages = configuration.getPackages();
66+
}
67+
68+
public List<String> getPackages() {
69+
return packages;
70+
}
71+
72+
public void setPackages(List<String> packages) {
73+
this.packages = packages;
6074
}
6175

6276
public void setHandlers(List<IHandler> handlers) {

traceo-sdk-core/src/main/java/com/traceo/sdk/builder/CoreBuilder.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import com.traceo.sdk.ClientOptions;
44

5+
import java.util.List;
6+
57
/**
68
* Base class for every client builders.
79
*
@@ -77,4 +79,16 @@ public final Subclass withCatchUncaughtException(boolean enabled) {
7779
configuration.setCatchUncaughtException(enabled);
7880
return getSubclass();
7981
}
82+
83+
/**
84+
* List of packages where SDK is used. Based on this values, SDK
85+
* can check wheter incoming exception is inside client code or in external library.
86+
*
87+
* @param packages List of packages where SDK is used.
88+
* @return
89+
*/
90+
public final Subclass withPackages(List<String> packages) {
91+
configuration.setPackages(packages);
92+
return getSubclass();
93+
}
8094
}

traceo-sdk-core/src/main/java/com/traceo/sdk/handlers/IncidentHandler.java

Lines changed: 26 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212

1313
public class IncidentHandler {
1414
private final static SDKLogger LOGGER = new SDKLogger(IncidentHandler.class);
15+
private final static String TRACEO_PACKAGE = "com.traceo.sdk";
1516

1617
private final ClientOptions options;
1718

@@ -34,7 +35,7 @@ public void catchException(Throwable throwable, String message, EventCallback<Tr
3435
return;
3536
}
3637

37-
TraceoIncident payload = processIncident(throwable, message);
38+
TraceoIncident payload = processIncident(throwable, message, options);
3839
if (callback != null) {
3940
callback.run(payload);
4041
}
@@ -47,7 +48,7 @@ public void catchException(Throwable throwable, String message, EventCallback<Tr
4748
}
4849
}
4950

50-
private static TraceoIncident processIncident(Throwable throwable, String customMessage) {
51+
private static TraceoIncident processIncident(Throwable throwable, String customMessage, ClientOptions options) {
5152
TraceoIncident traceoIncident = new TraceoIncident();
5253

5354
String stacktrace = ThrowableUtils.stacktraceToString(throwable);
@@ -61,7 +62,7 @@ private static TraceoIncident processIncident(Throwable throwable, String custom
6162
traceoIncident.setMessage(throwable.getMessage());
6263
}
6364

64-
List<TraceoTrace> traces = getTraceList(throwable);
65+
List<TraceoTrace> traces = getTraceList(throwable, options);
6566
traceoIncident.setTraces(traces);
6667

6768
traceoIncident.setStack(stacktrace);
@@ -70,21 +71,36 @@ private static TraceoIncident processIncident(Throwable throwable, String custom
7071
return traceoIncident;
7172
}
7273

73-
private static List<TraceoTrace> getTraceList(Throwable throwable) {
74+
private static List<TraceoTrace> getTraceList(Throwable throwable, ClientOptions options) {
7475
List<TraceoTrace> traces = new ArrayList<>();
7576

76-
for (StackTraceElement stackTraceElement : throwable.getStackTrace()) {
77+
for (StackTraceElement element : throwable.getStackTrace()) {
78+
if (element == null) {
79+
continue;
80+
}
81+
7782
TraceoTrace trace = new TraceoTrace();
78-
trace.setFunction(stackTraceElement.getMethodName());
7983

80-
String[] splitFilename = stackTraceElement.getFileName().split("\\.");
84+
String className = element.getClassName();
85+
if (className.startsWith(TRACEO_PACKAGE)) {
86+
continue;
87+
}
88+
89+
String[] splitFilename = element.getFileName().split("\\.");
8190
if (splitFilename.length > 1) {
8291
trace.setExtension(splitFilename[1]);
8392
}
8493

85-
trace.setFilename(stackTraceElement.getFileName());
86-
trace.setLineNo(stackTraceElement.getLineNumber());
87-
trace.setAbsPath(stackTraceElement.getClassName());
94+
if (!element.isNativeMethod()) {
95+
trace.setLineNo(element.getLineNumber());
96+
}
97+
98+
trace.setFilename(element.getFileName());
99+
trace.setFunction(element.getMethodName());
100+
trace.setAbsPath(element.getClassName());
101+
102+
boolean isInternalTrace = options.getPackages().stream().anyMatch(className::startsWith);
103+
trace.setInternal(isInternalTrace);
88104

89105
traces.add(trace);
90106
}

0 commit comments

Comments
 (0)