@@ -38,7 +38,13 @@ $(".close_link").click(function(event) {
3838
3939var alternate = false ;
4040
41- $ ( "ul.tabs" ) . tabs ( "div.panes > div" ) ;
41+ $ ( "ul.tabs" ) . tabs ( "div.panes > div" ) . on ( "onClick" , function ( event ) {
42+ if ( event . target == $ ( ".chart-tab-link" ) [ 0 ] ) {
43+ // trigger resizing of charts
44+ rpsChart . resize ( ) ;
45+ responseTimeChart . resize ( ) ;
46+ }
47+ } ) ;
4248
4349var stats_tpl = $ ( '#stats-template' ) ;
4450var errors_tpl = $ ( '#errors-template' ) ;
@@ -108,174 +114,9 @@ $(".stats_label").click(function(event) {
108114 $ ( '#errors tbody' ) . jqoteapp ( errors_tpl , ( report . errors ) . sort ( sortBy ( sortAttribute , desc ) ) ) ;
109115} ) ;
110116
111-
112- var charts = { }
113-
114- function initChart ( stat ) {
115- var width = $ ( ".main" ) . width ( ) ;
116- var rps_element = $ ( '<div class="chart"></div>' ) . css ( "width" , width ) ;
117- var avt_element = $ ( '<div class="chart"></div>' ) . css ( "width" , width ) ;
118- rps_element . appendTo ( "#charts .charts-container" ) ;
119- avt_element . appendTo ( "#charts .charts-container" ) ;
120-
121- var date = [ ] ;
122- var rps_data = [ ] ;
123- var avt_data = [ ] ;
124-
125- now = new Date ( ) . toLocaleTimeString ( ) ;
126- date . push ( now ) ;
127- rps_data . push ( {
128- "name" : now ,
129- "value" : Math . round ( stat . current_rps * 100 ) / 100
130- } ) ;
131-
132- avt_data . push ( {
133- "name" : now ,
134- "value" : Math . round ( stat . avg_response_time )
135- } ) ;
136-
137- var gridSettings = { x :60 , y :70 , x2 :40 , y2 :40 } ;
138-
139- var rps_chart = echarts . init ( rps_element . get ( 0 ) , 'vintage' ) ;
140- rps_chart . setOption ( {
141- title : {
142- text : 'Total Requests per Second' ,
143- x : 10 ,
144- y : 10 ,
145- } ,
146- tooltip : {
147- trigger : 'axis' ,
148- formatter : function ( params ) {
149- param = params [ 0 ] ;
150- return param . name + ': ' + param . value + ' reqs/s' ;
151- } ,
152- axisPointer : {
153- animation : true
154- }
155- } ,
156- xAxis : {
157- type : 'category' ,
158- splitLine : {
159- show : false
160- } ,
161- data : date
162- } ,
163- yAxis : {
164- type : 'value' ,
165- boundaryGap : [ 0 , '100%' ] ,
166- splitLine : {
167- show : false
168- }
169- } ,
170- series : [ {
171- name : 'RPS' ,
172- type : 'line' ,
173- showSymbol : false ,
174- hoverAnimation : false ,
175- data : rps_data
176- } ] ,
177- grid : gridSettings ,
178- } ) ;
179-
180- var avt_chart = echarts . init ( avt_element . get ( 0 ) , 'vintage' ) ;
181- avt_chart . setOption ( {
182- title : {
183- text : 'Average Response Time' ,
184- x : 10 ,
185- y : 10 ,
186- } ,
187- tooltip : {
188- trigger : 'axis' ,
189- formatter : function ( params ) {
190- param = params [ 0 ] ;
191- return param . name + ': ' + param . value + 'ms' ;
192- } ,
193- axisPointer : {
194- animation : true
195- }
196- } ,
197- xAxis : {
198- type : 'category' ,
199- splitLine : {
200- show : false
201- } ,
202- data : date
203- } ,
204- yAxis : {
205- type : 'value' ,
206- boundaryGap : [ 0 , '100%' ] ,
207- splitLine : {
208- show : false
209- }
210- } ,
211- series : [ {
212- name : 'AVT' ,
213- type : 'line' ,
214- showSymbol : false ,
215- hoverAnimation : false ,
216- data : avt_data
217- } ] ,
218- grid : gridSettings ,
219- } ) ;
220-
221- charts [ stat . name ] = { } ;
222- charts [ stat . name ] [ "date" ] = date ;
223- charts [ stat . name ] [ "rps_chart" ] = rps_chart ;
224- charts [ stat . name ] [ "rps_data" ] = rps_data ;
225- charts [ stat . name ] [ "avt_chart" ] = avt_chart ;
226- charts [ stat . name ] [ "avt_data" ] = avt_data ;
227-
228- }
229-
230- function updateCharts ( stats ) {
231- var rps_chart , rps_data , now , date , avt_chart , avt_data ;
232-
233- $ . each ( stats , function ( index , stat ) {
234- if ( stat . name != "Total" ) {
235- // Only render charts for the total data
236- return ;
237- }
238- if ( stat . name in charts ) {
239- now = new Date ( ) . toLocaleTimeString ( ) ;
240- date = charts [ stat . name ] [ "date" ] ;
241- date . push ( now ) ;
242-
243- rps_chart = charts [ stat . name ] [ "rps_chart" ] ;
244- rps_data = charts [ stat . name ] [ "rps_data" ] ;
245- rps_data . push ( {
246- "name" : now ,
247- "value" : Math . round ( stat . current_rps * 100 ) / 100
248- } ) ;
249- rps_chart . setOption ( {
250- xAxis : {
251- data : date
252- } ,
253- series : [ {
254- data : rps_data
255- } ]
256- } ) ;
257-
258- avt_chart = charts [ stat . name ] [ "avt_chart" ] ;
259- avt_data = charts [ stat . name ] [ "avt_data" ] ;
260- avt_data . push ( {
261- "name" : now ,
262- "value" : Math . round ( stat . avg_response_time )
263- } ) ;
264-
265- avt_chart . setOption ( {
266- xAxis : {
267- data : date
268- } ,
269- series : [ {
270- data : avt_data
271- } ]
272- } ) ;
273- } else {
274- initChart ( stat ) ;
275- }
276- } ) ;
277- }
278-
117+ // init charts
118+ var rpsChart = new LocustLineChart ( $ ( ".charts-container" ) , "Total Requests per Second" , "reqs/s" ) ;
119+ var responseTimeChart = new LocustLineChart ( $ ( ".charts-container" ) , "Average Response Time" , "ms" ) ;
279120
280121function updateStats ( ) {
281122 $ . get ( '/stats/requests' , function ( data ) {
@@ -302,7 +143,11 @@ function updateStats() {
302143 $ ( '#errors tbody' ) . jqoteapp ( errors_tpl , ( report . errors ) . sort ( sortBy ( sortAttribute , desc ) ) ) ;
303144
304145 if ( report . state !== "stopped" ) {
305- updateCharts ( sortedStats ) ;
146+ // get total stats row
147+ var total = report . stats [ report . stats . length - 1 ] ;
148+ // update charts
149+ rpsChart . addValue ( total . current_rps ) ;
150+ responseTimeChart . addValue ( total . avg_response_time ) ;
306151 }
307152
308153 setTimeout ( updateStats , 2000 ) ;
0 commit comments