Add log to pool
This commit is contained in:
@@ -1,5 +1,11 @@
|
|||||||
package pool
|
package pool
|
||||||
|
|
||||||
|
import (
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/deluan/navidrome/log"
|
||||||
|
)
|
||||||
|
|
||||||
type Executor func(workload interface{})
|
type Executor func(workload interface{})
|
||||||
|
|
||||||
type Pool struct {
|
type Pool struct {
|
||||||
@@ -7,6 +13,7 @@ type Pool struct {
|
|||||||
item interface{}
|
item interface{}
|
||||||
workers []worker
|
workers []worker
|
||||||
exec Executor
|
exec Executor
|
||||||
|
logTicker *time.Ticker
|
||||||
workerChannel chan chan work
|
workerChannel chan chan work
|
||||||
queue chan work // receives jobs to send to workers
|
queue chan work // receives jobs to send to workers
|
||||||
end chan bool // when receives bool stops workers
|
end chan bool // when receives bool stops workers
|
||||||
@@ -45,14 +52,26 @@ func NewPool(name string, workerCount int, item interface{}, exec Executor) (*Po
|
|||||||
|
|
||||||
// start pool
|
// start pool
|
||||||
go func() {
|
go func() {
|
||||||
|
p.logTicker = time.NewTicker(10 * time.Second)
|
||||||
|
running := false
|
||||||
for {
|
for {
|
||||||
select {
|
select {
|
||||||
|
case <-p.logTicker.C:
|
||||||
|
if len(p.queue) > 0 {
|
||||||
|
log.Debug("Queue status", "pool", p.name, "items", len(p.queue))
|
||||||
|
} else {
|
||||||
|
if running {
|
||||||
|
log.Info("Finished draining queue", "pool", p.name)
|
||||||
|
}
|
||||||
|
running = false
|
||||||
|
}
|
||||||
case <-p.end:
|
case <-p.end:
|
||||||
for _, w := range p.workers {
|
for _, w := range p.workers {
|
||||||
w.Stop() // stop worker
|
w.Stop() // stop worker
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
case work := <-p.queue:
|
case work := <-p.queue:
|
||||||
|
running = true
|
||||||
worker := <-p.workerChannel // wait for available channel
|
worker := <-p.workerChannel // wait for available channel
|
||||||
worker <- work // dispatch work to worker
|
worker <- work // dispatch work to worker
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user