Skip to content
Snippets Groups Projects
Select Git revision
  • 13f92463fbd3665bc5e04b5de4885f2feab9b019
  • master default protected
  • 1.31
  • 4.28.0
  • 4.27.0
  • 4.26.0
  • 4.25.5
  • 4.25.4
  • 4.25.3
  • 4.25.2
  • 4.25.1
  • 4.25.0
  • 4.24.3
  • 4.24.2
  • 4.24.1
  • 4.24.0
  • 4.23.6
  • 4.23.5
  • 4.23.4
  • 4.23.3
  • 4.23.2
  • 4.23.1
  • 4.23.0
23 results

monster.mjs

Blame
  • 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