Skip to content

Commit

Permalink
add prety_json support. add json formatting. update test cert and key
Browse files Browse the repository at this point in the history
  • Loading branch information
bojand committed May 14, 2018
1 parent 220fecc commit c740cb9
Show file tree
Hide file tree
Showing 6 changed files with 84 additions and 65 deletions.
3 changes: 2 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -47,8 +47,9 @@ Options:
-o Output path. If none provided stdout is used.
-O Output type. If none provided, a summary is printed.
"json" outputs the metrics report in JSON format.
"csv" outputs the response metrics in comma-separated values format.
"json" outputs the metrics report in JSON format.
"pretty" outputs the metrics report in pretty JSON format.
-i Comma separated list of proto import paths. The current working directory and the directory
of the protocol buffer file are automatically added to the import list.
Expand Down
3 changes: 2 additions & 1 deletion cmd/grpcannon/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -78,8 +78,9 @@ Options:
-o Output path. If none provided stdout is used.
-O Output type. If none provided, a summary is printed.
"json" outputs the metrics report in JSON format.
"csv" outputs the response metrics in comma-separated values format.
"json" outputs the metrics report in JSON format.
"pretty" outputs the metrics report in pretty JSON format.
-i Comma separated list of proto import paths. The current working directory and the directory
of the protocol buffer file are automatically added to the import list.
Expand Down
13 changes: 12 additions & 1 deletion printer/printer.go
Original file line number Diff line number Diff line change
Expand Up @@ -42,12 +42,23 @@ func (rp *ReportPrinter) Print(format string) {
rp.printf(buf.String())

rp.printf("\n")
case "json":
case "json", "pretty":
rep, err := json.Marshal(*rp.Report)
if err != nil {
log.Println("error:", err.Error())
return
}

if format == "pretty" {
var out bytes.Buffer
err = json.Indent(&out, rep, "", " ")
if err != nil {
log.Println("error:", err.Error())
return
}
rep = out.Bytes()
}

rp.printf(string(rep))
}
}
Expand Down
47 changes: 26 additions & 21 deletions reporter.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,39 +23,44 @@ type Reporter struct {

// Report holds the data for the full test
type Report struct {
Count uint64
Total time.Duration
Average time.Duration
Fastest time.Duration
Slowest time.Duration
Rps float64

ErrorDist map[string]int
StatusCodeDist map[string]int

LatencyDistribution []LatencyDistribution
Histogram []Bucket
Details []ResultDetail
Count uint64 `json:"count"`
Total time.Duration `json:"total"`
Average time.Duration `json:"average"`
Fastest time.Duration `json:"fastest"`
Slowest time.Duration `json:"slowest"`
Rps float64 `json:"rps"`

ErrorDist map[string]int `json:"errorDistribution"`
StatusCodeDist map[string]int `json:"statusCodeDistribution"`

LatencyDistribution []LatencyDistribution `json:"latencyDistribution"`
Histogram []Bucket `json:"histogram"`
Details []ResultDetail `json:"details"`
}

// LatencyDistribution holds latency distribution data
type LatencyDistribution struct {
Percentage int
Latency time.Duration
Percentage int `json:"percentage"`
Latency time.Duration `json:"latency"`
}

// Bucket holds histogram data
type Bucket struct {
Mark float64 // The Mark for histogram bucket in seconds
Count int // The count in the bucket
Frequency float64 // The frequency of results in the bucket as a decimal percentage
// The Mark for histogram bucket in seconds
Mark float64 `json:"mark"`

// The count in the bucket
Count int `json:"count"`

// The frequency of results in the bucket as a decimal percentage
Frequency float64 `json:"frequency"`
}

// ResultDetail data for each result
type ResultDetail struct {
Latency time.Duration
Error string
Status string
Latency time.Duration `json:"latency"`
Error string `json:"error"`
Status string `json:"status"`
}

func newReporter(results chan *callResult, n int) *Reporter {
Expand Down
28 changes: 14 additions & 14 deletions testdata/localhost.crt
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
-----BEGIN CERTIFICATE-----
MIIC5TCCAc2gAwIBAgIJALLvqFlCiW3VMA0GCSqGSIb3DQEBCwUAMBQxEjAQBgNV
BAMMCWxvY2FsaG9zdDAeFw0xODA0MDcxNjU0MjRaFw0xODA1MDcxNjU0MjRaMBQx
MIIC5TCCAc2gAwIBAgIJAOgYWLSklwI4MA0GCSqGSIb3DQEBCwUAMBQxEjAQBgNV
BAMMCWxvY2FsaG9zdDAeFw0xODA1MTQxMjEwMThaFw0xOTA1MTQxMjEwMThaMBQx
EjAQBgNVBAMMCWxvY2FsaG9zdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
ggEBANzmciFhitqzmsHLHKCx/yMHFYOAXHBFnWras+NcW/5iDym1Oe1QgXn0y1cX
1b9cINcL5xHiNjI3iFW2/FPQ8TZ2OpFx3MA/HW0raOyZqofubfSiyQXJV2pi+5ps
jP/9/ogPlXuWjtmAsn923XhexKOLxDk3n5khgD74txrcOtX8VGPGnMHLDtUWCdiZ
wSKocWNqU2+rMw3fivuyzPKVx5uMB3FDjqIHTTyrLRSR8WtRZQaI+XsIXiYC31tV
nEnve2LoPRboNgdVDb7rXp/x2SUOQHN2menLy3P6kkUiAG787oxdxl2v0dcgPGWD
TWvrwbE2nckZ+wQlruVkQ5JQWH8CAwEAAaM6MDgwFAYDVR0RBA0wC4IJbG9jYWxo
ggEBAMRmo16RCgaqwwkR4Aq9XvKcphMPynXepPspYxt/Yt+d1mPLf1JuoZITD9Qg
Rm9FMqyt06qAAuMfkRuaL6C9GSDWz3cHAQgZHwODieYc6BMZh1Bq+3XI0cYamBYk
KRtfgrJVOYNJFQGvcbp0A8N5SXty8C05staUhIqErqwYiOxEd7gCTnHhWcczQAjJ
kRNhoxOnih7xQUbFmh0rIgmANA6UDvugWYwPKuV+hZtM80gYUz3hGGh5s1NWttNl
UtoTgdOrwUDmGJxi6CYFeikwvxA2MbSe94g3JpHEC01y8PAANyOtfUtdI5gHmzFP
ZEZQjq657phbJfa6aR6TBzBbQ8kCAwEAAaM6MDgwFAYDVR0RBA0wC4IJbG9jYWxo
b3N0MAsGA1UdDwQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDATANBgkqhkiG9w0B
AQsFAAOCAQEAO+9sIEkbZl5ssOgc027hYhhsUe+0FxQp5GxOshZMFvLlgDzJxMF2
UwLgNjJHaK8kkEtGSQy8Qg02vF+iuZMYGknGHyjCSOyriDhsynh7085cRPq91d+9
Rj2egomZYCQlOaWyqB7jA6pZM5JHBQOGPJttuASFZC8IdhNrI25Ki8JBibpT3DqK
BJP4PccK8gGT5yxtv7fYf3Tp4Spsiqk0yyRawAIKXCbIpSTY7MrjYJ9iqzTT7WiY
NXMRASmS7yTP4NK8Um1X6GP4+gAuh5UeNnYAGFCqqYznxrohoNbqEnp3E4Oqy/EQ
6qe8HePlE+oho7TecaZRvuLXcHMCVatJMA==
AQsFAAOCAQEAi06brp5sUGSN7EIz8isZ2wRrBXcMIrKOmzbTSNYNBb4B57/97RFY
Z4OA0WdCJHUhWJ89owPtikpVnS9NxJLdiZQrpsz8O6wWPS3+lbc5mVyfWLHMQhIB
V3MMhsI3qWpSXoN/xpjdzYsP4EzHbK5G1y5XX64TvfArogtCUIl+bIUt2N1jyH5+
IcAAmppW85HMpyMflYNUMKTmzOyOg/ZCJDbq/24QLzdjQPFoFyww+1PI9R+hNduk
rBmbUEsDlUlamwICW+o2hbm97fDxE9AyQOUSu2/+xu1m2rMXzwtzEy56qx0COuZv
peEgi2sajoxeie3HuziU4tUbRYqQWeriHA==
-----END CERTIFICATE-----
55 changes: 28 additions & 27 deletions testdata/localhost.key
Original file line number Diff line number Diff line change
@@ -1,27 +1,28 @@
-----BEGIN RSA PRIVATE KEY-----
MIIEpQIBAAKCAQEA3OZyIWGK2rOawcscoLH/IwcVg4BccEWdatqz41xb/mIPKbU5
7VCBefTLVxfVv1wg1wvnEeI2MjeIVbb8U9DxNnY6kXHcwD8dbSto7Jmqh+5t9KLJ
BclXamL7mmyM//3+iA+Ve5aO2YCyf3bdeF7Eo4vEOTefmSGAPvi3Gtw61fxUY8ac
wcsO1RYJ2JnBIqhxY2pTb6szDd+K+7LM8pXHm4wHcUOOogdNPKstFJHxa1FlBoj5
ewheJgLfW1WcSe97Yug9Fug2B1UNvuten/HZJQ5Ac3aZ6cvLc/qSRSIAbvzujF3G
Xa/R1yA8ZYNNa+vBsTadyRn7BCWu5WRDklBYfwIDAQABAoIBAQDMdjBlXVecnmk7
vrg8tQQmc8Qh94mYEZdm9A9U/oPXrQPD4w4+7ikprL8ZWeJqQOfUpBu4ndz0FhqG
29wp6FebxUronK9q8gBWr7tqY8FIGBSGPrY6OOZEfmHLyXWo7HvPjD0cK3sFLu4I
tQjBBVaU2iVBoI6EulFt99/jaLy8mhyqF6vvXKmDQ3/h4SavRK2NXWg8JxEL5UVk
53qLjy8e5bosbld9X6zMWAVpJnrMm6L20mPnx7Cd4aDwuRmW1HbeO6pmOWTbJYB/
EPNaXZ4fuVJ8Ge6s33+iYb9ig3PdDqXkktN/Mx9w6APOQy1nzTcQv5SGl8PE6DFy
vWMpVzahAoGBAPyvoyBy9Oozfrg1NEOB4CC2FauF/cVMBBffurzJbL9f/TCGm9B/
4vKzBgVzFdWX0fig9qUtopqGkS5qNOuCYV7D5iiiS6t9+C6ZeO4AtEyDyH08GBPe
Li1by2wP7jM2kCiklMl8thmILRwM4IB/x7v6jh7flkLF+vwnCr6bcnQFAoGBAN/M
F1+UowYYBhQeQHfnVK1Pre7Bc/pLtuFIPn4tnAw91VR33Mh3OcQ2Zs5TU4s+lJO8
ZtDGA4g2SHS3sKRJsuNmbeViJQLHCTG1b4a0ikV0QNdDzwpdDqaCmJSTFRXKIYFW
kmlL+RE8vMiSir8Z6S4VouLJqK3XYPGYjt9EGqWzAoGBAOKrF3UTShoQ6XqK14A7
L/eH/zZnMvbaMs3Lt3KEaZXeoHv4NCu7nLTD3QHkc9CvqP4UPkx7/GILlo6BXUlq
IrhkmMEYnTKQBKKgr3cokJQWnzGgR6UC6H9t2bPtMmskZfrfcEyyH5QVsQl5j6YV
efFpWDXfsaXifTvWNfA391qVAoGBAKYe8c6iH2zbkk+GsSYP0hwfxCUw9iz53NNW
9ARnSKkRkPP1US6AyaFrHF7VHXODzXfoZo1cHq0SVjBFVdptVltT4gleE8j/A0Uh
v5pHE0hA5gykKeAweTqCQE4w63rUIpDGOUHuAgCYjC16EYGO8zahGtqrBAmekThk
nND/1aPfAoGAMMCkYRHRwEoJBa4LoRg2kJw76s6MGeVQ1FhC5R1S1HQMm/ODP2ul
jlk+ZXM+r/rnQXCyVG8i/mAH44A1fiL/vDUiHDwOjQYLNz/dVH3fHbWA/sCf68tm
8Tuv6mGqQUSW13H9jIueY8RwKgIFPcGVCY9ThtXsf8WpQROPmiZSwbg=
-----END RSA PRIVATE KEY-----
-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDEZqNekQoGqsMJ
EeAKvV7ynKYTD8p13qT7KWMbf2LfndZjy39SbqGSEw/UIEZvRTKsrdOqgALjH5Eb
mi+gvRkg1s93BwEIGR8Dg4nmHOgTGYdQavt1yNHGGpgWJCkbX4KyVTmDSRUBr3G6
dAPDeUl7cvAtObLWlISKhK6sGIjsRHe4Ak5x4VnHM0AIyZETYaMTp4oe8UFGxZod
KyIJgDQOlA77oFmMDyrlfoWbTPNIGFM94RhoebNTVrbTZVLaE4HTq8FA5hicYugm
BXopML8QNjG0nveINyaRxAtNcvDwADcjrX1LXSOYB5sxT2RGUI6uue6YWyX2umke
kwcwW0PJAgMBAAECggEAZUCw+uD1dUh18mgXxBGrMJLX/73FWA0nqyDEKnn7BGQA
EkToaBwHCiLvpyHYjibzoBihpiYG1wcALWXJJio3GToFjUy8GGuzFIGtB0hh0O75
VtlAuJGGrIYrYEbWNnmADOZpFykHPm4vyLtk8VLHMnCoJ/i2HXBGAI+06Z5ggMVI
VkDsz/RwfzziVnIuu/V939FLXotmdnWVIYf/8ZvZiE0pUBpNAMPUCMxlu5YS/ylV
ILG1hi8k4zklufSXX8sVVG9HOM+lzcRWhG91hMcfZWTdvZ6yxOTGYMqc5ibFtLJK
Hv0/UiarUM9/eAaVTRnIXZxVvqMyAKu8QGs6pyehLQKBgQDmU9tW+ljB6V1Got6W
9ru1A6i8tmoo3s+uXO7BAFAAPAECq1LewiOo1VPDX5xAIJkDUP00BvianKhFl4yJ
xuPZTi8YZkCb2N2sec6NpzYglUhQQuQxS8fhH864RxRqZhf8rPY8l8ZdurOTbOM3
XgXA9W9OVaLynKrlW8pqyML2ewKBgQDaSrjjp4A5lRJ6kuXaibkjeiVnuGHW+xaO
wF8KJ6BNINDJlQUyBwlNRyJOdWWvLqW7fIyPMeDn1wbfWQfR+ZC1p+OSREjFopFJ
J1i5g3d+BkYLT3avgi7rNTMKU5Zzmbw7FyspVsej5r9qUsbMzA1zOPq1waXaJIRM
Nq76UyKdiwKBgQCKCowUrunvHdvnb8mUFMAfFthUccdiQ1eZGt2FEpjf6xZ38RIz
q4sPrvsKxwywalkKYcm/GsZ4c5duTgvOr0LzhCY5q17hiLIiosYmo6aPFKlIYS6+
VLqwtA2C6CbWNeX+a/MQEa6zkif6HXJ4RoOQSAiznCOS4E6UM9U29qfSbQKBgEK/
5pl2drck5mmk0bRpuLsodpeowgJC9TrhiC5Kv7HV/wIlF1mc3TNMNSlYrKdM1FDo
XPLMhcFe9zMEvmdusNlbZTMsvjPw6gw8g9z2Xmui73g17EzuufoiYmEd/juLHwvS
odgaOSHdRVr1xOSK4PIC0mcRt+1kjS/g6NCS61rRAoGAO9Eku+4GI7AH36Sllvaq
xmBFKp/ivUYi7+xU/cX1W54y7vbz1BmM8u5k3o+tdudcnT85/VQvklcRFfcxkOc9
qyCwsSd9TpwVvvCt3yd+L6n/FR2ha/I9wRKdphcBfOSpDOJeUZGI7s8bXiFEa2rf
CLm8Ltm3f3Vy+2FFoa1ejUc=
-----END PRIVATE KEY-----

0 comments on commit c740cb9

Please sign in to comment.