Skip to content

Commit d99dd06

Browse files
refactor(queue): extract queue derivation logic
Co-authored-by: Andrew <andrewxhill@gmail.com>
1 parent 7424ef8 commit d99dd06

2 files changed

Lines changed: 83 additions & 77 deletions

File tree

internal/app/queue_logic.go

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
package app
2+
3+
import (
4+
"github.com/recallnet/mainline/internal/domain"
5+
"github.com/recallnet/mainline/internal/state"
6+
)
7+
8+
func summarizeCounts(submissions []state.IntegrationSubmission, requests []state.PublishRequest) queueCounts {
9+
var counts queueCounts
10+
for _, submission := range submissions {
11+
switch submission.Status {
12+
case domain.SubmissionStatusQueued:
13+
counts.QueuedSubmissions++
14+
case domain.SubmissionStatusRunning:
15+
counts.RunningSubmissions++
16+
case domain.SubmissionStatusBlocked:
17+
counts.BlockSubmissions++
18+
case domain.SubmissionStatusFailed:
19+
counts.FailedSubmissions++
20+
case domain.SubmissionStatusCancelled:
21+
counts.CancelledSubmissions++
22+
case domain.SubmissionStatusSuperseded:
23+
// terminal and intentionally omitted from active queue counts
24+
}
25+
}
26+
for _, request := range requests {
27+
switch request.Status {
28+
case domain.PublishStatusQueued:
29+
counts.QueuedPublishes++
30+
case domain.PublishStatusRunning:
31+
counts.RunningPublishes++
32+
case domain.PublishStatusFailed:
33+
counts.FailedPublishes++
34+
case domain.PublishStatusCancelled:
35+
counts.CancelledPublishes++
36+
case domain.PublishStatusSucceeded:
37+
counts.SucceededPublishes++
38+
}
39+
}
40+
return counts
41+
}
42+
43+
func summarizeQueue(counts queueCounts) queueSummary {
44+
queueLength := counts.QueuedSubmissions +
45+
counts.RunningSubmissions +
46+
counts.BlockSubmissions +
47+
counts.QueuedPublishes +
48+
counts.RunningPublishes
49+
summary := queueSummary{
50+
QueueLength: queueLength,
51+
HasBlockedSubmissions: counts.BlockSubmissions > 0,
52+
HasRunningPublishes: counts.RunningPublishes > 0,
53+
HasRunningSubmissions: counts.RunningSubmissions > 0,
54+
HasQueuedWork: queueLength > 0,
55+
}
56+
switch {
57+
case counts.RunningPublishes > 0:
58+
summary.Headline = "publishing"
59+
case counts.BlockSubmissions > 0:
60+
summary.Headline = "blocked"
61+
case counts.RunningSubmissions > 0:
62+
summary.Headline = "integrating"
63+
case counts.QueuedSubmissions > 0 || counts.QueuedPublishes > 0:
64+
summary.Headline = "queued"
65+
default:
66+
summary.Headline = "idle"
67+
summary.QueueLength = 0
68+
summary.HasQueuedWork = false
69+
}
70+
return summary
71+
}
72+
73+
func buildQueueAlerts(counts queueCounts) []string {
74+
var alerts []string
75+
if counts.RunningPublishes > 0 && counts.BlockSubmissions > 0 {
76+
alerts = append(alerts, "A publish is actively running. Separate blocked submissions still need attention, but they are not stopping the current publish.")
77+
}
78+
if counts.RunningSubmissions > 0 && counts.BlockSubmissions > 0 {
79+
alerts = append(alerts, "An integration is actively running. Separate blocked submissions still need attention.")
80+
}
81+
return alerts
82+
}

internal/app/status.go

