Files
openserp/core/network_usage.go

45 lines
909 B
Go

package core
import (
"context"
"sync/atomic"
)
type networkUsageContextKey struct{}
type networkUsageTracker struct {
bytes atomic.Int64
}
func WithNetworkUsage(ctx context.Context) context.Context {
ctx = EnsureContext(ctx)
if networkUsageFromContext(ctx) != nil {
return ctx
}
return context.WithValue(ctx, networkUsageContextKey{}, &networkUsageTracker{})
}
func AddNetworkBytes(ctx context.Context, n int64) {
if n <= 0 {
return
}
if tracker := networkUsageFromContext(ctx); tracker != nil {
tracker.bytes.Add(n)
}
}
func NetworkBytesFromContext(ctx context.Context) int64 {
if tracker := networkUsageFromContext(ctx); tracker != nil {
return tracker.bytes.Load()
}
return 0
}
func networkUsageFromContext(ctx context.Context) *networkUsageTracker {
if ctx == nil {
return nil
}
tracker, _ := ctx.Value(networkUsageContextKey{}).(*networkUsageTracker)
return tracker
}