@@ -10,6 +10,7 @@ Chart.defaults.global.elements.line.borderWidth = 2;
1010var socket = io ( location . protocol + '//' + location . hostname + ':' + location . port ) ;
1111var defaultSpan = 0 ;
1212var spans = [ ] ;
13+ var statusCodesColors = [ '#75D701' , '#47b8e0' , '#ffc952' , '#E53A40' ] ;
1314
1415var defaultDataset = {
1516 label : '' ,
@@ -48,7 +49,7 @@ var createChart = function (ctx, dataset) {
4849 type : 'line' ,
4950 data : {
5051 labels : [ ] ,
51- datasets : dataset
52+ datasets : dataset ,
5253 } ,
5354 options : defaultOptions
5455 } ) ;
@@ -63,6 +64,7 @@ var memDataset = [Object.create(defaultDataset)];
6364var loadDataset = [ Object . create ( defaultDataset ) ] ;
6465var responseTimeDataset = [ Object . create ( defaultDataset ) ] ;
6566var rpsDataset = [ Object . create ( defaultDataset ) ] ;
67+ var statusCodesDataset = [ Object . create ( defaultDataset ) ] ;
6668
6769var cpuStat = document . getElementById ( 'cpuStat' ) ;
6870var memStat = document . getElementById ( 'memStat' ) ;
@@ -75,14 +77,32 @@ var memChartCtx = document.getElementById("memChart");
7577var loadChartCtx = document . getElementById ( "loadChart" ) ;
7678var responseTimeChartCtx = document . getElementById ( "responseTimeChart" ) ;
7779var rpsChartCtx = document . getElementById ( "rpsChart" ) ;
80+ var statusCodesChartCtx = document . getElementById ( "statusCodesChart" ) ;
7881
7982var cpuChart = createChart ( cpuChartCtx , cpuDataset ) ;
8083var memChart = createChart ( memChartCtx , memDataset ) ;
8184var loadChart = createChart ( loadChartCtx , loadDataset ) ;
8285var responseTimeChart = createChart ( responseTimeChartCtx , responseTimeDataset ) ;
8386var rpsChart = createChart ( rpsChartCtx , rpsDataset ) ;
87+ var statusCodesChart = new Chart ( statusCodesChartCtx , {
88+ type : 'line' ,
89+ data : {
90+ labels : [ ] ,
91+ datasets : [
92+ Object . create ( defaultDataset ) ,
93+ Object . create ( defaultDataset ) ,
94+ Object . create ( defaultDataset ) ,
95+ Object . create ( defaultDataset )
96+ ]
97+ } ,
98+ options : defaultOptions
99+ } ) ;
100+
101+ statusCodesChart . data . datasets . forEach ( function ( dataset , index ) {
102+ dataset . borderColor = statusCodesColors [ index ] ;
103+ } ) ;
84104
85- var charts = [ cpuChart , memChart , loadChart , responseTimeChart , rpsChart ] ;
105+ var charts = [ cpuChart , memChart , loadChart , responseTimeChart , rpsChart , statusCodesChart ] ;
86106
87107var onSpanChange = function ( e ) {
88108 e . target . classList . add ( 'active' ) ;
@@ -146,8 +166,16 @@ socket.on('start', function (data) {
146166 } ) ;
147167 responseTimeChart . data . labels = data [ defaultSpan ] . responses . map ( addTimestamp ) ;
148168
169+ for ( var i = 0 ; i < 4 ; i ++ ) {
170+ statusCodesChart . data . datasets [ i ] . data = data [ defaultSpan ] . responses . map ( function ( point ) {
171+ return point [ i + 2 ] ;
172+ } ) ;
173+ }
174+ statusCodesChart . data . labels = data [ defaultSpan ] . responses . map ( addTimestamp ) ;
175+
149176 if ( data [ defaultSpan ] . responses . length >= 2 ) {
150177 var deltaTime = lastResponseMetric . timestamp - data [ defaultSpan ] . responses [ data [ defaultSpan ] . responses . length - 2 ] . timestamp ;
178+ if ( deltaTime < 1 ) deltaTime = 1000 ;
151179 rpsStat . textContent = ( lastResponseMetric . count / deltaTime * 1000 ) . toFixed ( 2 ) ;
152180 rpsChart . data . datasets [ 0 ] . data = data [ defaultSpan ] . responses . map ( function ( point ) {
153181 return point . count / deltaTime * 1000 ;
@@ -181,6 +209,7 @@ socket.on('start', function (data) {
181209socket . on ( 'stats' , function ( data ) {
182210 if ( data . retention === spans [ defaultSpan ] . retention && data . interval === spans [ defaultSpan ] . interval ) {
183211 var os = data . os ;
212+ var responses = data . responses ;
184213
185214 cpuStat . textContent = '0.0%' ;
186215 if ( os ) {
@@ -203,8 +232,6 @@ socket.on('stats', function (data) {
203232 loadChart . data . labels . push ( os . timestamp ) ;
204233 }
205234
206- var responses = data . responses ;
207-
208235 responseTimeStat . textContent = '0.00ms' ;
209236 if ( responses ) {
210237 responseTimeStat . textContent = responses . mean . toFixed ( 2 ) + 'ms' ;
@@ -214,17 +241,27 @@ socket.on('stats', function (data) {
214241
215242 if ( responses ) {
216243 var deltaTime = responses . timestamp - rpsChart . data . labels [ rpsChart . data . labels . length - 1 ] ;
244+ if ( deltaTime < 1 ) deltaTime = 1000 ;
217245 rpsStat . textContent = ( responses . count / deltaTime * 1000 ) . toFixed ( 2 ) ;
218246 rpsChart . data . datasets [ 0 ] . data . push ( responses . count / deltaTime * 1000 ) ;
219247 rpsChart . data . labels . push ( responses . timestamp ) ;
220248 }
221249
250+ if ( responses ) {
251+ for ( var i = 0 ; i < 4 ; i ++ ) {
252+ statusCodesChart . data . datasets [ i ] . data . push ( data . responses [ i + 2 ] ) ;
253+ }
254+ statusCodesChart . data . labels . push ( data . responses . timestamp ) ;
255+ }
256+
222257 charts . forEach ( function ( chart ) {
223258 if ( spans [ defaultSpan ] . retention < chart . data . labels . length ) {
224- chart . data . datasets [ 0 ] . data . shift ( ) ;
259+ chart . data . datasets . forEach ( function ( dataset ) {
260+ dataset . data . shift ( ) ;
261+ } ) ;
262+
225263 chart . data . labels . shift ( ) ;
226264 }
227-
228265 chart . update ( ) ;
229266 } ) ;
230267 }
0 commit comments