From 1d69a64c75afca4ef23abb3b6fa7154941c4c1c8 Mon Sep 17 00:00:00 2001 From: thomasrockhu-codecov Date: Tue, 24 Mar 2026 22:38:43 +0900 Subject: [PATCH 1/6] fix: sample high-volume "Token required" Sentry errors at 1% The CLI-S issue has ~21M occurrences of "Token required - not valid tokenless upload" errors flooding Sentry. Add a before_send hook that randomly drops 99 out of 100 events matching this message pattern, reducing volume while still capturing representative samples. --- codecov-cli/codecov_cli/opentelemetry.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/codecov-cli/codecov_cli/opentelemetry.py b/codecov-cli/codecov_cli/opentelemetry.py index 442bfaf..087f27e 100644 --- a/codecov-cli/codecov_cli/opentelemetry.py +++ b/codecov-cli/codecov_cli/opentelemetry.py @@ -1,10 +1,27 @@ import os +import random import sentry_sdk from codecov_cli import __version__ _SKIP_TAG_KEYS = {"branch", "flags", "commit_sha", "env_vars"} +_SAMPLED_MESSAGES = [ + "Token required", +] +_SAMPLE_RATE = 100 + + +def _before_send(event, hint): + message = (event.get("logentry") or {}).get("message", "") + if not message: + message = event.get("message", "") + for pattern in _SAMPLED_MESSAGES: + if pattern in message: + if random.randint(1, _SAMPLE_RATE) != 1: + return None + break + return event def init_telem(ctx): @@ -20,6 +37,7 @@ def init_telem(ctx): enable_tracing=True, environment=os.getenv("CODECOV_ENV", "production"), release=f"cli@{__version__}", + before_send=_before_send, ) From 47f5bbd18de5c872eb58aa62bab0cba5a3958f74 Mon Sep 17 00:00:00 2001 From: thomasrockhu-codecov Date: Tue, 24 Mar 2026 22:42:09 +0900 Subject: [PATCH 2/6] fix: inspect exception values in before_send sampling hook The _before_send hook only checked logentry.message and event.message, but Sentry exception events store error text in exception.values[i].value. Extract a _collect_messages generator that yields from all three locations so "Token required" exceptions are actually matched and sampled at 1%. Made-with: Cursor --- codecov-cli/codecov_cli/opentelemetry.py | 27 +++++++++++++++++------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/codecov-cli/codecov_cli/opentelemetry.py b/codecov-cli/codecov_cli/opentelemetry.py index 087f27e..46dbc66 100644 --- a/codecov-cli/codecov_cli/opentelemetry.py +++ b/codecov-cli/codecov_cli/opentelemetry.py @@ -12,15 +12,26 @@ _SAMPLE_RATE = 100 +def _collect_messages(event): + msg = (event.get("logentry") or {}).get("message", "") + if msg: + yield msg + msg = event.get("message", "") + if msg: + yield msg + for exc in (event.get("exception") or {}).get("values", []): + val = exc.get("value", "") + if val: + yield val + + def _before_send(event, hint): - message = (event.get("logentry") or {}).get("message", "") - if not message: - message = event.get("message", "") - for pattern in _SAMPLED_MESSAGES: - if pattern in message: - if random.randint(1, _SAMPLE_RATE) != 1: - return None - break + for message in _collect_messages(event): + for pattern in _SAMPLED_MESSAGES: + if pattern in message: + if random.randint(1, _SAMPLE_RATE) != 1: + return None + return event return event From f4563ee08c1ab51ba6647c656fc609a0411f3604 Mon Sep 17 00:00:00 2001 From: thomasrockhu-codecov Date: Wed, 25 Mar 2026 02:00:56 +0900 Subject: [PATCH 3/6] refactor: simplify before_send sampling hook Collapse _collect_messages generator into a single inline expression and replace nested loops with any(). Same behavior, half the lines. --- codecov-cli/codecov_cli/opentelemetry.py | 26 +++++++----------------- 1 file changed, 7 insertions(+), 19 deletions(-) diff --git a/codecov-cli/codecov_cli/opentelemetry.py b/codecov-cli/codecov_cli/opentelemetry.py index 46dbc66..80614b8 100644 --- a/codecov-cli/codecov_cli/opentelemetry.py +++ b/codecov-cli/codecov_cli/opentelemetry.py @@ -12,26 +12,14 @@ _SAMPLE_RATE = 100 -def _collect_messages(event): - msg = (event.get("logentry") or {}).get("message", "") - if msg: - yield msg - msg = event.get("message", "") - if msg: - yield msg - for exc in (event.get("exception") or {}).get("values", []): - val = exc.get("value", "") - if val: - yield val - - def _before_send(event, hint): - for message in _collect_messages(event): - for pattern in _SAMPLED_MESSAGES: - if pattern in message: - if random.randint(1, _SAMPLE_RATE) != 1: - return None - return event + text = " ".join(filter(None, [ + (event.get("logentry") or {}).get("message"), + event.get("message"), + *[e.get("value") for e in (event.get("exception") or {}).get("values", [])], + ])) + if any(p in text for p in _SAMPLED_MESSAGES) and random.randint(1, _SAMPLE_RATE) != 1: + return None return event From 7df61df2c561418bd4d8fc9fa85ab5425df7af16 Mon Sep 17 00:00:00 2001 From: thomasrockhu-codecov Date: Wed, 25 Mar 2026 22:29:35 +0900 Subject: [PATCH 4/6] fix: make the logic more obvious --- codecov-cli/codecov_cli/opentelemetry.py | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/codecov-cli/codecov_cli/opentelemetry.py b/codecov-cli/codecov_cli/opentelemetry.py index 80614b8..3ea4458 100644 --- a/codecov-cli/codecov_cli/opentelemetry.py +++ b/codecov-cli/codecov_cli/opentelemetry.py @@ -13,13 +13,20 @@ def _before_send(event, hint): - text = " ".join(filter(None, [ - (event.get("logentry") or {}).get("message"), - event.get("message"), - *[e.get("value") for e in (event.get("exception") or {}).get("values", [])], - ])) - if any(p in text for p in _SAMPLED_MESSAGES) and random.randint(1, _SAMPLE_RATE) != 1: - return None + messages = [] + if "message" in event: + messages.append(event.get("message")) + if "logentry" in event and "message" in event.get("logentry"): + messages.append(event.get("logentry").get("message")) + for exc in (event.get("exception", {})).get("values", []): + if "value" in exc: + messages.append(exc.get("value")) + + for message in messages: + for pattern in _SAMPLED_MESSAGES: + if pattern in message and random.randint(1, _SAMPLE_RATE) != 1: + return None + return event From 6aeb833af22a12d9df43bb8fcf5aebdccae2be9d Mon Sep 17 00:00:00 2001 From: thomasrockhu-codecov Date: Wed, 25 Mar 2026 22:42:17 +0900 Subject: [PATCH 5/6] fix: update logic to check sampling at the end --- codecov-cli/codecov_cli/opentelemetry.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/codecov-cli/codecov_cli/opentelemetry.py b/codecov-cli/codecov_cli/opentelemetry.py index 3ea4458..71d4040 100644 --- a/codecov-cli/codecov_cli/opentelemetry.py +++ b/codecov-cli/codecov_cli/opentelemetry.py @@ -22,11 +22,15 @@ def _before_send(event, hint): if "value" in exc: messages.append(exc.get("value")) + matched = False for message in messages: for pattern in _SAMPLED_MESSAGES: - if pattern in message and random.randint(1, _SAMPLE_RATE) != 1: - return None + if pattern in message: + matched = True + break + if matched and random.randint(1, _SAMPLE_RATE) != 1: + return None return event From 5f1e5ba7fb0bfcf90c0491dd78d34a63c88849c4 Mon Sep 17 00:00:00 2001 From: thomasrockhu-codecov Date: Thu, 26 Mar 2026 04:34:42 +0900 Subject: [PATCH 6/6] fix: test and update --- codecov-cli/codecov_cli/opentelemetry.py | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/codecov-cli/codecov_cli/opentelemetry.py b/codecov-cli/codecov_cli/opentelemetry.py index 71d4040..a9d5538 100644 --- a/codecov-cli/codecov_cli/opentelemetry.py +++ b/codecov-cli/codecov_cli/opentelemetry.py @@ -5,22 +5,23 @@ from codecov_cli import __version__ -_SKIP_TAG_KEYS = {"branch", "flags", "commit_sha", "env_vars"} _SAMPLED_MESSAGES = [ "Token required", ] _SAMPLE_RATE = 100 +_SKIP_TAG_KEYS = {"branch", "flags", "commit_sha", "env_vars"} def _before_send(event, hint): messages = [] - if "message" in event: + if "message" in event and event.get("message") is not None: messages.append(event.get("message")) - if "logentry" in event and "message" in event.get("logentry"): - messages.append(event.get("logentry").get("message")) - for exc in (event.get("exception", {})).get("values", []): - if "value" in exc: - messages.append(exc.get("value")) + if "logentry" in event and "message" in event.get("logentry", {}) and event.get("logentry", {}).get("message") is not None: + messages.append(event.get("logentry", {}).get("message")) + if "exception" in event and event.get("exception") is not None: + for exc in event.get("exception", {}).get("values", []): + if "value" in exc: + messages.append(exc.get("value")) matched = False for message in messages: