msg_resp.go 15.6 KB
Newer Older
duanjinfei's avatar
duanjinfei committed
1 2 3 4
package nm

import (
	"example.com/m/conf"
duanjinfei's avatar
duanjinfei committed
5
	"example.com/m/largeModel"
duanjinfei's avatar
duanjinfei committed
6 7
	"example.com/m/log"
	"example.com/m/models"
duanjinfei's avatar
duanjinfei committed
8
	"example.com/m/utils"
duanjinfei's avatar
duanjinfei committed
9 10
	"github.com/ethereum/go-ethereum/common"
	"github.com/ethereum/go-ethereum/crypto"
duanjinfei's avatar
duanjinfei committed
11
	nodemanagerV2 "github.com/odysseus/odysseus-protocol/gen/proto/go/nodemanager/v2"
duanjinfei's avatar
duanjinfei committed
12
	"math/big"
duanjinfei's avatar
duanjinfei committed
13
	"strconv"
duanjinfei's avatar
duanjinfei committed
14
	"time"
duanjinfei's avatar
duanjinfei committed
15 16
)

duanjinfei's avatar
duanjinfei committed
17
type WorkerMsgHandler func(params ...interface{}) *nodemanagerV2.WorkerMessage
duanjinfei's avatar
duanjinfei committed
18 19 20

type RespMsgHandler struct {
	nodeManager  *models.NodeManagerClient
duanjinfei's avatar
duanjinfei committed
21
	workerClient nodemanagerV2.NodeManagerService_RegisterWorkerClient
duanjinfei's avatar
duanjinfei committed
22 23 24 25 26 27 28 29 30 31 32 33 34 35
	handler      WorkerMsgHandler
	params       []interface{}
}

type RespMsgWorker struct {
	MsgPool chan *RespMsgHandler
}

func NewMsgRespWorker() *RespMsgWorker {
	return &RespMsgWorker{
		MsgPool: make(chan *RespMsgHandler, 0),
	}
}

duanjinfei's avatar
duanjinfei committed
36
func (o *RespMsgWorker) RegisterMsgResp(nodeManager *models.NodeManagerClient, workerClient nodemanagerV2.NodeManagerService_RegisterWorkerClient, handler WorkerMsgHandler, params []interface{}) {
duanjinfei's avatar
duanjinfei committed
37 38 39 40 41 42
	o.MsgPool <- &RespMsgHandler{
		nodeManager:  nodeManager,
		workerClient: workerClient,
		handler:      handler,
		params:       params,
	}
duanjinfei's avatar
duanjinfei committed
43
	log.Info("----------------add msg response-------------")
duanjinfei's avatar
duanjinfei committed
44 45
}

duanjinfei's avatar
duanjinfei committed
46
func (o *RespMsgWorker) SendMsgWorker() {
duanjinfei's avatar
duanjinfei committed
47 48 49 50 51
	for {
		select {
		case pool := <-o.MsgPool:
			{
				workerMsg := pool.handler(pool.params...)
52 53 54 55
				if workerMsg == nil {
					log.Warn("Send to node manager workerMsg is nil")
					continue
				}
duanjinfei's avatar
duanjinfei committed
56 57
				err := pool.workerClient.SendMsg(workerMsg)
				if err != nil {
duanjinfei's avatar
duanjinfei committed
58
					log.Error("Send msg to nm client failed:", err)
59
					return
duanjinfei's avatar
duanjinfei committed
60 61 62 63 64 65 66
				}
				log.Info("Worker client send message successfully")
			}
		}
	}
}

