pretty print by default

master
Bel LaPointe 2019-04-09 08:26:28 -06:00
parent f782ff175c
commit 07502502ef
1 changed files with 35 additions and 2 deletions

37
main.go
View File

@ -4,6 +4,7 @@ import (
"bytes" "bytes"
"crypto/tls" "crypto/tls"
"crypto/x509" "crypto/x509"
"encoding/json"
"flag" "flag"
"fmt" "fmt"
"io" "io"
@ -16,12 +17,17 @@ import (
"gitlab-app.eng.qops.net/golang/jwt" "gitlab-app.eng.qops.net/golang/jwt"
) )
type LagReader struct {
lag time.Duration
src io.Reader
}
func main() { func main() {
var bodyRepeat int var bodyRepeat int
var path, host, method, body, headers, brandID, issuer string var path, host, method, body, headers, brandID, issuer string
var ca, cert, key, secret string var ca, cert, key, secret string
var needJWT, verbose bool var needJWT, verbose, jsonPP bool
var timeout time.Duration var timeout, lag time.Duration
flag.StringVar(&method, "method", "get", "method for request") 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(&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") 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(&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.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(&needJWT, "jwt", true, "need jwt boolean")
flag.BoolVar(&jsonPP, "jpp", true, "try json pretty print")
flag.BoolVar(&verbose, "v", false, "is verbose") flag.BoolVar(&verbose, "v", false, "is verbose")
flag.DurationVar(&timeout, "t", time.Second*10, "request timeout") 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(&ca, "ca", "", "ca for server")
flag.StringVar(&cert, "cert", "", "cert for client") flag.StringVar(&cert, "cert", "", "cert for client")
flag.StringVar(&key, "key", "", "key for client") flag.StringVar(&key, "key", "", "key for client")
@ -50,6 +58,7 @@ func main() {
} else { } else {
reqBody = os.Stdin reqBody = os.Stdin
} }
reqBody = NewLagReader(lag, reqBody)
req, err := http.NewRequest( req, err := http.NewRequest(
strings.ToUpper(method), strings.ToUpper(method),
host+"/"+strings.Trim(path, "/"), host+"/"+strings.Trim(path, "/"),
@ -58,6 +67,7 @@ func main() {
if err != nil { if err != nil {
panic(err) panic(err)
} }
req.Header.Add("Content-Type", "application/json")
if len(headers) > 0 { if len(headers) > 0 {
for _, pair := range strings.Split(headers, ",") { for _, pair := range strings.Split(headers, ",") {
kv := strings.Split(pair, "=") kv := strings.Split(pair, "=")
@ -84,6 +94,14 @@ func main() {
defer resp.Body.Close() defer resp.Body.Close()
fmt.Fprintf(os.Stderr, "(%d) ", resp.StatusCode) 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)) fmt.Printf("%s\n", bytes.TrimSpace(b))
} }
@ -135,3 +153,18 @@ func setJWT(r *http.Request, brandID string, issuer string, secret string) {
panic(err) 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)
}