From b2366edeec68f4a1ac6692e50368dc0dfb0a71ab Mon Sep 17 00:00:00 2001 From: Andrew Liu <159852527+aliu3ntry@users.noreply.github.com> Date: Fri, 1 Mar 2024 14:20:28 -0800 Subject: [PATCH 01/18] Create ingest-feedbacks.yaml https://getsentry.atlassian.net/browse/OPS-5317 https://github.com/getsentry/sentry/issues/66100 Pipeline/cluster = replays, since replay team owns user feedback. We expect the volume to be too low to justify its own cluster. --- topics/ingest-feedbacks.yaml | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 topics/ingest-feedbacks.yaml diff --git a/topics/ingest-feedbacks.yaml b/topics/ingest-feedbacks.yaml new file mode 100644 index 00000000..1ed8ea88 --- /dev/null +++ b/topics/ingest-feedbacks.yaml @@ -0,0 +1,17 @@ +topic: ingest-feedbacks +pipeline: replays +description: User feedback widget events and attachments +services: + producers: + - getsentry/sentry + consumers: + - getsentry/sentry +schemas: + - version: 1 + compatibility_mode: none + type: json + resource: events.v1.schema.json + examples: + - events/1/ +topic_creation_config: + message.timestamp.type: LogAppendTime From bc6a9f081f8e4cf46610308c1f5bffab4f303aa7 Mon Sep 17 00:00:00 2001 From: Andrew Liu <159852527+aliu3ntry@users.noreply.github.com> Date: Fri, 1 Mar 2024 14:22:37 -0800 Subject: [PATCH 02/18] Update ingest-feedbacks description --- topics/ingest-feedbacks.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/topics/ingest-feedbacks.yaml b/topics/ingest-feedbacks.yaml index 1ed8ea88..cad18089 100644 --- a/topics/ingest-feedbacks.yaml +++ b/topics/ingest-feedbacks.yaml @@ -1,6 +1,6 @@ topic: ingest-feedbacks pipeline: replays -description: User feedback widget events and attachments +description: User feedback widget events services: producers: - getsentry/sentry From cf1f81d4d818b10989c17a2321ce6ff28340a470 Mon Sep 17 00:00:00 2001 From: Andrew Liu <159852527+aliu3ntry@users.noreply.github.com> Date: Mon, 4 Mar 2024 14:29:47 -0800 Subject: [PATCH 03/18] Fix ingest-feedbacks.yaml producers +small change to descrip --- topics/ingest-feedbacks.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/topics/ingest-feedbacks.yaml b/topics/ingest-feedbacks.yaml index cad18089..9623c79f 100644 --- a/topics/ingest-feedbacks.yaml +++ b/topics/ingest-feedbacks.yaml @@ -1,9 +1,9 @@ topic: ingest-feedbacks pipeline: replays -description: User feedback widget events +description: User feedback events, submitted from user services: producers: - - getsentry/sentry + - getsentry/relay consumers: - getsentry/sentry schemas: From 7e75859ab23649e4da4be40bcdda9d95e467b713 Mon Sep 17 00:00:00 2001 From: Andrew Liu Date: Tue, 5 Mar 2024 14:57:17 -0800 Subject: [PATCH 04/18] add new schema and pipeline + rename - move to new 'user-feedback' pipeline - add an initial schema generated from a widget feedback (captured by chrome dev tools) and https://github.com/glideapps/quicktype - rename to 'ingest-feedback-events' since 'FeedbackEvent' seems to be the corresponding type in Django + SDK/typescript --- examples/feedback-events/1/widget.json | 67 +++++ schemas/ingest-feedback-events.v1.schema.json | 279 ++++++++++++++++++ topics/ingest-feedback-events.yaml | 15 + topics/ingest-feedbacks.yaml | 17 -- 4 files changed, 361 insertions(+), 17 deletions(-) create mode 100644 examples/feedback-events/1/widget.json create mode 100644 schemas/ingest-feedback-events.v1.schema.json create mode 100644 topics/ingest-feedback-events.yaml delete mode 100644 topics/ingest-feedbacks.yaml diff --git a/examples/feedback-events/1/widget.json b/examples/feedback-events/1/widget.json new file mode 100644 index 00000000..dc35f77c --- /dev/null +++ b/examples/feedback-events/1/widget.json @@ -0,0 +1,67 @@ +{ + "contexts": { + "trace": { + "data": { + "sentry.source": "url", + "sentry.origin": "manual", + "sentry.op": "ui.action.click", + "sentry.sample_rate": 1 + }, + "op": "ui.action.click", + "span_id": "af56b414007cdf14", + "trace_id": "9ae5b04b26f3481cab6c326aaa9bca9f", + "origin": "manual" + }, + "angular": { + "version": 17 + }, + "feedback": { + "contact_email": "john.doe@gmail.com", + "name": "John Doe", + "message": "Test feedback submission\nHello world! Nice widget", + "url": "https://nugettrends.com/", + "source": "widget", + "replay_id": "a60c73d398334770a050eaee2a9bfd93" + } + }, + "type": "feedback", + "request": { + "url": "https://nugettrends.com/", + "headers": { + "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36" + } + }, + "event_id": "5c941f7c8d3c4a56b05119c4b612991d", + "timestamp": 1709675365.66, + "environment": "production", + "release": "27e7677", + "sdk": { + "integrations": [ + "InboundFilters", + "FunctionToString", + "Breadcrumbs", + "GlobalHandlers", + "LinkedErrors", + "Dedupe", + "HttpContext", + "Replay", + "ReplayCanvas", + "Feedback", + "BrowserTracing", + "BrowserProfiling" + ], + "name": "sentry.javascript.angular-ivy", + "version": "7.100.1", + "packages": [ + { + "name": "npm:@sentry/angular-ivy", + "version": "7.100.1" + } + ] + }, + "level": "info", + "tags": { + "transaction": "/" + }, + "platform": "javascript" +} diff --git a/schemas/ingest-feedback-events.v1.schema.json b/schemas/ingest-feedback-events.v1.schema.json new file mode 100644 index 00000000..4d0512de --- /dev/null +++ b/schemas/ingest-feedback-events.v1.schema.json @@ -0,0 +1,279 @@ +{ + "$schema": "http://json-schema.org/draft-06/schema#", + "$ref": "#/definitions/FeedbackEvent", + "definitions": { + "FeedbackEvent": { + "type": "object", + "additionalProperties": false, + "properties": { + "contexts": { + "$ref": "#/definitions/Contexts" + }, + "type": { + "type": "string" + }, + "request": { + "$ref": "#/definitions/Request" + }, + "event_id": { + "type": "string" + }, + "timestamp": { + "type": "number" + }, + "environment": { + "type": "string" + }, + "release": { + "type": "string" + }, + "sdk": { + "$ref": "#/definitions/SDK" + }, + "level": { + "type": "string" + }, + "tags": { + "$ref": "#/definitions/Tags" + }, + "platform": { + "type": "string" + } + }, + "required": [ + "contexts", + "environment", + "event_id", + "level", + "platform", + "release", + "request", + "sdk", + "tags", + "timestamp", + "type" + ], + "title": "FeedbackEvent" + }, + "Contexts": { + "type": "object", + "additionalProperties": false, + "properties": { + "trace": { + "$ref": "#/definitions/Trace" + }, + "angular": { + "$ref": "#/definitions/Angular" + }, + "feedback": { + "$ref": "#/definitions/Feedback" + } + }, + "required": [ + "angular", + "feedback", + "trace" + ], + "title": "Contexts" + }, + "Angular": { + "type": "object", + "additionalProperties": false, + "properties": { + "version": { + "type": "integer" + } + }, + "required": [ + "version" + ], + "title": "Angular" + }, + "Feedback": { + "type": "object", + "additionalProperties": false, + "properties": { + "contact_email": { + "type": "string" + }, + "name": { + "type": "string" + }, + "message": { + "type": "string" + }, + "url": { + "type": "string", + "format": "uri", + "qt-uri-protocols": [ + "https" + ] + }, + "source": { + "type": "string" + }, + "replay_id": { + "type": "string" + } + }, + "required": [ + "contact_email", + "message", + "name", + "replay_id", + "source", + "url" + ], + "title": "Feedback" + }, + "Trace": { + "type": "object", + "additionalProperties": false, + "properties": { + "data": { + "$ref": "#/definitions/Data" + }, + "op": { + "type": "string" + }, + "span_id": { + "type": "string" + }, + "trace_id": { + "type": "string" + }, + "origin": { + "type": "string" + } + }, + "required": [ + "data", + "op", + "origin", + "span_id", + "trace_id" + ], + "title": "Trace" + }, + "Data": { + "type": "object", + "additionalProperties": false, + "properties": { + "sentry.source": { + "type": "string" + }, + "sentry.origin": { + "type": "string" + }, + "sentry.op": { + "type": "string" + }, + "sentry.sample_rate": { + "type": "integer" + } + }, + "required": [ + "sentry.op", + "sentry.origin", + "sentry.sample_rate", + "sentry.source" + ], + "title": "Data" + }, + "Request": { + "type": "object", + "additionalProperties": false, + "properties": { + "url": { + "type": "string", + "format": "uri", + "qt-uri-protocols": [ + "https" + ] + }, + "headers": { + "$ref": "#/definitions/Headers" + } + }, + "required": [ + "headers", + "url" + ], + "title": "Request" + }, + "Headers": { + "type": "object", + "additionalProperties": false, + "properties": { + "User-Agent": { + "type": "string" + } + }, + "required": [ + "User-Agent" + ], + "title": "Headers" + }, + "SDK": { + "type": "object", + "additionalProperties": false, + "properties": { + "integrations": { + "type": "array", + "items": { + "type": "string" + } + }, + "name": { + "type": "string" + }, + "version": { + "type": "string" + }, + "packages": { + "type": "array", + "items": { + "$ref": "#/definitions/Package" + } + } + }, + "required": [ + "integrations", + "name", + "packages", + "version" + ], + "title": "SDK" + }, + "Package": { + "type": "object", + "additionalProperties": false, + "properties": { + "name": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "required": [ + "name", + "version" + ], + "title": "Package" + }, + "Tags": { + "type": "object", + "additionalProperties": false, + "properties": { + "transaction": { + "type": "string" + } + }, + "required": [ + "transaction" + ], + "title": "Tags" + } + } +} diff --git a/topics/ingest-feedback-events.yaml b/topics/ingest-feedback-events.yaml new file mode 100644 index 00000000..e6d217c5 --- /dev/null +++ b/topics/ingest-feedback-events.yaml @@ -0,0 +1,15 @@ +topic: ingest-feedback-events +pipeline: user-feedback +description: User feedback events from SDK +services: + producers: + - getsentry/relay + consumers: + - getsentry/sentry +schemas: + - version: 1 + compatibility_mode: none + type: json + resource: ingest-feedback-events.v1.schema.json + examples: + - feedback-events/1/ diff --git a/topics/ingest-feedbacks.yaml b/topics/ingest-feedbacks.yaml deleted file mode 100644 index 9623c79f..00000000 --- a/topics/ingest-feedbacks.yaml +++ /dev/null @@ -1,17 +0,0 @@ -topic: ingest-feedbacks -pipeline: replays -description: User feedback events, submitted from user -services: - producers: - - getsentry/relay - consumers: - - getsentry/sentry -schemas: - - version: 1 - compatibility_mode: none - type: json - resource: events.v1.schema.json - examples: - - events/1/ -topic_creation_config: - message.timestamp.type: LogAppendTime From 171899160744078b5b006c709469f70e85e26845 Mon Sep 17 00:00:00 2001 From: Andrew Liu Date: Tue, 5 Mar 2024 15:08:19 -0800 Subject: [PATCH 05/18] add topic to CODEOWNERS --- CODEOWNERS | 1 + 1 file changed, 1 insertion(+) diff --git a/CODEOWNERS b/CODEOWNERS index 242dd7d1..e0f1cced 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -2,6 +2,7 @@ /topics/ingest-metrics.yaml @getsentry/owners-ingest @getsentry/owners-snuba /topics/ingest-performance-metrics.yaml @getsentry/owners-ingest @getsentry/owners-snuba /topics/ingest-replay-recordings.yaml @getsentry/owners-ingest @getsentry/owners-snuba @getsentry/replay +/topics/ingest-feedback-events.yaml @getsentry/owners-ingest @getsentry/owners-snuba @getsentry/replay # DLQs for ingest topics /topics/ingest-events-dlq.yaml @getsentry/owners-snuba From a3de365b2f6f2bd0098c92322afa54f8e21ba777 Mon Sep 17 00:00:00 2001 From: "getsantry[bot]" <66042841+getsantry[bot]@users.noreply.github.com> Date: Tue, 5 Mar 2024 23:01:52 +0000 Subject: [PATCH 06/18] style(lint): Auto commit lint changes --- schemas/ingest-feedback-events.v1.schema.json | 51 ++++--------------- 1 file changed, 10 insertions(+), 41 deletions(-) diff --git a/schemas/ingest-feedback-events.v1.schema.json b/schemas/ingest-feedback-events.v1.schema.json index 4d0512de..d78ff54c 100644 --- a/schemas/ingest-feedback-events.v1.schema.json +++ b/schemas/ingest-feedback-events.v1.schema.json @@ -69,11 +69,7 @@ "$ref": "#/definitions/Feedback" } }, - "required": [ - "angular", - "feedback", - "trace" - ], + "required": ["angular", "feedback", "trace"], "title": "Contexts" }, "Angular": { @@ -84,9 +80,7 @@ "type": "integer" } }, - "required": [ - "version" - ], + "required": ["version"], "title": "Angular" }, "Feedback": { @@ -105,9 +99,7 @@ "url": { "type": "string", "format": "uri", - "qt-uri-protocols": [ - "https" - ] + "qt-uri-protocols": ["https"] }, "source": { "type": "string" @@ -146,13 +138,7 @@ "type": "string" } }, - "required": [ - "data", - "op", - "origin", - "span_id", - "trace_id" - ], + "required": ["data", "op", "origin", "span_id", "trace_id"], "title": "Trace" }, "Data": { @@ -187,18 +173,13 @@ "url": { "type": "string", "format": "uri", - "qt-uri-protocols": [ - "https" - ] + "qt-uri-protocols": ["https"] }, "headers": { "$ref": "#/definitions/Headers" } }, - "required": [ - "headers", - "url" - ], + "required": ["headers", "url"], "title": "Request" }, "Headers": { @@ -209,9 +190,7 @@ "type": "string" } }, - "required": [ - "User-Agent" - ], + "required": ["User-Agent"], "title": "Headers" }, "SDK": { @@ -237,12 +216,7 @@ } } }, - "required": [ - "integrations", - "name", - "packages", - "version" - ], + "required": ["integrations", "name", "packages", "version"], "title": "SDK" }, "Package": { @@ -256,10 +230,7 @@ "type": "string" } }, - "required": [ - "name", - "version" - ], + "required": ["name", "version"], "title": "Package" }, "Tags": { @@ -270,9 +241,7 @@ "type": "string" } }, - "required": [ - "transaction" - ], + "required": ["transaction"], "title": "Tags" } } From 202b34833177ca0433f672c82fbdbde2905cc0d1 Mon Sep 17 00:00:00 2001 From: Andrew Liu Date: Tue, 5 Mar 2024 15:12:53 -0800 Subject: [PATCH 07/18] change schema ver to draft-07 --- schemas/ingest-feedback-events.v1.schema.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/schemas/ingest-feedback-events.v1.schema.json b/schemas/ingest-feedback-events.v1.schema.json index d78ff54c..8534b015 100644 --- a/schemas/ingest-feedback-events.v1.schema.json +++ b/schemas/ingest-feedback-events.v1.schema.json @@ -1,5 +1,5 @@ { - "$schema": "http://json-schema.org/draft-06/schema#", + "$schema": "http://json-schema.org/draft-07/schema#", "$ref": "#/definitions/FeedbackEvent", "definitions": { "FeedbackEvent": { From 6949f1bca5f1641819c84eb9c8867cfe8f262bec Mon Sep 17 00:00:00 2001 From: Andrew Liu Date: Tue, 5 Mar 2024 16:05:00 -0800 Subject: [PATCH 08/18] remove field titles and add schema title, remove owners-ingest --- CODEOWNERS | 2 +- schemas/ingest-feedback-events.v1.schema.json | 34 +++++++------------ 2 files changed, 13 insertions(+), 23 deletions(-) diff --git a/CODEOWNERS b/CODEOWNERS index e0f1cced..e9d4c465 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -2,7 +2,7 @@ /topics/ingest-metrics.yaml @getsentry/owners-ingest @getsentry/owners-snuba /topics/ingest-performance-metrics.yaml @getsentry/owners-ingest @getsentry/owners-snuba /topics/ingest-replay-recordings.yaml @getsentry/owners-ingest @getsentry/owners-snuba @getsentry/replay -/topics/ingest-feedback-events.yaml @getsentry/owners-ingest @getsentry/owners-snuba @getsentry/replay +/topics/ingest-feedback-events.yaml @getsentry/owners-snuba @getsentry/replay # DLQs for ingest topics /topics/ingest-events-dlq.yaml @getsentry/owners-snuba diff --git a/schemas/ingest-feedback-events.v1.schema.json b/schemas/ingest-feedback-events.v1.schema.json index 8534b015..c1f10101 100644 --- a/schemas/ingest-feedback-events.v1.schema.json +++ b/schemas/ingest-feedback-events.v1.schema.json @@ -1,6 +1,7 @@ { "$schema": "http://json-schema.org/draft-07/schema#", "$ref": "#/definitions/FeedbackEvent", + "title": "feedback_event", "definitions": { "FeedbackEvent": { "type": "object", @@ -52,8 +53,7 @@ "tags", "timestamp", "type" - ], - "title": "FeedbackEvent" + ] }, "Contexts": { "type": "object", @@ -69,8 +69,7 @@ "$ref": "#/definitions/Feedback" } }, - "required": ["angular", "feedback", "trace"], - "title": "Contexts" + "required": ["angular", "feedback", "trace"] }, "Angular": { "type": "object", @@ -80,8 +79,7 @@ "type": "integer" } }, - "required": ["version"], - "title": "Angular" + "required": ["version"] }, "Feedback": { "type": "object", @@ -115,8 +113,7 @@ "replay_id", "source", "url" - ], - "title": "Feedback" + ] }, "Trace": { "type": "object", @@ -138,8 +135,7 @@ "type": "string" } }, - "required": ["data", "op", "origin", "span_id", "trace_id"], - "title": "Trace" + "required": ["data", "op", "origin", "span_id", "trace_id"] }, "Data": { "type": "object", @@ -163,8 +159,7 @@ "sentry.origin", "sentry.sample_rate", "sentry.source" - ], - "title": "Data" + ] }, "Request": { "type": "object", @@ -179,8 +174,7 @@ "$ref": "#/definitions/Headers" } }, - "required": ["headers", "url"], - "title": "Request" + "required": ["headers", "url"] }, "Headers": { "type": "object", @@ -190,8 +184,7 @@ "type": "string" } }, - "required": ["User-Agent"], - "title": "Headers" + "required": ["User-Agent"] }, "SDK": { "type": "object", @@ -216,8 +209,7 @@ } } }, - "required": ["integrations", "name", "packages", "version"], - "title": "SDK" + "required": ["integrations", "name", "packages", "version"] }, "Package": { "type": "object", @@ -230,8 +222,7 @@ "type": "string" } }, - "required": ["name", "version"], - "title": "Package" + "required": ["name", "version"] }, "Tags": { "type": "object", @@ -241,8 +232,7 @@ "type": "string" } }, - "required": ["transaction"], - "title": "Tags" + "required": ["transaction"] } } } From efe8d1361c2307d69b8735b110d9c78bd2264d87 Mon Sep 17 00:00:00 2001 From: Andrew Liu Date: Tue, 5 Mar 2024 20:06:39 -0800 Subject: [PATCH 09/18] Add react ex and make all optional except contexts:{feedback:{contact_email, message, name, source}} - all fields have additionalProperties = true, making schema totally flexible and backward/forward-compatible - rename examples folder --- .../1/widget-angular.json} | 0 .../1/widget-react.json | 88 ++++++++++ schemas/ingest-feedback-events.v1.schema.json | 163 +----------------- topics/ingest-feedback-events.yaml | 2 +- 4 files changed, 98 insertions(+), 155 deletions(-) rename examples/{feedback-events/1/widget.json => ingest-feedback-events/1/widget-angular.json} (100%) create mode 100644 examples/ingest-feedback-events/1/widget-react.json diff --git a/examples/feedback-events/1/widget.json b/examples/ingest-feedback-events/1/widget-angular.json similarity index 100% rename from examples/feedback-events/1/widget.json rename to examples/ingest-feedback-events/1/widget-angular.json diff --git a/examples/ingest-feedback-events/1/widget-react.json b/examples/ingest-feedback-events/1/widget-react.json new file mode 100644 index 00000000..6dfec493 --- /dev/null +++ b/examples/ingest-feedback-events/1/widget-react.json @@ -0,0 +1,88 @@ +{ + "contexts": { + "trace": { + "data": { + "sentry.source": "route", + "sentry.origin": "manual", + "sentry.op": "ui.action.click", + "sentry.sample_rate": 0.01 + }, + "op": "ui.action.click", + "span_id": "97471fd4022a5a9a", + "trace_id": "8a849c45695247c3895a5788ac5dbb02", + "origin": "manual" + }, + "organization": { + "id": "1", + "slug": "sentry" + }, + "feedback": { + "contact_email": "andrew.liu@sentry.io", + "name": "Andrew Liu", + "message": "test feedback event for user feedback development", + "url": "https://sentry.sentry.io/ddm/?statsPeriod=24h", + "source": "widget", + "replay_id": "82a785e590d54b2692429d46513e5564" + } + }, + "type": "feedback", + "request": { + "url": "https://sentry.sentry.io/ddm/?statsPeriod=24h", + "headers": { + "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36" + } + }, + "event_id": "74287fdf939c4b82abc603232583e722", + "timestamp": 1709695989.715, + "environment": "prod", + "release": "frontend@5d1f3aa444b6538e789e7fcbc4c7a713afca699b", + "sdk": { + "integrations": [ + "InboundFilters", + "FunctionToString", + "TryCatch", + "Breadcrumbs", + "GlobalHandlers", + "LinkedErrors", + "Dedupe", + "HttpContext", + "ExtraErrorData", + "MetricsAggregator", + "BrowserTracing", + "BrowserProfiling" + ], + "name": "sentry.javascript.react", + "version": "7.103.0", + "packages": [ + { + "name": "npm:@sentry/react", + "version": "7.103.0" + } + ] + }, + "tags": { + "transaction": "/ddm/", + "sentry_version": "24.3.0.dev0", + "isCustomerDomain": "yes", + "customerDomain.organizationUrl": "https://sentry.sentry.io", + "customerDomain.sentryUrl": "https://sentry.io", + "customerDomain.subdomain": "sentry", + "organization": "1", + "organization.slug": "sentry", + "plan": "am2_business_ent_auf", + "plan.name": "Business", + "plan.max_members": "null", + "plan.total_members": "323", + "plan.tier": "am2", + "timeOrigin.mode": "navigationStart" + }, + "user": { + "ip_address": "98.51.47.219", + "email": "andrew.liu@sentry.io", + "id": 3069298, + "isStaff": false, + "name": "Andrew Liu" + }, + "level": "info", + "platform": "javascript" +} \ No newline at end of file diff --git a/schemas/ingest-feedback-events.v1.schema.json b/schemas/ingest-feedback-events.v1.schema.json index c1f10101..1a31e9b9 100644 --- a/schemas/ingest-feedback-events.v1.schema.json +++ b/schemas/ingest-feedback-events.v1.schema.json @@ -5,7 +5,7 @@ "definitions": { "FeedbackEvent": { "type": "object", - "additionalProperties": false, + "additionalProperties": true, "properties": { "contexts": { "$ref": "#/definitions/Contexts" @@ -13,9 +13,6 @@ "type": { "type": "string" }, - "request": { - "$ref": "#/definitions/Request" - }, "event_id": { "type": "string" }, @@ -28,9 +25,6 @@ "release": { "type": "string" }, - "sdk": { - "$ref": "#/definitions/SDK" - }, "level": { "type": "string" }, @@ -43,47 +37,23 @@ }, "required": [ "contexts", - "environment", "event_id", - "level", - "platform", - "release", - "request", - "sdk", - "tags", - "timestamp", - "type" + "timestamp" ] }, "Contexts": { "type": "object", - "additionalProperties": false, + "additionalProperties": true, "properties": { - "trace": { - "$ref": "#/definitions/Trace" - }, - "angular": { - "$ref": "#/definitions/Angular" - }, "feedback": { "$ref": "#/definitions/Feedback" } }, - "required": ["angular", "feedback", "trace"] - }, - "Angular": { - "type": "object", - "additionalProperties": false, - "properties": { - "version": { - "type": "integer" - } - }, - "required": ["version"] + "required": ["feedback"] }, "Feedback": { "type": "object", - "additionalProperties": false, + "additionalProperties": true, "properties": { "contact_email": { "type": "string" @@ -110,129 +80,14 @@ "contact_email", "message", "name", - "replay_id", - "source", - "url" - ] - }, - "Trace": { - "type": "object", - "additionalProperties": false, - "properties": { - "data": { - "$ref": "#/definitions/Data" - }, - "op": { - "type": "string" - }, - "span_id": { - "type": "string" - }, - "trace_id": { - "type": "string" - }, - "origin": { - "type": "string" - } - }, - "required": ["data", "op", "origin", "span_id", "trace_id"] - }, - "Data": { - "type": "object", - "additionalProperties": false, - "properties": { - "sentry.source": { - "type": "string" - }, - "sentry.origin": { - "type": "string" - }, - "sentry.op": { - "type": "string" - }, - "sentry.sample_rate": { - "type": "integer" - } - }, - "required": [ - "sentry.op", - "sentry.origin", - "sentry.sample_rate", - "sentry.source" + "source" ] }, - "Request": { - "type": "object", - "additionalProperties": false, - "properties": { - "url": { - "type": "string", - "format": "uri", - "qt-uri-protocols": ["https"] - }, - "headers": { - "$ref": "#/definitions/Headers" - } - }, - "required": ["headers", "url"] - }, - "Headers": { - "type": "object", - "additionalProperties": false, - "properties": { - "User-Agent": { - "type": "string" - } - }, - "required": ["User-Agent"] - }, - "SDK": { - "type": "object", - "additionalProperties": false, - "properties": { - "integrations": { - "type": "array", - "items": { - "type": "string" - } - }, - "name": { - "type": "string" - }, - "version": { - "type": "string" - }, - "packages": { - "type": "array", - "items": { - "$ref": "#/definitions/Package" - } - } - }, - "required": ["integrations", "name", "packages", "version"] - }, - "Package": { - "type": "object", - "additionalProperties": false, - "properties": { - "name": { - "type": "string" - }, - "version": { - "type": "string" - } - }, - "required": ["name", "version"] - }, "Tags": { "type": "object", - "additionalProperties": false, - "properties": { - "transaction": { - "type": "string" - } - }, - "required": ["transaction"] + "additionalProperties": true, + "properties": {}, + "required": [] } } } diff --git a/topics/ingest-feedback-events.yaml b/topics/ingest-feedback-events.yaml index e6d217c5..b9b2da08 100644 --- a/topics/ingest-feedback-events.yaml +++ b/topics/ingest-feedback-events.yaml @@ -12,4 +12,4 @@ schemas: type: json resource: ingest-feedback-events.v1.schema.json examples: - - feedback-events/1/ + - ingest-feedback-events/1/ From cb7b6265aa772abe4283fb29a7ab317f2ba96582 Mon Sep 17 00:00:00 2001 From: Andrew Liu Date: Wed, 6 Mar 2024 14:38:07 -0800 Subject: [PATCH 10/18] modify schema to match sdk event type --- schemas/ingest-feedback-events.v1.schema.json | 58 ++++++++----------- 1 file changed, 24 insertions(+), 34 deletions(-) diff --git a/schemas/ingest-feedback-events.v1.schema.json b/schemas/ingest-feedback-events.v1.schema.json index 1a31e9b9..77a47911 100644 --- a/schemas/ingest-feedback-events.v1.schema.json +++ b/schemas/ingest-feedback-events.v1.schema.json @@ -6,40 +6,41 @@ "FeedbackEvent": { "type": "object", "additionalProperties": true, + "required": [ + "event_id", + "timestamp", + "platform", + "contexts" + ], "properties": { + "event_id": { + "type": "string" + }, + "timestamp": { + "type": ["number", "string"] + }, + "platform": { + "type": "string" + }, "contexts": { "$ref": "#/definitions/Contexts" }, "type": { "type": "string" }, - "event_id": { + "level": { "type": "string" }, - "timestamp": { - "type": "number" - }, "environment": { "type": "string" }, "release": { "type": "string" }, - "level": { - "type": "string" - }, "tags": { - "$ref": "#/definitions/Tags" - }, - "platform": { - "type": "string" + "type": "object" } - }, - "required": [ - "contexts", - "event_id", - "timestamp" - ] + } }, "Contexts": { "type": "object", @@ -54,14 +55,18 @@ "Feedback": { "type": "object", "additionalProperties": true, + "required": [], "properties": { "contact_email": { "type": "string" }, + "message": { + "type": "string" + }, "name": { "type": "string" }, - "message": { + "source": { "type": "string" }, "url": { @@ -69,25 +74,10 @@ "format": "uri", "qt-uri-protocols": ["https"] }, - "source": { - "type": "string" - }, "replay_id": { "type": "string" } - }, - "required": [ - "contact_email", - "message", - "name", - "source" - ] - }, - "Tags": { - "type": "object", - "additionalProperties": true, - "properties": {}, - "required": [] + } } } } From a0a46af288a8829d9c94496d41891404a9e5a73c Mon Sep 17 00:00:00 2001 From: "getsantry[bot]" <66042841+getsantry[bot]@users.noreply.github.com> Date: Wed, 6 Mar 2024 04:08:21 +0000 Subject: [PATCH 11/18] style(lint): Auto commit lint changes --- examples/ingest-feedback-events/1/widget-react.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/ingest-feedback-events/1/widget-react.json b/examples/ingest-feedback-events/1/widget-react.json index 6dfec493..5a0f7bbc 100644 --- a/examples/ingest-feedback-events/1/widget-react.json +++ b/examples/ingest-feedback-events/1/widget-react.json @@ -85,4 +85,4 @@ }, "level": "info", "platform": "javascript" -} \ No newline at end of file +} From 6c579a7a3e311d4ff38991c07f9a7450f8dc0884 Mon Sep 17 00:00:00 2001 From: Andrew Liu Date: Thu, 7 Mar 2024 10:46:02 -0800 Subject: [PATCH 12/18] add some more common fields (optional) --- schemas/ingest-feedback-events.v1.schema.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/schemas/ingest-feedback-events.v1.schema.json b/schemas/ingest-feedback-events.v1.schema.json index 77a47911..f2b97030 100644 --- a/schemas/ingest-feedback-events.v1.schema.json +++ b/schemas/ingest-feedback-events.v1.schema.json @@ -22,6 +22,9 @@ "platform": { "type": "string" }, + "dist": { + "type": "string" + }, "contexts": { "$ref": "#/definitions/Contexts" }, @@ -39,6 +42,12 @@ }, "tags": { "type": "object" + }, + "user": { + "type": "object" + }, + "sdk": { + "type": "object" } } }, From 2189dd5dc273c15c48dd34e1454fc2f21aeccdf6 Mon Sep 17 00:00:00 2001 From: "getsantry[bot]" <66042841+getsantry[bot]@users.noreply.github.com> Date: Thu, 7 Mar 2024 18:52:01 +0000 Subject: [PATCH 13/18] style(lint): Auto commit lint changes --- schemas/ingest-feedback-events.v1.schema.json | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/schemas/ingest-feedback-events.v1.schema.json b/schemas/ingest-feedback-events.v1.schema.json index f2b97030..94417e59 100644 --- a/schemas/ingest-feedback-events.v1.schema.json +++ b/schemas/ingest-feedback-events.v1.schema.json @@ -6,12 +6,7 @@ "FeedbackEvent": { "type": "object", "additionalProperties": true, - "required": [ - "event_id", - "timestamp", - "platform", - "contexts" - ], + "required": ["event_id", "timestamp", "platform", "contexts"], "properties": { "event_id": { "type": "string" From 2a4d0c74b2a7a08d21e1ad290879fab913eff6cc Mon Sep 17 00:00:00 2001 From: Andrew Liu Date: Thu, 7 Mar 2024 10:55:54 -0800 Subject: [PATCH 14/18] add max.message.bytes = 10MB --- topics/ingest-feedback-events.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/topics/ingest-feedback-events.yaml b/topics/ingest-feedback-events.yaml index b9b2da08..84976289 100644 --- a/topics/ingest-feedback-events.yaml +++ b/topics/ingest-feedback-events.yaml @@ -13,3 +13,5 @@ schemas: resource: ingest-feedback-events.v1.schema.json examples: - ingest-feedback-events/1/ +topic_creation_config: + max.message.bytes: "10000000" From 1af34ff7cb16c81f8587df4fcb4fef0e8f22bbc1 Mon Sep 17 00:00:00 2001 From: Andrew Liu Date: Thu, 7 Mar 2024 12:08:35 -0800 Subject: [PATCH 15/18] switch to msgpack --- topics/ingest-feedback-events.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/topics/ingest-feedback-events.yaml b/topics/ingest-feedback-events.yaml index 84976289..b4ec46ba 100644 --- a/topics/ingest-feedback-events.yaml +++ b/topics/ingest-feedback-events.yaml @@ -9,7 +9,7 @@ services: schemas: - version: 1 compatibility_mode: none - type: json + type: msgpack resource: ingest-feedback-events.v1.schema.json examples: - ingest-feedback-events/1/ From 0ca6640e3b927ededf235d8999e86b1126dd157b Mon Sep 17 00:00:00 2001 From: Andrew Liu <159852527+aliu3ntry@users.noreply.github.com> Date: Mon, 11 Mar 2024 15:18:14 -0700 Subject: [PATCH 16/18] Update CODEOWNERS --- CODEOWNERS | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CODEOWNERS b/CODEOWNERS index ee996d7a..cd6dd994 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -1,8 +1,8 @@ # Ingest topics /topics/ingest-events.yaml @getsentry/owners-snuba @getsentry/ingest @getsentry/ops -/topics/ingest-metrics.yaml @getsentry/owners-ingest @getsentry/owners-snuba -/topics/ingest-performance-metrics.yaml @getsentry/owners-ingest @getsentry/owners-snuba -/topics/ingest-replay-recordings.yaml @getsentry/owners-ingest @getsentry/owners-snuba @getsentry/replay +/topics/ingest-metrics.yaml @getsentry/owners-snuba @getsentry/ingest +/topics/ingest-performance-metrics.yaml @getsentry/owners-snuba @getsentry/ingest +/topics/ingest-replay-recordings.yaml @getsentry/owners-snuba @getsentry/ingest @getsentry/replay /topics/ingest-feedback-events.yaml @getsentry/owners-snuba @getsentry/replay # DLQs for ingest topics From 5219d7ca10438c36953392c655d259fb5318feca Mon Sep 17 00:00:00 2001 From: Andrew Liu Date: Mon, 11 Mar 2024 16:59:27 -0700 Subject: [PATCH 17/18] revise schema using 2 example feedback events from kafka + relay - turns out relay wraps the previous schema in the msgpack 'payload' field, as an encoded JSON string - new schema is almost identical to ingest-events. Bytes is a not a valid jsonschema type so we omit type from the payload --- .../1/pokemart-widget-kcat.msgpack | 1 + ...est_feedback_event_with_processing.msgpack | 1 + .../1/widget-angular.json | 67 -------------- .../1/widget-react.json | 88 ------------------- schemas/ingest-feedback-events.v1.schema.json | 83 ++--------------- 5 files changed, 11 insertions(+), 229 deletions(-) create mode 100644 examples/ingest-feedback-events/1/pokemart-widget-kcat.msgpack create mode 100644 examples/ingest-feedback-events/1/relay-test_feedback_event_with_processing.msgpack delete mode 100644 examples/ingest-feedback-events/1/widget-angular.json delete mode 100644 examples/ingest-feedback-events/1/widget-react.json diff --git a/examples/ingest-feedback-events/1/pokemart-widget-kcat.msgpack b/examples/ingest-feedback-events/1/pokemart-widget-kcat.msgpack new file mode 100644 index 00000000..aa7d1ace --- /dev/null +++ b/examples/ingest-feedback-events/1/pokemart-widget-kcat.msgpack @@ -0,0 +1 @@ +typeeventpayload{"event_id":"7d657b21020e482da61e0b08f6b884a4","level":"info","version":"7","type":"feedback","logger":"","platform":"javascript","timestamp":1710190027.344,"received":1710190027.331053,"environment":"development","user":{"ip_address":"172.20.0.1","sentry_user":"ip:172.20.0.1"},"request":{"url":"http://localhost:3000/sale","headers":[["Referer","http://localhost:3000/sale"],["User-Agent","Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36"]]},"contexts":{"browser":{"name":"Chrome","version":"122.0.0","type":"browser"},"device":{"family":"Mac","model":"Mac","brand":"Apple","type":"device"},"feedback":{"message":"fakrevkj","contact_email":"john@doe","name":"john doe","replay_id":"6a9f81bfaacb4b08a76b4298af6c993a","source":"widget","url":"http://localhost:3000/sale","type":"feedback"},"os":{"name":"Mac OS X","version":">=10.15.7","type":"os"}},"tags":[["runtime","browser"]],"sdk":{"name":"sentry.javascript.nextjs","version":"7.106.1","integrations":["InboundFilters","FunctionToString","TryCatch","Breadcrumbs","GlobalHandlers","LinkedErrors","Dedupe","HttpContext","RewriteFrames","BrowserTracing","Replay","Feedback"],"packages":[{"name":"npm:@sentry/nextjs","version":"7.106.1"},{"name":"npm:@sentry/react","version":"7.106.1"}]},"key_id":"1","project":1,"grouping_config":{"enhancements":"KLUv_SAYwQAAkwKRs25ld3N0eWxlOjIwMjMtMDEtMTGQ","id":"newstyle:2023-01-11"},"_metrics":{"bytes.ingested.event":971}}start_timeem˨event_id 7d657b21020e482da61e0b08f6b884a4project_idremote_addr172.20.0.1attachments \ No newline at end of file diff --git a/examples/ingest-feedback-events/1/relay-test_feedback_event_with_processing.msgpack b/examples/ingest-feedback-events/1/relay-test_feedback_event_with_processing.msgpack new file mode 100644 index 00000000..9de3e467 --- /dev/null +++ b/examples/ingest-feedback-events/1/relay-test_feedback_event_with_processing.msgpack @@ -0,0 +1 @@ +typeeventpayload{"event_id":"5932fdbccb094130b25764af7ccf14aa","level":"error","version":"5","type":"feedback","logger":"","platform":"javascript","timestamp":1710189609.953467,"received":1710189609.953467,"release":"42","dist":"1.12","environment":"production","user":{"id":"123","email":"[email]","ip_address":"192.168.11.12","username":"user","sentry_user":"id:123"},"request":{"headers":[["User-Agent","Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.5 Safari/605.1.15"]]},"contexts":{"browser":{"name":"Safari","version":"15.5","type":"browser"},"device":{"family":"Mac","model":"Mac","brand":"Apple","type":"device"},"feedback":{"message":"test message","contact_email":"test@example.com","type":"feedback"},"os":{"name":"Mac OS X","version":">=10.15.7","type":"os"},"replay":{"replay_id":"e2d42047b1c5431c8cba85ee2a8ab25d","type":"replay"},"trace":{"trace_id":"4c79f60c11214eb38604f4ae0781bfb2","span_id":"fa90fdead5f74052","status":"unknown","type":"trace"}},"tags":[["transaction","/organizations/:orgId/performance/:eventSlug/"]],"sdk":{"name":"name","version":"veresion"},"errors":[{"type":"past_timestamp","name":"timestamp","sdk_time":"2020-08-21T02:42:57.618971824+00:00","server_time":"2024-03-11T20:40:09.953467084+00:00"}],"key_id":"123","project":42,"_metrics":{"bytes.ingested.event":809},"_meta":{"timestamp":{"":{"err":[["past_timestamp",{"sdk_time":"2020-08-21T02:42:57.618971824+00:00","server_time":"2024-03-11T20:40:09.953467084+00:00"}]]}},"user":{"email":{"":{"rem":[["@email","s",0,7]],"len":13}}}}}start_timeel)event_id 5932fdbccb094130b25764af7ccf14aaproject_id*remote_addr127.0.0.1attachments \ No newline at end of file diff --git a/examples/ingest-feedback-events/1/widget-angular.json b/examples/ingest-feedback-events/1/widget-angular.json deleted file mode 100644 index dc35f77c..00000000 --- a/examples/ingest-feedback-events/1/widget-angular.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "contexts": { - "trace": { - "data": { - "sentry.source": "url", - "sentry.origin": "manual", - "sentry.op": "ui.action.click", - "sentry.sample_rate": 1 - }, - "op": "ui.action.click", - "span_id": "af56b414007cdf14", - "trace_id": "9ae5b04b26f3481cab6c326aaa9bca9f", - "origin": "manual" - }, - "angular": { - "version": 17 - }, - "feedback": { - "contact_email": "john.doe@gmail.com", - "name": "John Doe", - "message": "Test feedback submission\nHello world! Nice widget", - "url": "https://nugettrends.com/", - "source": "widget", - "replay_id": "a60c73d398334770a050eaee2a9bfd93" - } - }, - "type": "feedback", - "request": { - "url": "https://nugettrends.com/", - "headers": { - "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36" - } - }, - "event_id": "5c941f7c8d3c4a56b05119c4b612991d", - "timestamp": 1709675365.66, - "environment": "production", - "release": "27e7677", - "sdk": { - "integrations": [ - "InboundFilters", - "FunctionToString", - "Breadcrumbs", - "GlobalHandlers", - "LinkedErrors", - "Dedupe", - "HttpContext", - "Replay", - "ReplayCanvas", - "Feedback", - "BrowserTracing", - "BrowserProfiling" - ], - "name": "sentry.javascript.angular-ivy", - "version": "7.100.1", - "packages": [ - { - "name": "npm:@sentry/angular-ivy", - "version": "7.100.1" - } - ] - }, - "level": "info", - "tags": { - "transaction": "/" - }, - "platform": "javascript" -} diff --git a/examples/ingest-feedback-events/1/widget-react.json b/examples/ingest-feedback-events/1/widget-react.json deleted file mode 100644 index 5a0f7bbc..00000000 --- a/examples/ingest-feedback-events/1/widget-react.json +++ /dev/null @@ -1,88 +0,0 @@ -{ - "contexts": { - "trace": { - "data": { - "sentry.source": "route", - "sentry.origin": "manual", - "sentry.op": "ui.action.click", - "sentry.sample_rate": 0.01 - }, - "op": "ui.action.click", - "span_id": "97471fd4022a5a9a", - "trace_id": "8a849c45695247c3895a5788ac5dbb02", - "origin": "manual" - }, - "organization": { - "id": "1", - "slug": "sentry" - }, - "feedback": { - "contact_email": "andrew.liu@sentry.io", - "name": "Andrew Liu", - "message": "test feedback event for user feedback development", - "url": "https://sentry.sentry.io/ddm/?statsPeriod=24h", - "source": "widget", - "replay_id": "82a785e590d54b2692429d46513e5564" - } - }, - "type": "feedback", - "request": { - "url": "https://sentry.sentry.io/ddm/?statsPeriod=24h", - "headers": { - "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36" - } - }, - "event_id": "74287fdf939c4b82abc603232583e722", - "timestamp": 1709695989.715, - "environment": "prod", - "release": "frontend@5d1f3aa444b6538e789e7fcbc4c7a713afca699b", - "sdk": { - "integrations": [ - "InboundFilters", - "FunctionToString", - "TryCatch", - "Breadcrumbs", - "GlobalHandlers", - "LinkedErrors", - "Dedupe", - "HttpContext", - "ExtraErrorData", - "MetricsAggregator", - "BrowserTracing", - "BrowserProfiling" - ], - "name": "sentry.javascript.react", - "version": "7.103.0", - "packages": [ - { - "name": "npm:@sentry/react", - "version": "7.103.0" - } - ] - }, - "tags": { - "transaction": "/ddm/", - "sentry_version": "24.3.0.dev0", - "isCustomerDomain": "yes", - "customerDomain.organizationUrl": "https://sentry.sentry.io", - "customerDomain.sentryUrl": "https://sentry.io", - "customerDomain.subdomain": "sentry", - "organization": "1", - "organization.slug": "sentry", - "plan": "am2_business_ent_auf", - "plan.name": "Business", - "plan.max_members": "null", - "plan.total_members": "323", - "plan.tier": "am2", - "timeOrigin.mode": "navigationStart" - }, - "user": { - "ip_address": "98.51.47.219", - "email": "andrew.liu@sentry.io", - "id": 3069298, - "isStaff": false, - "name": "Andrew Liu" - }, - "level": "info", - "platform": "javascript" -} diff --git a/schemas/ingest-feedback-events.v1.schema.json b/schemas/ingest-feedback-events.v1.schema.json index 94417e59..8789a70b 100644 --- a/schemas/ingest-feedback-events.v1.schema.json +++ b/schemas/ingest-feedback-events.v1.schema.json @@ -1,86 +1,21 @@ { "$schema": "http://json-schema.org/draft-07/schema#", - "$ref": "#/definitions/FeedbackEvent", "title": "feedback_event", + "description": "User feedback event from Relay", + "$ref": "#/definitions/FeedbackEvent", "definitions": { "FeedbackEvent": { "type": "object", + "required": ["type", "event_id", "project_id", "payload", "start_time"], "additionalProperties": true, - "required": ["event_id", "timestamp", "platform", "contexts"], - "properties": { - "event_id": { - "type": "string" - }, - "timestamp": { - "type": ["number", "string"] - }, - "platform": { - "type": "string" - }, - "dist": { - "type": "string" - }, - "contexts": { - "$ref": "#/definitions/Contexts" - }, - "type": { - "type": "string" - }, - "level": { - "type": "string" - }, - "environment": { - "type": "string" - }, - "release": { - "type": "string" - }, - "tags": { - "type": "object" - }, - "user": { - "type": "object" - }, - "sdk": { - "type": "object" - } - } - }, - "Contexts": { - "type": "object", - "additionalProperties": true, - "properties": { - "feedback": { - "$ref": "#/definitions/Feedback" - } - }, - "required": ["feedback"] - }, - "Feedback": { - "type": "object", - "additionalProperties": true, - "required": [], "properties": { - "contact_email": { - "type": "string" - }, - "message": { - "type": "string" - }, - "name": { - "type": "string" - }, - "source": { - "type": "string" - }, - "url": { - "type": "string", - "format": "uri", - "qt-uri-protocols": ["https"] + "type": { "type": "string" }, + "payload": { + "description": "bytes. JSON string of the wrapped feedback event" }, - "replay_id": { - "type": "string" - } + "event_id": { "type": "string" }, + "project_id": { "type": "integer" }, + "start_time": { "type": "integer" } } } } From 3bdadaf878686bcb2b3d193e12abd7b76aedcae3 Mon Sep 17 00:00:00 2001 From: Andrew Liu Date: Mon, 11 Mar 2024 17:02:08 -0700 Subject: [PATCH 18/18] remove nested definition --- schemas/ingest-feedback-events.v1.schema.json | 27 ++++++++----------- 1 file changed, 11 insertions(+), 16 deletions(-) diff --git a/schemas/ingest-feedback-events.v1.schema.json b/schemas/ingest-feedback-events.v1.schema.json index 8789a70b..4631cc84 100644 --- a/schemas/ingest-feedback-events.v1.schema.json +++ b/schemas/ingest-feedback-events.v1.schema.json @@ -2,21 +2,16 @@ "$schema": "http://json-schema.org/draft-07/schema#", "title": "feedback_event", "description": "User feedback event from Relay", - "$ref": "#/definitions/FeedbackEvent", - "definitions": { - "FeedbackEvent": { - "type": "object", - "required": ["type", "event_id", "project_id", "payload", "start_time"], - "additionalProperties": true, - "properties": { - "type": { "type": "string" }, - "payload": { - "description": "bytes. JSON string of the wrapped feedback event" - }, - "event_id": { "type": "string" }, - "project_id": { "type": "integer" }, - "start_time": { "type": "integer" } - } - } + "type": "object", + "required": ["type", "event_id", "project_id", "payload", "start_time"], + "additionalProperties": true, + "properties": { + "type": { "type": "string" }, + "payload": { + "description": "bytes. JSON string of the wrapped feedback event" + }, + "event_id": { "type": "string" }, + "project_id": { "type": "integer" }, + "start_time": { "type": "integer" } } }