11"use strict" ;
2+ var __createBinding = ( this && this . __createBinding ) || ( Object . create ? ( function ( o , m , k , k2 ) {
3+ if ( k2 === undefined ) k2 = k ;
4+ Object . defineProperty ( o , k2 , { enumerable : true , get : function ( ) { return m [ k ] ; } } ) ;
5+ } ) : ( function ( o , m , k , k2 ) {
6+ if ( k2 === undefined ) k2 = k ;
7+ o [ k2 ] = m [ k ] ;
8+ } ) ) ;
9+ var __setModuleDefault = ( this && this . __setModuleDefault ) || ( Object . create ? ( function ( o , v ) {
10+ Object . defineProperty ( o , "default" , { enumerable : true , value : v } ) ;
11+ } ) : function ( o , v ) {
12+ o [ "default" ] = v ;
13+ } ) ;
14+ var __importStar = ( this && this . __importStar ) || function ( mod ) {
15+ if ( mod && mod . __esModule ) return mod ;
16+ var result = { } ;
17+ if ( mod != null ) for ( var k in mod ) if ( k !== "default" && Object . hasOwnProperty . call ( mod , k ) ) __createBinding ( result , mod , k ) ;
18+ __setModuleDefault ( result , mod ) ;
19+ return result ;
20+ } ;
221var __importDefault = ( this && this . __importDefault ) || function ( mod ) {
322 return ( mod && mod . __esModule ) ? mod : { "default" : mod } ;
423} ;
524Object . defineProperty ( exports , "__esModule" , { value : true } ) ;
25+ const node_libcurl_1 = require ( "node-libcurl" ) ;
626const websiteBenchTools_1 = __importDefault ( require ( "./websiteBenchTools" ) ) ;
27+ const qObj = __importStar ( require ( "q" ) ) ;
728class WebsiteBenchBrowser {
829 constructor ( browserObj , configObj , logObj ) {
930 this . toolsObj = new websiteBenchTools_1 . default ( ) ;
@@ -13,7 +34,7 @@ class WebsiteBenchBrowser {
1334 this . configObj = configObj ;
1435 this . logObj = logObj ;
1536 }
16- async processPage ( websiteEntry ) {
37+ async processPageWithBrowser ( websiteEntry ) {
1738 const webUrl = websiteEntry . siteUrl ;
1839 const reqTimeout = websiteEntry . checkInterval - 1 ;
1940 let perfData = null ;
@@ -87,6 +108,85 @@ class WebsiteBenchBrowser {
87108 } ;
88109 return perfData ;
89110 }
111+ async processPageWithCurl ( websiteEntry ) {
112+ return new Promise ( ( retFunc , rejFunc ) => {
113+ const webUrl = websiteEntry . siteUrl ;
114+ const reqTimeout = websiteEntry . checkInterval - 1 ;
115+ const promiseArray = [ ] ;
116+ let userAgent ;
117+ let perfData = null ;
118+ const perfDataTotal = {
119+ totalDurTime : 0 ,
120+ connectTime : 0 ,
121+ dnsTime : 0 ,
122+ ttfbTime : 0 ,
123+ preTransfer : 0 ,
124+ tlsHandshake : 0 ,
125+ statusCode : 0 ,
126+ statusCodes : [ ]
127+ } ;
128+ if ( this . configObj . userAgent ) {
129+ userAgent = this . configObj . userAgent ;
130+ }
131+ else {
132+ let browserUserAgent = node_libcurl_1 . Curl . defaultUserAgent ;
133+ userAgent = `${ browserUserAgent } websiteBench/${ this . configObj . versionNum } ` ;
134+ }
135+ for ( let runCount = 0 ; runCount < this . numOfRetries ; runCount ++ ) {
136+ this . logObj . debug ( `Starting performance data collection for ${ webUrl } (Run: ${ runCount } )...` ) ;
137+ const deferObj = qObj . defer ( ) ;
138+ const curlObj = new node_libcurl_1 . Curl ( ) ;
139+ curlObj . setOpt ( 'URL' , webUrl ) ;
140+ curlObj . setOpt ( 'TIMEOUT' , reqTimeout ) ;
141+ curlObj . setOpt ( 'USERAGENT' , userAgent ) ;
142+ curlObj . setOpt ( 'DNS_SHUFFLE_ADDRESSES' , true ) ;
143+ curlObj . setOpt ( 'SSL_VERIFYHOST' , this . configObj . ignoreSslErrors === true ? false : true ) ;
144+ curlObj . on ( 'end' , ( statusCode , resData , resHeader , curlInstance ) => {
145+ const tempPerf = {
146+ runNumber : runCount ,
147+ totalDurTime : curlInstance . getInfo ( 'TOTAL_TIME_T' ) / 1000 ,
148+ dnsTime : curlInstance . getInfo ( 'NAMELOOKUP_TIME_T' ) / 1000 ,
149+ tlsHandshake : curlInstance . getInfo ( 'APPCONNECT_TIME_T' ) / 1000 ,
150+ ttfbTime : curlInstance . getInfo ( 'STARTTRANSFER_TIME_T' ) / 1000 ,
151+ preTransfer : curlInstance . getInfo ( 'PRETRANSFER_TIME_T' ) / 1000 ,
152+ connectTime : curlInstance . getInfo ( 'CONNECT_TIME_T' ) / 1000 ,
153+ statusCode : statusCode
154+ } ;
155+ deferObj . resolve ( tempPerf ) ;
156+ curlInstance . close ( ) ;
157+ } ) ;
158+ curlObj . on ( 'error' , ( errorObj ) => {
159+ this . logObj . error ( `Unable to fetch page via cURL: ${ errorObj . message } ` ) ;
160+ this . logObj . debug ( `Completed performance data collection with error for ${ webUrl } (Run: ${ runCount } )...` ) ;
161+ } ) ;
162+ curlObj . perform ( ) ;
163+ promiseArray . push ( deferObj . promise ) ;
164+ }
165+ qObj . all ( promiseArray ) . then ( resPromise => {
166+ resPromise . forEach ( curlPromise => {
167+ perfDataTotal . totalDurTime += curlPromise . totalDurTime ;
168+ perfDataTotal . connectTime += curlPromise . connectTime ;
169+ perfDataTotal . dnsTime += curlPromise . dnsTime ;
170+ perfDataTotal . ttfbTime += curlPromise . ttfbTime ;
171+ perfDataTotal . tlsHandshake += curlPromise . tlsHandshake ;
172+ perfDataTotal . preTransfer += curlPromise . preTransfer ;
173+ perfDataTotal . statusCodes . push ( curlPromise . statusCode ) ;
174+ this . logObj . debug ( `Completed performance data collection for ${ webUrl } (Run: ${ curlPromise . runNumber } )...` ) ;
175+ } ) ;
176+ } ) . finally ( ( ) => {
177+ perfData = {
178+ totalDurTime : ( perfDataTotal . totalDurTime / this . numOfRetries ) ,
179+ connectTime : ( perfDataTotal . connectTime / this . numOfRetries ) ,
180+ dnsTime : ( perfDataTotal . dnsTime / this . numOfRetries ) ,
181+ ttfbTime : ( perfDataTotal . ttfbTime / this . numOfRetries ) ,
182+ tlsHandshake : ( perfDataTotal . tlsHandshake / this . numOfRetries ) ,
183+ preTransfer : ( perfDataTotal . preTransfer / this . numOfRetries ) ,
184+ } ;
185+ perfData . statusCodesString = perfDataTotal . statusCodes . join ( ':' ) ;
186+ retFunc ( perfData ) ;
187+ } ) ;
188+ } ) ;
189+ }
90190 async eventTriggered ( eventObj ) {
91191 if ( this . toolsObj . eventIsDialog ( eventObj ) ) {
92192 eventObj . dismiss ( ) ;
0 commit comments