duanjinfei's avatar
duanjinfei committed
67
func HeartbeatResp(params ...interface{}) *nodemanagerV2.WorkerMessage {
duanjinfei's avatar
duanjinfei committed
68 69
	log.Info("Heartbeat response received params: ", params)
	serverTimestamp := params[0].(uint64)
duanjinfei's avatar
duanjinfei committed
70 71 72
	heartRes := &nodemanagerV2.WorkerMessage{
		Message: &nodemanagerV2.WorkerMessage_HeartbeatResponse{
			HeartbeatResponse: &nodemanagerV2.HeartbeatResponse{
duanjinfei's avatar
duanjinfei committed
73 74 75 76
				Timestamp: serverTimestamp,
			},
		},
	}
duanjinfei's avatar
duanjinfei committed
77
	log.Info("---------------------------------------Send heart beat msg ------------------------------------")
duanjinfei's avatar
duanjinfei committed
78 79 80
	return heartRes
}

duanjinfei's avatar
duanjinfei committed
81
func RegisterInfoResp(params ...interface{}) *nodemanagerV2.WorkerMessage {
duanjinfei's avatar
duanjinfei committed
82
	log.Info("Register info response received params:", params)
duanjinfei's avatar
duanjinfei committed
83 84 85 86 87 88 89 90 91 92 93
	info := &nodemanagerV2.NodeInfo{
		MinerPubkey:    conf.GetConfig().SignPub,
		BenefitAddress: conf.GetConfig().BenefitAddress,
	}
	hardwareInfo := GetHardwareInfo()
	modelsInfo := params[0].(*largeModel.ModelHandler)
	readModels, err := modelsInfo.ScanModelsResp()
	if err != nil {
		log.WithError(err).Error("Error scanning models response failed")
		return nil
	}
duanjinfei's avatar
duanjinfei committed
94
	nowTimeStamp := time.Now().Unix()
duanjinfei's avatar
duanjinfei committed
95
	nowTimeBytes := big.NewInt(nowTimeStamp).Bytes()
duanjinfei's avatar
duanjinfei committed
96 97 98
	signHash := crypto.Keccak256Hash([]byte(info.String()),
		[]byte(hardwareInfo.String()),
		[]byte(readModels.String()),
duanjinfei's avatar
duanjinfei committed
99
		nowTimeBytes)
duanjinfei's avatar
duanjinfei committed
100 101 102
	log.WithField("hash", signHash.String()).Info("register message sign result")
	sign, _ := crypto.Sign(signHash.Bytes(), conf.GetConfig().SignPrivateKey)
	log.Info("register message sign:", common.Bytes2Hex(sign))
duanjinfei's avatar
duanjinfei committed
103 104 105
	nodeInfoRes := &nodemanagerV2.WorkerMessage{
		Message: &nodemanagerV2.WorkerMessage_RegisteMessage{
			RegisteMessage: &nodemanagerV2.RegisteMessage{
duanjinfei's avatar
duanjinfei committed
106
				Info:            info,
duanjinfei's avatar
duanjinfei committed
107
				Hardware:        hardwareInfo,
duanjinfei's avatar
duanjinfei committed
108
				Models:          readModels,
duanjinfei's avatar
duanjinfei committed
109 110
				Timestamp:       nowTimeStamp,
				DeviceSignature: sign,
duanjinfei's avatar
duanjinfei committed
111 112 113 114 115 116 117
			},
		},
	}
	log.Info("---------------------------------------Send register info msg ------------------------------------")
	return nodeInfoRes
}

duanjinfei's avatar
duanjinfei committed
118
func NodeInfoResp(params ...interface{}) *nodemanagerV2.WorkerMessage {
duanjinfei's avatar
duanjinfei committed
119
	log.Info("Node info response received params:", params)
duanjinfei's avatar
duanjinfei committed
120
	hardwareInfo := GetHardwareInfo()
duanjinfei's avatar
duanjinfei committed
121 122 123
	modelsInfo := params[0].(*largeModel.ModelHandler)
	readModels, err := modelsInfo.GetRpcModelsResp()
	if err != nil {
duanjinfei's avatar
duanjinfei committed
124
		log.WithError(err).Error("Error getting rpc models response")
duanjinfei's avatar
duanjinfei committed
125 126
		return nil
	}
duanjinfei's avatar
duanjinfei committed
127 128 129 130 131 132 133 134
	nodeInfoRes := &nodemanagerV2.WorkerMessage{
		Message: &nodemanagerV2.WorkerMessage_NodeInfo{
			NodeInfo: &nodemanagerV2.NodeInfoResponse{
				Info: &nodemanagerV2.NodeInfo{
					MinerPubkey:    conf.GetConfig().SignPub,
					BenefitAddress: conf.GetConfig().BenefitAddress,
				},
				Hardware: hardwareInfo,
duanjinfei's avatar
duanjinfei committed
135
				Models:   readModels,
duanjinfei's avatar
duanjinfei committed
136 137 138 139 140 141 142
			},
		},
	}
	log.Info("---------------------------------------Send node info msg ------------------------------------")
	return nodeInfoRes
}

