mirror of
https://github.com/yusing/godoxy.git
synced 2026-04-23 08:48:32 +02:00
refactor(api): better type safety, split homepage override apis, fixed favicon api docs
This commit is contained in:
@@ -37,30 +37,32 @@ type SystemInfo struct {
|
||||
Sensors Sensors `json:"sensors"` // sensor temperature by key
|
||||
} // @name SystemInfo
|
||||
|
||||
type SystemInfoAggregateMode string // @name SystemInfoAggregateMode
|
||||
|
||||
const (
|
||||
queryCPUAverage = "cpu_average"
|
||||
queryMemoryUsage = "memory_usage"
|
||||
queryMemoryUsagePercent = "memory_usage_percent"
|
||||
queryDisksReadSpeed = "disks_read_speed"
|
||||
queryDisksWriteSpeed = "disks_write_speed"
|
||||
queryDisksIOPS = "disks_iops"
|
||||
queryDiskUsage = "disk_usage"
|
||||
queryNetworkSpeed = "network_speed"
|
||||
queryNetworkTransfer = "network_transfer"
|
||||
querySensorTemperature = "sensor_temperature"
|
||||
SystemInfoAggregateModeCPUAverage SystemInfoAggregateMode = "cpu_average" // @name SystemInfoAggregateModeCPUAverage
|
||||
SystemInfoAggregateModeMemoryUsage SystemInfoAggregateMode = "memory_usage" // @name SystemInfoAggregateModeMemoryUsage
|
||||
SystemInfoAggregateModeMemoryUsagePercent SystemInfoAggregateMode = "memory_usage_percent" // @name SystemInfoAggregateModeMemoryUsagePercent
|
||||
SystemInfoAggregateModeDisksReadSpeed SystemInfoAggregateMode = "disks_read_speed" // @name SystemInfoAggregateModeDisksReadSpeed
|
||||
SystemInfoAggregateModeDisksWriteSpeed SystemInfoAggregateMode = "disks_write_speed" // @name SystemInfoAggregateModeDisksWriteSpeed
|
||||
SystemInfoAggregateModeDisksIOPS SystemInfoAggregateMode = "disks_iops" // @name SystemInfoAggregateModeDisksIOPS
|
||||
SystemInfoAggregateModeDiskUsage SystemInfoAggregateMode = "disk_usage" // @name SystemInfoAggregateModeDiskUsage
|
||||
SystemInfoAggregateModeNetworkSpeed SystemInfoAggregateMode = "network_speed" // @name SystemInfoAggregateModeNetworkSpeed
|
||||
SystemInfoAggregateModeNetworkTransfer SystemInfoAggregateMode = "network_transfer" // @name SystemInfoAggregateModeNetworkTransfer
|
||||
SystemInfoAggregateModeSensorTemperature SystemInfoAggregateMode = "sensor_temperature" // @name SystemInfoAggregateModeSensorTemperature
|
||||
)
|
||||
|
||||
var allQueries = []string{
|
||||
queryCPUAverage,
|
||||
queryMemoryUsage,
|
||||
queryMemoryUsagePercent,
|
||||
queryDisksReadSpeed,
|
||||
queryDisksWriteSpeed,
|
||||
queryDisksIOPS,
|
||||
queryDiskUsage,
|
||||
queryNetworkSpeed,
|
||||
queryNetworkTransfer,
|
||||
querySensorTemperature,
|
||||
var allQueries = []SystemInfoAggregateMode{
|
||||
SystemInfoAggregateModeCPUAverage,
|
||||
SystemInfoAggregateModeMemoryUsage,
|
||||
SystemInfoAggregateModeMemoryUsagePercent,
|
||||
SystemInfoAggregateModeDisksReadSpeed,
|
||||
SystemInfoAggregateModeDisksWriteSpeed,
|
||||
SystemInfoAggregateModeDisksIOPS,
|
||||
SystemInfoAggregateModeDiskUsage,
|
||||
SystemInfoAggregateModeNetworkSpeed,
|
||||
SystemInfoAggregateModeNetworkTransfer,
|
||||
SystemInfoAggregateModeSensorTemperature,
|
||||
}
|
||||
|
||||
var Poller = period.NewPoller("system_info", getSystemInfo, aggregate)
|
||||
@@ -227,8 +229,8 @@ func (s *SystemInfo) collectSensorsInfo(ctx context.Context) error {
|
||||
func aggregate(entries []*SystemInfo, query url.Values) (total int, result Aggregated) {
|
||||
n := len(entries)
|
||||
aggregated := make(Aggregated, 0, n)
|
||||
switch query.Get("aggregate") {
|
||||
case queryCPUAverage:
|
||||
switch SystemInfoAggregateMode(query.Get("aggregate")) {
|
||||
case SystemInfoAggregateModeCPUAverage:
|
||||
for _, entry := range entries {
|
||||
if entry.CPUAverage != nil {
|
||||
aggregated = append(aggregated, map[string]any{
|
||||
@@ -237,7 +239,7 @@ func aggregate(entries []*SystemInfo, query url.Values) (total int, result Aggre
|
||||
})
|
||||
}
|
||||
}
|
||||
case queryMemoryUsage:
|
||||
case SystemInfoAggregateModeMemoryUsage:
|
||||
for _, entry := range entries {
|
||||
if entry.Memory != nil {
|
||||
aggregated = append(aggregated, map[string]any{
|
||||
@@ -246,7 +248,7 @@ func aggregate(entries []*SystemInfo, query url.Values) (total int, result Aggre
|
||||
})
|
||||
}
|
||||
}
|
||||
case queryMemoryUsagePercent:
|
||||
case SystemInfoAggregateModeMemoryUsagePercent:
|
||||
for _, entry := range entries {
|
||||
if entry.Memory != nil {
|
||||
aggregated = append(aggregated, map[string]any{
|
||||
@@ -255,7 +257,7 @@ func aggregate(entries []*SystemInfo, query url.Values) (total int, result Aggre
|
||||
})
|
||||
}
|
||||
}
|
||||
case queryDisksReadSpeed:
|
||||
case SystemInfoAggregateModeDisksReadSpeed:
|
||||
for _, entry := range entries {
|
||||
if entry.DisksIO == nil {
|
||||
continue
|
||||
@@ -267,7 +269,7 @@ func aggregate(entries []*SystemInfo, query url.Values) (total int, result Aggre
|
||||
m["timestamp"] = entry.Timestamp
|
||||
aggregated = append(aggregated, m)
|
||||
}
|
||||
case queryDisksWriteSpeed:
|
||||
case SystemInfoAggregateModeDisksWriteSpeed:
|
||||
for _, entry := range entries {
|
||||
if entry.DisksIO == nil {
|
||||
continue
|
||||
@@ -279,7 +281,7 @@ func aggregate(entries []*SystemInfo, query url.Values) (total int, result Aggre
|
||||
m["timestamp"] = entry.Timestamp
|
||||
aggregated = append(aggregated, m)
|
||||
}
|
||||
case queryDisksIOPS:
|
||||
case SystemInfoAggregateModeDisksIOPS:
|
||||
for _, entry := range entries {
|
||||
if entry.DisksIO == nil {
|
||||
continue
|
||||
@@ -291,7 +293,7 @@ func aggregate(entries []*SystemInfo, query url.Values) (total int, result Aggre
|
||||
m["timestamp"] = entry.Timestamp
|
||||
aggregated = append(aggregated, m)
|
||||
}
|
||||
case queryDiskUsage:
|
||||
case SystemInfoAggregateModeDiskUsage:
|
||||
for _, entry := range entries {
|
||||
if entry.Disks == nil {
|
||||
continue
|
||||
@@ -303,7 +305,7 @@ func aggregate(entries []*SystemInfo, query url.Values) (total int, result Aggre
|
||||
m["timestamp"] = entry.Timestamp
|
||||
aggregated = append(aggregated, m)
|
||||
}
|
||||
case queryNetworkSpeed:
|
||||
case SystemInfoAggregateModeNetworkSpeed:
|
||||
for _, entry := range entries {
|
||||
if entry.Network == nil {
|
||||
continue
|
||||
@@ -314,7 +316,7 @@ func aggregate(entries []*SystemInfo, query url.Values) (total int, result Aggre
|
||||
"download": entry.Network.DownloadSpeed,
|
||||
})
|
||||
}
|
||||
case queryNetworkTransfer:
|
||||
case SystemInfoAggregateModeNetworkTransfer:
|
||||
for _, entry := range entries {
|
||||
if entry.Network == nil {
|
||||
continue
|
||||
@@ -325,7 +327,7 @@ func aggregate(entries []*SystemInfo, query url.Values) (total int, result Aggre
|
||||
"download": entry.Network.BytesRecv,
|
||||
})
|
||||
}
|
||||
case querySensorTemperature:
|
||||
case SystemInfoAggregateModeSensorTemperature:
|
||||
for _, entry := range entries {
|
||||
if entry.Sensors == nil {
|
||||
continue
|
||||
|
||||
@@ -127,8 +127,8 @@ func TestSerialize(t *testing.T) {
|
||||
entries[i] = testInfo
|
||||
}
|
||||
for _, query := range allQueries {
|
||||
t.Run(query, func(t *testing.T) {
|
||||
_, result := aggregate(entries, url.Values{"aggregate": []string{query}})
|
||||
t.Run(string(query), func(t *testing.T) {
|
||||
_, result := aggregate(entries, url.Values{"aggregate": []string{string(query)}})
|
||||
s, err := result.MarshalJSON()
|
||||
ExpectNoError(t, err)
|
||||
var v []map[string]any
|
||||
@@ -152,8 +152,8 @@ func BenchmarkSerialize(b *testing.B) {
|
||||
}
|
||||
queries := map[string]Aggregated{}
|
||||
for _, query := range allQueries {
|
||||
_, result := aggregate(entries, url.Values{"aggregate": []string{query}})
|
||||
queries[query] = result
|
||||
_, result := aggregate(entries, url.Values{"aggregate": []string{string(query)}})
|
||||
queries[string(query)] = result
|
||||
}
|
||||
b.ReportAllocs()
|
||||
b.ResetTimer()
|
||||
@@ -170,14 +170,14 @@ func BenchmarkSerialize(b *testing.B) {
|
||||
b.Run("optimized", func(b *testing.B) {
|
||||
for b.Loop() {
|
||||
for _, query := range allQueries {
|
||||
_, _ = queries[query].MarshalJSON()
|
||||
_, _ = queries[string(query)].MarshalJSON()
|
||||
}
|
||||
}
|
||||
})
|
||||
b.Run("json", func(b *testing.B) {
|
||||
for b.Loop() {
|
||||
for _, query := range allQueries {
|
||||
_, _ = json.Marshal([]map[string]any(queries[query]))
|
||||
_, _ = json.Marshal([]map[string]any(queries[string(query)]))
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user