From 4820cebd8b86455a0ca885df14dbadd4beeace08 Mon Sep 17 00:00:00 2001 From: Daulet Zhanguzin Date: Wed, 20 Nov 2024 17:35:33 -0800 Subject: [PATCH 1/4] chore: update deps --- charts.go | 14 ++++---- go.mod | 37 ++++++++++----------- go.sum | 97 +++++++++++++++++++++++++++---------------------------- 3 files changed, 73 insertions(+), 75 deletions(-) diff --git a/charts.go b/charts.go index bf383e3..58acb10 100644 --- a/charts.go +++ b/charts.go @@ -164,7 +164,7 @@ func (c *Charts) genViewTemplate(vid, route string) string { func (c *Charts) newBasicView(route string) *charts.Line { graph := charts.NewLine() graph.SetGlobalOptions( - charts.WithTooltipOpts(opts.Tooltip{Show: true, Trigger: "axis"}), + charts.WithTooltipOpts(opts.Tooltip{Show: opts.Bool(true), Trigger: "axis"}), charts.WithXAxisOpts(opts.XAxis{Name: "Time"}), charts.WithInitializationOpts(opts.Initialization{ Width: "700px", @@ -175,7 +175,7 @@ func (c *Charts) newBasicView(route string) *charts.Line { XAxisIndex: []int{0}, }), ) - graph.SetXAxis([]string{}).SetSeriesOptions(charts.WithLineChartOpts(opts.LineChart{Smooth: true})) + graph.SetXAxis([]string{}).SetSeriesOptions(charts.WithLineChartOpts(opts.LineChart{Smooth: opts.Bool(true)})) graph.AddJSFuncs(c.genViewTemplate(graph.ChartID, route)) return graph } @@ -184,8 +184,8 @@ func (c *Charts) newLatencyView() components.Charter { graph := c.newBasicView(latencyView) graph.SetGlobalOptions( charts.WithTitleOpts(opts.Title{Title: "Latency"}), - charts.WithYAxisOpts(opts.YAxis{Scale: true, AxisLabel: &opts.AxisLabel{Formatter: "{value} ms"}}), - charts.WithLegendOpts(opts.Legend{Show: true, Selected: map[string]bool{"Min": false, "Max": false}}), + charts.WithYAxisOpts(opts.YAxis{Scale: opts.Bool(true), AxisLabel: &opts.AxisLabel{Formatter: "{value} ms"}}), + charts.WithLegendOpts(opts.Legend{Show: opts.Bool(true), Selected: map[string]bool{"Min": false, "Max": false}}), ) graph.AddSeries("Min", []opts.LineData{}). AddSeries("Mean", []opts.LineData{}). @@ -197,7 +197,7 @@ func (c *Charts) newRPSView() components.Charter { graph := c.newBasicView(rpsView) graph.SetGlobalOptions( charts.WithTitleOpts(opts.Title{Title: "Reqs/sec"}), - charts.WithYAxisOpts(opts.YAxis{Scale: true}), + charts.WithYAxisOpts(opts.YAxis{Scale: opts.Bool(true)}), ) graph.AddSeries("RPS", []opts.LineData{}) return graph @@ -207,8 +207,8 @@ func (c *Charts) newCodeView() components.Charter { graph := c.newBasicView(codeView) graph.SetGlobalOptions( charts.WithTitleOpts(opts.Title{Title: "Response Status"}), - charts.WithYAxisOpts(opts.YAxis{Scale: true}), - charts.WithLegendOpts(opts.Legend{Show: true}), + charts.WithYAxisOpts(opts.YAxis{Scale: opts.Bool(true)}), + charts.WithLegendOpts(opts.Legend{Show: opts.Bool(true)}), ) graph.AddSeries("200", []opts.LineData{}) return graph diff --git a/go.mod b/go.mod index 1e1f756..2513446 100644 --- a/go.mod +++ b/go.mod @@ -1,31 +1,32 @@ module github.com/six-ddc/plow -go 1.18 +go 1.21 + +toolchain go1.23.0 require ( github.com/AdhityaRamadhanus/fasthttpcors v0.0.0-20170121111917-d4c07198763a github.com/beorn7/perks v1.0.1 - github.com/go-echarts/go-echarts/v2 v2.2.4 - github.com/mattn/go-isatty v0.0.19 - github.com/mattn/go-runewidth v0.0.13 - github.com/valyala/fasthttp v1.44.0 - go.uber.org/automaxprocs v1.5.1 - golang.org/x/time v0.0.0-20220411224347-583f2d630306 + github.com/go-echarts/go-echarts/v2 v2.4.5 + github.com/mattn/go-isatty v0.0.20 + github.com/mattn/go-runewidth v0.0.16 + github.com/valyala/fasthttp v1.57.0 + go.uber.org/automaxprocs v1.6.0 + golang.org/x/time v0.8.0 gopkg.in/alecthomas/kingpin.v3-unstable v3.0.0-20191105091915-95d230a53780 ) require ( - github.com/BurntSushi/toml v0.3.1 // indirect - github.com/alecthomas/units v0.0.0-20210208195552-ff826a37aa15 // indirect - github.com/andybalholm/brotli v1.0.4 // indirect - github.com/klauspost/compress v1.15.9 // indirect - github.com/nicksnyder/go-i18n v1.10.1 // indirect - github.com/pelletier/go-toml v1.2.0 // indirect - github.com/rivo/uniseg v0.2.0 // indirect + github.com/alecthomas/units v0.0.0-20240927000941-0f3dac36c52b // indirect + github.com/andybalholm/brotli v1.1.1 // indirect + github.com/klauspost/compress v1.17.11 // indirect + github.com/nicksnyder/go-i18n v1.10.3 // indirect + github.com/pelletier/go-toml v1.9.5 // indirect + github.com/rivo/uniseg v0.4.7 // indirect github.com/valyala/bytebufferpool v1.0.0 // indirect - golang.org/x/net v0.0.0-20220906165146-f3363e06e74c // indirect - golang.org/x/sys v0.6.0 // indirect - golang.org/x/text v0.3.7 // indirect - gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 // indirect + golang.org/x/net v0.31.0 // indirect + golang.org/x/sys v0.27.0 // indirect + golang.org/x/text v0.20.0 // indirect + gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect gopkg.in/yaml.v2 v2.4.0 // indirect ) diff --git a/go.sum b/go.sum index 7b0465f..e1a08ca 100644 --- a/go.sum +++ b/go.sum @@ -1,76 +1,73 @@ github.com/AdhityaRamadhanus/fasthttpcors v0.0.0-20170121111917-d4c07198763a h1:XVdatQFSP2YhJGjqLLIfW8QBk4loz/SCe/PxkXDiW+s= github.com/AdhityaRamadhanus/fasthttpcors v0.0.0-20170121111917-d4c07198763a/go.mod h1:C0A1KeiVHs+trY6gUTPhhGammbrZ30ZfXRW/nuT7HLw= -github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/alecthomas/units v0.0.0-20210208195552-ff826a37aa15 h1:AUNCr9CiJuwrRYS3XieqF+Z9B9gNxo/eANAJCF2eiN4= -github.com/alecthomas/units v0.0.0-20210208195552-ff826a37aa15/go.mod h1:OMCwj8VM1Kc9e19TLln2VL61YJF0x1XFtfdL4JdbSyE= -github.com/andybalholm/brotli v1.0.4 h1:V7DdXeJtZscaqfNuAdSRuRFzuiKlHSC/Zh3zl9qY3JY= -github.com/andybalholm/brotli v1.0.4/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= +github.com/alecthomas/units v0.0.0-20240927000941-0f3dac36c52b h1:mimo19zliBX/vSQ6PWWSL9lK8qwHozUj03+zLoEB8O0= +github.com/alecthomas/units v0.0.0-20240927000941-0f3dac36c52b/go.mod h1:fvzegU4vN3H1qMT+8wDmzjAcDONcgo2/SZ/TyfdUOFs= +github.com/andybalholm/brotli v1.1.1 h1:PR2pgnyFznKEugtsUo0xLdDop5SKXd5Qf5ysW+7XdTA= +github.com/andybalholm/brotli v1.1.1/go.mod h1:05ib4cKhjx3OQYUY22hTVd34Bc8upXjOLL2rKwwZBoA= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/go-echarts/go-echarts/v2 v2.2.4 h1:SKJpdyNIyD65XjbUZjzg6SwccTNXEgmh+PlaO23g2H0= -github.com/go-echarts/go-echarts/v2 v2.2.4/go.mod h1:6TOomEztzGDVDkOSCFBq3ed7xOYfbOqhaBzD0YV771A= -github.com/klauspost/compress v1.15.9 h1:wKRjX6JRtDdrE9qwa4b/Cip7ACOshUI4smpCQanqjSY= -github.com/klauspost/compress v1.15.9/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU= -github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/go-echarts/go-echarts/v2 v2.4.5 h1:gwDqxdi5x329sg+g2ws2OklreJ1K34FCimraInurzwk= +github.com/go-echarts/go-echarts/v2 v2.4.5/go.mod h1:56YlvzhW/a+du15f3S2qUGNDfKnFOeJSThBIrVFHDtI= +github.com/klauspost/compress v1.17.11 h1:In6xLpyWOi1+C7tXUUWv2ot1QvBjxevKAaI6IXrJmUc= +github.com/klauspost/compress v1.17.11/go.mod h1:pMDklpSncoRMuLFrf1W9Ss9KT+0rH90U12bZKk7uwG0= +github.com/kr/pretty v0.2.1 h1:Fmg33tUaq4/8ym9TJN1x7sLJnHVwhP33CNkpYV/7rwI= +github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA= -github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= -github.com/mattn/go-runewidth v0.0.13 h1:lTGmDsbAYt5DmK6OnoV7EuIF1wEIFAcxld6ypU4OSgU= -github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= -github.com/nicksnyder/go-i18n v1.10.1 h1:isfg77E/aCD7+0lD/D00ebR2MV5vgeQ276WYyDaCRQc= -github.com/nicksnyder/go-i18n v1.10.1/go.mod h1:e4Di5xjP9oTVrC6y3C7C0HoSYXjSbhh/dU0eUV32nB4= -github.com/pelletier/go-toml v1.2.0 h1:T5zMGML61Wp+FlcbWjRDT7yAxhJNAiPPLOFECq181zc= +github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= +github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc= +github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= +github.com/nicksnyder/go-i18n v1.10.3 h1:0U60fnLBNrLBVt8vb8Q67yKNs+gykbQuLsIkiesJL+w= +github.com/nicksnyder/go-i18n v1.10.3/go.mod h1:hvLG5HTlZ4UfSuVLSRuX7JRUomIaoKQM19hm6f+no7o= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= +github.com/pelletier/go-toml v1.9.5 h1:4yBQzkHv+7BHq2PQUZF3Mx0IYxG7LsP222s7Agd3ve8= +github.com/pelletier/go-toml v1.9.5/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/prashantv/gostub v1.1.0 h1:BTyx3RfQjRHnUWaGF9oQos79AlQ5k8WNktv7VGvVH4g= -github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY= +github.com/prashantv/gostub v1.1.0/go.mod h1:A5zLQHz7ieHGG7is6LLXLz7I8+3LZzsrV0P1IAHhP5U= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= +github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= +github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/stretchr/testify v1.6.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.1 h1:5TQK59W5E3v0r2duFAb7P95B6hEeOyEnHRa8MjYSMTY= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= +github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= -github.com/valyala/fasthttp v1.44.0 h1:R+gLUhldIsfg1HokMuQjdQ5bh9nuXHPIfvkYUu9eR5Q= -github.com/valyala/fasthttp v1.44.0/go.mod h1:f6VbjjoI3z1NDOZOv17o6RvtRSWxC77seBFc2uWtgiY= -github.com/valyala/tcplisten v1.0.0/go.mod h1:T0xQ8SeCZGxckz9qRXTfG43PvQ/mcWh7FwZEA7Ioqkc= -go.uber.org/automaxprocs v1.5.1 h1:e1YG66Lrk73dn4qhg8WFSvhF0JuFQF0ERIp4rpuV8Qk= -go.uber.org/automaxprocs v1.5.1/go.mod h1:BF4eumQw0P9GtnuxxovUd06vwm1o18oMzFtK66vU6XU= -golang.org/x/crypto v0.0.0-20220214200702-86341886e292/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20220906165146-f3363e06e74c h1:yKufUcDwucU5urd+50/Opbt4AYpqthk7wHpHok8f1lo= -golang.org/x/net v0.0.0-20220906165146-f3363e06e74c/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.6.0 h1:MVltZSvRTcU2ljQOhs94SXPftV6DCNnZViHeQps87pQ= +github.com/valyala/fasthttp v1.57.0 h1:Xw8SjWGEP/+wAAgyy5XTvgrWlOD1+TxbbvNADYCm1Tg= +github.com/valyala/fasthttp v1.57.0/go.mod h1:h6ZBaPRlzpZ6O3H5t2gEk1Qi33+TmLvfwgLLp0t9CpE= +github.com/xyproto/randomstring v1.0.5 h1:YtlWPoRdgMu3NZtP45drfy1GKoojuR7hmRcnhZqKjWU= +github.com/xyproto/randomstring v1.0.5/go.mod h1:rgmS5DeNXLivK7YprL0pY+lTuhNQW3iGxZ18UQApw/E= +go.uber.org/automaxprocs v1.6.0 h1:O3y2/QNTOdbF+e/dpXNNW7Rx2hZ4sTIPyybbxyNqTUs= +go.uber.org/automaxprocs v1.6.0/go.mod h1:ifeIMSnPZuznNm6jmdzmU3/bfk01Fe2fotchwEFJ8r8= +golang.org/x/net v0.31.0 h1:68CPQngjLL0r2AlUKiSxtQFKvzRVbnzLwMUn5SzcLHo= +golang.org/x/net v0.31.0/go.mod h1:P4fl1q7dY2hnZFxEk4pPSkDHF+QqjitcnDjUQyMM+pM= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= -golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/time v0.0.0-20220411224347-583f2d630306 h1:+gHMid33q6pen7kv9xvT+JRinntgeXO2AeZVd0AWD3w= -golang.org/x/time v0.0.0-20220411224347-583f2d630306/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= +golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= +golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= +golang.org/x/time v0.8.0 h1:9i3RxcPv3PZnitoVGMPDKZSq1xW1gK1Xy3ArNOGZfEg= +golang.org/x/time v0.8.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= gopkg.in/alecthomas/kingpin.v3-unstable v3.0.0-20191105091915-95d230a53780 h1:CEBpW6C191eozfEuWdUmIAHn7lwlLxJ7HVdr2e2Tsrw= gopkg.in/alecthomas/kingpin.v3-unstable v3.0.0-20191105091915-95d230a53780/go.mod h1:3HH7i1SgMqlzxCcBmUHW657sD4Kvv9sC3HpL3YukzwA= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= -gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= From 2957a32aff6ee1bfeaaed72eff79ba9642cfb3b0 Mon Sep 17 00:00:00 2001 From: Daulet Zhanguzin Date: Wed, 20 Nov 2024 17:51:12 -0800 Subject: [PATCH 2/4] fix: linter issues --- bench_server/main.go | 2 -- print.go | 7 ++++--- requester.go | 13 +++++++------ 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/bench_server/main.go b/bench_server/main.go index 6c7cd82..b4743ea 100644 --- a/bench_server/main.go +++ b/bench_server/main.go @@ -6,7 +6,6 @@ import ( "math/rand" "net/http" "strconv" - "time" "github.com/valyala/fasthttp" ) @@ -15,7 +14,6 @@ var serverPort = flag.Int("p", 8080, "port to use for benchmarks") func main() { flag.Parse() - rand.Seed(time.Now().UnixNano()) addr := "localhost:" + strconv.Itoa(*serverPort) log.Println("Starting HTTP server on:", addr) log.Fatalln(fasthttp.ListenAndServe(addr, func(c *fasthttp.RequestCtx) { diff --git a/print.go b/print.go index f53747c..4bad2db 100644 --- a/print.go +++ b/print.go @@ -4,8 +4,6 @@ import ( "bytes" "encoding/json" "fmt" - "github.com/mattn/go-isatty" - "github.com/mattn/go-runewidth" "math" "os" "regexp" @@ -13,6 +11,9 @@ import ( "strconv" "strings" "time" + + "github.com/mattn/go-isatty" + "github.com/mattn/go-runewidth" ) var ( @@ -192,7 +193,7 @@ func formatFloat64(f float64) string { return strconv.FormatFloat(f, 'f', -1, 64) } -func (p *Printer) formatJSONReports(writer *bytes.Buffer, snapshot *SnapshotReport, isFinal bool, useSeconds bool) { +func (p *Printer) formatJSONReports(writer *bytes.Buffer, snapshot *SnapshotReport, _ bool, useSeconds bool) { indent := 0 writer.WriteString("{\n") indent++ diff --git a/requester.go b/requester.go index c423afe..6790b93 100644 --- a/requester.go +++ b/requester.go @@ -4,11 +4,7 @@ import ( "context" "crypto/tls" "fmt" - "github.com/valyala/fasthttp" - "github.com/valyala/fasthttp/fasthttpproxy" - "go.uber.org/automaxprocs/maxprocs" - "golang.org/x/time/rate" - "io/ioutil" + "io" "net" url2 "net/url" "os" @@ -19,6 +15,11 @@ import ( "sync/atomic" "syscall" "time" + + "github.com/valyala/fasthttp" + "github.com/valyala/fasthttp/fasthttpproxy" + "go.uber.org/automaxprocs/maxprocs" + "golang.org/x/time/rate" ) var ( @@ -259,7 +260,7 @@ func (r *Requester) DoRequest(req *fasthttp.Request, resp *fasthttp.Response, rr rr.error = err.Error() return } - err = resp.BodyWriteTo(ioutil.Discard) + err = resp.BodyWriteTo(io.Discard) if err != nil { rr.cost = time.Since(startTime) - t1 rr.error = err.Error() From c49565ce52c73cd2d474f7b8cedec17d47bd12d1 Mon Sep 17 00:00:00 2001 From: Daulet Zhanguzin Date: Wed, 20 Nov 2024 18:07:29 -0800 Subject: [PATCH 3/4] feat: add support for outputting errors --- main.go | 13 ++++++++++++- report.go | 5 +++-- requester.go | 12 ++++++++++-- 3 files changed, 25 insertions(+), 5 deletions(-) diff --git a/main.go b/main.go index 2aced4a..fd0c6f2 100644 --- a/main.go +++ b/main.go @@ -2,6 +2,7 @@ package main import ( "fmt" + "io" "net" "net/http" _ "net/http/pprof" @@ -47,6 +48,7 @@ var ( autoOpenBrowser = kingpin.Flag("auto-open-browser", "Specify whether auto open browser to show web charts").Bool() clean = kingpin.Flag("clean", "Clean the histogram bar once its finished. Default is true").Default("true").NegatableBool() + outputErrors = kingpin.Flag("output-errors", "Output errors to file").String() summary = kingpin.Flag("summary", "Only print the summary without realtime reports").Default("false").Bool() pprofAddr = kingpin.Flag("pprof", "Enable pprof at special address").Hidden().String() url = kingpin.Arg("url", "Request url").Required().String() @@ -226,6 +228,15 @@ func main() { } } + errWriter := io.Discard + if *outputErrors != "" { + errWriter, err = os.Create(*outputErrors) + if err != nil { + errAndExit(err.Error()) + return + } + } + clientOpt := ClientOpt{ url: *url, method: *method, @@ -248,7 +259,7 @@ func main() { host: *host, } - requester, err := NewRequester(*concurrency, *requests, *duration, reqRate.Limit(), &clientOpt) + requester, err := NewRequester(*concurrency, *requests, *duration, reqRate.Limit(), errWriter, &clientOpt) if err != nil { errAndExit(err.Error()) return diff --git a/report.go b/report.go index 9ee5d4b..2f4d57b 100644 --- a/report.go +++ b/report.go @@ -1,11 +1,12 @@ package main import ( - "github.com/beorn7/perks/histogram" - "github.com/beorn7/perks/quantile" "math" "sync" "time" + + "github.com/beorn7/perks/histogram" + "github.com/beorn7/perks/quantile" ) var quantiles = []float64{0.50, 0.75, 0.90, 0.95, 0.99, 0.999, 0.9999} diff --git a/requester.go b/requester.go index 6790b93..e44dcb3 100644 --- a/requester.go +++ b/requester.go @@ -98,6 +98,7 @@ type Requester struct { clientOpt *ClientOpt httpClient *fasthttp.HostClient httpHeader *fasthttp.RequestHeader + errWriter io.Writer recordChan chan *ReportRecord closeOnce sync.Once @@ -131,7 +132,7 @@ type ClientOpt struct { host string } -func NewRequester(concurrency int, requests int64, duration time.Duration, reqRate *rate.Limit, clientOpt *ClientOpt) (*Requester, error) { +func NewRequester(concurrency int, requests int64, duration time.Duration, reqRate *rate.Limit, errWriter io.Writer, clientOpt *ClientOpt) (*Requester, error) { maxResult := concurrency * 100 if maxResult > 8192 { maxResult = 8192 @@ -141,6 +142,7 @@ func NewRequester(concurrency int, requests int64, duration time.Duration, reqRa reqRate: reqRate, requests: requests, duration: duration, + errWriter: errWriter, clientOpt: clientOpt, recordChan: make(chan *ReportRecord, maxResult), } @@ -260,7 +262,13 @@ func (r *Requester) DoRequest(req *fasthttp.Request, resp *fasthttp.Response, rr rr.error = err.Error() return } - err = resp.BodyWriteTo(io.Discard) + + writeTo := io.Discard + if resp.StatusCode() >= 500 { + writeTo = r.errWriter + _, _ = r.errWriter.Write([]byte(fmt.Sprintf("\n%d %s\n", resp.StatusCode(), rr.cost))) + } + err = resp.BodyWriteTo(writeTo) if err != nil { rr.cost = time.Since(startTime) - t1 rr.error = err.Error() From 38d665286e743d3d55b93f9193282ffac8d26970 Mon Sep 17 00:00:00 2001 From: Daulet Zhanguzin Date: Thu, 21 Nov 2024 16:16:22 -0800 Subject: [PATCH 4/4] feat: capture headers for error too --- requester.go | 1 + 1 file changed, 1 insertion(+) diff --git a/requester.go b/requester.go index e44dcb3..2660908 100644 --- a/requester.go +++ b/requester.go @@ -267,6 +267,7 @@ func (r *Requester) DoRequest(req *fasthttp.Request, resp *fasthttp.Response, rr if resp.StatusCode() >= 500 { writeTo = r.errWriter _, _ = r.errWriter.Write([]byte(fmt.Sprintf("\n%d %s\n", resp.StatusCode(), rr.cost))) + _, _ = r.errWriter.Write([]byte(fmt.Sprintf("%s", &resp.Header))) } err = resp.BodyWriteTo(writeTo) if err != nil {