Skip to content

Commit 443176a

Browse files
committed
Implemented a default request info collector
1 parent 32754a9 commit 443176a

16 files changed

+194
-61
lines changed

src/main/java/com/prashantchaubey/exceptionlessclient/models/Event.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
import java.util.*;
1616
import java.util.stream.Collectors;
1717

18-
import static com.prashantchaubey.exceptionlessclient.utils.EventUtils.safeGetAs;
18+
import static com.prashantchaubey.exceptionlessclient.utils.Utils.safeGetAs;
1919

2020
// Warning `SuperBuilder` will not work for any class extending this. This class breaks the chain
2121
// for customization

src/main/java/com/prashantchaubey/exceptionlessclient/models/services/RequestInfo.java

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,20 +6,23 @@
66
import lombok.experimental.NonFinal;
77
import lombok.experimental.SuperBuilder;
88

9+
import java.util.List;
10+
import java.util.Map;
11+
912
@SuperBuilder
1013
@Value
1114
@NonFinal
1215
@EqualsAndHashCode(callSuper = true)
1316
public class RequestInfo extends Model {
14-
private String userAgent;
15-
private String httpMethod;
16-
private boolean isSecure;
17-
private String host;
18-
private int port;
19-
private String path;
20-
private String referrer;
21-
private String clientIpAddress;
22-
private Object cookies;
23-
private Object postData;
24-
private String queryString;
17+
private String userAgent;
18+
private String httpMethod;
19+
private boolean isSecure;
20+
private String host;
21+
private int port;
22+
private String path;
23+
private String referrer;
24+
private String clientIpAddress;
25+
private Map<String, String> cookies;
26+
private Object postData;
27+
private Map<String, List<String>> queryString;
2528
}

src/main/java/com/prashantchaubey/exceptionlessclient/models/settings/ServerSettings.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.prashantchaubey.exceptionlessclient.models.settings;
22

33
import com.prashantchaubey.exceptionlessclient.models.enums.ServerSettingKey;
4+
import com.prashantchaubey.exceptionlessclient.utils.Utils;
45
import lombok.Builder;
56
import lombok.Value;
67
import lombok.experimental.NonFinal;
@@ -30,8 +31,7 @@ public Optional<String> getTypeAndSourceSetting(String type, String source) {
3031
if (!key.startsWith(prefix) || key.length() <= prefix.length()) {
3132
continue;
3233
}
33-
// todo check that wildcard match work with this or not
34-
if (source.matches(key.substring(prefix.length()))) {
34+
if (Utils.match(source, key.substring(prefix.length()))) {
3535
return Optional.of(settings.get(key));
3636
}
3737
}

src/main/java/com/prashantchaubey/exceptionlessclient/plugins/preconfigured/EnvironmentInfoPlugin.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import com.prashantchaubey.exceptionlessclient.configuration.ConfigurationManager;
44
import com.prashantchaubey.exceptionlessclient.models.Event;
55
import com.prashantchaubey.exceptionlessclient.models.EventPluginContext;
6-
import com.prashantchaubey.exceptionlessclient.models.services.EnvironmentInfoGetArgs;
6+
import com.prashantchaubey.exceptionlessclient.services.EnvironmentInfoGetArgs;
77
import com.prashantchaubey.exceptionlessclient.plugins.EventPluginIF;
88
import lombok.Builder;
99

src/main/java/com/prashantchaubey/exceptionlessclient/queue/EventDataFilter.java

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.prashantchaubey.exceptionlessclient.queue;
22

3-
import com.prashantchaubey.exceptionlessclient.utils.JsonUtils;
3+
import com.prashantchaubey.exceptionlessclient.utils.Utils;
44
import lombok.Builder;
55

66
import java.util.*;
@@ -30,24 +30,23 @@ private Object filter(Object data, int currDepth) {
3030
}
3131

3232
if (!(data instanceof Map || data instanceof List)) {
33-
data = JsonUtils.JSON_MAPPER.convertValue(data, Map.class);
33+
data = Utils.JSON_MAPPER.convertValue(data, Map.class);
3434
}
3535

3636
if (data instanceof List) {
3737
List<Object> dataList = (List<Object>) data;
3838
return dataList.stream().map(val -> filter(val, currDepth + 1)).collect(Collectors.toList());
3939
}
4040

41-
Map<String, Object> dataMap = (Map<String, Object>) data;
42-
Map<String, Object> result = new HashMap<>();
43-
for (String key : dataMap.keySet()) {
44-
// todo check that wildcard match work with this or not
45-
if (exclusions.stream().anyMatch(key::matches)) {
46-
continue;
47-
}
48-
result.put(key, filter(dataMap.get(key), currDepth + 1));
49-
}
50-
51-
return result;
41+
return ((Map<String, Object>) data)
42+
.entrySet().stream()
43+
.filter(
44+
entry ->
45+
exclusions.stream()
46+
.anyMatch(
47+
exclusion -> Utils.match(entry.getKey(), exclusion)))
48+
.collect(
49+
Collectors.toMap(
50+
Map.Entry::getKey, entry -> filter(entry.getValue(), currDepth + 1)));
5251
}
5352
}

