JCC-CSScheduler/executor/internal/reporter/reporter.go

87 lines
2.1 KiB
Go

package reporter
import (
"sync"
"time"
schmod "gitlink.org.cn/cloudream/scheduler/common/models"
exectsk "gitlink.org.cn/cloudream/scheduler/common/pkgs/mq/executor/task"
)
type Reporter struct {
executorID schmod.ExecutorID
reportInterval time.Duration
taskStatus map[string]exectsk.TaskStatus
taskStatusLock sync.Mutex
reportNow chan bool
}
func NewReporter(executorID schmod.ExecutorID, reportInterval time.Duration) Reporter {
return Reporter{
executorID: executorID,
reportInterval: reportInterval,
taskStatus: make(map[string]exectsk.TaskStatus),
reportNow: make(chan bool),
}
}
func (r *Reporter) Report(taskID string, taskStatus exectsk.TaskStatus) {
r.taskStatusLock.Lock()
defer r.taskStatusLock.Unlock()
r.taskStatus[taskID] = taskStatus
}
func (r *Reporter) ReportNow() {
select {
case r.reportNow <- true:
default:
}
}
func (r *Reporter) Serve() error {
//magCli, err := schglb.ManagerMQPool.Acquire()
//if err != nil {
// return fmt.Errorf("new manager client: %w", err)
//}
//defer schglb.ManagerMQPool.Release(magCli)
ticker := time.NewTicker(r.reportInterval)
defer ticker.Stop()
for {
select {
case <-ticker.C:
case <-r.reportNow:
ticker.Reset(r.reportInterval)
}
//r.taskStatusLock.Lock()
//var taskStatus []mgrmq.ExecutorTaskStatus
//for taskID, status := range r.taskStatus {
// taskStatus = append(taskStatus, mgrmq.NewExecutorTaskStatus(taskID, status))
//}
//r.taskStatus = make(map[string]exectsk.TaskStatus)
//r.taskStatusLock.Unlock()
//status := mgrmq.NewReportExecutorTaskStatus(r.executorID, taskStatus)
//// 将数据发送到管道中
//globals.EventChannel <- *status
//_, err := magCli.ReportExecutorTaskStatus(mgrmq.NewReportExecutorTaskStatus(r.executorID, taskStatus))
//if err != nil {
// logger.Warnf("reporting to manager: %s", err.Error())
//
// //若上报失败,数据应保留
// r.taskStatusLock.Lock()
// for _, ts := range taskStatus {
// if _, exists := r.taskStatus[ts.TaskID]; !exists {
// r.taskStatus[ts.TaskID] = ts.Status
// }
// }
// r.taskStatusLock.Unlock()
//}
}
}