Skip to content
Snippets Groups Projects
Select Git revision
  • 55adbfcd255b71f1e14e1acf1a08a491e2e7cf8f
  • master default protected
  • v1.23.2
  • v1.23.1
  • v1.23.0
  • v1.22.0
  • v1.21.1
  • v1.21.0
  • v1.20.3
  • v1.20.2
  • v1.20.1
  • v1.20.0
  • v1.19.4
  • v1.19.3
  • v1.19.2
  • v1.19.1
  • v1.19.0
  • v1.18.2
  • v1.18.1
  • v1.18.0
  • v1.17.0
  • v1.16.1
22 results

jobs.go

Blame
  • jobs.go 4.32 KiB
    package jobqueue
    
    import (
    	"sync"
    	"time"
    )
    
    type JobsInterface interface {
    	GetJobs() map[JobIDType]ReadOnlyJob
    
    	GetExecutableJobs() map[JobIDType]ReadOnlyJob
    
    	AddJob(jobSpec JobSpecification, runnable Runnable) error
    
    	RemoveJob(id JobIDType) (bool, error)
    
    	GetJobStatus(id JobIDType) (JobStatus, error)
    
    	Cleanup()
    
    	GetFinishedJobs() map[JobIDType]ReadOnlyJob
    
    	GetFinishedJob(id JobIDType) ReadOnlyJob
    
    	RemoveFinishedJob(id JobIDType) (bool, error)
    
    	JobExists(id JobIDType) bool
    
    	GetJob(id JobIDType) ReadOnlyJob
    
    	GetJobsCount() int
    }
    
    type jobs struct {
    	jobs         map[JobIDType]*job
    	finishedJobs map[JobIDType]*job
    	mutex        sync.Mutex
    }
    
    // compile time check if jobs implements JobsInterface
    var _ JobsInterface = (*jobs)(nil)
    
    func (jq *jobs) GetJobsCount() int {
    	jq.mutex.Lock()
    	defer jq.mutex.Unlock()
    
    	return len(jq.jobs)
    }
    
    func (jq *jobs) Cleanup() {
    	jq.mutex.Lock()
    	defer jq.mutex.Unlock()
    
    	for id, job := range jq.jobs {
    		if job.Status == JobFinished {
    			jq.finishedJobs[id] = job
    			
    			delete(jq.jobs, id)
    		}
    	}
    }
    
    func (jq *jobs) GetFinishedJobs() map[JobIDType]ReadOnlyJob {
    	jq.mutex.Lock()
    	defer jq.mutex.Unlock()
    
    	jobs := make(map[JobIDType]ReadOnlyJob)
    	for id, job := range jq.finishedJobs {
    		jobs[id] = job // Implizites Casting zu ReadOnlyJob
    	}