|
6 | 6 | "flag" |
7 | 7 | "fmt" |
8 | 8 | "io" |
| 9 | + "os" |
9 | 10 | "strings" |
10 | 11 | "time" |
11 | 12 |
|
@@ -39,6 +40,8 @@ type statusResult struct { |
39 | 40 | LatestPublish *state.PublishRequest `json:"latest_publish,omitempty"` |
40 | 41 | ActiveSubmissions []statusSubmission `json:"active_submissions,omitempty"` |
41 | 42 | ActivePublishes []state.PublishRequest `json:"active_publishes,omitempty"` |
| 43 | + IntegrationWorker *state.LeaseMetadata `json:"integration_worker,omitempty"` |
| 44 | + PublishWorker *state.LeaseMetadata `json:"publish_worker,omitempty"` |
42 | 45 | RecentEvents []state.EventRecord `json:"recent_events"` |
43 | 46 | } |
44 | 47 |
|
@@ -163,6 +166,13 @@ func collectStatus(repoPath string, limit int) (statusResult, error) { |
163 | 166 | ActivePublishes: activePublishes(requests), |
164 | 167 | RecentEvents: events, |
165 | 168 | } |
| 169 | + lockManager := state.NewLockManager(layout.RepositoryRoot, layout.GitDir) |
| 170 | + if metadata, ok := readActiveLease(lockManager, state.IntegrationLock); ok { |
| 171 | + result.IntegrationWorker = &metadata |
| 172 | + } |
| 173 | + if metadata, ok := readActiveLease(lockManager, state.PublishLock); ok { |
| 174 | + result.PublishWorker = &metadata |
| 175 | + } |
166 | 176 | if len(enrichedSubmissions) > 0 { |
167 | 177 | latest := enrichedSubmissions[len(enrichedSubmissions)-1] |
168 | 178 | result.LatestSubmission = &latest |
@@ -231,6 +241,22 @@ func renderStatus(stdout io.Writer, result statusResult) error { |
231 | 241 | } else { |
232 | 242 | fmt.Fprintln(stdout, "Latest publish: none") |
233 | 243 | } |
| 244 | + if result.IntegrationWorker != nil { |
| 245 | + fmt.Fprintf(stdout, "Integration worker: owner=%s request=%d pid=%d started=%s\n", |
| 246 | + result.IntegrationWorker.Owner, |
| 247 | + result.IntegrationWorker.RequestID, |
| 248 | + result.IntegrationWorker.PID, |
| 249 | + result.IntegrationWorker.CreatedAt.UTC().Format(time.RFC3339), |
| 250 | + ) |
| 251 | + } |
| 252 | + if result.PublishWorker != nil { |
| 253 | + fmt.Fprintf(stdout, "Publish worker: owner=%s request=%d pid=%d started=%s\n", |
| 254 | + result.PublishWorker.Owner, |
| 255 | + result.PublishWorker.RequestID, |
| 256 | + result.PublishWorker.PID, |
| 257 | + result.PublishWorker.CreatedAt.UTC().Format(time.RFC3339), |
| 258 | + ) |
| 259 | + } |
234 | 260 | if len(result.ActiveSubmissions) > 0 { |
235 | 261 | fmt.Fprintln(stdout, "Active submissions:") |
236 | 262 | for _, submission := range result.ActiveSubmissions { |
@@ -260,6 +286,17 @@ func renderStatus(stdout io.Writer, result statusResult) error { |
260 | 286 | return nil |
261 | 287 | } |
262 | 288 |
|
| 289 | +func readActiveLease(lockManager state.LockManager, domain string) (state.LeaseMetadata, bool) { |
| 290 | + metadata, err := lockManager.Metadata(domain) |
| 291 | + if err != nil { |
| 292 | + if os.IsNotExist(err) { |
| 293 | + return state.LeaseMetadata{}, false |
| 294 | + } |
| 295 | + return state.LeaseMetadata{}, false |
| 296 | + } |
| 297 | + return metadata, true |
| 298 | +} |
| 299 | + |
263 | 300 | func activeSubmissions(submissions []statusSubmission) []statusSubmission { |
264 | 301 | var active []statusSubmission |
265 | 302 | for _, submission := range submissions { |
|
0 commit comments