diff --git a/agent/internal/httpapi/extras.go b/agent/internal/httpapi/extras.go index 6e61422..ee5c1da 100644 --- a/agent/internal/httpapi/extras.go +++ b/agent/internal/httpapi/extras.go @@ -115,6 +115,11 @@ func (s *Server) handleMetrics(w http.ResponseWriter, r *http.Request) { } else { resp["disk_io"] = map[string]any{"error": err.Error()} } + if npu, err := metrics.ReadNPULoad(); err == nil { + resp["npu"] = npu + } else { + resp["npu"] = map[string]any{"error": err.Error()} + } media := map[string]any{"supported": s.proc != nil && s.proc.Enabled()} if s.proc == nil || !s.proc.Enabled() { diff --git a/agent/internal/httpapi/preview.go b/agent/internal/httpapi/preview.go index 9db98d7..adc12c3 100644 --- a/agent/internal/httpapi/preview.go +++ b/agent/internal/httpapi/preview.go @@ -3,10 +3,7 @@ package httpapi import ( "encoding/json" "net/http" - "os" - "path/filepath" "strconv" - "strings" ) type previewChannel struct { diff --git a/agent/internal/metrics/metrics.go b/agent/internal/metrics/metrics.go index a34f14d..877cbc3 100644 --- a/agent/internal/metrics/metrics.go +++ b/agent/internal/metrics/metrics.go @@ -261,3 +261,43 @@ func ParseLoadAvg(data string) (LoadAvg, error) { } return LoadAvg{One: one, Five: five, Fifteen: fifteen}, nil } + +type NPULoad struct { + UsagePct float64 `json:"usage_pct"` +} + +func ReadNPULoad() (*NPULoad, error) { + f, err := os.Open("/proc/rknpu/load") + if err != nil { + return nil, err + } + defer f.Close() + scanner := bufio.NewScanner(f) + var total, idle float64 + for scanner.Scan() { + line := scanner.Text() + parts := strings.Split(line, "%") + for _, p := range parts { + p = strings.TrimSpace(p) + if idx := strings.LastIndex(p, " "); idx >= 0 { + p = p[idx+1:] + } + if strings.HasSuffix(p, "%") { + continue + } + v, err := strconv.ParseFloat(strings.TrimSpace(p), 64) + if err == nil { + total += 100 + idle += v + } + } + } + if total == 0 { + return nil, ErrNotSupported + } + usage := 100 - (idle / total * 100) + if usage < 0 { + usage = 0 + } + return &NPULoad{UsagePct: usage}, nil +} diff --git a/agent/rk3588-agent_linux_arm64 b/agent/rk3588-agent_linux_arm64 index 450c140..39c9255 100755 Binary files a/agent/rk3588-agent_linux_arm64 and b/agent/rk3588-agent_linux_arm64 differ