prysm-pulse/tools/replay-http/main.go
Raul Jordan c1280867ed
Add Tracing Request Sink to E2E (#9341)
* add tracing request sink

* fix struct order

* add in base64 encode and gzip

* add encoding and gzip

* tracing sink and replay tool

* post

* replay

* include latest sink and replay tool

* capture the gzout file instead

* rem time sleep

* handle err

* better handling

* add documentation

* changes

* working sync

* working

* added more logging
2021-08-11 15:38:00 +00:00

79 lines
1.6 KiB
Go

/**
Tool for replaying http requests from a file of base64 encoded, line-delimited
Go http raw requests. Credits to https://gist.github.com/kasey/c9e663eae5baebbf8fbe548c2b1d961b.
*/
package main
import (
"bufio"
"bytes"
"encoding/base64"
"flag"
"io"
"net/http"
"net/url"
"os"
"path"
log "github.com/sirupsen/logrus"
)
var (
filePath = flag.String("file", "", "file of line-delimited, base64-encoded Go http requests")
endpoint = flag.String("endpoint", "http://localhost:14268/api/traces", "host:port endpoint to make HTTP requests to")
)
func main() {
flag.Parse()
if *filePath == "" {
log.Fatal("Must provide --file")
}
f, err := os.Open(path.Clean(*filePath))
if err != nil {
log.Fatal(err)
}
defer func() {
if err := f.Close(); err != nil {
log.WithError(err).Error("Could not close stdout file")
}
}()
lr := bufio.NewReader(f)
for {
line, err := lr.ReadBytes([]byte("\n")[0])
if err == io.EOF {
os.Exit(0)
}
if err != nil {
log.Fatal(err)
}
line = line[0 : len(line)-1]
decoded := make([]byte, base64.StdEncoding.DecodedLen(len(line)))
_, err = base64.StdEncoding.Decode(decoded, line)
if err != nil {
log.Fatal(err)
}
dbuf := bytes.NewBuffer(decoded)
req, err := http.ReadRequest(bufio.NewReader(dbuf))
if err != nil {
log.Fatal(err)
}
parsed, err := url.Parse(*endpoint)
if err != nil {
log.Fatal(err)
}
req.URL = parsed
req.RequestURI = ""
log.Println(req)
resp, err := http.DefaultClient.Do(req)
if err != nil {
log.Fatal(err)
}
respBuf := bytes.NewBuffer(nil)
if err := resp.Write(respBuf); err != nil {
log.Fatal(err)
}
log.Println(respBuf.String())
}
}