package internal import ( "strconv" "strings" "github.com/prometheus/client_golang/prometheus" "edge-infra.dev/pkg/k8s/runtime/controller/metrics" ) var ( // CacheReadOpsMetric metric for total reads from cache. CacheReadOpsMetric prometheus.CounterVec = *prometheus.NewCounterVec( prometheus.CounterOpts{ Name: metrics.Name("lpctl", "cache_get_count"), Help: "Custom cache read operations metric for lumperctl", }, []string{"result", "provider", "obj_type"}) // CacheWriteOpsMetric metric for total writes to cache. CacheWriteOpsMetric prometheus.CounterVec = *prometheus.NewCounterVec( prometheus.CounterOpts{ Name: metrics.Name("lpctl", "cache_write_ops"), Help: "Custom cache write operations metric for lumperctl", }, []string{"provider"}) // CacheReadLatencyMetric metric for the read latency in milliseconds to read an artifact from the cache. CacheReadLatencyMetric prometheus.HistogramVec = *prometheus.NewHistogramVec( prometheus.HistogramOpts{ Name: metrics.Name("lpctl", "cache_read_latency_count"), Help: "Custom cache read latency metric for lumperctl", Buckets: prometheus.LinearBuckets(20, 5, 5), }, []string{"provider"}) // CacheWriteLatencyMetric metric for the write latency in milliseconds to add a new artifact in the cache. CacheWriteLatencyMetric prometheus.HistogramVec = *prometheus.NewHistogramVec( prometheus.HistogramOpts{ Name: metrics.Name("lpctl", "cache_write_latency_count"), Help: "Custom cache write latency metric for lumperctl", Buckets: prometheus.LinearBuckets(20, 5, 5), }, []string{"provider"}) // CacheLenMetric metric for the total count of artifacts in the cache. CacheLenMetric prometheus.GaugeVec = *prometheus.NewGaugeVec( prometheus.GaugeOpts{ Name: metrics.Name("lpctl", "cache_len_count"), Help: "Custom cache length metric for lumperctl", }, []string{"provider"}) // CacheUtilizationMetric metric for the percentage utilization of the allocated total cache memory. CacheUtilizationMetric prometheus.GaugeVec = *prometheus.NewGaugeVec( prometheus.GaugeOpts{ Name: metrics.Name("lpctl", "cache_utilization_percentage"), Help: "Custom cache utilization percentage metric for lumperctl", }, []string{"provider"}) // EdgeVersionMetric metric for the edge version of an unpackedpallet. EdgeVersionMetric prometheus.GaugeVec = *prometheus.NewGaugeVec( prometheus.GaugeOpts{ Name: metrics.Name("lpctl", "edge_version"), Help: "Custom lumperctl metric for recording edge version of an unpackedpallet", }, []string{"name", "version"}) ) type CacheRecorder struct{} func (r CacheRecorder) RecordGet(hit bool, provider string, objType string) { CacheReadOpsMetric.WithLabelValues(strconv.FormatBool(hit), provider, objType).Inc() } func RecordCacheLen(val float64) { CacheLenMetric.WithLabelValues("memory").Set(val) } func RecordEdgeVersion(name, version string, deleted bool) { // Delete metrics for this object to reset the observed version. // If the unpackedpallet has been deleted, exit before recording. EdgeVersionMetric.DeletePartialMatch(prometheus.Labels{"name": name}) if deleted { return } v := strings.Split(version, "-")[0] EdgeVersionMetric.WithLabelValues(name, v).Set(1) }