duanjinfei's avatar
duanjinfei committed
143
func DeviceInfoResp(params ...interface{}) *nodemanagerV2.WorkerMessage {
duanjinfei's avatar
duanjinfei committed
144
	log.Info("Device info response received params:", params)
duanjinfei's avatar
duanjinfei committed
145
	hardwareInfo := GetHardwareInfo()
duanjinfei's avatar
duanjinfei committed
146 147 148 149
	deviceInfoRes := &nodemanagerV2.WorkerMessage{
		Message: &nodemanagerV2.WorkerMessage_DeviceInfo{
			DeviceInfo: &nodemanagerV2.DeviceInfoMessage{
				Hardware:        hardwareInfo,
duanjinfei's avatar
duanjinfei committed
150 151 152 153
				DeviceSignature: []byte(""),
			},
		},
	}
duanjinfei's avatar
duanjinfei committed
154
	log.Info("---------------------------------------Send device info msg ------------------------------------")
duanjinfei's avatar
duanjinfei committed
155 156 157
	return deviceInfoRes
}

duanjinfei's avatar
duanjinfei committed
158
func DeviceUsageResp(params ...interface{}) *nodemanagerV2.WorkerMessage {
duanjinfei's avatar
duanjinfei committed
159
	log.Info("DeviceUsageResp params :", params)
duanjinfei's avatar
duanjinfei committed
160
	hardwareInfo := GetHardwareInfo()
duanjinfei's avatar
duanjinfei committed
161 162
	ramUsage := int32((1 - float64(hardwareInfo.RAM.Free)/float64(hardwareInfo.RAM.Total)) * 100)
	diskUsage := int32((1 - float64(hardwareInfo.DISK.Free)/float64(hardwareInfo.DISK.Total)) * 100)
duanjinfei's avatar
duanjinfei committed
163 164 165 166
	deviceInfoRes := &nodemanagerV2.WorkerMessage{
		Message: &nodemanagerV2.WorkerMessage_DeviceUsage{
			DeviceUsage: &nodemanagerV2.DeviceUsageResponse{
				Usage: &nodemanagerV2.HardwareUsage{
duanjinfei's avatar
duanjinfei committed
167
					CpuUsage:     hardwareInfo.CPU.Usage,
duanjinfei's avatar
duanjinfei committed
168 169
					RamUsage:     ramUsage,
					DiskUsage:    diskUsage,
duanjinfei's avatar
duanjinfei committed
170
					NetBandwidth: hardwareInfo.NET.Bandwidth,
duanjinfei's avatar
duanjinfei committed
171 172
				},
			},
duanjinfei's avatar
duanjinfei committed
173 174
		},
	}
duanjinfei's avatar
duanjinfei committed
175
	log.Info("---------------------------------------Send device usage msg ------------------------------------")
duanjinfei's avatar
duanjinfei committed
176 177 178
	return deviceInfoRes
}

