diff --git a/client.yaml b/client.yaml index 26445d6..83b5750 100644 --- a/client.yaml +++ b/client.yaml @@ -8,6 +8,6 @@ # 删除此文件可重新配置 machine_name: my-pc -server: 192.168.1.100:8080 +server: 127.0.0.1:8080 interval: 3 reconnect_delay: 3 diff --git a/cmd/client/main.go b/cmd/client/main.go index 383ff16..27b690b 100644 --- a/cmd/client/main.go +++ b/cmd/client/main.go @@ -1109,6 +1109,14 @@ func tryNvidiaSMI() []GPUInfo { } else { fan = parseFloat(fanStr) } + powerStr := strings.TrimSpace(parts[9]) + powerStr = strings.Trim(powerStr, "[]") + var power float64 + if powerStr == "N/A" || powerStr == "" { + power = 0 + } else { + power = parseFloat(powerStr) + } gpus = append(gpus, GPUInfo{ Name: parts[1], VRAMTotalMB: parseFloat(parts[2]), @@ -1117,7 +1125,7 @@ func tryNvidiaSMI() []GPUInfo { LoadPercent: parseFloat(parts[6]), CoreClock: parseFloat(parts[7]), MemClock: parseFloat(parts[8]), - Power: parseFloat(parts[9]), + Power: power, FanSpeed: fan, }) } diff --git a/cmd/server/templates/index.html b/cmd/server/templates/index.html index 6ff1f3e..8d91724 100644 --- a/cmd/server/templates/index.html +++ b/cmd/server/templates/index.html @@ -11,7 +11,7 @@ :root { --bg: #0a0d13; --card: #111520; --sec: #161b28; --border: #1e253a; --accent: #00e5a0; --warn: #ffb020; --danger: #ff4060; - --text: #e2e6ef; --dim: #5a627a; --dim-bar: #1e2336; + --text: #e2e6ef; --dim: #7a829a; --dim-bar: #1e2336; --mono: 'JetBrains Mono','Menlo',monospace; } * { margin:0; padding:0; box-sizing:border-box } @@ -65,35 +65,35 @@ .device-card { background:var(--card); border:1px solid var(--border); border-radius:10px; transition:opacity .3s,border-color .2s,box-shadow .2s } .device-card:hover { border-color:#28304a; box-shadow:0 4px 24px rgba(0,0,0,.2) } .device-card.offline { opacity:.55 } .device-card.offline:hover { opacity:.75 } - .dc-hd { display:flex; align-items:center; justify-content:space-between; padding:8px 14px 0; gap:6px } - .dc-name { font-size:12px; font-weight:600; overflow:hidden; text-overflow:ellipsis; white-space:nowrap } - .dc-time { font-size:9px; color:var(--dim); font-family:var(--mono); flex-shrink:0 } - .dc-sub { padding:1px 14px 0; font-size:9px; color:var(--dim) } + .dc-hd { display:flex; align-items:center; justify-content:space-between; padding:10px 16px 0; gap:6px } + .dc-name { font-size:13px; font-weight:600; overflow:hidden; text-overflow:ellipsis; white-space:nowrap } + .dc-time { font-size:10px; color:var(--dim); font-family:var(--mono); flex-shrink:0; display:flex; align-items:center; gap:4px } + .dc-sub { padding:1px 16px 0; font-size:10px; color:var(--dim) } .dc-bd { padding:5px 0 0 } .dc-col { padding:0 12px 8px; flex:1 1 0; min-width:0; display:flex; flex-direction:column } .dc-left { border-right:1px solid var(--border) } - .sec { background:var(--sec); border-radius:6px; padding:6px 10px } - .sec-tt { font-size:8px; font-weight:600; letter-spacing:.8px; text-transform:uppercase; color:var(--dim); margin-bottom:3px } + .sec { background:var(--sec); border-radius:6px; padding:8px 12px } + .sec-tt { font-size:10px; font-weight:600; letter-spacing:.8px; text-transform:uppercase; color:var(--dim); margin-bottom:4px } .sec-tt .hl { color:var(--text) } .hw-row { display:flex; align-items:center; gap:6px } .hw-row .sec-tt { margin-bottom:0 } - .tag-on { background:rgba(0,229,160,.12); color:var(--accent); border:none; font-size:7px; padding:0 5px; line-height:16px; border-radius:8px } - .tag-off { background:rgba(255,64,96,.1); color:var(--danger); border:none; font-size:7px; padding:0 5px; line-height:16px; border-radius:8px } - .info-row { display:flex; justify-content:space-between; align-items:center; font-size:9px; line-height:1.8 } + .tag-on { background:rgba(0,229,160,.12); color:var(--accent); border:none; font-size:8px; padding:0 6px; line-height:18px; border-radius:8px } + .tag-off { background:rgba(255,64,96,.1); color:var(--danger); border:none; font-size:8px; padding:0 6px; line-height:18px; border-radius:8px } + .info-row { display:flex; justify-content:space-between; align-items:center; font-size:10px; line-height:1.8 } .info-row .label { color:var(--dim) } .info-row .value { font-family:var(--mono); font-weight:500 } .gpu-grid { display:grid; grid-template-columns:repeat(4,1fr); gap:4px } - .gpu-block { background:rgba(0,0,0,.2); border-radius:5px; padding:5px; cursor:pointer; transition:background .2s,transform .15s } + .gpu-block { background:rgba(0,0,0,.2); border-radius:5px; padding:6px; cursor:pointer; transition:background .2s,transform .15s } .gpu-block:hover { background:rgba(0,229,160,.06); transform:translateY(-1px) } .gpu-active { background:rgba(0,229,160,.12); border:1px solid var(--accent); transform:translateY(-1px) } .gb-top { display:flex; justify-content:space-between; align-items:center; margin-bottom:3px; gap:3px } - .gb-temp { font-size:10px; font-weight:700; font-family:var(--mono) } - .gb-fan { font-size:9px; color:var(--dim); font-family:var(--mono); display:flex; align-items:center; gap:2px } - .gb-bar { position:relative; height:12px; background:var(--dim-bar); border-radius:3px; overflow:hidden; margin-bottom:2px } + .gb-temp { font-size:11px; font-weight:700; font-family:var(--mono) } + .gb-fan { font-size:10px; color:var(--dim); font-family:var(--mono); display:flex; align-items:center; gap:2px } + .gb-bar { position:relative; height:14px; background:var(--dim-bar); border-radius:3px; overflow:hidden; margin-bottom:2px } .gb-fill { height:100%; border-radius:3px; transition:width .5s ease } - .gb-pct { position:absolute; inset:0; display:flex; align-items:center; justify-content:center; font-size:7px; font-weight:700; font-family:var(--mono); color:#fff; text-shadow:0 1px 2px rgba(0,0,0,.6) } - .gb-info { display:flex; justify-content:space-between; font-size:8px; font-family:var(--mono); margin-top:2px } + .gb-pct { position:absolute; inset:0; display:flex; align-items:center; justify-content:center; font-size:8px; font-weight:700; font-family:var(--mono); color:#fff; text-shadow:0 1px 2px rgba(0,0,0,.6) } + .gb-info { display:flex; justify-content:space-between; font-size:9px; font-family:var(--mono); margin-top:2px } .gpu-popover .ant-popover { width:100%!important; left:0!important } .gpu-popover .ant-popover-inner { width:100%!important } @@ -115,20 +115,20 @@ .gpu-pop-row .info-row .label { color:var(--dim); white-space:nowrap } .gpu-pop-row .info-row .value { color:var(--text); font-family:var(--mono); font-weight:500; white-space:nowrap } - .m-hr-row { display:flex; align-items:center; gap:5px; margin-bottom:3px } + .m-hr-row { display:flex; align-items:center; gap:5px; margin-bottom:4px } .m-hr-row:last-child { margin-bottom:0 } - .m-hr-lbl { width:20px; text-align:right; font-family:var(--mono); font-size:8px; color:var(--dim); flex-shrink:0 } - .m-hr-bar { flex:1; height:5px; background:var(--dim-bar); border-radius:3px; overflow:hidden } + .m-hr-lbl { width:22px; text-align:right; font-family:var(--mono); font-size:9px; color:var(--dim); flex-shrink:0 } + .m-hr-bar { flex:1; height:6px; background:var(--dim-bar); border-radius:3px; overflow:hidden } .m-hr-fill { height:100%; border-radius:3px; transition:width .4s ease } - .m-hr-val { min-width:65px; text-align:right; font-family:var(--mono); font-size:8px; font-weight:500; flex-shrink:0 } - .m-status { display:flex; align-items:center; gap:5px; font-size:9px; margin-bottom:4px } - .m-agent,.m-country { color:var(--dim); font-size:8px; font-family:var(--mono); margin-left:auto } - .m-shares { display:flex; justify-content:space-between; margin-top:4px; font-family:var(--mono); font-size:8px } + .m-hr-val { min-width:70px; text-align:right; font-family:var(--mono); font-size:9px; font-weight:500; flex-shrink:0 } + .m-status { display:flex; align-items:center; gap:5px; font-size:10px; margin-bottom:5px } + .m-agent,.m-country { color:var(--dim); font-size:9px; font-family:var(--mono); margin-left:auto } + .m-shares { display:flex; justify-content:space-between; margin-top:5px; font-family:var(--mono); font-size:9px } .m-sh.valid { color:var(--accent) } .m-sh.stale { color:var(--warn) } .m-sh.invalid { color:var(--danger) } - .m-times { display:flex; gap:10px; margin-top:4px; font-size:8px } + .m-times { display:flex; gap:10px; margin-top:5px; font-size:9px } .m-times span { color:var(--dim) } .m-times .v { font-family:var(--mono) } - .chart-box { background:rgba(0,0,0,.15); border-radius:4px; padding:5px 6px; margin-top:5px; overflow:hidden } - .chart-lbl { font-size:7px; color:var(--dim); font-family:var(--mono); margin-bottom:3px } + .chart-box { background:rgba(0,0,0,.15); border-radius:4px; padding:6px 8px; margin-top:6px; overflow:hidden } + .chart-lbl { font-size:8px; color:var(--dim); font-family:var(--mono); margin-bottom:3px } .chart-empty { color:var(--dim); font-size:8px; text-align:center; padding:10px 0 } .off-actions { display:flex; justify-content:flex-end; padding-top:0 } @@ -222,7 +222,7 @@