mirror of
https://github.com/priyanshujain/sanderling.git
synced 2026-10-02 19:17:10 +00:00
fix(trace): cpu_percent is omitted when no CPU was sampled
The replay UI already declared it optional, so a web run's steps recording a zero per step were the only thing claiming a reading.
This commit is contained in:
1 parent
1fb910e0a2
commit
28402bda7b
4 files changed
+14
-7
No files matched your search
@@ -1702,7 +1702,7 @@ func captureMetrics(ctx context.Context, options Options, logger *slog.Logger, s
|
||||
logger.Warn("metrics capture failed", "step", stepIndex, "err", err)
|
||||
return nil, true
|
||||
}
|
||||
if sample.CPUPercent == 0 && sample.HeapBytes == 0 && sample.TotalMemoryBytes == 0 {
|
||||
if sample.CPUPercent == nil && sample.HeapBytes == 0 && sample.TotalMemoryBytes == 0 {
|
||||
return nil, true
|
||||
}
|
||||
return &trace.Metrics{
|
||||
|
||||
@@ -1525,7 +1525,10 @@ func readTraceLines(t *testing.T, directory string) []traceStepLine {
|
||||
|
||||
func TestRunner_ParallelFetchCallsAllDriverMethods(t *testing.T) {
|
||||
state := newHarness(t)
|
||||
state.mock.MetricsData = driver.Metrics{CPUPercent: 5.0, HeapBytes: 1024, TotalMemoryBytes: 4096}
|
||||
cpuPercent := 5.0
|
||||
state.mock.MetricsData = driver.Metrics{
|
||||
CPUPercent: &cpuPercent, HeapBytes: 1024, TotalMemoryBytes: 4096,
|
||||
}
|
||||
state.mock.LogEntries = []driver.LogEntry{
|
||||
{UnixMillis: 1000, Level: "E", Tag: "test", Message: "boom"},
|
||||
}
|
||||
|
||||
@@ -104,9 +104,11 @@ type ExtractorChange struct {
|
||||
}
|
||||
|
||||
type Metrics struct {
|
||||
CPUPercent float64 `json:"cpu_percent"`
|
||||
HeapBytes int64 `json:"heap_bytes,omitempty"`
|
||||
TotalMemoryBytes int64 `json:"total_memory_bytes,omitempty"`
|
||||
// CPUPercent is omitted when the driver samples no CPU, so a web run's
|
||||
// steps do not each record a zero the sampler never took.
|
||||
CPUPercent *float64 `json:"cpu_percent,omitempty"`
|
||||
HeapBytes int64 `json:"heap_bytes,omitempty"`
|
||||
TotalMemoryBytes int64 `json:"total_memory_bytes,omitempty"`
|
||||
}
|
||||
|
||||
// The three producers an action can come from. The spec's setup drives the app
|
||||
|
||||
@@ -228,6 +228,7 @@ func TestWriteStep_DiagnosticsRoundTrip(t *testing.T) {
|
||||
directory := t.TempDir()
|
||||
writer, _ := NewWriter(directory)
|
||||
defer writer.Close()
|
||||
cpuPercent := 12.5
|
||||
|
||||
step := Step{
|
||||
Index: 4,
|
||||
@@ -244,7 +245,7 @@ func TestWriteStep_DiagnosticsRoundTrip(t *testing.T) {
|
||||
ExtractorChanges: map[string]ExtractorChange{
|
||||
"balance": {Prev: json.RawMessage(`10`), Curr: json.RawMessage(`-5`)},
|
||||
},
|
||||
Metrics: &Metrics{CPUPercent: 12.5, HeapBytes: 4096},
|
||||
Metrics: &Metrics{CPUPercent: &cpuPercent, HeapBytes: 4096},
|
||||
Exceptions: []Exception{{Class: "NullPointerException", Message: "boom"}},
|
||||
}
|
||||
if err := writer.WriteStep(step); err != nil {
|
||||
@@ -271,7 +272,8 @@ func TestWriteStep_DiagnosticsRoundTrip(t *testing.T) {
|
||||
if c := got.ExtractorChanges["balance"]; string(c.Prev) != `10` || string(c.Curr) != `-5` {
|
||||
t.Errorf("extractor change round-trip wrong: %+v", c)
|
||||
}
|
||||
if got.Metrics == nil || got.Metrics.CPUPercent != 12.5 || got.Metrics.HeapBytes != 4096 {
|
||||
if got.Metrics == nil || got.Metrics.CPUPercent == nil ||
|
||||
*got.Metrics.CPUPercent != 12.5 || got.Metrics.HeapBytes != 4096 {
|
||||
t.Errorf("metrics round-trip wrong: %+v", got.Metrics)
|
||||
}
|
||||
if len(got.Exceptions) != 1 || got.Exceptions[0].Class != "NullPointerException" {
|
||||
|
||||
Reference in new issue
Block a user