mirror of
https://github.com/trufflesecurity/trufflehog.git
synced 2024-11-15 09:27:30 +00:00
c98c092a71
* decouple metrics from cache logic * delete * address comments * update
83 lines
3 KiB
Go
83 lines
3 KiB
Go
package cache
|
|
|
|
// WithMetrics is a decorator that adds metrics collection to any Cache implementation.
|
|
type WithMetrics[T any] struct {
|
|
wrapped Cache[T]
|
|
metrics BaseMetricsCollector
|
|
cacheName string
|
|
}
|
|
|
|
// NewCacheWithMetrics creates a new WithMetrics decorator that wraps the provided Cache
|
|
// and collects metrics using the provided BaseMetricsCollector.
|
|
// The cacheName parameter is used to identify the cache in the collected metrics.
|
|
func NewCacheWithMetrics[T any](wrapped Cache[T], metrics BaseMetricsCollector, cacheName string) *WithMetrics[T] {
|
|
return &WithMetrics[T]{
|
|
wrapped: wrapped,
|
|
metrics: metrics,
|
|
cacheName: cacheName,
|
|
}
|
|
}
|
|
|
|
// Set sets the value for the given key in the cache. It also records a set metric
|
|
// for the cache using the provided metrics collector and cache name.
|
|
func (c *WithMetrics[T]) Set(key string, val T) {
|
|
c.metrics.RecordSet(c.cacheName)
|
|
c.wrapped.Set(key, val)
|
|
}
|
|
|
|
// Get retrieves the value for the given key from the underlying cache. It also records
|
|
// a hit or miss metric for the cache using the provided metrics collector and cache name.
|
|
func (c *WithMetrics[T]) Get(key string) (T, bool) {
|
|
val, found := c.wrapped.Get(key)
|
|
if found {
|
|
c.metrics.RecordHit(c.cacheName)
|
|
} else {
|
|
c.metrics.RecordMiss(c.cacheName)
|
|
}
|
|
return val, found
|
|
}
|
|
|
|
// Exists checks if the given key exists in the cache. It records a hit or miss metric
|
|
// for the cache using the provided metrics collector and cache name.
|
|
func (c *WithMetrics[T]) Exists(key string) bool {
|
|
found := c.wrapped.Exists(key)
|
|
if found {
|
|
c.metrics.RecordHit(c.cacheName)
|
|
} else {
|
|
c.metrics.RecordMiss(c.cacheName)
|
|
}
|
|
return found
|
|
}
|
|
|
|
// Delete removes the value for the given key from the cache. It also records a delete metric
|
|
// for the cache using the provided metrics collector and cache name.
|
|
func (c *WithMetrics[T]) Delete(key string) {
|
|
c.wrapped.Delete(key)
|
|
c.metrics.RecordDelete(c.cacheName)
|
|
}
|
|
|
|
// Clear removes all entries from the cache. It also records a clear metric
|
|
// for the cache using the provided metrics collector and cache name.
|
|
func (c *WithMetrics[T]) Clear() {
|
|
c.wrapped.Clear()
|
|
c.metrics.RecordClear(c.cacheName)
|
|
}
|
|
|
|
// Count returns the number of entries in the cache. It also records a count metric
|
|
// for the cache using the provided metrics collector and cache name.
|
|
func (c *WithMetrics[T]) Count() int {
|
|
count := c.wrapped.Count()
|
|
return count
|
|
}
|
|
|
|
// Keys returns all keys in the cache. It also records a keys metric
|
|
// for the cache using the provided metrics collector and cache name.
|
|
func (c *WithMetrics[T]) Keys() []string { return c.wrapped.Keys() }
|
|
|
|
// Values returns all values in the cache. It also records a values metric
|
|
// for the cache using the provided metrics collector and cache name.
|
|
func (c *WithMetrics[T]) Values() []T { return c.wrapped.Values() }
|
|
|
|
// Contents returns all keys in the cache as a string. It also records a contents metric
|
|
// for the cache using the provided metrics collector and cache name.
|
|
func (c *WithMetrics[T]) Contents() string { return c.wrapped.Contents() }
|