Skip to content

Commit e3d3218

Browse files
authored
Merge pull request #1244 from srtab/feat/dashboard-api-segment
feat(accounts): Break out API jobs in dashboard breakdown
2 parents 273e670 + 67779c6 commit e3d3218

1 file changed

Lines changed: 9 additions & 3 deletions

File tree

daiv/accounts/views.py

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,7 @@ def _get_activity_data(self, cutoff_date: date | None, user: User) -> dict:
143143
mr_trigger = Q(trigger_type=TriggerType.MR_WEBHOOK)
144144
mcp_trigger = Q(trigger_type=TriggerType.MCP_JOB)
145145
schedule_trigger = Q(trigger_type=TriggerType.SCHEDULE)
146+
api_trigger = Q(trigger_type=TriggerType.API_JOB)
146147
duration_expr = ExpressionWrapper(F("finished_at") - F("started_at"), output_field=DurationField())
147148

148149
stats = activities.aggregate(
@@ -153,6 +154,7 @@ def _get_activity_data(self, cutoff_date: date | None, user: User) -> dict:
153154
mrs=Count("id", filter=mr_trigger & ~failed),
154155
mcp_jobs=Count("id", filter=mcp_trigger & ~failed),
155156
scheduled=Count("id", filter=schedule_trigger & ~failed),
157+
api_jobs=Count("id", filter=api_trigger & ~failed),
156158
code_changes=Count("id", filter=successful & Q(code_changes=True)),
157159
avg_duration=Avg(duration_expr, filter=successful),
158160
)
@@ -169,17 +171,21 @@ def _get_activity_data(self, cutoff_date: date | None, user: User) -> dict:
169171
mrs_count = stats["mrs"]
170172
mcp_jobs_count = stats["mcp_jobs"]
171173
scheduled_count = stats["scheduled"]
174+
api_jobs_count = stats["api_jobs"]
172175
activity_url = reverse("activity_list")
173176

174177
# Non-overlapping segments for the breakdown bar.
175-
# Trigger types are mutually exclusive, so issues/mrs/mcp/scheduled never overlap.
176-
# Each segment excludes failed; "Other" absorbs the remainder (e.g. API jobs).
177-
other_count = max(0, total - issues_count - mrs_count - mcp_jobs_count - scheduled_count - failed_count)
178+
# Trigger types are mutually exclusive, so the trigger-keyed segments never overlap.
179+
# Each segment excludes failed; "Other" absorbs the remainder (e.g. UI jobs).
180+
other_count = max(
181+
0, total - issues_count - mrs_count - mcp_jobs_count - scheduled_count - api_jobs_count - failed_count
182+
)
178183
raw_segments = [
179184
("Issues", issues_count, "bg-amber-500/50", f"{activity_url}?trigger={TriggerType.ISSUE_WEBHOOK}"),
180185
("MR/PR", mrs_count, "bg-cyan-500/50", f"{activity_url}?trigger={TriggerType.MR_WEBHOOK}"),
181186
("MCP Job", mcp_jobs_count, "bg-indigo-500/50", f"{activity_url}?trigger={TriggerType.MCP_JOB}"),
182187
("Scheduled", scheduled_count, "bg-violet-500/40", f"{activity_url}?trigger={TriggerType.SCHEDULE}"),
188+
("API", api_jobs_count, "bg-emerald-500/50", f"{activity_url}?trigger={TriggerType.API_JOB}"),
183189
("Other", other_count, "bg-gray-500/30", None),
184190
("Failed", failed_count, "bg-red-500/40", f"{activity_url}?status={ActivityStatus.FAILED}"),
185191
]

0 commit comments

Comments
 (0)