in sample-apps/prometheus-sample-app/metrics/metrics_cli.go [187:256]
func (cli *CommandLine) Run() {
data, err := ioutil.ReadFile("config.yaml")
if err != nil {
log.Fatal(err)
}
var conf Config
if err := conf.Parse(data); err != nil {
log.Fatal(err)
}
generateCmd := flag.NewFlagSet("generate", flag.ExitOnError)
// Handling it without viper / cobra for now - still follows flags > configuration file > defaults
// defaults are set first
// config file is read - if there are valid values, config file overrides defaults
// flags will use config values as default values and override them with CLI input
usedType := defaultType
usedMetricsCount := defaultMetricsCount
usedLabelsCount := defaultLabelsCount
usedDataPointCount := defaultDataPointCount
usedFreq := defaultFreq
usedRand := defaultRand
usedAddress := defaultAddress
if conf.Type != "" {
usedType = conf.Type
}
if conf.MetricsCount > 0 {
usedMetricsCount = conf.MetricsCount
}
if conf.LabelsCount > 0 {
usedLabelsCount = conf.LabelsCount
}
if conf.DataPointCount > 0 {
usedDataPointCount = conf.DataPointCount
}
if conf.Frequency > 0 {
usedFreq = conf.Frequency
}
if conf.Random {
usedRand = conf.Random
}
if conf.Address != "" {
usedAddress = conf.Address
}
metricType := generateCmd.String("metric_type", usedType, "Type of metric (counter, gauge, histogram, summary)")
metricCount := generateCmd.Int("metric_count", usedMetricsCount, "Amount of metrics to create")
labelCount := generateCmd.Int("label_count", usedLabelsCount, "Amount of labels per metric to create")
dataPointCount := generateCmd.Int("datapoint_count", usedDataPointCount, "Number of data-points per metric to create")
metricFreq := generateCmd.Int("metric_frequency", usedFreq, "Refresh interval in seconds")
addressPtr := generateCmd.String("listen_address", usedAddress, "server listening address")
rand := generateCmd.Bool("is_random", usedRand, "Metrics specification")
if len(os.Args) > 1 {
err := generateCmd.Parse(os.Args[1:])
if err != nil {
log.Panic(err)
}
}
conf.Type = *metricType
conf.MetricsCount = *metricCount
conf.LabelsCount = *labelCount
conf.DataPointCount = *dataPointCount
conf.Frequency = *metricFreq
conf.Random = *rand
conf.Address = *addressPtr
conf.initConnection()
}