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  }