mirror of
https://github.com/safing/portbase
synced 2025-04-19 08:59:09 +00:00
37 lines
1 KiB
Go
37 lines
1 KiB
Go
package runtime
|
|
|
|
import (
|
|
"time"
|
|
|
|
"github.com/safing/portbase/database/record"
|
|
"github.com/safing/portbase/log"
|
|
)
|
|
|
|
// traceValueProvider can be used to wrap an
|
|
// existing value provider to trace an calls to
|
|
// their Set and Get methods.
|
|
type traceValueProvider struct {
|
|
ValueProvider
|
|
}
|
|
|
|
// TraceProvider returns a new ValueProvider that wraps
|
|
// vp but traces all Set and Get methods calls.
|
|
func TraceProvider(vp ValueProvider) ValueProvider {
|
|
return &traceValueProvider{vp}
|
|
}
|
|
|
|
func (tvp *traceValueProvider) Set(r record.Record) (res record.Record, err error) {
|
|
defer func(start time.Time) {
|
|
log.Tracef("runtime: setting record %q: duration=%s err=%v", r.Key(), time.Since(start), err)
|
|
}(time.Now())
|
|
|
|
return tvp.ValueProvider.Set(r)
|
|
}
|
|
|
|
func (tvp *traceValueProvider) Get(keyOrPrefix string) (records []record.Record, err error) {
|
|
defer func(start time.Time) {
|
|
log.Tracef("runtime: loading records %q: duration=%s err=%v #records=%d", keyOrPrefix, time.Since(start), err, len(records))
|
|
}(time.Now())
|
|
|
|
return tvp.ValueProvider.Get(keyOrPrefix)
|
|
}
|