mirror of
https://github.com/prometheus/statsd_exporter.git
synced 2024-11-29 18:50:59 +00:00
Merge pull request #229 from andy-paine/make-mapper-cache-respect-metric-type
Make mapper cache respect metric type
This commit is contained in:
commit
8551a65827
2 changed files with 22 additions and 17 deletions
|
@ -237,7 +237,7 @@ func (m *MetricMapper) InitCache(cacheSize int) {
|
||||||
func (m *MetricMapper) GetMapping(statsdMetric string, statsdMetricType MetricType) (*MetricMapping, prometheus.Labels, bool) {
|
func (m *MetricMapper) GetMapping(statsdMetric string, statsdMetricType MetricType) (*MetricMapping, prometheus.Labels, bool) {
|
||||||
m.mutex.RLock()
|
m.mutex.RLock()
|
||||||
defer m.mutex.RUnlock()
|
defer m.mutex.RUnlock()
|
||||||
result, cached := m.cache.Get(statsdMetric)
|
result, cached := m.cache.Get(statsdMetric, statsdMetricType)
|
||||||
if cached {
|
if cached {
|
||||||
return result.Mapping, result.Labels, result.Matched
|
return result.Mapping, result.Labels, result.Matched
|
||||||
}
|
}
|
||||||
|
@ -253,12 +253,12 @@ func (m *MetricMapper) GetMapping(statsdMetric string, statsdMetricType MetricTy
|
||||||
labels[result.labelKeys[index]] = formatter.Format(captures)
|
labels[result.labelKeys[index]] = formatter.Format(captures)
|
||||||
}
|
}
|
||||||
|
|
||||||
m.cache.AddMatch(statsdMetric, result, labels)
|
m.cache.AddMatch(statsdMetric, statsdMetricType, result, labels)
|
||||||
|
|
||||||
return result, labels, true
|
return result, labels, true
|
||||||
} else if !m.doRegex {
|
} else if !m.doRegex {
|
||||||
// if there's no regex match type, return immediately
|
// if there's no regex match type, return immediately
|
||||||
m.cache.AddMiss(statsdMetric)
|
m.cache.AddMiss(statsdMetric, statsdMetricType)
|
||||||
return nil, nil, false
|
return nil, nil, false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -291,11 +291,11 @@ func (m *MetricMapper) GetMapping(statsdMetric string, statsdMetricType MetricTy
|
||||||
labels[label] = string(value)
|
labels[label] = string(value)
|
||||||
}
|
}
|
||||||
|
|
||||||
m.cache.AddMatch(statsdMetric, &mapping, labels)
|
m.cache.AddMatch(statsdMetric, statsdMetricType, &mapping, labels)
|
||||||
|
|
||||||
return &mapping, labels, true
|
return &mapping, labels, true
|
||||||
}
|
}
|
||||||
|
|
||||||
m.cache.AddMiss(statsdMetric)
|
m.cache.AddMiss(statsdMetric, statsdMetricType)
|
||||||
return nil, nil, false
|
return nil, nil, false
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,6 +14,7 @@
|
||||||
package mapper
|
package mapper
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"github.com/hashicorp/golang-lru"
|
"github.com/hashicorp/golang-lru"
|
||||||
"github.com/prometheus/client_golang/prometheus"
|
"github.com/prometheus/client_golang/prometheus"
|
||||||
)
|
)
|
||||||
|
@ -34,9 +35,9 @@ type MetricMapperCacheResult struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
type MetricMapperCache interface {
|
type MetricMapperCache interface {
|
||||||
Get(metricString string) (*MetricMapperCacheResult, bool)
|
Get(metricString string, metricType MetricType) (*MetricMapperCacheResult, bool)
|
||||||
AddMatch(metricString string, mapping *MetricMapping, labels prometheus.Labels)
|
AddMatch(metricString string, metricType MetricType, mapping *MetricMapping, labels prometheus.Labels)
|
||||||
AddMiss(metricString string)
|
AddMiss(metricString string, metricType MetricType)
|
||||||
}
|
}
|
||||||
|
|
||||||
type MetricMapperLRUCache struct {
|
type MetricMapperLRUCache struct {
|
||||||
|
@ -57,42 +58,46 @@ func NewMetricMapperCache(size int) (*MetricMapperLRUCache, error) {
|
||||||
return &MetricMapperLRUCache{cache: cache}, nil
|
return &MetricMapperLRUCache{cache: cache}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *MetricMapperLRUCache) Get(metricString string) (*MetricMapperCacheResult, bool) {
|
func (m *MetricMapperLRUCache) Get(metricString string, metricType MetricType) (*MetricMapperCacheResult, bool) {
|
||||||
if result, ok := m.cache.Get(metricString); ok {
|
if result, ok := m.cache.Get(formatKey(metricString, metricType)); ok {
|
||||||
return result.(*MetricMapperCacheResult), true
|
return result.(*MetricMapperCacheResult), true
|
||||||
} else {
|
} else {
|
||||||
return nil, false
|
return nil, false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *MetricMapperLRUCache) AddMatch(metricString string, mapping *MetricMapping, labels prometheus.Labels) {
|
func (m *MetricMapperLRUCache) AddMatch(metricString string, metricType MetricType, mapping *MetricMapping, labels prometheus.Labels) {
|
||||||
go m.trackCacheLength()
|
go m.trackCacheLength()
|
||||||
m.cache.Add(metricString, &MetricMapperCacheResult{Mapping: mapping, Matched: true, Labels: labels})
|
m.cache.Add(formatKey(metricString, metricType), &MetricMapperCacheResult{Mapping: mapping, Matched: true, Labels: labels})
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *MetricMapperLRUCache) AddMiss(metricString string) {
|
func (m *MetricMapperLRUCache) AddMiss(metricString string, metricType MetricType) {
|
||||||
go m.trackCacheLength()
|
go m.trackCacheLength()
|
||||||
m.cache.Add(metricString, &MetricMapperCacheResult{Matched: false})
|
m.cache.Add(formatKey(metricString, metricType), &MetricMapperCacheResult{Matched: false})
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *MetricMapperLRUCache) trackCacheLength() {
|
func (m *MetricMapperLRUCache) trackCacheLength() {
|
||||||
cacheLength.Set(float64(m.cache.Len()))
|
cacheLength.Set(float64(m.cache.Len()))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func formatKey(metricString string, metricType MetricType) string {
|
||||||
|
return fmt.Sprintf("%s.%s", string(metricType), metricString)
|
||||||
|
}
|
||||||
|
|
||||||
func NewMetricMapperNoopCache() *MetricMapperNoopCache {
|
func NewMetricMapperNoopCache() *MetricMapperNoopCache {
|
||||||
cacheLength.Set(0)
|
cacheLength.Set(0)
|
||||||
return &MetricMapperNoopCache{}
|
return &MetricMapperNoopCache{}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *MetricMapperNoopCache) Get(metricString string) (*MetricMapperCacheResult, bool) {
|
func (m *MetricMapperNoopCache) Get(metricString string, metricType MetricType) (*MetricMapperCacheResult, bool) {
|
||||||
return nil, false
|
return nil, false
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *MetricMapperNoopCache) AddMatch(metricString string, mapping *MetricMapping, labels prometheus.Labels) {
|
func (m *MetricMapperNoopCache) AddMatch(metricString string, metricType MetricType, mapping *MetricMapping, labels prometheus.Labels) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *MetricMapperNoopCache) AddMiss(metricString string) {
|
func (m *MetricMapperNoopCache) AddMiss(metricString string, metricType MetricType) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue