diff --git a/internal/services/runservice/executor/executor.go b/internal/services/runservice/executor/executor.go index 80a4122..473a475 100644 --- a/internal/services/runservice/executor/executor.go +++ b/internal/services/runservice/executor/executor.go @@ -656,14 +656,17 @@ func (e *Executor) sendExecutorStatus(ctx context.Context) error { labels = make(map[string]string) } + activeTasks := e.runningTasks.len() + // Add special labels (and override config provided ones) arch := runtime.GOARCH labels["arch"] = arch executor := &types.Executor{ - ID: e.id, - ListenURL: e.listenURL, - Labels: labels, + ID: e.id, + ListenURL: e.listenURL, + Labels: labels, + ActiveTasks: activeTasks, } log.Debugf("send executor status: %s", util.Dump(executor)) @@ -1153,6 +1156,12 @@ func (r *runningTasks) delete(rtID string) { delete(r.tasks, rtID) } +func (r *runningTasks) len() int { + r.m.Lock() + defer r.m.Unlock() + return len(r.tasks) +} + func (e *Executor) handleTasks(ctx context.Context, c <-chan *types.ExecutorTask) { for et := range c { go e.executeTask(ctx, et) diff --git a/internal/services/runservice/types/types.go b/internal/services/runservice/types/types.go index 5d6d1ff..860ff82 100644 --- a/internal/services/runservice/types/types.go +++ b/internal/services/runservice/types/types.go @@ -658,6 +658,8 @@ type Executor struct { Labels map[string]string `json:"labels,omitempty"` + ActiveTasks int `json:"active_tasks,omitempty"` + // internal values not saved Revision int64 `json:"-"` }