github.com/celestiaorg/celestia-node@v0.15.0-beta.1/share/eds/cache/metrics.go (about) 1 package cache 2 3 import ( 4 "context" 5 6 "go.opentelemetry.io/otel/attribute" 7 "go.opentelemetry.io/otel/metric" 8 ) 9 10 const ( 11 cacheFoundKey = "found" 12 failedKey = "failed" 13 ) 14 15 type metrics struct { 16 getCounter metric.Int64Counter 17 evictedCounter metric.Int64Counter 18 } 19 20 func newMetrics(bc *AccessorCache) (*metrics, error) { 21 metricsPrefix := "eds_blockstore_cache_" + bc.name 22 23 evictedCounter, err := meter.Int64Counter(metricsPrefix+"_evicted_counter", 24 metric.WithDescription("eds blockstore cache evicted event counter")) 25 if err != nil { 26 return nil, err 27 } 28 29 getCounter, err := meter.Int64Counter(metricsPrefix+"_get_counter", 30 metric.WithDescription("eds blockstore cache evicted event counter")) 31 if err != nil { 32 return nil, err 33 } 34 35 cacheSize, err := meter.Int64ObservableGauge(metricsPrefix+"_size", 36 metric.WithDescription("total amount of items in blockstore cache"), 37 ) 38 if err != nil { 39 return nil, err 40 } 41 42 callback := func(ctx context.Context, observer metric.Observer) error { 43 observer.ObserveInt64(cacheSize, int64(bc.cache.Len())) 44 return nil 45 } 46 _, err = meter.RegisterCallback(callback, cacheSize) 47 48 return &metrics{ 49 getCounter: getCounter, 50 evictedCounter: evictedCounter, 51 }, err 52 } 53 54 func (m *metrics) observeEvicted(failed bool) { 55 if m == nil { 56 return 57 } 58 m.evictedCounter.Add(context.Background(), 1, 59 metric.WithAttributes( 60 attribute.Bool(failedKey, failed))) 61 } 62 63 func (m *metrics) observeGet(found bool) { 64 if m == nil { 65 return 66 } 67 m.getCounter.Add(context.Background(), 1, metric.WithAttributes( 68 attribute.Bool(cacheFoundKey, found))) 69 }