func()

in cmd/apmtool/sourcemap.go [33:92]


func (cmd *Commands) uploadSourcemapCommand(ctx context.Context, c *cli.Command) error {
	var data bytes.Buffer
	mw := multipart.NewWriter(&data)
	mw.WriteField("service_name", c.String("service-name"))
	mw.WriteField("service_version", c.String("service-version"))
	mw.WriteField("bundle_filepath", c.String("bundle-filepath"))
	sourcemapFileWriter, err := mw.CreateFormFile("sourcemap", "sourcemap.js.map")
	if err != nil {
		return err
	}
	if filename := c.String("file"); filename == "" {
		stat, err := os.Stdin.Stat()
		if err != nil {
			log.Fatalf("failed to stat stdin: %s", err.Error())
		}
		if stat.Size() == 0 {
			log.Fatal("empty -file flag and stdin, please set one.")
		}
		if _, err := io.Copy(sourcemapFileWriter, os.Stdin); err != nil {
			return err
		}
	} else {
		f, err := os.Open(filename)
		if err != nil {
			return fmt.Errorf("error opening file: %w", err)
		}
		if _, err := io.Copy(sourcemapFileWriter, f); err != nil {
			f.Close()
			return err
		}
		f.Close()
	}
	if err := mw.Close(); err != nil {
		return err
	}

	req, err := http.NewRequest(
		http.MethodPost,
		cmd.cfg.KibanaURL+"/api/apm/sourcemaps",
		bytes.NewReader(data.Bytes()),
	)
	if err != nil {
		return fmt.Errorf("error creating HTTP request: %w", err)
	}
	req.SetBasicAuth(cmd.cfg.Username, cmd.cfg.Password)
	req.Header.Set("Content-Type", mw.FormDataContentType())
	req.Header.Set("kbn-xsrf", "1")

	resp, err := http.DefaultClient.Do(req)
	if err != nil {
		return fmt.Errorf("error performing HTTP request: %w", err)
	}
	defer resp.Body.Close()
	io.Copy(os.Stderr, resp.Body)
	fmt.Fprintln(os.Stderr)
	if resp.StatusCode != http.StatusOK {
		return fmt.Errorf("error uploading sourcemap; server responded with %q", resp.Status)
	}
	return nil
}