mirror of
https://github.com/muety/wakapi.git
synced 2023-08-10 21:12:56 +03:00
53 lines
1.0 KiB
Go
53 lines
1.0 KiB
Go
package config
|
|
|
|
import (
|
|
"fmt"
|
|
"github.com/emvi/logbuch"
|
|
"github.com/muety/artifex"
|
|
"math"
|
|
"runtime"
|
|
)
|
|
|
|
var jobqueues map[string]*artifex.Dispatcher
|
|
|
|
const (
|
|
QueueDefault = "wakapi.default"
|
|
QueueProcessing = "wakapi.processing"
|
|
QueueReports = "wakapi.reports"
|
|
)
|
|
|
|
func init() {
|
|
jobqueues = make(map[string]*artifex.Dispatcher)
|
|
|
|
InitQueue(QueueDefault, 1)
|
|
InitQueue(QueueProcessing, int(math.Ceil(float64(runtime.NumCPU())/2.0)))
|
|
InitQueue(QueueReports, 1)
|
|
}
|
|
|
|
func InitQueue(name string, workers int) error {
|
|
if _, ok := jobqueues[name]; ok {
|
|
return fmt.Errorf("queue '%s' already existing", name)
|
|
}
|
|
logbuch.Info("creating job queue '%s' (%d workers)", name, workers)
|
|
jobqueues[name] = artifex.NewDispatcher(workers, 4096)
|
|
jobqueues[name].Start()
|
|
return nil
|
|
}
|
|
|
|
func GetDefaultQueue() *artifex.Dispatcher {
|
|
return GetQueue("")
|
|
}
|
|
|
|
func GetQueue(name string) *artifex.Dispatcher {
|
|
if _, ok := jobqueues[name]; !ok {
|
|
InitQueue(name, 1)
|
|
}
|
|
return jobqueues[name]
|
|
}
|
|
|
|
func CloseQueues() {
|
|
for _, q := range jobqueues {
|
|
q.Stop()
|
|
}
|
|
}
|