diff --git a/src/stats/manager_impl.go b/src/stats/manager_impl.go index effad309..efe8aa07 100644 --- a/src/stats/manager_impl.go +++ b/src/stats/manager_impl.go @@ -5,6 +5,7 @@ import ( logger "github.com/sirupsen/logrus" "github.com/envoyproxy/ratelimit/src/settings" + "github.com/envoyproxy/ratelimit/src/utils" ) func NewStatManager(store gostats.Store, settings settings.Settings) *ManagerImpl { @@ -28,6 +29,7 @@ func (this *ManagerImpl) NewStats(key string) RateLimitStats { ret := RateLimitStats{} logger.Debugf("Creating stats for key: '%s'", key) ret.Key = key + key = utils.SanitizeStatName(key) ret.TotalHits = this.rlStatsScope.NewCounter(key + ".total_hits") ret.OverLimit = this.rlStatsScope.NewCounter(key + ".over_limit") ret.NearLimit = this.rlStatsScope.NewCounter(key + ".near_limit") diff --git a/src/utils/utilities.go b/src/utils/utilities.go index f9ecf856..48f7f7ca 100644 --- a/src/utils/utilities.go +++ b/src/utils/utilities.go @@ -61,3 +61,9 @@ func MaskCredentialsInUrl(url string) string { return strings.Join(urls, ",") } + +// Remove invalid characters from the stat name. +func SanitizeStatName(s string) string { + r := strings.NewReplacer(":", "_", "|", "_") + return r.Replace(s) +} diff --git a/test/mocks/stats/manager.go b/test/mocks/stats/manager.go index 14850ac6..dd9db246 100644 --- a/test/mocks/stats/manager.go +++ b/test/mocks/stats/manager.go @@ -5,6 +5,7 @@ import ( logger "github.com/sirupsen/logrus" "github.com/envoyproxy/ratelimit/src/stats" + "github.com/envoyproxy/ratelimit/src/utils" ) type MockStatManager struct { @@ -36,6 +37,7 @@ func (m *MockStatManager) NewStats(key string) stats.RateLimitStats { ret := stats.RateLimitStats{} logger.Debugf("outputing test gostats %s", key) ret.Key = key + key = utils.SanitizeStatName(key) ret.TotalHits = m.store.NewCounter(key + ".total_hits") ret.OverLimit = m.store.NewCounter(key + ".over_limit") ret.NearLimit = m.store.NewCounter(key + ".near_limit")