You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
288 lines
8.6 KiB
288 lines
8.6 KiB
package service |
|
|
|
import ( |
|
"context" |
|
"math" |
|
"time" |
|
|
|
"go-common/app/admin/ep/merlin/model" |
|
"go-common/library/log" |
|
) |
|
|
|
// QueryMachineLifeCycle Query Machine Life Cycle. |
|
func (s *Service) QueryMachineLifeCycle(c context.Context) (machineResponse map[string]interface{}, err error) { |
|
var machineLifeCycles []*model.MachineLifeCycle |
|
|
|
machineResponse = make(map[string]interface{}) |
|
|
|
if machineLifeCycles, err = s.dao.MachineLifeCycle(); err != nil { |
|
return |
|
} |
|
machineResponse["machine_life_cycle"] = machineLifeCycles |
|
|
|
return |
|
} |
|
|
|
// QueryMachineCount Query Machine Count. |
|
func (s *Service) QueryMachineCount(c context.Context) (machineResponse *model.MachineCountGroupResponse, err error) { |
|
var ( |
|
machinesCount []*model.MachineCountGroupByBusiness |
|
machinesCountInRunning []*model.MachineCountGroupByBusiness |
|
businessUnits []string |
|
machineCntData []int |
|
machineCntInRunData []int |
|
) |
|
|
|
if machinesCount, err = s.dao.MachineCountGroupByBusiness(); err != nil { |
|
return |
|
} |
|
|
|
if machinesCountInRunning, err = s.dao.MachineCountGroupByBusinessInRunning(); err != nil { |
|
return |
|
} |
|
|
|
for _, machineCount := range machinesCount { |
|
var runningCount int |
|
businessUnits = append(businessUnits, machineCount.BusinessUnit) |
|
machineCntData = append(machineCntData, machineCount.Count) |
|
for _, machineCountInRunning := range machinesCountInRunning { |
|
if machineCountInRunning.BusinessUnit == machineCount.BusinessUnit { |
|
runningCount = machineCountInRunning.Count |
|
break |
|
} |
|
} |
|
machineCntInRunData = append(machineCntInRunData, runningCount) |
|
} |
|
|
|
machineCountItem := &model.MachineCountGroupItem{ |
|
Type: "已创建机器数量", |
|
Data: machineCntData, |
|
} |
|
|
|
machineCountInRunningItem := &model.MachineCountGroupItem{ |
|
Type: "正在运行机器数量", |
|
Data: machineCntInRunData, |
|
} |
|
|
|
machineResponse = &model.MachineCountGroupResponse{ |
|
BusinessUnits: businessUnits, |
|
Items: []*model.MachineCountGroupItem{machineCountItem, machineCountInRunningItem}, |
|
} |
|
|
|
return |
|
} |
|
|
|
// QueryMachineCreatedAndEndTime Query Machine Created And End Time. |
|
func (s *Service) QueryMachineCreatedAndEndTime(c context.Context) (machineResponse map[string]interface{}, err error) { |
|
var ( |
|
machineCreatedTime []*model.MachineCreatedAndEndTime |
|
machineExpiredTime []*model.MachineCreatedAndEndTime |
|
) |
|
|
|
machineResponse = make(map[string]interface{}) |
|
|
|
if machineCreatedTime, err = s.dao.MachineLatestCreated(); err != nil { |
|
return |
|
} |
|
|
|
if machineExpiredTime, err = s.dao.MachineWillBeExpired(); err != nil { |
|
return |
|
} |
|
|
|
machineResponse["machine_created_top"] = machineCreatedTime |
|
machineResponse["machine_expired_top"] = machineExpiredTime |
|
|
|
return |
|
} |
|
|
|
// QueryMachineUsage Query Machine Usage. |
|
func (s *Service) QueryMachineUsage(c context.Context) (machineResponse map[string]interface{}, err error) { |
|
var ( |
|
machines []*model.Machine |
|
pmds []*model.PaasMachineDetail |
|
pqadmrs []*model.PaasQueryAndDelMachineRequest |
|
totalCPU float32 |
|
totalMemory float32 |
|
totalMachine int |
|
totalMachineInRunnint int |
|
) |
|
machineResponse = make(map[string]interface{}) |
|
|
|
if totalMachine, err = s.dao.QueryMachineCount(); err != nil { |
|
return |
|
} |
|
|
|
if machines, err = s.dao.QueryMachineInRunning(); err != nil { |
|
log.Error("query MachineInRunning err(%v)", err) |
|
return |
|
} |
|
|
|
totalMachineInRunnint = len(machines) |
|
|
|
for _, machine := range machines { |
|
pqadmrs = append(pqadmrs, machine.ToPaasQueryAndDelMachineRequest()) |
|
} |
|
|
|
if pmds, err = s.dao.QueryMachineUsageSummaryFromCache(c, pqadmrs); err != nil { |
|
return |
|
} |
|
|
|
for _, pmd := range pmds { |
|
pmd.ConvertUnits() |
|
totalCPU = totalCPU + pmd.CPULimit/model.CPURatio |
|
totalMemory = totalMemory + pmd.MemoryLimit/model.MemoryRatio |
|
} |
|
|
|
machineResponse["total_machine"] = totalMachine |
|
machineResponse["total_machine_in_running"] = totalMachineInRunnint |
|
machineResponse["total_cpu_usage"] = totalCPU |
|
machineResponse["total_memory_usage"] = totalMemory |
|
|
|
return |
|
} |
|
|
|
// QueryMobileMachineUsageCount Query Mobile Machines Count. |
|
func (s *Service) QueryMobileMachineUsageCount(c context.Context) (res map[string]interface{}, err error) { |
|
var ( |
|
mobileMachinesUserUsageCount []*model.MobileMachineUserUsageCount |
|
mobileMachinesUserLendCount []*model.MobileMachineUserUsageCount |
|
mobileMachinesUsageCount []*model.MobileMachineUsageCount |
|
mobileMachinesLendCount []*model.MobileMachineUsageCount |
|
) |
|
|
|
if mobileMachinesUserUsageCount, err = s.dao.MobileMachineUserUsageCount(); err != nil { |
|
return |
|
} |
|
|
|
if mobileMachinesUserLendCount, err = s.dao.MobileMachineUserLendCount(); err != nil { |
|
return |
|
} |
|
|
|
if mobileMachinesUsageCount, err = s.dao.MobileMachineUsageCount(); err != nil { |
|
return |
|
} |
|
|
|
if mobileMachinesLendCount, err = s.dao.MobileMachineLendCount(); err != nil { |
|
return |
|
} |
|
|
|
res = make(map[string]interface{}) |
|
res["user_usage_count"] = mobileMachinesUserUsageCount |
|
res["user_lend_count"] = mobileMachinesUserLendCount |
|
res["mobile_machine_usage_count"] = mobileMachinesUsageCount |
|
res["mobile_machine_lend_count"] = mobileMachinesLendCount |
|
|
|
return |
|
} |
|
|
|
// QueryMobileMachineModeCount Query Mobile Machine Mode Count. |
|
func (s *Service) QueryMobileMachineModeCount(c context.Context) (res map[string]interface{}, err error) { |
|
var mobileMachinesTypeCount []*model.MobileMachineTypeCount |
|
|
|
if mobileMachinesTypeCount, err = s.dao.MobileMachineModeCount(); err != nil { |
|
return |
|
} |
|
|
|
res = make(map[string]interface{}) |
|
|
|
res["mobile_machine_mode_count"] = mobileMachinesTypeCount |
|
|
|
return |
|
} |
|
|
|
// QueryMobileMachineUsageTime Query Mobile Machine Usage Time. |
|
func (s *Service) QueryMobileMachineUsageTime(c context.Context) (ret []*model.MobileMachineUsageTimeResponse, err error) { |
|
var ( |
|
mobileMachineLogs []*model.MobileMachineLog |
|
mobileMachineLogsMap = make(map[int64][]*model.MobileMachineLog) |
|
) |
|
|
|
if mobileMachineLogs, err = s.dao.MobileMachineUseRecord(); err != nil { |
|
return |
|
} |
|
|
|
//按机器id 分组 |
|
for _, mobileMachineLog := range mobileMachineLogs { |
|
mobileMachineLogsMap[mobileMachineLog.MachineID] = append(mobileMachineLogsMap[mobileMachineLog.MachineID], mobileMachineLog) |
|
} |
|
|
|
//按机器计算 使用时长 |
|
|
|
for machineID := range mobileMachineLogsMap { |
|
var ( |
|
mobileMachine *model.MobileMachine |
|
isStartTimeFound bool |
|
isEndTimeFound bool |
|
startTime time.Time |
|
endTime time.Time |
|
username string |
|
preMobileMachinesUsageTime []*model.MobileMachineUsageTime |
|
totalDuration float64 |
|
) |
|
|
|
if mobileMachine, err = s.dao.FindMobileMachineByID(machineID); err != nil { |
|
continue |
|
} |
|
|
|
for index, preMobileMachineLog := range mobileMachineLogsMap[machineID] { |
|
if preMobileMachineLog.OperateType == model.MBBindLog { |
|
startTime = preMobileMachineLog.OperateTime |
|
username = preMobileMachineLog.Username |
|
isStartTimeFound = true |
|
} |
|
|
|
if preMobileMachineLog.OperateType == model.MBReleaseLog && isStartTimeFound { |
|
endTime = preMobileMachineLog.OperateTime |
|
isEndTimeFound = true |
|
} |
|
|
|
//处理中间绑定和解绑 计算使用时间 |
|
if isStartTimeFound && isEndTimeFound { |
|
duration := math.Trunc(endTime.Sub(startTime).Minutes()*1e2+0.5) * 1e-2 |
|
|
|
MobileMachineUsageTime := &model.MobileMachineUsageTime{ |
|
Username: username, |
|
StartTime: startTime, |
|
EndTime: endTime, |
|
Duration: duration, |
|
} |
|
preMobileMachinesUsageTime = append(preMobileMachinesUsageTime, MobileMachineUsageTime) |
|
|
|
isStartTimeFound = false |
|
isEndTimeFound = false |
|
|
|
totalDuration = totalDuration + duration |
|
} |
|
|
|
// 最后次记录和绑定记录且机器在相应人名下 计算实时机器使用时长 |
|
if index == (len(mobileMachineLogsMap[machineID])-1) && isStartTimeFound && !isEndTimeFound && mobileMachine.Username != "" { |
|
timeNow := time.Now() |
|
duration := math.Trunc(timeNow.Sub(startTime).Minutes()*1e2+0.5) * 1e-2 |
|
|
|
MobileMachineUsageTime := &model.MobileMachineUsageTime{ |
|
Username: username, |
|
StartTime: timeNow, |
|
EndTime: endTime, |
|
Duration: duration, |
|
} |
|
preMobileMachinesUsageTime = append(preMobileMachinesUsageTime, MobileMachineUsageTime) |
|
|
|
isStartTimeFound = false |
|
isEndTimeFound = false |
|
|
|
totalDuration = totalDuration + duration |
|
} |
|
} |
|
|
|
mobileMachineUsageTimeResponse := &model.MobileMachineUsageTimeResponse{ |
|
MobileMachineID: machineID, |
|
MobileMachineName: mobileMachine.Name, |
|
ModeName: mobileMachine.Mode, |
|
TotalDuration: totalDuration, |
|
MobileMachinesUsageTime: preMobileMachinesUsageTime, |
|
} |
|
|
|
ret = append(ret, mobileMachineUsageTimeResponse) |
|
} |
|
return |
|
}
|
|
|