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
}