diff --git a/internal/models/structs.go b/internal/models/structs.go index ab85bc3..1abe885 100644 --- a/internal/models/structs.go +++ b/internal/models/structs.go @@ -29,7 +29,7 @@ package models } */ -type PendingInformation struct { +type JobInformation struct { ID int `json:"id"` Data string `json:"data"` Labels map[string]string `json:"labels"` @@ -48,11 +48,11 @@ type Stats struct { } type QueueInfo struct { - Pending []PendingInformation `json:"pending,omitempty"` - WaitingOnDeps string `json:"-"` // dont need those - Running int `json:"running,omitempty"` - Stats Stats `json:"stats"` - Paused bool `json:"paused"` + Pending []JobInformation `json:"pending,omitempty"` + WaitingOnDeps string `json:"-"` // dont need those + Running []JobInformation `json:"running,omitempty"` + Stats Stats `json:"stats"` + Paused bool `json:"paused"` } /*[ diff --git a/internal/woodpecker/metrics.go b/internal/woodpecker/metrics.go index 49fe6eb..43dc92b 100644 --- a/internal/woodpecker/metrics.go +++ b/internal/woodpecker/metrics.go @@ -64,14 +64,27 @@ func CheckPending(cfg *config.Config) (bool, error) { } func CheckRunning(cfg *config.Config) (bool, error) { + expectedKV := strings.Split(cfg.WoodpeckerLabelSelector, "=") queueInfo := new(models.QueueInfo) err := QueueInfo(cfg, queueInfo) if err != nil { return false, errors.New(fmt.Sprintf("Error from QueueInfo: %s", err.Error())) } - // TODO: create and parse running object. there may be jobs that are not for us if queueInfo.Stats.RunningCount > 0 { - return true, nil + for _, runningJobs := range queueInfo.Running { + val, exists := runningJobs.Labels[expectedKV[0]] + if exists && val == expectedKV[1] { + log.WithFields(log.Fields{ + "Caller": "CheckRunning", + }).Info("Found running job for us") + return true, nil + } else { + log.WithFields(log.Fields{ + "Caller": "CheckRunning", + }).Info("No running job for us") + return false, nil + } + } } return false, nil }