github.com/netdata/go.d.plugin@v0.58.1/agent/jobmgr/run.go (about) 1 // SPDX-License-Identifier: GPL-3.0-or-later 2 3 package jobmgr 4 5 import ( 6 "context" 7 "slices" 8 "time" 9 10 "github.com/netdata/go.d.plugin/agent/ticker" 11 ) 12 13 func (m *Manager) runRunningJobsHandling(ctx context.Context) { 14 tk := ticker.New(time.Second) 15 defer tk.Stop() 16 17 for { 18 select { 19 case <-ctx.Done(): 20 return 21 case clock := <-tk.C: 22 //m.Debugf("tick %d", clock) 23 m.notifyRunningJobs(clock) 24 } 25 } 26 } 27 28 func (m *Manager) notifyRunningJobs(clock int) { 29 m.queueMux.Lock() 30 defer m.queueMux.Unlock() 31 32 for _, v := range m.queue { 33 v.Tick(clock) 34 } 35 } 36 37 func (m *Manager) startJob(job Job) { 38 m.queueMux.Lock() 39 defer m.queueMux.Unlock() 40 41 go job.Start() 42 43 m.queue = append(m.queue, job) 44 } 45 46 func (m *Manager) stopJob(name string) { 47 m.queueMux.Lock() 48 defer m.queueMux.Unlock() 49 50 idx := slices.IndexFunc(m.queue, func(job Job) bool { 51 return job.FullName() == name 52 }) 53 54 if idx != -1 { 55 j := m.queue[idx] 56 j.Stop() 57 58 copy(m.queue[idx:], m.queue[idx+1:]) 59 m.queue[len(m.queue)-1] = nil 60 m.queue = m.queue[:len(m.queue)-1] 61 } 62 } 63 64 func (m *Manager) stopRunningJobs() { 65 m.queueMux.Lock() 66 defer m.queueMux.Unlock() 67 68 for i, v := range m.queue { 69 v.Stop() 70 m.queue[i] = nil 71 } 72 m.queue = m.queue[:0] 73 }