fix(systeminfo): correct system info JSON format

This commit is contained in:
yusing
2025-10-16 10:09:51 +08:00
parent ccc35b2a00
commit af9363209b
3 changed files with 18 additions and 25 deletions

View File

@@ -21,7 +21,7 @@ type SystemInfoRequest struct {
Period period.Filter `query:"period"` Period period.Filter `query:"period"`
} // @name SystemInfoRequest } // @name SystemInfoRequest
type SystemInfoAggregate period.ResponseType[systeminfo.AggregatedJSON] // @name SystemInfoAggregate type SystemInfoAggregate period.ResponseType[systeminfo.Aggregated] // @name SystemInfoAggregate
// @x-id "system_info" // @x-id "system_info"
// @BasePath /api/v1 // @BasePath /api/v1

View File

@@ -24,11 +24,7 @@ import (
type ( type (
Sensors []sensors.TemperatureStat // @name Sensors Sensors []sensors.TemperatureStat // @name Sensors
Aggregated struct { Aggregated []map[string]any
Entries []map[string]any
Mode SystemInfoAggregateMode
}
AggregatedJSON []map[string]any
) )
type SystemInfo struct { type SystemInfo struct {
@@ -167,7 +163,7 @@ func (s *SystemInfo) collectDisksInfo(ctx context.Context, lastResult *SystemInf
if lastUsage, ok := lastResult.DisksIO[name]; ok { if lastUsage, ok := lastResult.DisksIO[name]; ok {
disk.ReadSpeed = float32(disk.ReadBytes-lastUsage.ReadBytes) / float32(interval) disk.ReadSpeed = float32(disk.ReadBytes-lastUsage.ReadBytes) / float32(interval)
disk.WriteSpeed = float32(disk.WriteBytes-lastUsage.WriteBytes) / float32(interval) disk.WriteSpeed = float32(disk.WriteBytes-lastUsage.WriteBytes) / float32(interval)
disk.Iops = diff(disk.IOCount, lastUsage.IOCount) / uint64(interval) //nolint:gosec disk.Iops = diff(disk.ReadCount+disk.WriteCount, lastUsage.ReadCount+lastUsage.WriteCount) / uint64(interval) //nolint:gosec
} }
} }
} }
@@ -222,15 +218,12 @@ func (s *SystemInfo) collectSensorsInfo(ctx context.Context) error {
// recharts friendly. // recharts friendly.
func aggregate(entries []*SystemInfo, query url.Values) (total int, result Aggregated) { func aggregate(entries []*SystemInfo, query url.Values) (total int, result Aggregated) {
n := len(entries) n := len(entries)
aggregated := Aggregated{ aggregated := make([]map[string]any, 0, n)
Entries: make([]map[string]any, 0, n), switch SystemInfoAggregateMode(query.Get("aggregate")) {
Mode: SystemInfoAggregateMode(query.Get("aggregate")),
}
switch aggregated.Mode {
case SystemInfoAggregateModeCPUAverage: case SystemInfoAggregateModeCPUAverage:
for _, entry := range entries { for _, entry := range entries {
if entry.CPUAverage != nil { if entry.CPUAverage != nil {
aggregated.Entries = append(aggregated.Entries, map[string]any{ aggregated = append(aggregated, map[string]any{
"timestamp": entry.Timestamp, "timestamp": entry.Timestamp,
"cpu_average": *entry.CPUAverage, "cpu_average": *entry.CPUAverage,
}) })
@@ -239,7 +232,7 @@ func aggregate(entries []*SystemInfo, query url.Values) (total int, result Aggre
case SystemInfoAggregateModeMemoryUsage: case SystemInfoAggregateModeMemoryUsage:
for _, entry := range entries { for _, entry := range entries {
if entry.Memory.Used > 0 { if entry.Memory.Used > 0 {
aggregated.Entries = append(aggregated.Entries, map[string]any{ aggregated = append(aggregated, map[string]any{
"timestamp": entry.Timestamp, "timestamp": entry.Timestamp,
"memory_usage": entry.Memory.Used, "memory_usage": entry.Memory.Used,
}) })
@@ -248,7 +241,7 @@ func aggregate(entries []*SystemInfo, query url.Values) (total int, result Aggre
case SystemInfoAggregateModeMemoryUsagePercent: case SystemInfoAggregateModeMemoryUsagePercent:
for _, entry := range entries { for _, entry := range entries {
if percent := entry.Memory.UsedPercent(); percent > 0 { if percent := entry.Memory.UsedPercent(); percent > 0 {
aggregated.Entries = append(aggregated.Entries, map[string]any{ aggregated = append(aggregated, map[string]any{
"timestamp": entry.Timestamp, "timestamp": entry.Timestamp,
"memory_usage_percent": percent, "memory_usage_percent": percent,
}) })
@@ -264,7 +257,7 @@ func aggregate(entries []*SystemInfo, query url.Values) (total int, result Aggre
m[name] = usage.ReadSpeed m[name] = usage.ReadSpeed
} }
m["timestamp"] = entry.Timestamp m["timestamp"] = entry.Timestamp
aggregated.Entries = append(aggregated.Entries, m) aggregated = append(aggregated, m)
} }
case SystemInfoAggregateModeDisksWriteSpeed: case SystemInfoAggregateModeDisksWriteSpeed:
for _, entry := range entries { for _, entry := range entries {
@@ -276,7 +269,7 @@ func aggregate(entries []*SystemInfo, query url.Values) (total int, result Aggre
m[name] = usage.WriteSpeed m[name] = usage.WriteSpeed
} }
m["timestamp"] = entry.Timestamp m["timestamp"] = entry.Timestamp
aggregated.Entries = append(aggregated.Entries, m) aggregated = append(aggregated, m)
} }
case SystemInfoAggregateModeDisksIOPS: case SystemInfoAggregateModeDisksIOPS:
for _, entry := range entries { for _, entry := range entries {
@@ -288,7 +281,7 @@ func aggregate(entries []*SystemInfo, query url.Values) (total int, result Aggre
m[name] = usage.Iops m[name] = usage.Iops
} }
m["timestamp"] = entry.Timestamp m["timestamp"] = entry.Timestamp
aggregated.Entries = append(aggregated.Entries, m) aggregated = append(aggregated, m)
} }
case SystemInfoAggregateModeDiskUsage: case SystemInfoAggregateModeDiskUsage:
for _, entry := range entries { for _, entry := range entries {
@@ -300,14 +293,14 @@ func aggregate(entries []*SystemInfo, query url.Values) (total int, result Aggre
m[name] = disk.Used m[name] = disk.Used
} }
m["timestamp"] = entry.Timestamp m["timestamp"] = entry.Timestamp
aggregated.Entries = append(aggregated.Entries, m) aggregated = append(aggregated, m)
} }
case SystemInfoAggregateModeNetworkSpeed: case SystemInfoAggregateModeNetworkSpeed:
for _, entry := range entries { for _, entry := range entries {
if entry.Network.BytesSent == 0 && entry.Network.BytesRecv == 0 { if entry.Network.BytesSent == 0 && entry.Network.BytesRecv == 0 {
continue continue
} }
aggregated.Entries = append(aggregated.Entries, map[string]any{ aggregated = append(aggregated, map[string]any{
"timestamp": entry.Timestamp, "timestamp": entry.Timestamp,
"upload": entry.Network.UploadSpeed, "upload": entry.Network.UploadSpeed,
"download": entry.Network.DownloadSpeed, "download": entry.Network.DownloadSpeed,
@@ -318,7 +311,7 @@ func aggregate(entries []*SystemInfo, query url.Values) (total int, result Aggre
if entry.Network.BytesRecv > 0 || entry.Network.BytesSent > 0 { if entry.Network.BytesRecv > 0 || entry.Network.BytesSent > 0 {
continue continue
} }
aggregated.Entries = append(aggregated.Entries, map[string]any{ aggregated = append(aggregated, map[string]any{
"timestamp": entry.Timestamp, "timestamp": entry.Timestamp,
"upload": entry.Network.BytesSent, "upload": entry.Network.BytesSent,
"download": entry.Network.BytesRecv, "download": entry.Network.BytesRecv,
@@ -334,12 +327,12 @@ func aggregate(entries []*SystemInfo, query url.Values) (total int, result Aggre
m[sensor.SensorKey.Value()] = sensor.Temperature m[sensor.SensorKey.Value()] = sensor.Temperature
} }
m["timestamp"] = entry.Timestamp m["timestamp"] = entry.Timestamp
aggregated.Entries = append(aggregated.Entries, m) aggregated = append(aggregated, m)
} }
default: default:
return -1, Aggregated{} return -1, nil
} }
return len(aggregated.Entries), aggregated return len(aggregated), aggregated
} }
func diff(x, y uint64) uint64 { func diff(x, y uint64) uint64 {