func()

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()

}