From c2bb76e626b281e9d3c790bd5cc5a59301f39b76 Mon Sep 17 00:00:00 2001 From: Roy Date: Mon, 14 Sep 2026 12:01:28 +0900 Subject: [PATCH] =?UTF-8?q?Sentry=20trace=20metric=20=EC=8B=9C=EA=B3=84?= =?UTF-8?q?=EC=97=B4=EC=9D=B4=20=EC=8B=A4=EC=A0=9C=20=EB=8D=B0=EC=9D=B4?= =?UTF-8?q?=ED=84=B0=EB=A5=BC=20=EB=B0=98=ED=99=98=ED=95=98=EA=B2=8C=20?= =?UTF-8?q?=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit tracemetrics 데이터셋은 인자 없는 count를 거절하므로 metric 필드를 명시해 집계한다. Constraint: Sentry Explore API가 tracemetrics count()를 HTTP 400으로 거절 Rejected: tracemetrics 카드 제거 | 활성 계측 데이터를 관리자에게 보여줘야 함 Confidence: high Scope-risk: narrow Directive: tracemetrics 집계식은 count(metric)을 유지 Tested: SentryClientTest; live Sentry iOS and Android HTTP 200; git diff --check Not-tested: authenticated AdminWeb visual data comparison --- .../com/swyp/picke/domain/admin/analytics/SentryClient.java | 2 +- .../swyp/picke/domain/admin/analytics/SentryClientTest.java | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/swyp/picke/domain/admin/analytics/SentryClient.java b/src/main/java/com/swyp/picke/domain/admin/analytics/SentryClient.java index fc5f263..e0a7cb9 100644 --- a/src/main/java/com/swyp/picke/domain/admin/analytics/SentryClient.java +++ b/src/main/java/com/swyp/picke/domain/admin/analytics/SentryClient.java @@ -195,7 +195,7 @@ private URI datasetUri(String project, String dataset, LocalDate from, LocalDate .queryParam("start", from.atStartOfDay()) .queryParam("end", to.atTime(LocalTime.MAX).withNano(0)) .queryParam("interval", 86400) - .queryParam("yAxis", "count()") + .queryParam("yAxis", dataset.equals("tracemetrics") ? "count(metric)" : "count()") .buildAndExpand(organization) .toUri(); } diff --git a/src/test/java/com/swyp/picke/domain/admin/analytics/SentryClientTest.java b/src/test/java/com/swyp/picke/domain/admin/analytics/SentryClientTest.java index 5a4c78e..cb6f0a2 100644 --- a/src/test/java/com/swyp/picke/domain/admin/analytics/SentryClientTest.java +++ b/src/test/java/com/swyp/picke/domain/admin/analytics/SentryClientTest.java @@ -169,6 +169,11 @@ void fetchesEveryProjectWithAbsoluteRange() { && uri.toString().contains("project=picke-ios") && uri.toString().contains("dataset=logs") && uri.toString().contains("yAxis=count()")); + assertThat(transport.uris).anyMatch(uri -> uri.toString() + .contains("/api/0/organizations/picke/events-timeseries/") + && uri.toString().contains("project=picke-ios") + && uri.toString().contains("dataset=tracemetrics") + && uri.toString().contains("yAxis=count(metric)")); assertThat(result.status()).isEqualTo(AnalyticsStatus.CONNECTED); assertThat(result.fetchedAt()).isNotNull(); assertThat(result.projects()).extracting(SentryIssueReport.ProjectIssues::project,