1、增加任务处理进度
This commit is contained in:
		
							parent
							
								
									685b46c1e5
								
							
						
					
					
						commit
						7d09ba0286
					
				|  | @ -20,7 +20,7 @@ consul: | |||
|   timeout: 5 | ||||
|   deregister: 1 | ||||
| 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 | ||||
| cache: | ||||
|   host: 127.0.0.1 | ||||
|  | @ -29,13 +29,13 @@ cache: | |||
|   pool_size: 10 | ||||
| minio: | ||||
|   protocol: http | ||||
|   endpoint: 127.0.0.1:9000 | ||||
|   endpoint: 192.168.53.10:9000 | ||||
|   accessKeyId: root | ||||
|   secretAccessKey: OIxv7QptYBO3 | ||||
|   bucket: jky-data | ||||
|   bucket: diagnosis | ||||
| node: | ||||
|   host: 127.0.0.1 | ||||
|   port: 27188 | ||||
|   host: 192.168.53.10 | ||||
|   port: 9188 | ||||
|   token: 06d36c6f5705507dae778fdce90d0767 | ||||
| functions: | ||||
|   - name: task-request | ||||
|  |  | |||
|  | @ -44,3 +44,12 @@ func GetAllNode(modelId int64) []Node { | |||
| 	} | ||||
| 	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) | ||||
| 	h, err := DB.ID(res.TaskId).Get(item) | ||||
| 	if err != nil || !h { | ||||
| 		return -1 | ||||
| 		return ret | ||||
| 	} | ||||
| 	if isFailing { | ||||
| 		item.FailingCount += 1 | ||||
| 	} else { | ||||
| 		item.CompletedCount += 1 | ||||
| 	} | ||||
| 	item.UnfinishedCount -= 1 | ||||
| 	if item.CompletedCount <= item.TotalCount { | ||||
| 	if item.CompletedCount+item.FailingCount >= item.TotalCount { | ||||
| 		item.FinishTime = time.Now().Unix() | ||||
| 		item.UnfinishedCount = 0 | ||||
| 		item.Status = 3 | ||||
| 		ret = 1.0 | ||||
| 	} | ||||
| 	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 { | ||||
| 		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 { | ||||
| 			if len(payload["datasetArr"].(string)) > 0 { | ||||
| 				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), ",") | ||||
| 				//for _, val := range datasetArr {
 | ||||
| 				//	dId, err := strconv.ParseInt(val, 10, 64)
 | ||||
|  | @ -217,8 +283,11 @@ func TaskRequestHandler(data []byte) (frame.Tag, []byte) { | |||
| 				//	dt := new(model.Dataset)
 | ||||
| 				//	_, _ = model.DB.ID(dId).Get(dt)
 | ||||
| 				fileList := make([]model.FileManager, 0) | ||||
| 				_ = model.DB.In("dataset_id", datasetArr). | ||||
| 				err = model.DB.In("dataset_id", datasetArr). | ||||
| 					Find(&fileList) | ||||
| 				if err != nil { | ||||
| 
 | ||||
| 				} | ||||
| 				item := &TaskItem{ | ||||
| 					TaskId:          int64(payload["taskId"].(float64)), | ||||
| 					TotalCount:      int64(len(fileList)), | ||||
|  | @ -238,38 +307,50 @@ func TaskRequestHandler(data []byte) (frame.Tag, []byte) { | |||
| 					UnfinishedCount: int64(len(fileList)), | ||||
| 				} | ||||
| 				model.UpdateTaskProgress(taskProgress) | ||||
| 				//taskProgressCmd := &InstructionReq{
 | ||||
| 				//	Command: TaskLog,
 | ||||
| 				//	Payload: taskProgress,
 | ||||
| 				//}
 | ||||
| 				//deliver("task-log", 1, taskProgressCmd)
 | ||||
| 				taskLog := &model.TaskLog{ | ||||
| 					TaskId:   int64(payload["taskId"].(float64)), | ||||
| 					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), | ||||
| 					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()) | ||||
| 				for _, v := range fileList { | ||||
| 					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(dstPath, config.Cfg.Minio.Bucket, "", 1) | ||||
| 						imgByte, _ := minioCli.GetObject(dstPath, config.Cfg.Minio.Bucket) | ||||
| 						f := FileCapture{ | ||||
| 						fc := FileCapture{ | ||||
| 							FileId:      fa.FileId, | ||||
| 							FileName:    fa.FileName, | ||||
| 							File:        base64.StdEncoding.EncodeToString(imgByte), | ||||
| 							DatasetName: payload["datasetName"].(string), | ||||
| 							DatasetName: p["datasetName"].(string), | ||||
| 							CaptureTime: fa.CreateAt, | ||||
| 						} | ||||
| 						payload["single"] = f | ||||
| 						p["single"] = fc | ||||
| 						taskCode, _ := uuid.NewUUID() | ||||
| 						payload["taskCode"] = taskCode.String() | ||||
| 						p["taskCode"] = taskCode.String() | ||||
| 						cmd := &InstructionReq{ | ||||
| 							Command: TaskExecute, | ||||
| 							Payload: payload, | ||||
| 							Payload: p, | ||||
| 						} | ||||
| 						deliver("task-execute", 1, cmd) | ||||
| 						<-GoroutinueChan | ||||
| 					}(v) | ||||
| 					}(v, payload) | ||||
| 				} | ||||
| 				//}
 | ||||
| 			} | ||||
|  | @ -357,13 +438,20 @@ func TaskResponseHandler(data []byte) (frame.Tag, []byte) { | |||
| 		if _, ok := payload["srcPath"]; ok && payload["srcPath"] != nil { | ||||
| 			item.SrcPath = payload["srcPath"].(string) | ||||
| 		} | ||||
| 		if _, ok := payload["body"]; ok { | ||||
| 			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) | ||||
| 		if err != nil { | ||||
| 			fmt.Println("接收TaskResponse数据出错", err) | ||||
| 		} | ||||
| 		//更新运行进度
 | ||||
| 		rat := model.UpdateTaskProgressByLog(item) | ||||
| 		rat := model.UpdateTaskProgressByLog(item, isFailing) | ||||
| 		var ( | ||||
| 			ratStr string | ||||
| 		) | ||||
|  | @ -376,8 +464,8 @@ func TaskResponseHandler(data []byte) (frame.Tag, []byte) { | |||
| 		taskLog.TaskId = item.TaskId | ||||
| 		taskLog.NodeId = item.NodeId | ||||
| 		if len(item.SrcPath) > 0 { | ||||
| 			taskLog.Content = fmt.Sprintf("[%s] %s  图片%s处理完成", time.Unix(item.FinishTime, 0).Format("2006-01-02 15:04:05"), | ||||
| 				ratStr, item.SrcPath) | ||||
| 			taskLog.Content = fmt.Sprintf("[%s] 图片%s处理完成		%s  ", time.Unix(item.FinishTime, 0).Format("2006-01-02 15:04:05"), | ||||
| 				item.SrcPath, ratStr) | ||||
| 		} else { | ||||
| 			taskLog.Content = fmt.Sprintf("[%s] %s", time.Unix(item.FinishTime, 0).Format("2006-01-02 15:04:05"), | ||||
| 				ratStr) | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue