func main()

in main.go [142:251]


func main() {
	var esConfig elasticsearchConfig
	flag.StringVar(&esConfig.host,
		"es", "",
		`Elasticsearch URL into which the benchmark data should be indexed, e.g. http://localhost:9200`,
	)
	flag.StringVar(&esConfig.index,
		"index", "gobench",
		"Elasticsearch index into which the benchmarks should be stored.",
	)
	flag.StringVar(&esConfig.user, "es-username", "",
		"Elasticsearch username used for authentication.",
	)
	flag.StringVar(&esConfig.pass, "es-password", "",
		"Elasticsearch password used for authentication.",
	)
	flag.Parse()

	tags := make(map[string]string)
	for _, field := range strings.Split(*tagsFlag, ",") {
		field = strings.TrimSpace(field)
		if field == "" {
			continue
		}
		i := strings.IndexRune(field, '=')
		if i == -1 {
			fmt.Fprintf(
				os.Stderr,
				"invalid key-value pair %q in -tags: missing '='\n",
				field,
			)
			os.Exit(2)
		}
		key, value := field[:i], field[i+1:]
		tags[strings.TrimSpace(key)] = strings.TrimSpace(value)
	}

	var output io.Writer
	var buf bytes.Buffer
	var esURL *url.URL
	if esConfig.host != "" {
		url, err := url.Parse(esConfig.host)
		if err != nil {
			fmt.Fprintf(os.Stderr, "invalid Elasticsearch URL %q: %s\n", esConfig.host, err)
			os.Exit(2)
		}
		esURL = url
		output = &buf
		if *verboseFlag {
			output = io.MultiWriter(output, os.Stdout)
		}
	} else {
		output = os.Stdout
	}
	encoder := json.NewEncoder(output)

	if esURL != nil {
		if err := createMapping(esConfig); err != nil {
			log.Fatalf("error creating/updating mapping: %s", err)
		}
	}

	var pkg, goos, goarch string
	timestamp := time.Now().UTC()
	scanner := bufio.NewScanner(os.Stdin)
	for scanner.Scan() {
		line := scanner.Text()
		switch {
		case strings.HasPrefix(line, "pkg:"):
			pkg = strings.TrimSpace(line[len("pkg:"):])
		case strings.HasPrefix(line, "goos:"):
			goos = strings.TrimSpace(line[len("goos:"):])
		case strings.HasPrefix(line, "goarch:"):
			goarch = strings.TrimSpace(line[len("goarch:"):])
		default:
			if b, err := parse.ParseLine(line); err == nil {
				result := benchmark{Benchmark: *b}
				result.extra = parseExtraMetrics(line)
				encodeIndexOp(
					encoder, result,
					pkg, goos, goarch,
					tags, timestamp,
					esConfig,
				)
			}
		}
	}
	if err := scanner.Err(); err != nil {
		log.Fatal(err)
	}
	if esURL == nil {
		// Encoded to stdout.
		return
	}

	bulkURL := *esURL
	bulkURL.Path += "/_bulk"
	req, err := http.NewRequest(http.MethodPost, bulkURL.String(), &buf)
	if esConfig.user != "" && esConfig.pass != "" {
		req.SetBasicAuth(esConfig.user, esConfig.pass)
	}
	req.Header.Set("Content-Type", "application/x-ndjson")
	resp, err := http.DefaultClient.Do(req)
	if err != nil {
		log.Fatalf("error executing bulk updates: %s", err)
	}
	if err := handleResponse(resp); err != nil {
		log.Fatalf("error executing bulk updates: %s", err)
	}
}