Add memory used and limit to stat

This commit is contained in:
dimonl 2025-08-20 19:24:40 +02:00
parent bedde4a037
commit 278cc6c03d
3 changed files with 27 additions and 7 deletions

View file

@ -16,6 +16,8 @@ type RecordedStats struct {
type DerivedStats struct {
CPUPercentage float64
MemoryPercentage float64
MemoryUsed int
MemoryLimit int64
}
// ContainerStats autogenerated at https://mholt.github.io/json-to-go/

View file

@ -169,6 +169,8 @@ func (c *DockerCommand) CreateClientStatMonitor(container *Container) {
DerivedStats: DerivedStats{
CPUPercentage: stats.CalculateContainerCPUPercentage(),
MemoryPercentage: stats.CalculateContainerMemoryUsage(),
MemoryUsed: stats.MemoryStats.Usage,
MemoryLimit: stats.MemoryStats.Limit,
},
RecordedAt: time.Now(),
}

View file

@ -58,7 +58,8 @@ func plotGraph(container *commands.Container, spec config.GraphConfig, width int
container.StatsMutex.Lock()
defer container.StatsMutex.Unlock()
data := make([]float64, len(container.StatHistory))
dataLength := len(container.StatHistory)
data := make([]float64, dataLength)
for i, stats := range container.StatHistory {
value, err := lookup.LookupString(stats, spec.StatPath)
@ -88,12 +89,27 @@ func plotGraph(container *commands.Container, spec config.GraphConfig, width int
height = spec.Height
}
caption := fmt.Sprintf(
"%s: %0.2f (%v)",
spec.Caption,
data[len(data)-1],
time.Since(container.StatHistory[0].RecordedAt).Round(time.Second),
)
memoryUsed := utils.FormatDecimalBytes(container.StatHistory[dataLength-1].DerivedStats.MemoryUsed)
memoryLimit := utils.FormatDecimalBytes(int(container.StatHistory[dataLength-1].DerivedStats.MemoryLimit))
var caption string
switch spec.Caption {
case "CPU (%)":
caption = fmt.Sprintf(
"%s: %0.2f (%v)",
spec.Caption,
data[dataLength-1],
time.Since(container.StatHistory[0].RecordedAt).Round(time.Second),
)
case "Memory (%)":
caption = fmt.Sprintf(
"%s: %s / %s (%0.2f) (%v)",
spec.Caption,
memoryUsed,
memoryLimit,
data[dataLength-1],
time.Since(container.StatHistory[0].RecordedAt).Round(time.Second),
)
}
return asciigraph.Plot(
data,