Something went wrong on our end
Select Git revision
monster.mjs
-
Volker Schukai authoredVolker Schukai authored
manager.go 5.07 KiB
package jobqueue
import (
"fmt"
"sync"
)
type ManagerState int
const (
ManagerStateStopped = iota
ManagerStateRunning
)
type Manager struct {
state ManagerState
queue *Queue
workerMap map[WorkerID]Worker
eventBus *EventBus
scheduled map[JobID]Scheduler
jobEventCh chan interface{}
mu sync.Mutex
}
// NewManager initializes a new Manager
func NewManager() *Manager {
eventBus := NewEventBus()
return &Manager{
state: ManagerStateStopped,
queue: NewQueue(eventBus),
workerMap: make(map[WorkerID]Worker),
eventBus: eventBus,
scheduled: make(map[JobID]Scheduler),
}
}
func (m *Manager) GetEventBus() *EventBus {
m.mu.Lock()
defer m.mu.Unlock()
return m.eventBus
}
func (m *Manager) checkAndSetRunningState() error {
m.state = ManagerStateStopped
if m.workerMap == nil {
return ErrNoWorkers
}
if len(m.workerMap) == 0 {
return ErrNoWorkers
}
for _, worker := range m.workerMap {
if worker.Status() == WorkerStatusRunning {
m.state = ManagerStateRunning
return nil
}
}
return nil
}
// AddWorker adds a worker to the manager