@@ -82,7 +82,7 @@ func init() {
82
82
log .Error (err )
83
83
}
84
84
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" )
86
86
if err := viper .BindPFlag ("application.metricsFiles" , rootCmd .PersistentFlags ().Lookup ("metricsFiles" )); err != nil {
87
87
log .Error (err )
88
88
}
@@ -218,6 +218,22 @@ func ReadAndValidateConfFromFiles() {
218
218
}
219
219
}
220
220
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
+
221
237
// Unmarshall Yaml files into c config structure
222
238
func loadFromConfigFiles (c * config.All ) {
223
239
// Config files to be load
@@ -227,6 +243,12 @@ func loadFromConfigFiles(c *config.All) {
227
243
}
228
244
229
245
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
+
230
252
log .Infof ("Reading configuration file: %s" , file )
231
253
232
254
// fileNameNoExt := strings.TrimSuffix(file, filepath.Ext(file))
@@ -263,17 +285,17 @@ func loadFromMetricsFiles(c *config.All) {
263
285
metricsQueries := MergeMetricsFiles (c .Application .MetricsFiles )
264
286
265
287
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 ())
267
289
}
268
290
269
291
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 )
271
293
err := viper .Unmarshal (& c )
272
294
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 ())
274
296
}
275
297
} 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" )
277
299
}
278
300
}
279
301
@@ -282,8 +304,12 @@ func MergeMetricsFiles(files []string) map[string]interface{} {
282
304
var resultValues map [string ]interface {}
283
305
for _ , file := range files {
284
306
307
+ if ! fileExists (file ) {
308
+ log .Fatalf ("The file %s does not exist, you need to provide valid metrics queries file" , file )
309
+ }
310
+
285
311
fileExt := strings .ToLower (filepath .Ext (file )[1 :])
286
- log .Infof ("Reading configuration file: %s" , file )
312
+ log .Infof ("Reading metrics queries file: %s" , file )
287
313
log .Debugf ("File type: %s" , fileExt )
288
314
289
315
var override map [string ]interface {}
@@ -328,3 +354,11 @@ func validateMetricsQueries(c *config.All) {
328
354
log .Fatal ("Metrics Queries are empty, you need to defined at least one metric in metrics file" )
329
355
}
330
356
}
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