Skip to content

Commit a396578

Browse files
markstoryandrewshie-sentry
authored andcommitted
fix(taskworker) Improve metrics for scheduler (#93051)
Add a taskname dimension to scheduled tasks so that we can filter and breakdown scheduler operations.
1 parent 8130023 commit a396578

File tree

3 files changed

+24
-4
lines changed

3 files changed

+24
-4
lines changed

src/sentry/taskworker/scheduler/runner.py

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,14 @@ def __repr__(self) -> str:
105105
def fullname(self) -> str:
106106
return self._task.fullname
107107

108+
@property
109+
def namespace(self) -> str:
110+
return self._task.namespace.name
111+
112+
@property
113+
def taskname(self) -> str:
114+
return self._task.name
115+
108116
def set_last_run(self, last_run: datetime | None) -> None:
109117
self._last_run = last_run
110118

@@ -118,7 +126,6 @@ def runtime_after(self, start: datetime) -> datetime:
118126
return self._schedule.runtime_after(start)
119127

120128
def delay_task(self) -> None:
121-
logger.info("taskworker.scheduler.delay_task", extra={"task": self._task.fullname})
122129
monitor_config = self.monitor_config()
123130
headers: dict[str, Any] | None = None
124131
if monitor_config:
@@ -223,13 +230,21 @@ def _try_spawn(self, entry: ScheduleEntry) -> None:
223230
entry.delay_task()
224231
entry.set_last_run(now)
225232

226-
logger.info("taskworker.scheduler.delay_task", extra={"task": entry.fullname})
227-
metrics.incr("taskworker.scheduler.delay_task")
233+
logger.info("taskworker.scheduler.delay_task", extra={"fullname": entry.fullname})
234+
metrics.incr(
235+
"taskworker.scheduler.delay_task",
236+
tags={
237+
"taskname": entry.taskname,
238+
"namespace": entry.namespace,
239+
},
240+
)
228241
else:
229242
# sync with last_run state in storage
230243
entry.set_last_run(self._run_storage.read(entry.fullname))
231244

232-
logger.info("taskworker.scheduler.sync_with_storage", extra={"task": entry.fullname})
245+
logger.info(
246+
"taskworker.scheduler.sync_with_storage", extra={"fullname": entry.fullname}
247+
)
233248
metrics.incr("taskworker.scheduler.sync_with_storage")
234249

235250
def _update_heap(self) -> None:

src/sentry/taskworker/task.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,10 @@ def __init__(
6464
def fullname(self) -> str:
6565
return f"{self._namespace.name}:{self.name}"
6666

67+
@property
68+
def namespace(self) -> TaskNamespace:
69+
return self._namespace
70+
6771
@property
6872
def retry(self) -> Retry | None:
6973
return self._retry

tests/sentry/taskworker/test_task.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ def test_define_task_defaults(task_namespace: TaskNamespace) -> None:
3030
task = Task(name="test.do_things", func=do_things, namespace=task_namespace)
3131
assert task.retry is None
3232
assert task.name == "test.do_things"
33+
assert task.namespace == task_namespace
3334

3435

3536
def test_define_task_retry(task_namespace: TaskNamespace) -> None:

0 commit comments

Comments
 (0)