@@ -18,14 +18,14 @@ import {
1818// Change these options to increase the user goal or time to run the test.
1919export const options = getTestOptions (
2020 /* User goal */ 1000 ,
21- /* High load time minutes */ 15
21+ /* High load time minutes */ 4
2222) ;
2323
2424// Change this to test different code
2525const sourceToTest = helloWorld ;
2626// Set this to true to space out requests every REQUEST_TIME_MS milliseconds. Set to
2727// false to send as many requests as possible.
28- const SHOULD_SLEEP = true ;
28+ const SHOULD_SLEEP = false ;
2929
3030const exceptionCounter = new Counter ( "exceptions" ) ;
3131const errorCounter = new Counter ( "errors" ) ;
@@ -34,6 +34,9 @@ const totalSessionTime = new Trend("total_session_time", true);
3434const sessionsOver10Seconds = new Counter ( "session_over_10_seconds" ) ;
3535const sessionsOver15Seconds = new Counter ( "session_over_15_seconds" ) ;
3636const sessionsOver20Seconds = new Counter ( "session_over_20_seconds" ) ;
37+ const zeroRetries = new Counter ( "sessions_with_0_retries" ) ;
38+ const oneRetry = new Counter ( "sessions_with_1_retry" ) ;
39+ const twoRetries = new Counter ( "sessions_with_2_retries" ) ;
3740
3841
3942function isResultSuccess ( result ) {
@@ -53,20 +56,53 @@ export default function () {
5356 check ( uploadResult , { "upload status is 200" : ( r ) => isResultSuccess ( r ) } ) ;
5457
5558 if ( isResultSuccess ( uploadResult ) ) {
56- let res = null ;
57- try {
58- res = ws . connect ( WEBSOCKET_URL + authToken , WEBSOCKET_PARAMS , ( socket ) =>
59- onSocketConnect ( socket , requestStartTime , Date . now ( ) , sessionId )
60- ) ;
61- } catch ( error ) {
62- console . log ( `ERROR ${ error } for session id ${ sessionId } ` ) ;
63- }
59+ let res = connectToWebsocketWithRetry ( authToken , sessionId , requestStartTime ) ;
6460 check ( res , { "websocket status is 101" : ( r ) => r && r . status === 101 } ) ;
6561 } else {
6662 console . log ( `ERROR upload failed for session id ${ sessionId } ` ) ;
6763 }
6864}
6965
66+ function connectToWebsocketWithRetry ( authToken , sessionId , requestStartTime ) {
67+ let res = null ;
68+ let tries = 0 ;
69+ let shouldRetry = true ;
70+ while ( tries < 3 && shouldRetry ) {
71+ if ( tries > 0 ) {
72+ // before the first retry sleep for 1 second, before the second retry sleep for 2 seconds.
73+ console . log ( `RETRY ${ tries } for session id ${ sessionId } ` ) ;
74+ sleep ( 1 * tries ) ;
75+ }
76+ res = connectToWebsocket ( authToken , sessionId , requestStartTime ) ;
77+ if ( res != null ) {
78+ shouldRetry = false ;
79+ }
80+ tries ++ ;
81+ }
82+ if ( tries === 1 ) {
83+ zeroRetries . add ( 1 ) ;
84+ } else if ( tries === 2 ) {
85+ oneRetry . add ( 1 ) ;
86+ } else if ( tries === 3 ) {
87+ twoRetries . add ( 1 ) ;
88+ } else {
89+ console . log ( `Unexpected number of retries: ${ tries } ` ) ;
90+ }
91+ return res ;
92+ }
93+
94+ function connectToWebsocket ( authToken , sessionId , requestStartTime ) {
95+ let res = null ;
96+ try {
97+ res = ws . connect ( WEBSOCKET_URL + authToken , WEBSOCKET_PARAMS , ( socket ) =>
98+ onSocketConnect ( socket , requestStartTime , Date . now ( ) , sessionId )
99+ ) ;
100+ } catch ( error ) {
101+ console . log ( `ERROR ${ error } for session id ${ sessionId } ` ) ;
102+ }
103+ return res ;
104+ }
105+
70106function onSocketConnect ( socket , requestStartTime , websocketStartTime , sessionId ) {
71107 socket . on ( "open" , ( ) => {
72108 socket . setTimeout ( ( ) => {
0 commit comments