duanjinfei's avatar
duanjinfei committed
179 180
func GpuUsageResp(params ...interface{}) *nodemanagerV2.WorkerMessage {
	log.Info("DeviceUsageResp params :", params)
duanjinfei's avatar
duanjinfei committed
181
	hardwareInfo := GetHardwareInfo()
182 183 184
	if hardwareInfo == nil {
		return nil
	}
duanjinfei's avatar
duanjinfei committed
185
	gpusUsage := make([]*nodemanagerV2.GPUUsage, 0)
duanjinfei's avatar
duanjinfei committed
186
	for _, gpuInfo := range hardwareInfo.GPU {
duanjinfei's avatar
duanjinfei committed
187 188 189 190 191 192 193 194 195 196 197 198 199
		usage := &nodemanagerV2.GPUUsage{
			Seq:     gpuInfo.Seq,
			MemFree: gpuInfo.MemFree,
			Usage:   gpuInfo.Usage,
			Temp:    gpuInfo.Temp,
			PowerRt: gpuInfo.PowerRt,
		}
		gpusUsage = append(gpusUsage, usage)
	}
	deviceInfoRes := &nodemanagerV2.WorkerMessage{
		Message: &nodemanagerV2.WorkerMessage_GpuUsage{
			GpuUsage: &nodemanagerV2.GPUUsageResponse{
				Usages: gpusUsage,
duanjinfei's avatar
duanjinfei committed
200 201 202
			},
		},
	}
duanjinfei's avatar
duanjinfei committed
203 204 205 206 207 208
	log.Info("---------------------------------------Send gpu usage msg ------------------------------------")
	return deviceInfoRes
}

func ModelListResp(params ...interface{}) *nodemanagerV2.WorkerMessage {
	log.Info("DeviceUsageResp params :", params)
duanjinfei's avatar
duanjinfei committed
209 210 211 212 213
	modelsInfo := params[0].(*largeModel.ModelHandler)
	readModels, err := modelsInfo.GetRpcModelsResp()
	if err != nil {
		return nil
	}
duanjinfei's avatar
duanjinfei committed
214 215
	modelListInfoRes := &nodemanagerV2.WorkerMessage{
		Message: &nodemanagerV2.WorkerMessage_ModelsInfo{
duanjinfei's avatar
duanjinfei committed
216
			ModelsInfo: readModels,
duanjinfei's avatar
duanjinfei committed
217 218 219 220
		},
	}
	log.Info("---------------------------------------Send model list msg ------------------------------------")
	return modelListInfoRes
duanjinfei's avatar
duanjinfei committed
221 222
}

duanjinfei's avatar
duanjinfei committed
223
func SubmitResultResp(params ...interface{}) *nodemanagerV2.WorkerMessage {
duanjinfei's avatar
duanjinfei committed
224 225 226 227
	//log.Info("Handler task submit result resp received params:", params)
	taskId := params[0].(string)
	containerSign := params[1].([]byte)
	minerSign := params[2].([]byte)
228 229
	taskExecResult := params[3].(*models.TaskResult)
	isSuccess := params[4].(bool)
duanjinfei's avatar
duanjinfei committed
230
	n := &nodemanagerV2.SubmitTaskResult{
duanjinfei's avatar
duanjinfei committed
231 232 233
		TaskId:              taskId,
		ContainerSignature:  containerSign,
		MinerSignature:      minerSign,
duanjinfei's avatar
duanjinfei committed
234 235
		TaskExecuteCode:     taskExecResult.TaskHttpStatusCode,
		TaskExecuteError:    taskExecResult.TaskExecError,
duanjinfei's avatar
duanjinfei committed
236 237 238
		TaskResultHeader:    taskExecResult.TaskHttpHeaders,
		TaskExecuteDuration: uint64(taskExecResult.TaskExecTime),
		IsSuccessed:         isSuccess,
duanjinfei's avatar
duanjinfei committed
239
		TaskResultBody:      taskExecResult.TaskRespBody,
duanjinfei's avatar
duanjinfei committed
240
	}
duanjinfei's avatar
duanjinfei committed
241 242
	submitResultMsgRes := &nodemanagerV2.WorkerMessage{
		Message: &nodemanagerV2.WorkerMessage_SubmitTaskResult{
duanjinfei's avatar
duanjinfei committed
243
			SubmitTaskResult: n,
duanjinfei's avatar
duanjinfei committed
244 245
		},
	}
duanjinfei's avatar
duanjinfei committed
246
	log.Info("---------------------------------------Send task result msg ------------------------------------")
duanjinfei's avatar
duanjinfei committed
247 248
	return submitResultMsgRes
}
duanjinfei's avatar
duanjinfei committed
249

