feat: mining section rework, GPU filter, chart as full-width row, progress bars separate line, contrast fix
This commit is contained in:
+65
-15
@@ -11,6 +11,7 @@ import (
|
||||
"path/filepath"
|
||||
"runtime"
|
||||
"strconv"
|
||||
"strings"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
@@ -374,6 +375,55 @@ func (h *Hub) saveYAML() {
|
||||
os.WriteFile(h.devicesAbs, append([]byte(hdr), out...), 0644)
|
||||
}
|
||||
|
||||
func filterGPURaw(raw json.RawMessage) json.RawMessage {
|
||||
var data map[string]interface{}
|
||||
if json.Unmarshal(raw, &data) != nil {
|
||||
return raw
|
||||
}
|
||||
gpusRaw, ok := data["gpus"]
|
||||
if !ok {
|
||||
return raw
|
||||
}
|
||||
gpus, ok := gpusRaw.([]interface{})
|
||||
if !ok {
|
||||
return raw
|
||||
}
|
||||
var filtered []interface{}
|
||||
for _, g := range gpus {
|
||||
gpu, ok := g.(map[string]interface{})
|
||||
if !ok {
|
||||
continue
|
||||
}
|
||||
gpuName, _ := gpu["name"].(string)
|
||||
if isVirtualGPU(gpuName) {
|
||||
continue
|
||||
}
|
||||
filtered = append(filtered, g)
|
||||
}
|
||||
data["gpus"] = filtered
|
||||
out, _ := json.Marshal(data)
|
||||
return out
|
||||
}
|
||||
|
||||
func isVirtualGPU(name string) bool {
|
||||
name = strings.ToLower(name)
|
||||
blacklist := []string{
|
||||
"microsoft",
|
||||
"basic render",
|
||||
"vmware",
|
||||
"virtual",
|
||||
"hyper-v",
|
||||
"parallels",
|
||||
"virtualbox",
|
||||
}
|
||||
for _, v := range blacklist {
|
||||
if strings.Contains(name, v) {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func (h *Hub) UpdateDevice(raw json.RawMessage) {
|
||||
var p AgentPayload
|
||||
if json.Unmarshal(raw, &p) != nil || p.MachineName == "" {
|
||||
@@ -398,7 +448,7 @@ func (h *Hub) UpdateDevice(raw json.RawMessage) {
|
||||
rec.GPUs = append(rec.GPUs, GPURec{Name: g.Name, VRAM: g.VRAM})
|
||||
}
|
||||
cp := *rec
|
||||
h.live[name] = raw
|
||||
h.live[name] = filterGPURaw(raw)
|
||||
var md *MiningData
|
||||
var hist []HashratePoint
|
||||
if m, ok := h.miningData[name]; ok {
|
||||
@@ -416,10 +466,23 @@ func (h *Hub) UpdateDevice(raw json.RawMessage) {
|
||||
h.saveYAML()
|
||||
h.broadcast(BrowserMsg{
|
||||
Type: "device", Machine: name,
|
||||
Device: &BrowserDevice{Info: &cp, Live: raw, Online: true, Mining: md, History: hist},
|
||||
Device: &BrowserDevice{Info: &cp, Live: filterGPURaw(raw), Online: true, Mining: md, History: hist},
|
||||
})
|
||||
}
|
||||
|
||||
func (h *Hub) DeleteDevice(name string) {
|
||||
h.mu.Lock()
|
||||
_, ok := h.records[name]
|
||||
delete(h.records, name)
|
||||
delete(h.live, name)
|
||||
h.mu.Unlock()
|
||||
if ok {
|
||||
h.saveYAML()
|
||||
h.broadcast(BrowserMsg{Type: "remove", Machine: name})
|
||||
logInfo("delete", "%s", name)
|
||||
}
|
||||
}
|
||||
|
||||
func (h *Hub) MarkOffline(name string) {
|
||||
h.mu.Lock()
|
||||
_, had := h.live[name]
|
||||
@@ -449,19 +512,6 @@ func (h *Hub) MarkOffline(name string) {
|
||||
}
|
||||
}
|
||||
|
||||
func (h *Hub) DeleteDevice(name string) {
|
||||
h.mu.Lock()
|
||||
_, ok := h.records[name]
|
||||
delete(h.records, name)
|
||||
delete(h.live, name)
|
||||
h.mu.Unlock()
|
||||
if ok {
|
||||
h.saveYAML()
|
||||
h.broadcast(BrowserMsg{Type: "remove", Machine: name})
|
||||
logInfo("delete", "%s", name)
|
||||
}
|
||||
}
|
||||
|
||||
func (h *Hub) AddMonitor(c *websocket.Conn) {
|
||||
h.mu.Lock()
|
||||
h.monitors[c] = struct{}{}
|
||||
|
||||
Reference in New Issue
Block a user