Skip to content

Commit aaeeb0f

Browse files
authored
Merge 1d0b774 into cb6c658
2 parents cb6c658 + 1d0b774 commit aaeeb0f

9 files changed

Lines changed: 77 additions & 6 deletions

File tree

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
- Add `lock` attribute to the `SentryStackFrame` protocol to better highlight offending frames in the UI ([#2761](https://github.com/getsentry/sentry-java/pull/2761))
88
- Enrich database spans with blocked main thread info ([#2760](https://github.com/getsentry/sentry-java/pull/2760))
9+
- Add `api_target` to `Request` and `data` to `Response` Protocols ([#2775](https://github.com/getsentry/sentry-java/pull/2775))
910

1011
## 6.21.0
1112

sentry/api/sentry.api

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3305,6 +3305,7 @@ public final class io/sentry/protocol/Request : io/sentry/JsonSerializable, io/s
33053305
public fun <init> ()V
33063306
public fun <init> (Lio/sentry/protocol/Request;)V
33073307
public fun equals (Ljava/lang/Object;)Z
3308+
public fun getApiTarget ()Ljava/lang/String;
33083309
public fun getBodySize ()Ljava/lang/Long;
33093310
public fun getCookies ()Ljava/lang/String;
33103311
public fun getData ()Ljava/lang/Object;
@@ -3318,6 +3319,7 @@ public final class io/sentry/protocol/Request : io/sentry/JsonSerializable, io/s
33183319
public fun getUrl ()Ljava/lang/String;
33193320
public fun hashCode ()I
33203321
public fun serialize (Lio/sentry/JsonObjectWriter;Lio/sentry/ILogger;)V
3322+
public fun setApiTarget (Ljava/lang/String;)V
33213323
public fun setBodySize (Ljava/lang/Long;)V
33223324
public fun setCookies (Ljava/lang/String;)V
33233325
public fun setData (Ljava/lang/Object;)V
@@ -3338,6 +3340,7 @@ public final class io/sentry/protocol/Request$Deserializer : io/sentry/JsonDeser
33383340
}
33393341

33403342
public final class io/sentry/protocol/Request$JsonKeys {
3343+
public static final field API_TARGET Ljava/lang/String;
33413344
public static final field BODY_SIZE Ljava/lang/String;
33423345
public static final field COOKIES Ljava/lang/String;
33433346
public static final field DATA Ljava/lang/String;
@@ -3357,12 +3360,14 @@ public final class io/sentry/protocol/Response : io/sentry/JsonSerializable, io/
33573360
public fun <init> (Lio/sentry/protocol/Response;)V
33583361
public fun getBodySize ()Ljava/lang/Long;
33593362
public fun getCookies ()Ljava/lang/String;
3363+
public fun getData ()Ljava/lang/Object;
33603364
public fun getHeaders ()Ljava/util/Map;
33613365
public fun getStatusCode ()Ljava/lang/Integer;
33623366
public fun getUnknown ()Ljava/util/Map;
33633367
public fun serialize (Lio/sentry/JsonObjectWriter;Lio/sentry/ILogger;)V
33643368
public fun setBodySize (Ljava/lang/Long;)V
33653369
public fun setCookies (Ljava/lang/String;)V
3370+
public fun setData (Ljava/lang/Object;)V
33663371
public fun setHeaders (Ljava/util/Map;)V
33673372
public fun setStatusCode (Ljava/lang/Integer;)V
33683373
public fun setUnknown (Ljava/util/Map;)V
@@ -3377,6 +3382,7 @@ public final class io/sentry/protocol/Response$Deserializer : io/sentry/JsonDese
33773382
public final class io/sentry/protocol/Response$JsonKeys {
33783383
public static final field BODY_SIZE Ljava/lang/String;
33793384
public static final field COOKIES Ljava/lang/String;
3385+
public static final field DATA Ljava/lang/String;
33803386
public static final field HEADERS Ljava/lang/String;
33813387
public static final field STATUS_CODE Ljava/lang/String;
33823388
public fun <init> ()V

sentry/src/main/java/io/sentry/protocol/Request.java

Lines changed: 32 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,16 @@ public final class Request implements JsonUnknown, JsonSerializable {
109109
/** The fragment (anchor) of the request URL. */
110110
private @Nullable String fragment;
111111

112+
/**
113+
* The API target/specification that made the request.
114+
*
115+
* <p>Values can be `graphql`, `rest`, etc.
116+
*
117+
* <p>The data field should contain the request and response bodies based on its target
118+
* specification.
119+
*/
120+
private @Nullable String apiTarget;
121+
112122
@SuppressWarnings("unused")
113123
private @Nullable Map<String, Object> unknown;
114124

@@ -126,6 +136,7 @@ public Request(final @NotNull Request request) {
126136
this.data = request.data;
127137
this.fragment = request.fragment;
128138
this.bodySize = request.bodySize;
139+
this.apiTarget = request.apiTarget;
129140
}
130141

131142
public @Nullable String getUrl() {
@@ -220,12 +231,14 @@ public boolean equals(Object o) {
220231
&& Objects.equals(headers, request.headers)
221232
&& Objects.equals(env, request.env)
222233
&& Objects.equals(bodySize, request.bodySize)
223-
&& Objects.equals(fragment, request.fragment);
234+
&& Objects.equals(fragment, request.fragment)
235+
&& Objects.equals(apiTarget, request.apiTarget);
224236
}
225237

226238
@Override
227239
public int hashCode() {
228-
return Objects.hash(url, method, queryString, cookies, headers, env, bodySize, fragment);
240+
return Objects.hash(
241+
url, method, queryString, cookies, headers, env, bodySize, fragment, apiTarget);
229242
}
230243

231244
// region json
@@ -241,6 +254,14 @@ public void setUnknown(@Nullable Map<String, Object> unknown) {
241254
this.unknown = unknown;
242255
}
243256

257+
public @Nullable String getApiTarget() {
258+
return apiTarget;
259+
}
260+
261+
public void setApiTarget(final @Nullable String apiTarget) {
262+
this.apiTarget = apiTarget;
263+
}
264+
244265
public static final class JsonKeys {
245266
public static final String URL = "url";
246267
public static final String METHOD = "method";
@@ -252,6 +273,7 @@ public static final class JsonKeys {
252273
public static final String OTHER = "other";
253274
public static final String FRAGMENT = "fragment";
254275
public static final String BODY_SIZE = "body_size";
276+
public static final String API_TARGET = "api_target";
255277
}
256278

257279
@Override
@@ -286,7 +308,10 @@ public void serialize(@NotNull JsonObjectWriter writer, @NotNull ILogger logger)
286308
writer.name(JsonKeys.FRAGMENT).value(logger, fragment);
287309
}
288310
if (bodySize != null) {
289-
writer.name(Response.JsonKeys.BODY_SIZE).value(logger, bodySize);
311+
writer.name(JsonKeys.BODY_SIZE).value(logger, bodySize);
312+
}
313+
if (apiTarget != null) {
314+
writer.name(JsonKeys.API_TARGET).value(logger, apiTarget);
290315
}
291316
if (unknown != null) {
292317
for (String key : unknown.keySet()) {
@@ -346,9 +371,12 @@ public static final class Deserializer implements JsonDeserializer<Request> {
346371
case JsonKeys.FRAGMENT:
347372
request.fragment = reader.nextStringOrNull();
348373
break;
349-
case Response.JsonKeys.BODY_SIZE:
374+
case JsonKeys.BODY_SIZE:
350375
request.bodySize = reader.nextLongOrNull();
351376
break;
377+
case JsonKeys.API_TARGET:
378+
request.apiTarget = reader.nextStringOrNull();
379+
break;
352380
default:
353381
if (unknown == null) {
354382
unknown = new ConcurrentHashMap<>();

sentry/src/main/java/io/sentry/protocol/Response.java

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,14 @@ public final class Response implements JsonUnknown, JsonSerializable {
3737
/** The body size in bytes */
3838
private @Nullable Long bodySize;
3939

40+
/**
41+
* Response data in any format that makes sense.
42+
*
43+
* <p>SDKs should discard large and binary bodies by default. Can be given as a string or
44+
* structural data of any format.
45+
*/
46+
private @Nullable Object data;
47+
4048
@SuppressWarnings("unused")
4149
private @Nullable Map<String, Object> unknown;
4250

@@ -48,6 +56,7 @@ public Response(final @NotNull Response response) {
4856
this.unknown = CollectionUtils.newConcurrentHashMap(response.unknown);
4957
this.statusCode = response.statusCode;
5058
this.bodySize = response.bodySize;
59+
this.data = response.data;
5160
}
5261

5362
public @Nullable String getCookies() {
@@ -93,13 +102,22 @@ public void setBodySize(final @Nullable Long bodySize) {
93102
this.bodySize = bodySize;
94103
}
95104

105+
public @Nullable Object getData() {
106+
return data;
107+
}
108+
109+
public void setData(final @Nullable Object data) {
110+
this.data = data;
111+
}
112+
96113
// region json
97114

98115
public static final class JsonKeys {
99116
public static final String COOKIES = "cookies";
100117
public static final String HEADERS = "headers";
101118
public static final String STATUS_CODE = "status_code";
102119
public static final String BODY_SIZE = "body_size";
120+
public static final String DATA = "data";
103121
}
104122

105123
@Override
@@ -119,7 +137,9 @@ public void serialize(final @NotNull JsonObjectWriter writer, final @NotNull ILo
119137
if (bodySize != null) {
120138
writer.name(JsonKeys.BODY_SIZE).value(logger, bodySize);
121139
}
122-
140+
if (data != null) {
141+
writer.name(JsonKeys.DATA).value(logger, data);
142+
}
123143
if (unknown != null) {
124144
for (final String key : unknown.keySet()) {
125145
final Object value = unknown.get(key);
@@ -157,6 +177,9 @@ public static final class Deserializer implements JsonDeserializer<Response> {
157177
case JsonKeys.BODY_SIZE:
158178
response.bodySize = reader.nextLongOrNull();
159179
break;
180+
case JsonKeys.DATA:
181+
response.data = reader.nextObjectOrNull();
182+
break;
160183
default:
161184
if (unknown == null) {
162185
unknown = new ConcurrentHashMap<>();

sentry/src/test/java/io/sentry/protocol/RequestSerializationTest.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ class RequestSerializationTest {
2929
)
3030
bodySize = 1000
3131
fragment = "fragment"
32+
apiTarget = "graphql"
3233
}
3334
}
3435
private val fixture = Fixture()

sentry/src/test/java/io/sentry/protocol/RequestTest.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ class RequestTest {
3535
assertEquals("unknown", clone.unknown!!["unknown"])
3636
assertEquals(1000, clone.bodySize)
3737
assertEquals("fragment", clone.fragment)
38+
assertEquals("graphql", clone.apiTarget)
3839
}
3940

4041
@Test
@@ -52,6 +53,7 @@ class RequestTest {
5253
request.unknown = newUnknown
5354
request.bodySize = 1001
5455
request.fragment = "fragment2"
56+
request.apiTarget = "graphql"
5557

5658
assertEquals("get", clone.method)
5759
assertEquals("http://localhost:8080", clone.url)
@@ -64,6 +66,7 @@ class RequestTest {
6466
assertEquals(1, clone.unknown!!.size)
6567
assertEquals(1000, clone.bodySize)
6668
assertEquals("fragment", clone.fragment)
69+
assertEquals("graphql", clone.apiTarget)
6770
}
6871

6972
@Test
@@ -119,6 +122,7 @@ class RequestTest {
119122
setUnknown(unknown)
120123
bodySize = 1000
121124
fragment = "fragment"
125+
apiTarget = "graphql"
122126
}
123127
}
124128
}

sentry/src/test/java/io/sentry/protocol/ResponseSerializationTest.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@ class ResponseSerializationTest {
1414
headers = mapOf("content-type" to "text/html")
1515
statusCode = 500
1616
bodySize = 1000
17+
data = mapOf(
18+
"d9d709db-b666-40cc-bcbb-093bb12aad26" to "1631d0e6-96b7-4632-85f8-ef69e8bcfb16"
19+
)
1720
unknown = mapOf("arbitrary_field" to "arbitrary")
1821
}
1922
}

sentry/src/test/resources/json/request.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,5 +20,6 @@
2020
"669ff1c1-517b-46dc-a889-131555364a56": "89043294-f6e1-4e2e-b152-1fdf9b1102fc"
2121
},
2222
"fragment": "fragment",
23-
"body_size": 1000
23+
"body_size": 1000,
24+
"api_target": "graphql"
2425
}

sentry/src/test/resources/json/response.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,9 @@
55
},
66
"status_code": 500,
77
"body_size": 1000,
8+
"data":
9+
{
10+
"d9d709db-b666-40cc-bcbb-093bb12aad26": "1631d0e6-96b7-4632-85f8-ef69e8bcfb16"
11+
},
812
"arbitrary_field": "arbitrary"
913
}

0 commit comments

Comments
 (0)