github.com/kamilsk/grafaman@v1.0.0-beta3.0.20201207211242-3e0d02dd84ce/internal/cnf/config.go (about)

     1  package cnf
     2  
     3  import (
     4  	"strings"
     5  	"time"
     6  
     7  	"github.com/kamilsk/grafaman/internal/model"
     8  )
     9  
    10  // A Config contains all necessary tool configuration.
    11  type Config struct {
    12  	App     string `mapstructure:"app"`
    13  	File    string `mapstructure:"-"`
    14  	Grafana struct {
    15  		URL       string        `mapstructure:"grafana"`
    16  		Dashboard string        `mapstructure:"dashboard"`
    17  		Timeout   time.Duration `mapstructure:"grafana_timeout"`
    18  	} `mapstructure:",squash"`
    19  	Graphite struct {
    20  		URL     string        `mapstructure:"graphite"`
    21  		Filter  string        `mapstructure:"filter"`
    22  		Prefix  string        `mapstructure:"metrics"`
    23  		Timeout time.Duration `mapstructure:"graphite_timeout"`
    24  	} `mapstructure:",squash"`
    25  	Debug struct {
    26  		Enabled bool   `mapstructure:"enabled"`
    27  		Host    string `mapstructure:"host"`
    28  		Level   int    `mapstructure:"level"`
    29  	} `mapstructure:"debug"`
    30  	Output struct {
    31  		Format string `mapstructure:"format"`
    32  	} `mapstructure:"output"`
    33  }
    34  
    35  // FilterQuery returns a Query to filter metrics.
    36  func (config *Config) FilterQuery() model.Query {
    37  	filter, prefix := config.Graphite.Filter, config.Graphite.Prefix
    38  	if filter == "" {
    39  		filter = "*"
    40  	}
    41  	if !strings.HasPrefix(filter, prefix) {
    42  		filter = prefix + "." + filter
    43  	}
    44  	return model.Query(filter)
    45  }