@@ -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