processor/rollupprocessor/cache.go (54 lines of code) (raw):

// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: MIT package rollupprocessor import ( "sort" "strings" "time" "github.com/jellydator/ttlcache/v3" "go.opentelemetry.io/collector/pdata/pcommon" ) type rollupCache interface { Get(key string, opts ...ttlcache.Option[string, []pcommon.Map]) *ttlcache.Item[string, []pcommon.Map] Set(key string, value []pcommon.Map, ttl time.Duration) *ttlcache.Item[string, []pcommon.Map] Key(attrs pcommon.Map) string Start() Stop() } // ttlRollupCache is a wrapper for the ttlcache.Cache that implements the // rollupCache interface. type ttlRollupCache struct { *ttlcache.Cache[string, []pcommon.Map] } var _ rollupCache = (*ttlRollupCache)(nil) func (c *ttlRollupCache) Key(attrs pcommon.Map) string { pairs := make([]string, 0, attrs.Len()) attrs.Range(func(k string, v pcommon.Value) bool { pairs = append(pairs, k+":"+v.AsString()) return true }) sort.Strings(pairs) return strings.Join(pairs, "|") } // nopRollupCache used when the rollup cache is disabled. type nopRollupCache struct { } var _ rollupCache = (*nopRollupCache)(nil) func (c *nopRollupCache) Get(string, ...ttlcache.Option[string, []pcommon.Map]) *ttlcache.Item[string, []pcommon.Map] { return nil } func (c *nopRollupCache) Set(string, []pcommon.Map, time.Duration) *ttlcache.Item[string, []pcommon.Map] { return nil } func (c *nopRollupCache) Key(pcommon.Map) string { return "" } func (c *nopRollupCache) Start() { } func (c *nopRollupCache) Stop() { } func buildRollupCache(cacheSize int) rollupCache { if cacheSize <= 0 { return &nopRollupCache{} } return &ttlRollupCache{ Cache: ttlcache.New[string, []pcommon.Map]( ttlcache.WithCapacity[string, []pcommon.Map](uint64(cacheSize)), ), } }