diff --git a/src/internal/admin/templates/admin_overview.html b/src/internal/admin/templates/admin_overview.html index 9ff3329..ef4a934 100644 --- a/src/internal/admin/templates/admin_overview.html +++ b/src/internal/admin/templates/admin_overview.html @@ -63,6 +63,8 @@ form.inline { display: inline; } @media (prefers-color-scheme: dark) { .field label { color: #9aa0a8; } } .field input { width: 100%; padding: 8px 10px; border: 1px solid #d1d5db; border-radius: 6px; font-size: 13px; background: #fff; color: inherit; } @media (prefers-color-scheme: dark) { .field input { background: #15171b; border-color: #3a3f47; } } +.field select.field-select { width: 100%; padding: 8px 10px; border: 1px solid #d1d5db; border-radius: 6px; font-size: 13px; background: #fff; color: inherit; } +@media (prefers-color-scheme: dark) { .field select.field-select { background: #15171b; border-color: #3a3f47; } } .cpu-row { display: flex; gap: 4px; align-items: stretch; } .cpu-row input { flex: 1; min-width: 0; } .cpu-row .step { display: flex; flex-direction: column; } @@ -158,7 +160,7 @@ a.copy.copied { border-color: #86efac; background: #dcfce7; color: #15803d; }
{{if .IPv6PoolMode}}
- {{range .PoolFree}}{{end}} @@ -180,7 +182,7 @@ a.copy.copied { border-color: #86efac; background: #dcfce7; color: #15803d; } {{if eq .Lang "zh"}}状态{{else}}State{{end}} {{if eq .Lang "zh"}}端口/SSH{{else}}Ports/SSH{{end}} {{if eq .Lang "zh"}}配额 CPU/内存/磁盘{{else}}Quota CPU/Mem/Disk{{end}} - {{if eq .Lang "zh"}}5分钟CPU{{else}}5m CPU{{end}} + {{if eq .Lang "zh"}}15分钟CPU{{else}}15m CPU{{end}} {{if eq .Lang "zh"}}内存{{else}}Mem{{end}} {{if eq .Lang "zh"}}进程{{else}}Procs{{end}} {{if eq .Lang "zh"}}磁盘{{else}}Disk{{end}} @@ -371,7 +373,7 @@ function del(name){ var qc = document.getElementById('quotaCpu'); if (qc) qc.addEventListener('input', function(){ syncCpuStep(qc); }); })(); -// Clickable column headers for Name / 5m CPU / Mem / Procs / Disk: cycle +// Clickable column headers for Name / 15m CPU / Mem / Procs / Disk: cycle // ascending -> descending -> default. Only one column sorts at a time; the // default state restores the original render order. (function(){ diff --git a/src/internal/mgr/batch.go b/src/internal/mgr/batch.go index d8882c7..2335ec5 100644 --- a/src/internal/mgr/batch.go +++ b/src/internal/mgr/batch.go @@ -130,7 +130,7 @@ func readUptime() time.Duration { } // UserStatus is one row of the admin user table: the DB user record plus the -// latest persisted resource sample and five-minute CPU average. +// latest persisted resource sample and fifteen-minute CPU average. type UserStatus struct { User *db.User State string @@ -154,7 +154,7 @@ func (m *Manager) BatchUsers() ([]*UserStatus, error) { if err != nil { return nil, err } - average, err := m.db.AverageCPU(time.Now().Add(-5 * time.Minute).Unix()) + average, err := m.db.AverageCPU(time.Now().Add(-15 * time.Minute).Unix()) if err != nil { return nil, err } diff --git a/src/internal/mgr/mgr.go b/src/internal/mgr/mgr.go index 7021941..81b65ec 100644 --- a/src/internal/mgr/mgr.go +++ b/src/internal/mgr/mgr.go @@ -716,7 +716,7 @@ func (m *Manager) List() ([]*Result, error) { return nil, err } latest, _ := m.db.LatestResourceSamples() - average, _ := m.db.AverageCPU(time.Now().Add(-5 * time.Minute).Unix()) + average, _ := m.db.AverageCPU(time.Now().Add(-15 * time.Minute).Unix()) live := m.liveStatusFallback(users, latest) out := make([]*Result, 0, len(users)) for _, u := range users { @@ -735,7 +735,7 @@ func (m *Manager) Show(name string) (*Result, error) { return nil, err } latest, _ := m.db.LatestResourceSamples() - average, _ := m.db.AverageCPU(time.Now().Add(-5 * time.Minute).Unix()) + average, _ := m.db.AverageCPU(time.Now().Add(-15 * time.Minute).Unix()) sample, hasSample := latest[u.ID] live := m.liveStatusFallback([]*db.User{u}, latest) avg, hasAverage := average[u.ID] diff --git a/src/internal/mgr/resource.go b/src/internal/mgr/resource.go index a2e720a..11177a8 100644 --- a/src/internal/mgr/resource.go +++ b/src/internal/mgr/resource.go @@ -229,14 +229,14 @@ func decorateStoredUsage(r *Result, sample db.ResourceSample, hasSample bool, av } // PanelResources returns the persisted usage for a user's panel page: the -// five-minute CPU average and the latest memory/disk usage, formatted for +// fifteen-minute CPU average and the latest memory/disk usage, formatted for // display. No Incus call is made — the data comes from the background sampler. func (m *Manager) PanelResources(userID int64) (cpuUse, memUse, diskUse string) { latest, err := m.db.LatestResourceSamples() if err != nil { return "-", "-", "-" } - avg, err := m.db.AverageCPU(time.Now().Add(-5 * time.Minute).Unix()) + avg, err := m.db.AverageCPU(time.Now().Add(-15 * time.Minute).Unix()) if err != nil { avg = map[int64]float64{} } diff --git a/src/internal/panel/panel.go b/src/internal/panel/panel.go index ddda5b2..d9d8327 100644 --- a/src/internal/panel/panel.go +++ b/src/internal/panel/panel.go @@ -293,8 +293,8 @@ func (s *Server) buildData(u *db.User, msg, errMsg string) pageData { Msg: msg, Err: errMsg, } - // Resource usage comes from the persisted sampler snapshot (five-minute CPU - // average plus latest memory/disk), never from a live Incus sample. + // Resource usage comes from the persisted sampler snapshot (fifteen-minute + // CPU average plus latest memory/disk), never from a live Incus sample. d.CPUUse, d.MemUse, d.DiskUsed = s.mgr.PanelResources(u.ID) // One `incus list` call only for the container status (must be live). // Bandwidth is read from the DB — the background sampler writes it every 60s. diff --git a/src/internal/panel/templates/overview.html b/src/internal/panel/templates/overview.html index bcadaf9..61b639a 100644 --- a/src/internal/panel/templates/overview.html +++ b/src/internal/panel/templates/overview.html @@ -150,7 +150,7 @@ footer a{color:var(--muted);text-decoration:underline}
{{if eq .Lang "zh"}}磁盘{{else}}Disk{{end}}{{.QuotaDisk}}
-
{{if eq .Lang "zh"}}5分钟CPU{{else}}5m CPU{{end}}{{.CPUUse}}
+
{{if eq .Lang "zh"}}15分钟CPU{{else}}15m CPU{{end}}{{.CPUUse}}
{{if eq .Lang "zh"}}已用内存{{else}}Mem used{{end}}{{.MemUse}}
{{if eq .Lang "zh"}}已用磁盘{{else}}Disk used{{end}}{{.DiskUsed}}