Let apps shape the fingerprint, so a message with a per-request id doesn't split one error into many
Maintainer thường phản hồi trong vòng 1 ngày
Đánh giá
- Độ khó
- 4/5
- Thời gian dự kiến
- 1-2 ngày
- Mức phù hợp với người mới
- 54/100
- Loại issue
- Tính năng
- Độ rõ ràng
- Khá rõ ràng
- Mức độ hoạt động
- Sôi nổi
- Lĩnh vực
- backend, observability
Hướng nghiên cứu
Start by reading Subscriber#report and the fingerprint configuration path; the issue names these as the likely change points but does not give file paths or tests. Compare the proposed configurable fingerprint hook with the narrower message-normalizing option, then check the README and existing subscriber tests. Done means the chosen option groups messages with changing request IDs while retaining the reported message, with configuration documented and tests covering the behavior.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
An error's fingerprint is a hash of its class, message, severity and source. When a message embeds something that changes with every occurrence, such as a request id, a record id or a timestamp, each occurrence becomes an error of its own. The dashboard fills with near-identical errors that each have one occurrence. That hides a real outage, which looks like hundreds of new errors rather than one error with hundreds of occurrences, and since every one is "new", each one is emailed.
The case we hit is API client errors that end with the provider's request id:
Anthropic::Errors::InternalServerError: Internal server error (request_id: req_011CT8...)
What we do today is wrap the subscriber. We unsubscribe SolidErrors::Subscriber and subscribe one that rewrites the exception's message, replacing req_... with a placeholder and moving the id into the context, before handing it on. It works, but it means replacing the gem's subscriber and redefining #message on the exception.
A possible shape: an optional hook that turns the attributes into the fingerprint, defaulting to what happens now:
config.solid_errors.fingerprint = ->(error:, attributes:) {
message = attributes[:message].gsub(/\breq_[A-Za-z0-9]+/, "req_*")
[attributes[:exception_class], message, attributes[:severity], attributes[:source]].join
}
The stored message would stay as reported, so the id is still there to quote, and only the grouping would change. A narrower alternative is a message-normalizing proc that applies only to the fingerprint.
Would something like this be welcome? If so, I can send a small PR: the config option, the call in Subscriber#report, a README section and tests.
- Ngôn ngữ chính
- Ruby
- Star
- 498
- Fork
- 36
- Merge trung bình
- 12 giờ 38 phút
- Pull request đã merge (30 ngày)
- 20
Chuẩn bị môi trường
Dự án này không cung cấp dev container, Dockerfile hay hướng dẫn đóng góp, nên bạn cần tự thiết lập môi trường: hãy bắt đầu từ README và xem hướng dẫn đóng góp lần đầu của chúng tôi để biết các bước chung.
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue tương tự
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 65/100
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 85/100
heartcombo/simple_form#1874 ·
-
Bug: Reports Monthly breakdown shows the whole first month when a custom range starts mid-monthĐang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 85/100
we-promise/sure#4603 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Category: OneSwap Status: Accepted
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
OpenNebula/one#8237 ·
-
Reconfigure Settings sidebarĐang mởenhancement
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 70/100
AllYourBot/hostedgpt#882 ·
Maintainer thường phản hồi trong vòng 1 ngày