diff --git a/context.go b/context.go index 55bd31b3..52d21f05 100644 --- a/context.go +++ b/context.go @@ -261,6 +261,8 @@ func unwrapWafResult(ret bindings.WafReturnCode, result *bindings.WafResult) (re res.Derivatives, err = decodeMap(&result.Derivatives) } + res.TimeSpent = time.Duration(result.TotalRuntime) * time.Nanosecond + if ret == bindings.WafOK { return res, err } @@ -282,7 +284,6 @@ func unwrapWafResult(ret bindings.WafReturnCode, result *bindings.WafResult) (re } } - res.TimeSpent = time.Duration(result.TotalRuntime) return res, err } diff --git a/metrics.go b/metrics.go index 91334619..86130995 100644 --- a/metrics.go +++ b/metrics.go @@ -37,7 +37,7 @@ const ( func (stats Stats) Metrics() map[string]any { tags := make(map[string]any, len(stats.Timers)+len(stats.Truncations)+1) for k, v := range stats.Timers { - tags[k] = uint64(v.Microseconds()) + tags[k] = float64(v.Nanoseconds()) / float64(time.Microsecond) // The metrics should be in microseconds } tags[wafTimeoutTag] = stats.TimeoutCount diff --git a/waf_test.go b/waf_test.go index 847f49bc..caafc04a 100644 --- a/waf_test.go +++ b/waf_test.go @@ -368,8 +368,8 @@ func TestTimeout(t *testing.T) { "my.input": "Arachni", } - t.Run("not-empty-metricsStore", func(t *testing.T) { - context := NewContextWithBudget(waf, time.Millisecond) + t.Run("not-empty-metrics-match", func(t *testing.T) { + context := NewContextWithBudget(waf, time.Hour) require.NotNil(t, context) defer context.Close() @@ -382,6 +382,20 @@ func TestTimeout(t *testing.T) { require.NotZero(t, context.Stats().Timers["_dd.appsec.waf.duration"]) }) + t.Run("not-empty-metrics-no-match", func(t *testing.T) { + context := NewContextWithBudget(waf, time.Hour) + require.NotNil(t, context) + defer context.Close() + + _, err := context.Run(RunAddressData{Persistent: map[string]any{"my.input": "curl/7.88"}}, 0) + require.NoError(t, err) + require.NotEmpty(t, context.Stats()) + require.NotZero(t, context.Stats().Timers["_dd.appsec.waf.decode"]) + require.NotZero(t, context.Stats().Timers["_dd.appsec.waf.encode"]) + require.NotZero(t, context.Stats().Timers["_dd.appsec.waf.duration_ext"]) + require.NotZero(t, context.Stats().Timers["_dd.appsec.waf.duration"]) + }) + t.Run("timeout-persistent-encoder", func(t *testing.T) { context := NewContextWithBudget(waf, time.Millisecond) require.NotNil(t, context)