From aa12c8c18effa1df2886b1716cd6877ce3db5e40 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=84=9C=EC=9B=90=EC=A7=80?= Date: Mon, 14 Sep 2026 12:04:07 +0900 Subject: [PATCH] =?UTF-8?q?[Fix]=20Sentry=20trace=20metric=20=EC=8B=9C?= =?UTF-8?q?=EA=B3=84=EC=97=B4=20=EC=A7=91=EA=B3=84=20=EC=98=A4=EB=A5=98=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=20(#494)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## #️⃣ 연관된 이슈 - #493 후속 수정 ## 📝 작업 내용 ### 🐛 Fix | 내용 | 검증 | |------|------| | Sentry `tracemetrics` 시계열 집계식을 `count(metric)`으로 수정 | Picke iOS/Android 실제 API HTTP 200 | | 데이터셋별 집계식 회귀 테스트 추가 | `SentryClientTest` 통과 | ## 📌 공유 사항 > Sentry Explore API는 일반 데이터셋의 `count()`는 허용하지만 `tracemetrics`에서는 인자 1개를 요구해 HTTP 400을 반환합니다. 실제 운영 토큰으로 `count(metric)` 응답이 두 프로젝트 모두 200임을 확인했습니다. ## ✅ 체크리스트 - [x] 개발 브랜치 기준으로 수정했습니다. - [x] 대상 테스트와 `git diff --check`를 통과했습니다. - [x] 비밀값을 출력하지 않고 실제 Sentry 응답 상태를 확인했습니다. ## 💬 리뷰 요구사항 > 데이터셋별 `yAxis` 분기가 Sentry API 계약에 맞는지 확인 부탁드립니다. --- .../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,