find_dropped_events doesn't say that buckets snap to whole intervals

未关闭 适合新手
#2,276 1 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

维护者通常 1 天内回复

还没有人认领这个 Issue。

评估

难度
2/5
预计耗时
1-3 小时
新手友好度
78/100
Issue 类型
文档
描述清晰度
描述清楚
活跃度
活跃
技术栈
typescript

调研方向

从 packages/mcp-core/src/tools/catalog/find-dropped-events.ts 开始:interval 的提示文本位于第 83-84 行和第 128-137 行附近,而省略 meta.start/meta.end 的响应映射位于第 212-217 行。追踪该工具如何构建其结果,以便在 start/end 超出 interval 边界时添加条件注释,然后运行该工具的测试,确认新的提示和注释会出现。

由索引模型根据 Issue 内容生成。

描述

MCP mcp-feedback-pattern

Pattern: find_dropped_events with start/end and a coarse interval returns full-interval volumes for the first and last buckets, not volumes for the requested window. Nothing in the tool output or the description says so. Callers that sum the buckets for a fixed window overcount.

Reports: 1 (Sentry MCP user feedback MCP-SERVER-GQD, python caller, server 0.42.0). The caller worked around it with interval=1h and told its user about the alignment limit.

What happens

  1. The caller passes start=<…T18:01Z>, end=<…T06:01Z>, interval=1d. The tool forwards them unchanged to GET /organizations/{org}/events-dropped/ (sampled span for this caller's call).
  2. Sentry builds the outcomes query through QueryDefinition → get_constrained_date_range (getsentry/sentry src/sentry/snuba/sessions_v2.py:451-487), which calls to_intervals (src/sentry/snuba/metrics/utils.py:414-449). That floors start to the interval and rounds end up to the next boundary. With 1d, the range becomes <day>T00:00Z to <last day + 1>T00:00Z. So the first and last buckets hold whole-day totals.
  3. The endpoint's meta.start / meta.end report the requested range, not the aligned one (src/sentry/api/endpoints/organization_events_dropped.py:233-234). The MCP tool doesn't return meta.start/meta.end at all (packages/mcp-core/src/tools/catalog/find-dropped-events.ts:212-217). Only each bucket's own start/end gives this away.
  4. The description (find-dropped-events.ts:83-84, :128-137) tells callers to "use '1d' and sum the buckets" for longer ranges, without saying that the first and last buckets can cover time outside the window.

Suggested fix (MCP side)

  • When start/end don't fall on interval boundaries, add a note that gives the aligned range that was counted and says the edge buckets are whole intervals. Suggest a finer interval (for example 1h) for exact windows.
  • Add one line to the interval hint saying buckets align to whole intervals in UTC.

Possible Sentry API follow-up (not filed): meta.start/meta.end could report the aligned range that was actually queried. Owner: whoever owns organization_events_dropped.py. The MCP note above doesn't depend on that change.

Not this issue: the same report's search_errors time-range problem is getsentry/toolkit#2146, and its explanation mismatch is getsentry/toolkit#2147.

via automation evt_905b9c478746fd9deeb853f85ad7441b · Run ID dispatch_ebd17b42670133526c625ae4ebab5254.

--

View Session [Sentry]

主要语言
TypeScript
星标
961
派生
179
平均合并
15 小时 33 分钟
30 天内合并 PR
476

环境准备

这个项目没有提供开发容器、Dockerfile 或贡献指南,环境需要你自己搭建:先看它的 README,通用步骤见我们的新手贡献指南。

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

getsentry/toolkit 的其他 Issue

查看 getsentry/toolkit 的全部 Issue

相似的 Issue

更多 TypeScript Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。