Feature/analytics ga4 forwarding#244
Conversation
RDB 적재와 동시에 같은 이벤트를 GA4로 전송(이중 write). @async fire-and-forget, 예외 흡수, 미설정 시 no-op.
GitHub Secrets(GA_ENABLED/GA_MEASUREMENT_ID/GA_API_SECRET) → release.yml → deploy.sh 조건부 -e 주입(GA_MEASUREMENT_ID 있을 때만).
|
Warning Review limit reached
More reviews will be available in 42 minutes and 15 seconds. Learn how PR review limits work. Your organization has used up its prepaid credits, and credit purchases are no longer available. Enable the review add-on in the billing tab to keep reviews running — you're only billed for reviews past your plan's rate limits ($0.25/file). ⌛ How to resolve this issue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based credits. 🚦 How do rate limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan refill rate. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, the refill rate gradually slows as usage increases. The highest same-day bursts are limited more strictly. Please see our Fair Usage Limits Policy for further information. ℹ️ Review info⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (8)
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
빌드 성공 |
📌 관련 이슈
🔍 작업 내용
PM·디자이너가 행동 로그를 GA4 대시보드에서 직접 볼 수 있도록, 기존
analytics_eventsRDB 적재는 그대로 두고 같은 이벤트를 GA4(MeasurementProtocol)로도 전송하는 이중 write를 추가했습니다.
모든 이벤트가 이미
AnalyticsEventLogger.log()한 곳을 통과하므로, 거기에 전송 한 줄을 더해 23종 이벤트 전부 개별 수정 없이 GA4로 흘러갑니다.GA 전송은 외부 HTTP라
@Asyncfire-and-forget으로 분리해, 실패·지연이 RDB 적재나 요청 처리에 영향을 주지 않습니다(기존 "예외 흡수" 철학 유지).자격증명 미설정 시 no-op이라, 시크릿을 넣기 전까지는 동작이 전혀 바뀌지 않습니다.
📝 변경 사항
GoogleAnalyticsClient신규 — GA4 Measurement Protocol(HTTP POST) 전송.@Async("analyticsExecutor")fire-and-forget, 모든 예외 흡수, 미설정시 no-op, 2초 타임아웃
GoogleAnalyticsProperties신규 —google.analytics.*(enabled/measurementId/apiSecret/endpoint). 셋 다 채워졌을 때만 실제 전송AnalyticsEventLogger— RDB 적재 직후googleAnalytics.send(...)호출(resolve한 값 재사용)AsyncConfig—analyticsExecutor빈 추가(큐 초과 시DiscardPolicy, 분석 데이터라 유실 허용)application.yml—google.analytics설정 블록(전부 기본값 → 미설정도 정상 빌드/구동)release.yml—GA_ENABLED/GA_MEASUREMENT_ID/GA_API_SECRET를env:+envs:로 EC2까지 전달deploy.sh— Gemini 블록과 동일하게GA_MEASUREMENT_ID가 있을 때만docker run -e로 주입(없으면 안전하게 무시)GoogleAnalyticsClientTest신규 — 페이로드 변환 규칙 검증(client_id 우선순위, user_id 문자열화, params 병합, null 제외·100자 절단)