diff --git a/models/health.go b/models/health.go index 8e4e4bdabfbfc6090312d28e8959a0667e7ee4ea..0359986b6bbad55486f087ab6a013b4c6e31d52e 100644 --- a/models/health.go +++ b/models/health.go @@ -17,6 +17,82 @@ "github.com/chai2010/gettext-go" ) + const ATTRD_UPDATER = "attrd_updater -n " + + type HealthGetResponse struct { + Action bool `json:"action"` + Data HealthData `json:"data"` + } + + type HealthData struct { + CpuFlag bool `json:"cpu_flag"` + CpuYellow string `json:"cpu_yellow"` + CpuRed string `json:"cpu_red"` + MemFlag bool `json:"mem_flag"` + MemYellow string `json:"mem_yellow"` + MemRed string `json:"mem_red"` + DiskFlag bool `json:"disk_flag"` + DiskYellow string `json:"disk_yellow"` + DiskRed string `json:"disk_red"` + Disks string `json:"disks"` + DisksList []map[string]interface{} `json:"diskslist"` + } + +// 获取属性值返给前端展示 +func HealthGet() HealthGetResponse { + var healthDataResponse HealthGetResponse + var healthData HealthData + healthDataResponse.Action = true + + disksListData := []string{} + healthData.CpuYellow = getIndexValue("health_cpu-clone", "yellow_limit") + healthData.CpuRed = getIndexValue("health_cpu-clone", "red_limit") + healthData.MemYellow = getIndexValue("health_mem-clone", "yellow_mem") + healthData.MemRed = getIndexValue("health_mem-clone", "red_mem") + healthData.DiskYellow = getIndexValue("sysinfo-clone", "yellow_disk_free") + healthData.DiskRed = getIndexValue("sysinfo-clone", "min_disk_free") + healthData.Disks = getIndexValue("sysinfo-clone", "disks") + + cmdGetDisksList := "df --block-size=1GB --output=source,avail | awk -F \" \" '{print $1,$2}'|grep ^/dev" + disksListDataTemp, _ := utils.RunCommand(cmdGetDisksList) + if len(disksListDataTemp) != 0 { + disksListData = strings.Split(strings.TrimSuffix(string(disksListDataTemp), "\n"), "\n") + } + var diskname string + var diskcap int + diskslist := make([]map[string]interface{}, 0) + for _, value := range disksListData { + disklist := make(map[string]interface{}) + diskname = strings.Split(value, " ")[0] + diskcap, _ = strconv.Atoi(strings.Split(value, " ")[1]) + disklist["key"] = diskname + disklist["value"] = diskcap + diskslist = append(diskslist, disklist) + } + + if healthData.CpuYellow != "" && healthData.CpuRed != "" { + healthData.CpuFlag = true + } else { + healthData.CpuFlag = false + } + + if healthData.MemYellow != "" && healthData.MemRed != "" { + healthData.MemFlag = true + } else { + healthData.MemFlag = false + } + + if healthData.DiskYellow != "" && healthData.DiskRed != "" { + healthData.DiskFlag = true + healthData.DisksList = diskslist + } else { + healthData.DiskFlag = false + healthData.DisksList = diskslist + } + healthDataResponse.Data = healthData + return healthDataResponse +} + // 获取cib文件中智能迁移资源对应的属性的值 func getIndexValue(resName, indexName string) string { getIndex := "cibadmin --query --xpath " + "\"//clone[@id='" + resName + "']//primitive//instance_attributes//nvpair[@name='" + indexName + "']\""