@@ -2,9 +2,8 @@ const fs = require('fs');
22const path = require ( 'path' ) ;
33const onHeaders = require ( 'on-headers' ) ;
44const validate = require ( './helpers/validate' ) ;
5- const gatherOsMetrics = require ( './helpers/gather-os-metrics' ) ;
6-
7- let io ;
5+ const onHeadersListener = require ( './helpers/on-headers-listener' ) ;
6+ const socketIoInit = require ( './helpers/socket-io-init' ) ;
87
98const middlewareWrapper = ( config ) => {
109 config = validate ( config ) ;
@@ -17,55 +16,13 @@ const middlewareWrapper = (config) => {
1716 . replace ( / { { style} } / g, fs . readFileSync ( path . join ( __dirname , '/style.css' ) ) ) ;
1817
1918 return ( req , res , next ) => {
20- if ( io === null || io === undefined ) {
21-
22- io = require ( 'socket.io' ) ( req . socket . server ) ;
23-
24- io . on ( 'connection' , ( socket ) => {
25- socket . emit ( 'start' , config . spans ) ;
26- socket . on ( 'change' , function ( ) {
27- socket . emit ( 'start' , config . spans ) ;
28- } ) ;
29- } ) ;
30-
31- config . spans . forEach ( ( span ) => {
32- span . os = [ ] ;
33- span . responses = [ ] ;
34- const interval = setInterval ( ( ) => gatherOsMetrics ( io , span ) , span . interval * 1000 ) ;
35- interval . unref ( ) ; // don't keep node.js process up
36- } ) ;
37- }
19+ socketIoInit ( req . socket . server , config . spans ) ;
3820
3921 const startTime = process . hrtime ( ) ;
4022 if ( req . path === config . path ) {
4123 res . send ( renderedHtml ) ;
4224 } else {
43- onHeaders ( res , ( ) => {
44- const diff = process . hrtime ( startTime ) ;
45- const responseTime = diff [ 0 ] * 1e3 + diff [ 1 ] * 1e-6 ;
46- const category = Math . floor ( res . statusCode / 100 ) ;
47-
48- config . spans . forEach ( ( span ) => {
49- const last = span . responses [ span . responses . length - 1 ] ;
50- if ( last !== undefined &&
51- last . timestamp / 1000 + span . interval > Date . now ( ) / 1000 ) {
52- last [ category ] ++ ;
53- last . count ++ ;
54- last . mean = last . mean + ( ( responseTime - last . mean ) / last . count ) ;
55- } else {
56- span . responses . push ( {
57- '2' : category === 2 ? 1 : 0 ,
58- '3' : category === 3 ? 1 : 0 ,
59- '4' : category === 4 ? 1 : 0 ,
60- '5' : category === 5 ? 1 : 0 ,
61- count : 1 ,
62- mean : responseTime ,
63- timestamp : Date . now ( )
64- } ) ;
65- }
66- } ) ;
67- } ) ;
68-
25+ onHeaders ( res , ( ) => { onHeadersListener ( res . statusCode , startTime , config . spans ) } ) ;
6926 next ( ) ;
7027 }
7128 } ;
0 commit comments