From f026d8b81451e88deba009688ffab2ecbbf2727b Mon Sep 17 00:00:00 2001 From: Kyle Hagan Date: Fri, 10 Apr 2020 16:11:02 -0700 Subject: [PATCH] Add custom metrics for viper.Get calls --- viper.go | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/viper.go b/viper.go index 7b12b36..339c4f9 100644 --- a/viper.go +++ b/viper.go @@ -213,7 +213,8 @@ type Viper struct { // This will only be used if the configuration read is a properties file. properties *properties.Properties - onConfigChange func(fsnotify.Event) + onConfigChange func(fsnotify.Event) + onGetCallMetric func(key string, value interface{}) } // New returns an initialized Viper instance. @@ -537,6 +538,11 @@ func (v *Viper) AddSecureRemoteProvider(provider, endpoint, path, secretkeyring return nil } +func AddGetMetric(getCallMetric func(key string, val interface{})) { v.AddGetMetric(getCallMetric) } +func (v *Viper) AddGetMetric(getCallMetric func(key string, val interface{})) { + v.onGetCallMetric = getCallMetric +} + func (v *Viper) providerPathExists(p *defaultRemoteProvider) bool { for _, y := range v.remoteProviders { if reflect.DeepEqual(y, p) { @@ -726,6 +732,9 @@ func Get(key string) interface{} { return v.Get(key) } func (v *Viper) Get(key string) interface{} { lcaseKey := strings.ToLower(key) val := v.find(lcaseKey, true) + if v.onGetCallMetric != nil { + v.onGetCallMetric(key, val) + } if val == nil { return nil }