mirror of
https://github.com/rcourtman/Pulse.git
synced 2026-04-28 03:20:11 +00:00
- Add persistent volume mounts for Go/npm caches (faster rebuilds) - Add shell config with helpful aliases and custom prompt - Add comprehensive devcontainer documentation - Add pre-commit hooks for Go formatting and linting - Use go-version-file in CI workflows instead of hardcoded versions - Simplify docker compose commands with --wait flag - Add gitignore entries for devcontainer auth files 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
101 lines
2.8 KiB
Go
101 lines
2.8 KiB
Go
package monitoring
|
|
|
|
import (
|
|
"math"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/rcourtman/pulse-go-rewrite/internal/models"
|
|
)
|
|
|
|
func TestSeedMockMetricsHistory_PopulatesSeries(t *testing.T) {
|
|
now := time.Now()
|
|
|
|
state := models.StateSnapshot{
|
|
Nodes: []models.Node{
|
|
{
|
|
ID: "node-1",
|
|
Status: "online",
|
|
CPU: 0.33,
|
|
Memory: models.Memory{Usage: 62, Total: 128 * 1024 * 1024 * 1024},
|
|
Disk: models.Disk{Usage: 41, Total: 1024, Used: 512},
|
|
},
|
|
},
|
|
VMs: []models.VM{
|
|
{
|
|
ID: "vm-100",
|
|
Status: "running",
|
|
CPU: 0.21,
|
|
Memory: models.Memory{Usage: 47, Total: 8 * 1024 * 1024 * 1024},
|
|
Disk: models.Disk{Usage: 28, Total: 1024, Used: 256},
|
|
},
|
|
},
|
|
Containers: []models.Container{
|
|
{
|
|
ID: "ct-200",
|
|
Status: "running",
|
|
CPU: 0.09,
|
|
Memory: models.Memory{Usage: 53, Total: 2 * 1024 * 1024 * 1024},
|
|
Disk: models.Disk{Usage: 17, Total: 512, Used: 128},
|
|
},
|
|
},
|
|
Storage: []models.Storage{
|
|
{
|
|
ID: "local",
|
|
Status: "available",
|
|
Total: 1000,
|
|
Used: 420,
|
|
Free: 580,
|
|
Usage: 42,
|
|
},
|
|
},
|
|
DockerHosts: []models.DockerHost{
|
|
{
|
|
ID: "host-1",
|
|
Status: "online",
|
|
CPUUsage: 22.5,
|
|
Memory: models.Memory{Usage: 58, Total: 16 * 1024 * 1024 * 1024},
|
|
Disks: []models.Disk{
|
|
{Total: 1000, Used: 600, Usage: 60},
|
|
},
|
|
Containers: []models.DockerContainer{
|
|
{
|
|
ID: "cont-1",
|
|
State: "running",
|
|
CPUPercent: 3.3,
|
|
MemoryPercent: 11.2,
|
|
WritableLayerBytes: 10,
|
|
RootFilesystemBytes: 100,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
}
|
|
|
|
mh := NewMetricsHistory(1000, 24*time.Hour)
|
|
seedMockMetricsHistory(mh, state, now, time.Hour, 30*time.Second)
|
|
|
|
nodeCPU := mh.GetNodeMetrics("node-1", "cpu", time.Hour)
|
|
if len(nodeCPU) < 10 {
|
|
t.Fatalf("expected seeded node cpu points, got %d", len(nodeCPU))
|
|
}
|
|
if got, want := nodeCPU[len(nodeCPU)-1].Value, state.Nodes[0].CPU*100; math.Abs(got-want) > 1e-9 {
|
|
t.Fatalf("expected last node cpu point to match current, got=%v want=%v", got, want)
|
|
}
|
|
|
|
vmCPU := mh.GetGuestMetrics("vm-100", "cpu", time.Hour)
|
|
if len(vmCPU) < 10 {
|
|
t.Fatalf("expected seeded vm cpu points, got %d", len(vmCPU))
|
|
}
|
|
if got, want := vmCPU[len(vmCPU)-1].Value, state.VMs[0].CPU*100; math.Abs(got-want) > 1e-9 {
|
|
t.Fatalf("expected last vm cpu point to match current, got=%v want=%v", got, want)
|
|
}
|
|
|
|
dockerCPU := mh.GetGuestMetrics("docker:cont-1", "cpu", time.Hour)
|
|
if len(dockerCPU) < 10 {
|
|
t.Fatalf("expected seeded docker container cpu points, got %d", len(dockerCPU))
|
|
}
|
|
if got, want := dockerCPU[len(dockerCPU)-1].Value, state.DockerHosts[0].Containers[0].CPUPercent; math.Abs(got-want) > 1e-9 {
|
|
t.Fatalf("expected last docker cpu point to match current, got=%v want=%v", got, want)
|
|
}
|
|
}
|