feat(panel): CPU average window 15m -> 5m in panels and CLI
- Switch the CPU average window from -15m to -5m across admin/user panels and the CLI list/show path (mgr.List, mgr.Show, BatchUsers, PanelResources). - Relabel the column/card to 5分钟CPU / 5m CPU. The dashboard CPU figure now reflects the trailing 5-minute average.
This commit is contained in:
1 parent
bd55fc4a77
commit
1a104e3cb0
6 files changed
+10
-10
No files matched your search
@@ -195,7 +195,7 @@ a.copy.copied { border-color: #86efac; background: #dcfce7; color: #15803d; }
|
||||
<th>{{if eq .Lang "zh"}}状态{{else}}State{{end}}</th>
|
||||
<th>{{if eq .Lang "zh"}}端口/SSH{{else}}Ports/SSH{{end}}</th>
|
||||
<th>{{if eq .Lang "zh"}}配额 CPU/内存/磁盘{{else}}Quota CPU/Mem/Disk{{end}}</th>
|
||||
<th class="sortable" data-type="number">{{if eq .Lang "zh"}}15分钟CPU{{else}}15m CPU{{end}}<span class="ind"></span></th>
|
||||
<th class="sortable" data-type="number">{{if eq .Lang "zh"}}5分钟CPU{{else}}5m CPU{{end}}<span class="ind"></span></th>
|
||||
<th class="sortable" data-type="number">{{if eq .Lang "zh"}}内存{{else}}Mem{{end}}<span class="ind"></span></th>
|
||||
<th class="sortable" data-type="number">{{if eq .Lang "zh"}}进程{{else}}Procs{{end}}<span class="ind"></span></th>
|
||||
<th class="sortable" data-type="number">{{if eq .Lang "zh"}}磁盘{{else}}Disk{{end}}<span class="ind"></span></th>
|
||||
@@ -417,7 +417,7 @@ function del(name){
|
||||
var qc = document.getElementById('quotaCpu');
|
||||
if (qc) qc.addEventListener('input', function(){ syncCpuStep(qc); });
|
||||
})();
|
||||
// Clickable column headers for Name / 15m CPU / Mem / Procs / Disk: cycle
|
||||
// Clickable column headers for Name / 5m CPU / Mem / Procs / Disk: cycle
|
||||
// ascending -> descending -> default. Only one column sorts at a time; the
|
||||
// default state restores the original render order.
|
||||
(function(){
|
||||
|
||||
@@ -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 fifteen-minute CPU average.
|
||||
// latest persisted resource sample and five-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(-15 * time.Minute).Unix())
|
||||
average, err := m.db.AverageCPU(time.Now().Add(-5 * time.Minute).Unix())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
@@ -716,7 +716,7 @@ func (m *Manager) List() ([]*Result, error) {
|
||||
return nil, err
|
||||
}
|
||||
latest, _ := m.db.LatestResourceSamples()
|
||||
average, _ := m.db.AverageCPU(time.Now().Add(-15 * time.Minute).Unix())
|
||||
average, _ := m.db.AverageCPU(time.Now().Add(-5 * 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(-15 * time.Minute).Unix())
|
||||
average, _ := m.db.AverageCPU(time.Now().Add(-5 * time.Minute).Unix())
|
||||
sample, hasSample := latest[u.ID]
|
||||
live := m.liveStatusFallback([]*db.User{u}, latest)
|
||||
avg, hasAverage := average[u.ID]
|
||||
|
||||
@@ -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
|
||||
// fifteen-minute CPU average and the latest memory/disk usage, formatted for
|
||||
// five-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(-15 * time.Minute).Unix())
|
||||
avg, err := m.db.AverageCPU(time.Now().Add(-5 * time.Minute).Unix())
|
||||
if err != nil {
|
||||
avg = map[int64]float64{}
|
||||
}
|
||||
|
||||
@@ -311,7 +311,7 @@ func (s *Server) buildData(u *db.User, msg, errMsg string) pageData {
|
||||
Msg: msg,
|
||||
Err: errMsg,
|
||||
}
|
||||
// Resource usage comes from the persisted sampler snapshot (fifteen-minute
|
||||
// Resource usage comes from the persisted sampler snapshot (five-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).
|
||||
|
||||
@@ -196,7 +196,7 @@ footer a{color:var(--muted);text-decoration:underline}
|
||||
<div class="qitem"><span class="qlabel">{{if eq .Lang "zh"}}磁盘{{else}}Disk{{end}}</span><span class="qval">{{.QuotaDisk}}</span></div>
|
||||
</div>
|
||||
<div class="qgrid">
|
||||
<div class="qitem"><span class="qlabel">{{if eq .Lang "zh"}}15分钟CPU{{else}}15m CPU{{end}}</span><span class="qval">{{.CPUUse}}</span></div>
|
||||
<div class="qitem"><span class="qlabel">{{if eq .Lang "zh"}}5分钟CPU{{else}}5m CPU{{end}}</span><span class="qval">{{.CPUUse}}</span></div>
|
||||
<div class="qitem"><span class="qlabel">{{if eq .Lang "zh"}}已用内存{{else}}Mem used{{end}}</span><span class="qval">{{.MemUse}}</span></div>
|
||||
<div class="qitem"><span class="qlabel">{{if eq .Lang "zh"}}已用磁盘{{else}}Disk used{{end}}</span><span class="qval">{{.DiskUsed}}</span></div>
|
||||
</div>
|
||||
|
||||
Reference in new issue
Block a user