duanjinfei's avatar
duanjinfei committed
250
func FetchStandardTaskResp(params ...interface{}) *nodemanagerV2.WorkerMessage {
duanjinfei's avatar
duanjinfei committed
251
	//log.Info("Handler task submit result resp received params:", params)
duanjinfei's avatar
duanjinfei committed
252 253 254
	fetchStandardTaskMsgRes := &nodemanagerV2.WorkerMessage{
		Message: &nodemanagerV2.WorkerMessage_FetchStandardTask{
			FetchStandardTask: &nodemanagerV2.FetchStandardTask{
255
				TaskType: 998,
duanjinfei's avatar
duanjinfei committed
256 257 258 259 260 261
			},
		},
	}
	log.Info("---------------------------------------Send fetch standard task msg ------------------------------------")
	return fetchStandardTaskMsgRes
}
262

duanjinfei's avatar
duanjinfei committed
263
func RespTaskAck(params ...interface{}) *nodemanagerV2.WorkerMessage {
264
	taskId := params[0].(string)
duanjinfei's avatar
duanjinfei committed
265 266 267 268
	canExecute := params[1].(bool)
	bootUpTime := params[2].(int64)
	queueWaitTime := params[3].(int64)
	executeTime := params[4].(int64)
duanjinfei's avatar
duanjinfei committed
269 270 271
	taskAckMsgRes := &nodemanagerV2.WorkerMessage{
		Message: &nodemanagerV2.WorkerMessage_SubmitTaskAck{
			SubmitTaskAck: &nodemanagerV2.SubmitTaskAck{
duanjinfei's avatar
duanjinfei committed
272 273 274 275 276
				TaskId:        taskId,
				CanExecute:    canExecute,
				BootUpTime:    bootUpTime,
				QueueWaitTime: queueWaitTime,
				ExecuteTime:   executeTime,
277 278 279 280 281 282
			},
		},
	}
	log.WithField("taskId", taskId).Info("---------------------------------------Send task ack msg ------------------------------------")
	return taskAckMsgRes
}
duanjinfei's avatar
duanjinfei committed
283

duanjinfei's avatar
duanjinfei committed
284
func GoodbyeResp(params ...interface{}) *nodemanagerV2.WorkerMessage {
duanjinfei's avatar
duanjinfei committed
285 286 287 288 289
	log.Info("Goodbye resp received params:", params)
	reason := ""
	if len(params) > 0 {
		reason = params[0].(string)
	}
duanjinfei's avatar
duanjinfei committed
290 291 292
	goodbyeMsgRes := &nodemanagerV2.WorkerMessage{
		Message: &nodemanagerV2.WorkerMessage_GoodbyeMessage{
			GoodbyeMessage: &nodemanagerV2.GoodbyeMessage{
duanjinfei's avatar
duanjinfei committed
293 294 295 296 297 298 299
				Reason: reason,
			},
		},
	}
	log.Info("---------------------------------------Send good bye msg ------------------------------------")
	return goodbyeMsgRes
}
duanjinfei's avatar
duanjinfei committed
300

