@@ -82,7 +82,7 @@ func init() {
8282 log .Error (err )
8383 }
8484
85- rootCmd .PersistentFlags ().StringSliceVar (& conf .Application .MetricsFiles , "metricsFiles" , nil , "Metrics files, example: --metricsFiles ~/tmp/queries/m1.yaml --metricsFiles ~/tmp/queries/m2.yml" )
85+ rootCmd .PersistentFlags ().StringSliceVar (& conf .Application .MetricsFiles , "metricsFiles" , [] string { "metrics.yaml" } , "Metrics files, example: --metricsFiles ~/tmp/queries/m1.yaml --metricsFiles ~/tmp/queries/m2.yml" )
8686 if err := viper .BindPFlag ("application.metricsFiles" , rootCmd .PersistentFlags ().Lookup ("metricsFiles" )); err != nil {
8787 log .Error (err )
8888 }
@@ -218,6 +218,22 @@ func ReadAndValidateConfFromFiles() {
218218 }
219219}
220220
221+ // this will be used for every commands that needs conf in files
222+ func ReadAndValidateMetricsFromFiles () {
223+ // Read env vars equals as the mapstructure defined into the config.go
224+ viper .AutomaticEnv ()
225+ viper .SetEnvKeyReplacer (strings .NewReplacer ("." , "_" ))
226+
227+ loadFromMetricsFiles (& conf )
228+ validateMetricsQueries (& conf )
229+
230+ // expose all the configuration, just to check
231+ if conf .Server .Debug {
232+ log .Debug (conf .ToJSON ())
233+ // log.VersionInfo(conf.ToYAML())
234+ }
235+ }
236+
221237// Unmarshall Yaml files into c config structure
222238func loadFromConfigFiles (c * config.All ) {
223239 // Config files to be load
@@ -227,6 +243,12 @@ func loadFromConfigFiles(c *config.All) {
227243 }
228244
229245 for _ , file := range files {
246+
247+ if ! fileExists (file ) {
248+ log .Warnf ("The file %s doesn't exist, I will try to use configuration values from flags or ENV vars" , file )
249+ break
250+ }
251+
230252 log .Infof ("Reading configuration file: %s" , file )
231253
232254 // fileNameNoExt := strings.TrimSuffix(file, filepath.Ext(file))
@@ -263,17 +285,17 @@ func loadFromMetricsFiles(c *config.All) {
263285 metricsQueries := MergeMetricsFiles (c .Application .MetricsFiles )
264286
265287 if err := viper .MergeConfigMap (metricsQueries ); err != nil {
266- log .Errorf ("Error merging MetricsQueries read from files into config structure: %s" , err .Error ())
288+ log .Fatalf ("Error merging MetricsQueries read from files into config structure, check your metrics queries : %s" , err .Error ())
267289 }
268290
269291 if len (c .Application .MetricsFiles ) > 0 {
270- log .Debugf ("Filling configuration structure from file: %s" , c .Application .MetricsFiles )
292+ log .Debugf ("Filling configuration structure from metrics queries file: %s" , c .Application .MetricsFiles )
271293 err := viper .Unmarshal (& c )
272294 if err != nil {
273- log .Errorf ("Unable to unmarshal viper config into config struct, %s" , err .Error ())
295+ log .Fatalf ("Unable to unmarshal Metrics queries files into config struct, %s" , err .Error ())
274296 }
275297 } else {
276- log .Errorf ("Metrics configuration file: \" %v \" doesn 't exist" , c . Application . MetricsFiles )
298+ log .Fatal ("Metrics queries files don 't provided, you need to provide at least one to continue" )
277299 }
278300}
279301
@@ -282,8 +304,12 @@ func MergeMetricsFiles(files []string) map[string]interface{} {
282304 var resultValues map [string ]interface {}
283305 for _ , file := range files {
284306
307+ if ! fileExists (file ) {
308+ log .Fatalf ("The file %s does not exist, you need to provide valid metrics queries file" , file )
309+ }
310+
285311 fileExt := strings .ToLower (filepath .Ext (file )[1 :])
286- log .Infof ("Reading configuration file: %s" , file )
312+ log .Infof ("Reading metrics queries file: %s" , file )
287313 log .Debugf ("File type: %s" , fileExt )
288314
289315 var override map [string ]interface {}
@@ -328,3 +354,11 @@ func validateMetricsQueries(c *config.All) {
328354 log .Fatal ("Metrics Queries are empty, you need to defined at least one metric in metrics file" )
329355 }
330356}
357+
358+ func fileExists (filename string ) bool {
359+ info , err := os .Stat (filename )
360+ if os .IsNotExist (err ) {
361+ return false
362+ }
363+ return ! info .IsDir ()
364+ }
0 commit comments