src/main/java/com/prashantchaubey/exceptionlessclient/services/DefaultEnvironmentInfoCollector.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import com.prashantchaubey.exceptionlessclient.logging.LogIF;
44
import com.prashantchaubey.exceptionlessclient.models.services.EnvironmentInfo;
5-
import com.prashantchaubey.exceptionlessclient.models.services.EnvironmentInfoGetArgs;
65
import com.sun.management.OperatingSystemMXBean;
76
import lombok.Builder;
87

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
package com.prashantchaubey.exceptionlessclient.services;
2+
3+
import com.prashantchaubey.exceptionlessclient.logging.LogIF;
4+
import com.prashantchaubey.exceptionlessclient.models.services.RequestInfo;
5+
import com.prashantchaubey.exceptionlessclient.utils.Utils;
6+
import lombok.Builder;
7+
8+
import java.net.InetAddress;
9+
import java.net.URI;
10+
import java.net.UnknownHostException;
11+
import java.net.http.HttpRequest;
12+
import java.util.Map;
13+
import java.util.Set;
14+
import java.util.stream.Collectors;
15+
16+
public class DefaultRequestInfoCollector implements RequestInfoCollectorIF {
17+
private LogIF log;
18+
19+
@Builder
20+
public DefaultRequestInfoCollector(LogIF log) {
21+
this.log = log;
22+
}
23+
24+
@Override
25+
public RequestInfo getRequestInfo(HttpRequest request, RequestInfoGetArgs args) {
26+
RequestInfo.RequestInfoBuilder builder =
27+
RequestInfo.builder()
28+
.userAgent(request.headers().firstValue("user-agent").orElse(null))
29+
.isSecure(isSecure(request.uri()))
30+
.httpMethod(request.method())
31+
.host(request.uri().getHost())
32+
.path(request.uri().getPath())
33+
.port(request.uri().getPort());
34+
35+
if (args.isIncludeIpAddress()) {
36+
try {
37+
InetAddress address = InetAddress.getByName(request.uri().getHost());
38+
builder.clientIpAddress(address.getHostAddress());
39+
} catch (UnknownHostException e) {
40+
log.error(
41+
String.format("Error while getting ip-address for host: %s", request.uri().getHost()));
42+
}
43+
}
44+
45+
if (args.isIncludeCookies()) {
46+
builder.cookies(filterExclusions(Utils.getCookies(request), args.getExclusions()));
47+
}
48+
49+
if (args.isIncludeQueryString()) {
50+
builder.queryString(
51+
filterExclusions(Utils.getQueryParams(request.uri()), args.getExclusions()));
52+
}
53+
54+
// todo get post data from request.
55+
56+
return builder.build();
57+
}
58+
59+
private <X> Map<String, X> filterExclusions(Map<String, X> map, Set<String> exclusions) {
60+
return map.entrySet().stream()
61+
.filter(
62+
entry ->
63+
exclusions.stream().anyMatch(exclusion -> Utils.match(entry.getKey(), exclusion)))
64+
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
65+
}
66+
67+
private boolean isSecure(URI uri) {
68+
return uri.getScheme().contains("https");
69+
}
70+
}

src/main/java/com/prashantchaubey/exceptionlessclient/services/EnvironmentInfoCollectorIF.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package com.prashantchaubey.exceptionlessclient.services;
22

33
import com.prashantchaubey.exceptionlessclient.models.services.EnvironmentInfo;
4-
import com.prashantchaubey.exceptionlessclient.models.services.EnvironmentInfoGetArgs;
54

65
public interface EnvironmentInfoCollectorIF {
76
EnvironmentInfo getEnvironmentInfo(EnvironmentInfoGetArgs args);
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.prashantchaubey.exceptionlessclient.models.services;
1+
package com.prashantchaubey.exceptionlessclient.services;
22

33
import lombok.Builder;
44
import lombok.Value;
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package com.prashantchaubey.exceptionlessclient.services;
2+
3+
import com.prashantchaubey.exceptionlessclient.models.services.RequestInfo;
4+
5+
import java.net.http.HttpRequest;
6+
7+
public interface RequestInfoCollectorIF {
8+
RequestInfo getRequestInfo(HttpRequest request, RequestInfoGetArgs args);
9+
}

0 commit comments

Comments
 (0)