1、增加任务处理进度
This commit is contained in:
parent
685b46c1e5
commit
7d09ba0286
|
@ -20,7 +20,7 @@ consul:
|
||||||
timeout: 5
|
timeout: 5
|
||||||
deregister: 1
|
deregister: 1
|
||||||
db:
|
db:
|
||||||
conn: root:123456@tcp(127.0.0.1:3306)/hpds_jky?charset=utf8mb4
|
conn: root:OIxv7QptYBO3@tcp(192.168.53.10:3306)/diagnosis?charset=utf8mb4
|
||||||
drive_name: mysql
|
drive_name: mysql
|
||||||
cache:
|
cache:
|
||||||
host: 127.0.0.1
|
host: 127.0.0.1
|
||||||
|
@ -29,13 +29,13 @@ cache:
|
||||||
pool_size: 10
|
pool_size: 10
|
||||||
minio:
|
minio:
|
||||||
protocol: http
|
protocol: http
|
||||||
endpoint: 127.0.0.1:9000
|
endpoint: 192.168.53.10:9000
|
||||||
accessKeyId: root
|
accessKeyId: root
|
||||||
secretAccessKey: OIxv7QptYBO3
|
secretAccessKey: OIxv7QptYBO3
|
||||||
bucket: jky-data
|
bucket: diagnosis
|
||||||
node:
|
node:
|
||||||
host: 127.0.0.1
|
host: 192.168.53.10
|
||||||
port: 27188
|
port: 9188
|
||||||
token: 06d36c6f5705507dae778fdce90d0767
|
token: 06d36c6f5705507dae778fdce90d0767
|
||||||
functions:
|
functions:
|
||||||
- name: task-request
|
- name: task-request
|
||||||
|
|
|
@ -44,3 +44,12 @@ func GetAllNode(modelId int64) []Node {
|
||||||
}
|
}
|
||||||
return list
|
return list
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func GetNodeById(nodeId int64) *Node {
|
||||||
|
item := new(Node)
|
||||||
|
h, err := DB.ID(nodeId).Get(item)
|
||||||
|
if err != nil || !h {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return item
|
||||||
|
}
|
||||||
|
|
|
@ -62,23 +62,29 @@ func UpdateTaskProgress(taskProgress *proto.TaskLogProgress) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func UpdateTaskProgressByLog(res *TaskResult) float64 {
|
func UpdateTaskProgressByLog(res *TaskResult, isFailing bool) float64 {
|
||||||
|
ret := -1.0
|
||||||
item := new(Task)
|
item := new(Task)
|
||||||
h, err := DB.ID(res.TaskId).Get(item)
|
h, err := DB.ID(res.TaskId).Get(item)
|
||||||
if err != nil || !h {
|
if err != nil || !h {
|
||||||
return -1
|
return ret
|
||||||
}
|
}
|
||||||
|
if isFailing {
|
||||||
|
item.FailingCount += 1
|
||||||
|
} else {
|
||||||
item.CompletedCount += 1
|
item.CompletedCount += 1
|
||||||
|
}
|
||||||
item.UnfinishedCount -= 1
|
item.UnfinishedCount -= 1
|
||||||
if item.CompletedCount <= item.TotalCount {
|
if item.CompletedCount+item.FailingCount >= item.TotalCount {
|
||||||
item.FinishTime = time.Now().Unix()
|
item.FinishTime = time.Now().Unix()
|
||||||
item.UnfinishedCount = 0
|
item.UnfinishedCount = 0
|
||||||
item.Status = 3
|
item.Status = 3
|
||||||
|
ret = 1.0
|
||||||
}
|
}
|
||||||
item.UpdateAt = time.Now().Unix()
|
item.UpdateAt = time.Now().Unix()
|
||||||
_, _ = DB.ID(res.TaskId).Cols("completed_count", "total_count", "unfinished_count", "update_at").Update(item)
|
_, _ = DB.ID(res.TaskId).Cols("completed_count", "failing_count", "total_count", "unfinished_count", "update_at", "finish_time", "status").Update(item)
|
||||||
if item.TotalCount > 0 {
|
if item.TotalCount > 0 {
|
||||||
return float64(item.UnfinishedCount) / float64(item.TotalCount)
|
return 1 - float64(item.CompletedCount)/float64(item.TotalCount)
|
||||||
}
|
}
|
||||||
return -1
|
return ret
|
||||||
}
|
}
|
||||||
|
|
120
mq/index.go
120
mq/index.go
|
@ -208,6 +208,72 @@ func TaskRequestHandler(data []byte) (frame.Tag, []byte) {
|
||||||
} else {
|
} else {
|
||||||
if len(payload["datasetArr"].(string)) > 0 {
|
if len(payload["datasetArr"].(string)) > 0 {
|
||||||
GoroutinueChan := make(chan bool, 5)
|
GoroutinueChan := make(chan bool, 5)
|
||||||
|
if payload["nodeId"].(float64) == 0 {
|
||||||
|
//根据业务属性进行分配节点
|
||||||
|
m := model.GetModelById(int64(payload["modelId"].(float64)))
|
||||||
|
var nodeList []model.Node
|
||||||
|
//todo 需要增加模型下发记录
|
||||||
|
if m.IsLightWeight {
|
||||||
|
nodeList = model.GetLightWeight(m.ModelId)
|
||||||
|
} else {
|
||||||
|
nodeList = model.GetAllNode(m.ModelId)
|
||||||
|
}
|
||||||
|
if nodeList != nil {
|
||||||
|
if len(nodeList) > 1 {
|
||||||
|
//这里采用加权算法,权重采用CPU占用+mem使用+任务执行状态
|
||||||
|
list := model.GetNodeState(nodeList)
|
||||||
|
lb := balance.LoadBalanceFactory(balance.LbWeightRoundRobin)
|
||||||
|
for _, v := range list {
|
||||||
|
_ = lb.Add(v)
|
||||||
|
}
|
||||||
|
nodeId, _ := lb.Get(0)
|
||||||
|
if nodeId == nil {
|
||||||
|
//todo 需要增加未能获取的处理
|
||||||
|
}
|
||||||
|
payload["nodeId"] = nodeId.NodeId
|
||||||
|
payload["nodeGuid"] = nodeId.NodeGuid
|
||||||
|
|
||||||
|
cmd := &InstructionReq{
|
||||||
|
Command: TaskExecute,
|
||||||
|
Payload: payload,
|
||||||
|
}
|
||||||
|
|
||||||
|
pData, _ := json.Marshal(cmd)
|
||||||
|
cli := GetMqClient("task-execute", 1)
|
||||||
|
if cli != nil {
|
||||||
|
_ = GenerateAndSendData(cli.EndPoint.(hpds_node.AccessPoint), pData)
|
||||||
|
}
|
||||||
|
model.UpdateTaskExecuteNode(int64(payload["taskId"].(float64)), nodeId.NodeId)
|
||||||
|
} else {
|
||||||
|
payload["nodeId"] = nodeList[0].NodeId
|
||||||
|
issue := new(model.IssueModel)
|
||||||
|
h, _ := model.DB.Where("model_id=? and node_id =?", int64(payload["modelId"].(float64)), nodeList[0].NodeId).Get(issue)
|
||||||
|
if !h {
|
||||||
|
|
||||||
|
}
|
||||||
|
payload["issueResult"] = issue.IssueResult
|
||||||
|
cmd := &InstructionReq{
|
||||||
|
Command: TaskExecute,
|
||||||
|
Payload: payload,
|
||||||
|
}
|
||||||
|
pData, _ := json.Marshal(cmd)
|
||||||
|
cli := GetMqClient("task-execute", 1)
|
||||||
|
if cli != nil {
|
||||||
|
_ = GenerateAndSendData(cli.EndPoint.(hpds_node.AccessPoint), pData)
|
||||||
|
}
|
||||||
|
model.UpdateTaskExecuteNode(int64(payload["taskId"].(float64)), nodeList[0].NodeId)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
node := model.GetNodeById(int64(payload["nodeId"].(float64)))
|
||||||
|
if node != nil {
|
||||||
|
payload["nodeGuid"] = node.NodeGuid
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//数据集处理
|
||||||
datasetArr := strings.Split(payload["datasetArr"].(string), ",")
|
datasetArr := strings.Split(payload["datasetArr"].(string), ",")
|
||||||
//for _, val := range datasetArr {
|
//for _, val := range datasetArr {
|
||||||
// dId, err := strconv.ParseInt(val, 10, 64)
|
// dId, err := strconv.ParseInt(val, 10, 64)
|
||||||
|
@ -217,8 +283,11 @@ func TaskRequestHandler(data []byte) (frame.Tag, []byte) {
|
||||||
// dt := new(model.Dataset)
|
// dt := new(model.Dataset)
|
||||||
// _, _ = model.DB.ID(dId).Get(dt)
|
// _, _ = model.DB.ID(dId).Get(dt)
|
||||||
fileList := make([]model.FileManager, 0)
|
fileList := make([]model.FileManager, 0)
|
||||||
_ = model.DB.In("dataset_id", datasetArr).
|
err = model.DB.In("dataset_id", datasetArr).
|
||||||
Find(&fileList)
|
Find(&fileList)
|
||||||
|
if err != nil {
|
||||||
|
|
||||||
|
}
|
||||||
item := &TaskItem{
|
item := &TaskItem{
|
||||||
TaskId: int64(payload["taskId"].(float64)),
|
TaskId: int64(payload["taskId"].(float64)),
|
||||||
TotalCount: int64(len(fileList)),
|
TotalCount: int64(len(fileList)),
|
||||||
|
@ -238,38 +307,50 @@ func TaskRequestHandler(data []byte) (frame.Tag, []byte) {
|
||||||
UnfinishedCount: int64(len(fileList)),
|
UnfinishedCount: int64(len(fileList)),
|
||||||
}
|
}
|
||||||
model.UpdateTaskProgress(taskProgress)
|
model.UpdateTaskProgress(taskProgress)
|
||||||
//taskProgressCmd := &InstructionReq{
|
taskLog := &model.TaskLog{
|
||||||
// Command: TaskLog,
|
TaskId: int64(payload["taskId"].(float64)),
|
||||||
// Payload: taskProgress,
|
NodeId: int64(payload["nodeId"].(float64)),
|
||||||
//}
|
Content: fmt.Sprintf("[%s] 在节点[%s]上开始执行任务,任务数量共[%d]", time.Now().Format("2006-01-02 15:04:05"), payload["nodeGuid"].(string), taskProgress.TotalCount),
|
||||||
//deliver("task-log", 1, taskProgressCmd)
|
CreateAt: time.Now().Unix(),
|
||||||
|
UpdateAt: time.Now().Unix(),
|
||||||
|
}
|
||||||
|
model.InsertLog(taskLog)
|
||||||
|
taskProgressCmd := &InstructionReq{
|
||||||
|
Command: TaskLog,
|
||||||
|
Payload: taskProgress,
|
||||||
|
}
|
||||||
|
deliver("task-log", 1, taskProgressCmd)
|
||||||
|
|
||||||
//数据集处理
|
//数据集处理
|
||||||
minioCli := minio.NewClient(config.Cfg.Minio.AccessKeyId, config.Cfg.Minio.SecretAccessKey, config.Cfg.Minio.Endpoint, false, logging.L())
|
minioCli := minio.NewClient(config.Cfg.Minio.AccessKeyId, config.Cfg.Minio.SecretAccessKey, config.Cfg.Minio.Endpoint, false, logging.L())
|
||||||
for _, v := range fileList {
|
for _, v := range fileList {
|
||||||
GoroutinueChan <- true
|
GoroutinueChan <- true
|
||||||
go func(fa model.FileManager) {
|
go func(fa model.FileManager, payload map[string]interface{}) {
|
||||||
|
p := make(map[string]interface{})
|
||||||
|
for key, val := range payload {
|
||||||
|
p[key] = val
|
||||||
|
}
|
||||||
dstPath := strings.Replace(fa.AccessUrl, fmt.Sprintf("%s://%s/", config.Cfg.Minio.Protocol, config.Cfg.Minio.Endpoint), "", 1)
|
dstPath := strings.Replace(fa.AccessUrl, fmt.Sprintf("%s://%s/", config.Cfg.Minio.Protocol, config.Cfg.Minio.Endpoint), "", 1)
|
||||||
|
|
||||||
dstPath = strings.Replace(dstPath, config.Cfg.Minio.Bucket, "", 1)
|
dstPath = strings.Replace(dstPath, config.Cfg.Minio.Bucket, "", 1)
|
||||||
imgByte, _ := minioCli.GetObject(dstPath, config.Cfg.Minio.Bucket)
|
imgByte, _ := minioCli.GetObject(dstPath, config.Cfg.Minio.Bucket)
|
||||||
f := FileCapture{
|
fc := FileCapture{
|
||||||
FileId: fa.FileId,
|
FileId: fa.FileId,
|
||||||
FileName: fa.FileName,
|
FileName: fa.FileName,
|
||||||
File: base64.StdEncoding.EncodeToString(imgByte),
|
File: base64.StdEncoding.EncodeToString(imgByte),
|
||||||
DatasetName: payload["datasetName"].(string),
|
DatasetName: p["datasetName"].(string),
|
||||||
CaptureTime: fa.CreateAt,
|
CaptureTime: fa.CreateAt,
|
||||||
}
|
}
|
||||||
payload["single"] = f
|
p["single"] = fc
|
||||||
taskCode, _ := uuid.NewUUID()
|
taskCode, _ := uuid.NewUUID()
|
||||||
payload["taskCode"] = taskCode.String()
|
p["taskCode"] = taskCode.String()
|
||||||
cmd := &InstructionReq{
|
cmd := &InstructionReq{
|
||||||
Command: TaskExecute,
|
Command: TaskExecute,
|
||||||
Payload: payload,
|
Payload: p,
|
||||||
}
|
}
|
||||||
deliver("task-execute", 1, cmd)
|
deliver("task-execute", 1, cmd)
|
||||||
<-GoroutinueChan
|
<-GoroutinueChan
|
||||||
}(v)
|
}(v, payload)
|
||||||
}
|
}
|
||||||
//}
|
//}
|
||||||
}
|
}
|
||||||
|
@ -357,13 +438,20 @@ func TaskResponseHandler(data []byte) (frame.Tag, []byte) {
|
||||||
if _, ok := payload["srcPath"]; ok && payload["srcPath"] != nil {
|
if _, ok := payload["srcPath"]; ok && payload["srcPath"] != nil {
|
||||||
item.SrcPath = payload["srcPath"].(string)
|
item.SrcPath = payload["srcPath"].(string)
|
||||||
}
|
}
|
||||||
|
if _, ok := payload["body"]; ok {
|
||||||
item.Result = payload["body"].(string)
|
item.Result = payload["body"].(string)
|
||||||
|
}
|
||||||
|
isFailing := false
|
||||||
|
if _, ok := payload["code"]; ok && int(payload["code"].(float64)) == 500 {
|
||||||
|
item.Result = payload["msg"].(string)
|
||||||
|
isFailing = true
|
||||||
|
}
|
||||||
_, err = model.DB.Insert(item)
|
_, err = model.DB.Insert(item)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println("接收TaskResponse数据出错", err)
|
fmt.Println("接收TaskResponse数据出错", err)
|
||||||
}
|
}
|
||||||
//更新运行进度
|
//更新运行进度
|
||||||
rat := model.UpdateTaskProgressByLog(item)
|
rat := model.UpdateTaskProgressByLog(item, isFailing)
|
||||||
var (
|
var (
|
||||||
ratStr string
|
ratStr string
|
||||||
)
|
)
|
||||||
|
@ -376,8 +464,8 @@ func TaskResponseHandler(data []byte) (frame.Tag, []byte) {
|
||||||
taskLog.TaskId = item.TaskId
|
taskLog.TaskId = item.TaskId
|
||||||
taskLog.NodeId = item.NodeId
|
taskLog.NodeId = item.NodeId
|
||||||
if len(item.SrcPath) > 0 {
|
if len(item.SrcPath) > 0 {
|
||||||
taskLog.Content = fmt.Sprintf("[%s] %s 图片%s处理完成", time.Unix(item.FinishTime, 0).Format("2006-01-02 15:04:05"),
|
taskLog.Content = fmt.Sprintf("[%s] 图片%s处理完成 %s ", time.Unix(item.FinishTime, 0).Format("2006-01-02 15:04:05"),
|
||||||
ratStr, item.SrcPath)
|
item.SrcPath, ratStr)
|
||||||
} else {
|
} else {
|
||||||
taskLog.Content = fmt.Sprintf("[%s] %s", time.Unix(item.FinishTime, 0).Format("2006-01-02 15:04:05"),
|
taskLog.Content = fmt.Sprintf("[%s] %s", time.Unix(item.FinishTime, 0).Format("2006-01-02 15:04:05"),
|
||||||
ratStr)
|
ratStr)
|
||||||
|
|
Loading…
Reference in New Issue