87 lines
2.1 KiB
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()
|
|
//}
|
|
}
|
|
}
|