diff --git a/main.go b/main.go index 283abf0..f9fdcc5 100644 --- a/main.go +++ b/main.go @@ -4,6 +4,7 @@ import ( "bytes" "crypto/tls" "crypto/x509" + "encoding/json" "flag" "fmt" "io" @@ -16,12 +17,17 @@ import ( "gitlab-app.eng.qops.net/golang/jwt" ) +type LagReader struct { + lag time.Duration + src io.Reader +} + func main() { var bodyRepeat int var path, host, method, body, headers, brandID, issuer string var ca, cert, key, secret string - var needJWT, verbose bool - var timeout time.Duration + var needJWT, verbose, jsonPP bool + var timeout, lag time.Duration flag.StringVar(&method, "method", "get", "method for request") flag.StringVar(&path, "path", "fieldsetdefinitions/v1/index/surveys/SV_031sm3MMOPSa8Tz/fieldsets?assumeHasPermission=true", "path for request") flag.StringVar(&host, "host", "data-platform.service.b1-prv.consul:8080", "host and port for request") @@ -31,8 +37,10 @@ func main() { flag.StringVar(&headers, "headers", "", "headers as k=v,k=v for request") flag.StringVar(&issuer, "issuer", "dataprocessing,responseengine,fieldset-definitions,qualtrics,objectstore,svs,monolith,ex,blixt,null,responseengine", "issuer for jwt") flag.BoolVar(&needJWT, "jwt", true, "need jwt boolean") + flag.BoolVar(&jsonPP, "jpp", true, "try json pretty print") flag.BoolVar(&verbose, "v", false, "is verbose") flag.DurationVar(&timeout, "t", time.Second*10, "request timeout") + flag.DurationVar(&lag, "lag", time.Second*0, "writing request lag after connecting") flag.StringVar(&ca, "ca", "", "ca for server") flag.StringVar(&cert, "cert", "", "cert for client") flag.StringVar(&key, "key", "", "key for client") @@ -50,6 +58,7 @@ func main() { } else { reqBody = os.Stdin } + reqBody = NewLagReader(lag, reqBody) req, err := http.NewRequest( strings.ToUpper(method), host+"/"+strings.Trim(path, "/"), @@ -58,6 +67,7 @@ func main() { if err != nil { panic(err) } + req.Header.Add("Content-Type", "application/json") if len(headers) > 0 { for _, pair := range strings.Split(headers, ",") { kv := strings.Split(pair, "=") @@ -84,6 +94,14 @@ func main() { defer resp.Body.Close() fmt.Fprintf(os.Stderr, "(%d) ", resp.StatusCode) + if jsonPP { + var v interface{} + if err := json.Unmarshal(b, &v); err == nil { + if c, err := json.MarshalIndent(v, "", " "); err == nil { + b = c + } + } + } fmt.Printf("%s\n", bytes.TrimSpace(b)) } @@ -135,3 +153,18 @@ func setJWT(r *http.Request, brandID string, issuer string, secret string) { panic(err) } } + +func NewLagReader(lag time.Duration, src io.Reader) *LagReader { + return &LagReader{ + lag: lag, + src: src, + } +} + +func (lr *LagReader) Read(p []byte) (n int, err error) { + if lr.lag > 0 { + <-time.After(lr.lag) + lr.lag = 0 + } + return lr.src.Read(p) +}