Lines changed: 1 addition & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -293,7 +293,7 @@ func collectStatus(repoPath string, limit int) (statusResult, error) {
293293
}
294294
}
295295
result.QueueSummary = queue.Summary
296-
result.Alerts = buildStatusAlerts(result.Counts)
296+
result.Alerts = buildQueueAlerts(result.Counts)
297297
lockManager := state.NewLockManager(layout.RepositoryRoot, layout.GitDir)
298298
if metadata, ok := readActiveLease(lockManager, state.IntegrationLock); ok {
299299
result.IntegrationWorker = &metadata
@@ -616,82 +616,6 @@ func activePublishes(requests []state.PublishRequest) []statusPublish {
616616
return active
617617
}
618618

619-
func summarizeCounts(submissions []state.IntegrationSubmission, requests []state.PublishRequest) queueCounts {
620-
var counts queueCounts
621-
for _, submission := range submissions {
622-
switch submission.Status {
623-
case domain.SubmissionStatusQueued:
624-
counts.QueuedSubmissions++
625-
case domain.SubmissionStatusRunning:
626-
counts.RunningSubmissions++
627-
case domain.SubmissionStatusBlocked:
628-
counts.BlockSubmissions++
629-
case domain.SubmissionStatusFailed:
630-
counts.FailedSubmissions++
631-
case domain.SubmissionStatusCancelled:
632-
counts.CancelledSubmissions++
633-
case domain.SubmissionStatusSuperseded:
634-
// terminal and intentionally omitted from active queue counts
635-
}
636-
}
637-
for _, request := range requests {
638-
switch request.Status {
639-
case domain.PublishStatusQueued:
640-
counts.QueuedPublishes++
641-
case domain.PublishStatusRunning:
642-
counts.RunningPublishes++
643-
case domain.PublishStatusFailed:
644-
counts.FailedPublishes++
645-
case domain.PublishStatusCancelled:
646-
counts.CancelledPublishes++
647-
case domain.PublishStatusSucceeded:
648-
counts.SucceededPublishes++
649-
}
650-
}
651-
return counts
652-
}
653-
654-
func summarizeQueue(counts queueCounts) queueSummary {
655-
queueLength := counts.QueuedSubmissions +
656-
counts.RunningSubmissions +
657-
counts.BlockSubmissions +
658-
counts.QueuedPublishes +
659-
counts.RunningPublishes
660-
summary := queueSummary{
661-
QueueLength: queueLength,
662-
HasBlockedSubmissions: counts.BlockSubmissions > 0,
663-
HasRunningPublishes: counts.RunningPublishes > 0,
664-
HasRunningSubmissions: counts.RunningSubmissions > 0,
665-
HasQueuedWork: queueLength > 0,
666-
}
667-
switch {
668-
case counts.RunningPublishes > 0:
669-
summary.Headline = "publishing"
670-
case counts.BlockSubmissions > 0:
671-
summary.Headline = "blocked"
672-
case counts.RunningSubmissions > 0:
673-
summary.Headline = "integrating"
674-
case counts.QueuedSubmissions > 0 || counts.QueuedPublishes > 0:
675-
summary.Headline = "queued"
676-
default:
677-
summary.Headline = "idle"
678-
summary.QueueLength = 0
679-
summary.HasQueuedWork = false
680-
}
681-
return summary
682-
}
683-
684-
func buildStatusAlerts(counts queueCounts) []string {
685-
var alerts []string
686-
if counts.RunningPublishes > 0 && counts.BlockSubmissions > 0 {
687-
alerts = append(alerts, "A publish is actively running. Separate blocked submissions still need attention, but they are not stopping the current publish.")
688-
}
689-
if counts.RunningSubmissions > 0 && counts.BlockSubmissions > 0 {
690-
alerts = append(alerts, "An integration is actively running. Separate blocked submissions still need attention.")
691-
}
692-
return alerts
693-
}
694-
695619
func buildBlockedSubmissionActions(submission statusSubmission) []statusNextAction {
696620
if submission.SourceWorktree == "" {
697621
return nil

0 commit comments

Comments
 (0)