diff --git a/web/assets/js/util/common.js b/web/assets/js/util/common.js
index ab642849e..d35c5208a 100644
--- a/web/assets/js/util/common.js
+++ b/web/assets/js/util/common.js
@@ -22,6 +22,19 @@ function sizeFormat(size) {
}
}
+function cpuSpeedFormat(speed) {
+ const GHz = speed / 1000;
+ return GHz.toFixed(2) + " GHz";
+}
+
+function cpuCoreFormat(cores) {
+ if (cores === 1) {
+ return "1 Core";
+ } else {
+ return cores + " Cores";
+ }
+}
+
function base64(str) {
return Base64.encode(str);
}
diff --git a/web/html/xui/index.html b/web/html/xui/index.html
index 7d919a30a..5b42ca5d4 100644
--- a/web/html/xui/index.html
+++ b/web/html/xui/index.html
@@ -34,8 +34,8 @@
:stroke-color="status.cpu.color"
:class="themeSwitcher.darkCardClass"
:percent="status.cpu.percent">
-
Cores: [[ status.cpuCores ]]
- Logical Procs: [[ status.logicalProcessors ]]
+ CPU: [[ cpuCoreFormat(status.cpuCores) ]]
+ Speed: [[ cpuSpeedFormat(status.cpuSpeedMhz) ]]
- [[ sizeFormat(status.netIO.up) ]] / S
+ [[ sizeFormat(status.netIO.up) ]]/S
{{ i18n "pages.index.upSpeed" }}
@@ -188,7 +188,7 @@
- [[ sizeFormat(status.netIO.down) ]] / S
+ [[ sizeFormat(status.netIO.down) ]]/S
{{ i18n "pages.index.downSpeed" }}
@@ -334,6 +334,8 @@ {{ i18n "pages.index.xraySwitchClickDesk"}}
class Status {
constructor(data) {
this.cpu = new CurTotal(0, 0);
+ this.cpuCores = 0;
+ this.cpuSpeedMhz = 0;
this.disk = new CurTotal(0, 0);
this.loads = [0, 0, 0];
this.mem = new CurTotal(0, 0);
@@ -343,8 +345,6 @@ {{ i18n "pages.index.xraySwitchClickDesk"}}
this.swap = new CurTotal(0, 0);
this.tcpCount = 0;
this.udpCount = 0;
- this.cpuCores = 0;
- this.logicalProcessors = 0;
this.uptime = 0;
this.xray = { state: State.Stop, errorMsg: "", version: "", color: "" };
@@ -352,6 +352,8 @@ {{ i18n "pages.index.xraySwitchClickDesk"}}
return;
}
this.cpu = new CurTotal(data.cpu, 100);
+ this.cpuCores = data.cpuCores;
+ this.cpuSpeedMhz = data.cpuSpeedMhz;
this.disk = new CurTotal(data.disk.current, data.disk.total);
this.loads = data.loads.map(load => toFixed(load, 2));
this.mem = new CurTotal(data.mem.current, data.mem.total);
@@ -361,8 +363,6 @@ {{ i18n "pages.index.xraySwitchClickDesk"}}
this.swap = new CurTotal(data.swap.current, data.swap.total);
this.tcpCount = data.tcpCount;
this.udpCount = data.udpCount;
- this.cpuCores = data.cpuCores;
- this.logicalProcessors = data.logicalProcessors;
this.uptime = data.uptime;
this.xray = data.xray;
switch (this.xray.state) {
diff --git a/web/service/server.go b/web/service/server.go
index cace8ebab..198aa5901 100644
--- a/web/service/server.go
+++ b/web/service/server.go
@@ -38,11 +38,11 @@ const (
)
type Status struct {
- T time.Time `json:"-"`
- Cpu float64 `json:"cpu"`
- CpuCores int `json:"cpuCores"`
- LogicalProcessors int `json:"logicalProcessors"`
- Mem struct {
+ T time.Time `json:"-"`
+ Cpu float64 `json:"cpu"`
+ CpuCores int `json:"cpuCores"`
+ CpuSpeedMhz float64 `json:"cpuSpeedMhz"`
+ Mem struct {
Current uint64 `json:"current"`
Total uint64 `json:"total"`
} `json:"mem"`
@@ -131,7 +131,15 @@ func (s *ServerService) GetStatus(lastStatus *Status) *Status {
logger.Warning("get cpu cores count failed:", err)
}
- status.LogicalProcessors = runtime.NumCPU()
+ cpuInfos, err := cpu.Info()
+ if err != nil {
+ logger.Warning("get cpu info failed:", err)
+ } else if len(cpuInfos) > 0 {
+ cpuInfo := cpuInfos[0]
+ status.CpuSpeedMhz = cpuInfo.Mhz // setting CPU speed in MHz
+ } else {
+ logger.Warning("could not find cpu info")
+ }
upTime, err := host.Uptime()
if err != nil {