duanjinfei's avatar
duanjinfei committed
301 302 303
func AddModelInstalledResp(params ...interface{}) *nodemanagerV2.WorkerMessage {
	log.Info("Add model installed info response received params:", params)
	installedModels := make([]*nodemanagerV2.InstalledModel, 0)
duanjinfei's avatar
duanjinfei committed
304 305 306
	for _, param := range params {
		model := param.(*nodemanagerV2.InstalledModel)
		installedModels = append(installedModels, model)
duanjinfei's avatar
duanjinfei committed
307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334
	}
	deviceInfoRes := &nodemanagerV2.WorkerMessage{
		Message: &nodemanagerV2.WorkerMessage_AddModelInstalled{
			AddModelInstalled: &nodemanagerV2.AddModelInstalled{
				Models: installedModels,
			},
		},
	}
	log.Info("---------------------------------------Send add model installed info msg ------------------------------------")
	return deviceInfoRes
}

func DelModelInstalledResp(params ...interface{}) *nodemanagerV2.WorkerMessage {
	log.Info("Del model installed info response received params:", params)
	deviceInfoRes := &nodemanagerV2.WorkerMessage{
		Message: &nodemanagerV2.WorkerMessage_DelModelInstalled{
			DelModelInstalled: &nodemanagerV2.DelModelInstalled{
				ModelIds: []string{params[0].(string)},
			},
		},
	}
	log.Info("---------------------------------------Del model installed info msg ------------------------------------")
	return deviceInfoRes
}

func AddModelRunningResp(params ...interface{}) *nodemanagerV2.WorkerMessage {
	log.Info("Add model running response received params:", params)
	runningModels := make([]*nodemanagerV2.RunningModel, 0)
duanjinfei's avatar
duanjinfei committed
335 336 337
	for _, param := range params {
		runningModel := param.(*nodemanagerV2.RunningModel)
		runningModels = append(runningModels, runningModel)
duanjinfei's avatar
duanjinfei committed
338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362
	}
	addModelRunningRes := &nodemanagerV2.WorkerMessage{
		Message: &nodemanagerV2.WorkerMessage_AddModelRunning{
			AddModelRunning: &nodemanagerV2.AddModelRunning{
				Models: runningModels,
			},
		},
	}
	log.Info("---------------------------------------Send Add model running response msg ------------------------------------")
	return addModelRunningRes
}

func DelModelRunningResp(params ...interface{}) *nodemanagerV2.WorkerMessage {
	log.Info("Del model running response received params:", params)
	delModelRunningRes := &nodemanagerV2.WorkerMessage{
		Message: &nodemanagerV2.WorkerMessage_DelModeRunning{
			DelModeRunning: &nodemanagerV2.DelModelRunning{
				ModelIds: []string{params[0].(string)},
			},
		},
	}
	log.Info("---------------------------------------Send del model running response msg ------------------------------------")
	return delModelRunningRes
}

duanjinfei's avatar
duanjinfei committed
363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409
func BenefitAddrUpdateResp(params ...interface{}) *nodemanagerV2.WorkerMessage {
	log.Info("Benefit addr update response received params:", params)
	addr := params[0].(string)
	benefitAddrUpdateResp := &nodemanagerV2.WorkerMessage{
		Message: &nodemanagerV2.WorkerMessage_BenefitAddrUpdate{
			BenefitAddrUpdate: &nodemanagerV2.BenefitAddrUpdate{
				BenefitAddress: addr,
			},
		},
	}
	log.Info("---------------------------------------Send Benefit addr update response msg ------------------------------------")
	return benefitAddrUpdateResp
}

func RunningModelStatusResp(params ...interface{}) *nodemanagerV2.WorkerMessage {
	log.Info("Running Model Status response received params:", params)
	info := params[0].(*models.ModelInfo)
	runningModelStatusResp := &nodemanagerV2.WorkerMessage{
		Message: &nodemanagerV2.WorkerMessage_RunningModelStatus{
			RunningModelStatus: &nodemanagerV2.RunningModelStatus{
				ModelId:       strconv.FormatUint(info.TaskId, 10),
				LastWorkTime:  info.LastWorkTime,
				TotalRunCount: info.TotalRunCount,
				ExecTime:      info.EstimatExeTime,
			},
		},
	}
	log.Info("---------------------------------------Send running model status response msg ------------------------------------")
	return runningModelStatusResp
}

