mirror of
https://github.com/oneclickvirt/basics.git
synced 2025-10-08 18:11:02 +08:00
update
This commit is contained in:
132
system/utils/utils_windows.go
Normal file
132
system/utils/utils_windows.go
Normal file
@@ -0,0 +1,132 @@
|
||||
package utils
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"math"
|
||||
"strings"
|
||||
|
||||
"github.com/oneclickvirt/basics/system/model"
|
||||
"github.com/yusufpapurcu/wmi"
|
||||
"golang.org/x/sys/windows/registry"
|
||||
)
|
||||
|
||||
// GetCpuCache 查询CPU三缓
|
||||
func GetCpuCache() string {
|
||||
var processors []model.Win32_Processor
|
||||
err := wmi.Query("SELECT L2CacheSize, L3CacheSize FROM Win32_Processor", &processors)
|
||||
if err == nil {
|
||||
if len(processors) > 0 {
|
||||
L1CacheSizeStr := "null"
|
||||
L2CacheSize := processors[0].L2CacheSize
|
||||
L3CacheSize := processors[0].L3CacheSize
|
||||
var L2CacheSizeStr, L3CacheSizeStr string
|
||||
if L2CacheSize >= 1024*1024 {
|
||||
L2CacheSizeStr = fmt.Sprintf("%.2f GB", float64(L2CacheSize)/(1024*1024))
|
||||
} else if L2CacheSize >= 1024 {
|
||||
L2CacheSizeStr = fmt.Sprintf("%.2f MB", float64(L2CacheSize)/1024)
|
||||
} else {
|
||||
L2CacheSizeStr = fmt.Sprintf("%d KB", L2CacheSize)
|
||||
}
|
||||
if L3CacheSize >= 1024*1024 {
|
||||
L3CacheSizeStr = fmt.Sprintf("%.2f GB", float64(L3CacheSize)/(1024*1024))
|
||||
} else if L3CacheSize >= 1024 {
|
||||
L3CacheSizeStr = fmt.Sprintf("%.2f MB", float64(L3CacheSize)/1024)
|
||||
} else {
|
||||
L3CacheSizeStr = fmt.Sprintf("%d KB", L3CacheSize)
|
||||
}
|
||||
return fmt.Sprintf("L1: %s / L2: %s / L3: %s", L1CacheSizeStr, L2CacheSizeStr, L3CacheSizeStr)
|
||||
} else {
|
||||
return ""
|
||||
}
|
||||
} else {
|
||||
return ""
|
||||
}
|
||||
}
|
||||
|
||||
func CheckCPUFeatureWindows(subkey string, value string) (string, bool) {
|
||||
k, err := registry.OpenKey(registry.LOCAL_MACHINE, subkey, registry.READ)
|
||||
if err != nil {
|
||||
return "❌ Disabled", false
|
||||
}
|
||||
defer k.Close()
|
||||
val, _, err := k.GetStringValue(value)
|
||||
if err != nil {
|
||||
return "❌ Disabled", false
|
||||
}
|
||||
if strings.Contains(val, "1") {
|
||||
return "✔️ Enabled", true
|
||||
}
|
||||
return "❌ Disabled", false
|
||||
}
|
||||
|
||||
func CheckVMTypeWithWIMC() string {
|
||||
var (
|
||||
computers []model.Win32_ComputerSystem
|
||||
operatingSystems []model.Win32_OperatingSystem
|
||||
VmType string
|
||||
)
|
||||
err1 := wmi.Query("SELECT * FROM Win32_ComputerSystem", &computers)
|
||||
err2 := wmi.Query("SELECT * FROM Win32_OperatingSystem", &operatingSystems)
|
||||
if err1 == nil || err2 == nil {
|
||||
if len(computers) > 0 || len(operatingSystems) > 0 {
|
||||
switch {
|
||||
case (len(computers) > 0 && strings.Contains(computers[0].SystemType, "Multiprocessor Free")) ||
|
||||
(len(operatingSystems) > 0 && strings.Contains(operatingSystems[0].BuildType, "Multiprocessor Free")):
|
||||
VmType = "Physical-Machine" + "(" + "Multiprocessor Free" + ")"
|
||||
case (len(computers) > 0 && strings.Contains(computers[0].SystemType, "Virtual Machine")) ||
|
||||
(len(operatingSystems) > 0 && strings.Contains(operatingSystems[0].BuildType, "Virtual Machine")):
|
||||
VmType = "Hyper-V" + "(" + "Virtual Machine" + ")"
|
||||
case (len(computers) > 0 && strings.Contains(computers[0].SystemType, "VMware")) ||
|
||||
(len(operatingSystems) > 0 && strings.Contains(operatingSystems[0].BuildType, "VMware")):
|
||||
VmType = "VMware"
|
||||
default:
|
||||
if len(computers) > 0 && len(operatingSystems) > 0 {
|
||||
VmType = computers[0].SystemType + "(" + operatingSystems[0].BuildType + ")"
|
||||
} else if len(computers) > 0 {
|
||||
VmType = computers[0].SystemType
|
||||
} else if len(operatingSystems) > 0 {
|
||||
VmType = operatingSystems[0].BuildType
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return VmType
|
||||
}
|
||||
|
||||
func GetLoad1() float64 {
|
||||
var load1 float64
|
||||
type Win32_Processor struct {
|
||||
LoadPercentage uint16
|
||||
NumberOfCores uint32
|
||||
}
|
||||
var processors []Win32_Processor
|
||||
query := "SELECT LoadPercentage, NumberOfCores FROM Win32_Processor"
|
||||
err := wmi.Query(query, &processors)
|
||||
if err == nil {
|
||||
for _, processor := range processors {
|
||||
tempLoad := float64(processor.LoadPercentage) / float64(processor.NumberOfCores)
|
||||
load1 = math.Round(tempLoad*100) / 100
|
||||
}
|
||||
}
|
||||
return load1
|
||||
}
|
||||
|
||||
// GetTCPAccelerateStatus 查询TCP控制算法
|
||||
func GetTCPAccelerateStatus() string {
|
||||
return ""
|
||||
}
|
||||
|
||||
// GetTimeZone 获取当前时区
|
||||
func GetTimeZone() string {
|
||||
var timezone []model.Win32_TimeZone
|
||||
err := wmi.Query("SELECT * FROM Win32_TimeZone", &timezone)
|
||||
if err == nil {
|
||||
if len(timezone) > 0 {
|
||||
return timezone[0].Caption
|
||||
} else {
|
||||
return ""
|
||||
}
|
||||
} else {
|
||||
return ""
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user