refactor: simplify configuration when enable metrics (#2408)
diff --git a/common/constant/default.go b/common/constant/default.go
index 8f5ca55..a27da2f 100644
--- a/common/constant/default.go
+++ b/common/constant/default.go
@@ -59,7 +59,7 @@
// DefaultServiceFilters defines default service filters, it is highly recommended
// that put the AdaptiveServiceProviderFilterKey at the end.
DefaultServiceFilters = EchoFilterKey + "," +
- MetricsFilterKey + "," + TokenFilterKey + "," + AccessLogFilterKey + "," + TpsLimitFilterKey + "," +
+ TokenFilterKey + "," + AccessLogFilterKey + "," + TpsLimitFilterKey + "," +
GenericServiceFilterKey + "," + ExecuteLimitFilterKey + "," + GracefulShutdownProviderFilterKey
DefaultReferenceFilters = GracefulShutdownConsumerFilterKey
diff --git a/config/reference_config.go b/config/reference_config.go
index 06797a8..64d7c53 100644
--- a/config/reference_config.go
+++ b/config/reference_config.go
@@ -74,6 +74,7 @@
TracingKey string `yaml:"tracing-key" json:"tracing-key,omitempty" propertiy:"tracing-key"`
rootConfig *RootConfig
metaDataType string
+ metricsEnable bool
MeshProviderPort int `yaml:"mesh-provider-port" json:"mesh-provider-port,omitempty" propertiy:"mesh-provider-port"`
}
@@ -118,6 +119,9 @@
if rc.TracingKey == "" {
rc.TracingKey = root.Consumer.TracingKey
}
+ if root.Metric.Enable != nil {
+ rc.metricsEnable = *root.Metric.Enable
+ }
if rc.Check == nil {
rc.Check = &root.Consumer.Check
}
@@ -355,6 +359,9 @@
if rc.Generic != "" {
defaultReferenceFilter = constant.GenericFilterKey + "," + defaultReferenceFilter
}
+ if rc.metricsEnable {
+ defaultReferenceFilter += fmt.Sprintf(",%s", constant.MetricsFilterKey)
+ }
urlMap.Set(constant.ReferenceFilterKey, mergeValue(rc.Filter, "", defaultReferenceFilter))
for _, v := range rc.Methods {
diff --git a/config/service_config.go b/config/service_config.go
index 976071a..1b0038e 100644
--- a/config/service_config.go
+++ b/config/service_config.go
@@ -82,6 +82,7 @@
RCRegistriesMap map[string]*RegistryConfig
ProxyFactoryKey string
adaptiveService bool
+ metricsEnable bool // whether append metrics filter to filter chain
unexported *atomic.Bool
exported *atomic.Bool
export bool // a flag to control whether the current service should export or not
@@ -144,6 +145,9 @@
if s.TracingKey == "" {
s.TracingKey = rc.Provider.TracingKey
}
+ if rc.Metric.Enable != nil {
+ s.metricsEnable = *rc.Metric.Enable
+ }
err := s.check()
if err != nil {
panic(err)
@@ -427,6 +431,9 @@
if s.adaptiveService {
filters += fmt.Sprintf(",%s", constant.AdaptiveServiceProviderFilterKey)
}
+ if s.metricsEnable {
+ filters += fmt.Sprintf(",%s", constant.MetricsFilterKey)
+ }
urlMap.Set(constant.ServiceFilterKey, filters)
// filter special config
diff --git a/config/service_config_test.go b/config/service_config_test.go
index da6b5af..4f5954a 100644
--- a/config/service_config_test.go
+++ b/config/service_config_test.go
@@ -114,7 +114,7 @@
values := serviceConfig.getUrlMap()
assert.Equal(t, values.Get("methods.Say.weight"), "0")
assert.Equal(t, values.Get("methods.Say.tps.limit.rate"), "")
- assert.Equal(t, values.Get(constant.ServiceFilterKey), "echo,metrics,token,accesslog,tps,generic_service,execute,pshutdown")
+ assert.Equal(t, values.Get(constant.ServiceFilterKey), "echo,token,accesslog,tps,generic_service,execute,pshutdown")
})
t.Run("Implement", func(t *testing.T) {