func InstallModelStatusResp(params ...interface{}) *nodemanagerV2.WorkerMessage {
	log.Info("Install Model Status response received params:", params)
	modelId := params[0].(string)
	lastRunTime := params[1].(int64)
	installModelStatusRes := &nodemanagerV2.WorkerMessage{
		Message: &nodemanagerV2.WorkerMessage_InstalledModelStatus{
			InstalledModelStatus: &nodemanagerV2.InstalledModelStatus{
				ModelId:     modelId,
				LastRunTime: lastRunTime,
			},
		},
	}
	log.Info("---------------------------------------Send install model status response msg ------------------------------------")
	return installModelStatusRes
}

duanjinfei's avatar
duanjinfei committed
410
func GetHardwareInfo() *nodemanagerV2.HardwareInfo {
duanjinfei's avatar
duanjinfei committed
411
	hardwareInfo := utils.GetHardwareInfo(conf.GetConfig().HardwareUrl)
duanjinfei's avatar
duanjinfei committed
412 413 414
	if hardwareInfo == nil {
		return nil
	}
duanjinfei's avatar
duanjinfei committed
415 416 417 418 419 420 421 422 423 424
	gpusInfo := make([]*nodemanagerV2.GPUInfo, 0)
	var diskTotal, diskFree int64
	for _, disk := range hardwareInfo.Data.Disk {
		for _, point := range disk.MountPoints {
			if point == "/" {
				diskTotal += disk.SizeBytes
				diskFree += disk.FreeBytes
			}
		}
	}
duanjinfei's avatar
duanjinfei committed
425 426
	diskTotal = diskTotal * conf.GetConfig().DiskUsage
	diskFree = diskFree * conf.GetConfig().DiskUsage
duanjinfei's avatar
duanjinfei committed
427 428 429 430 431 432 433 434
	var macAddr string
	var bandWidth int32
	for _, net := range hardwareInfo.Data.Networks {
		if net.Device == "docker0" {
			macAddr = net.Mac
			bandWidth = net.Speed
		}
	}
duanjinfei's avatar
duanjinfei committed
435 436 437 438 439 440 441 442 443 444 445 446 447 448 449
	for _, gpu := range hardwareInfo.Data.Gpus {
		gpuInfo := &nodemanagerV2.GPUInfo{
			Seq:         gpu.Seq,
			Uuid:        gpu.Uuid,
			Model:       gpu.Model,
			Performance: gpu.Performance,
			PowerRating: gpu.PowerRating,
			MemTotal:    gpu.MemTotal,
			MemFree:     gpu.MemFree,
			Usage:       gpu.Usage,
			Temp:        gpu.Temp,
			PowerRt:     gpu.PowerRt,
		}
		gpusInfo = append(gpusInfo, gpuInfo)
	}
duanjinfei's avatar
duanjinfei committed
450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474
	res := &nodemanagerV2.HardwareInfo{
		CPU: &nodemanagerV2.CPUInfo{
			Model:   hardwareInfo.Data.Cpus.Model,
			Number:  hardwareInfo.Data.Cpus.Number,
			Cores:   hardwareInfo.Data.Cpus.Cores,
			Threads: hardwareInfo.Data.Cpus.Threads,
			Usage:   hardwareInfo.Data.Cpus.Usage,
		},
		GPU: gpusInfo,
		RAM: &nodemanagerV2.MemoryInfo{
			Total: hardwareInfo.Data.Mem.Total,
			Free:  hardwareInfo.Data.Mem.Free,
		},
		DISK: &nodemanagerV2.DiskInfo{
			Total: diskTotal,
			Free:  diskFree,
		},
		NET: &nodemanagerV2.NetInfo{
			Ip:        conf.GetConfig().ExternalIp,
			Mac:       macAddr,
			Bandwidth: bandWidth,
		},
	}
	return res
}