@@ -136,6 +136,31 @@ function wsApiUrl(api, path) {
136
136
return wsLocalhost + studioHttpPort + api + path
137
137
}
138
138
139
+ /**
140
+ * Retry connecting to the Studio server until it is ready.
141
+ * @param {string } url - The URL to connect to.
142
+ * @param {number } retries - Number of retry attempts.
143
+ * @param {number } delay - Delay between retries in milliseconds.
144
+ * @returns {Promise } - Resolves when the connection is successful, rejects if it fails.
145
+ */
146
+ async function waitForServer ( url , retries = 5 , delay = 2000 ) {
147
+ for ( let attempt = 1 ; attempt <= retries ; attempt ++ ) {
148
+ try {
149
+ let response = await axios . get ( url )
150
+ if ( response . status === 200 ) {
151
+ return response // Server is ready
152
+ }
153
+ } catch ( err ) {
154
+ env . logWarning ( `Attempt ${ attempt } failed: ${ err . message } ` )
155
+ if ( attempt === retries ) {
156
+ throw new Error (
157
+ `Failed to connect to Studio server at ${ url } after ${ retries } attempts.`
158
+ )
159
+ }
160
+ }
161
+ await new Promise ( ( resolve ) => setTimeout ( resolve , delay ) ) // Wait before retrying
162
+ }
163
+ }
139
164
/**
140
165
* Send HTTP GET request to Studio Jetty server for project information.
141
166
* @param { } db
@@ -151,16 +176,14 @@ async function getProjectInfo(db, sessionId) {
151
176
if ( studioIntegration && ! isUserDisabled ) {
152
177
let path = restApiUrl ( StudioRestAPI . GetProjectInfo , project )
153
178
env . logDebug ( `StudioUC(${ name } ): GET: ${ path } ` )
154
- return axios
155
- . get ( path )
156
- . then ( ( resp ) => {
157
- env . logDebug ( `StudioUC(${ name } ): RESP: ${ resp . status } ` )
158
- return resp
159
- } )
160
- . catch ( ( err ) => {
161
- env . logWarning ( `StudioUC(${ name } ): ERR: ${ err . message } ` )
162
- return { data : [ ] }
163
- } )
179
+ try {
180
+ let response = await waitForServer ( path ) // Wait for the server to be ready
181
+ env . logDebug ( `StudioUC(${ name } ): RESP: ${ response . status } ` )
182
+ return response
183
+ } catch ( err ) {
184
+ env . logWarning ( `StudioUC(${ name } ): ERR: ${ err . message } ` )
185
+ return { data : [ ] }
186
+ }
164
187
} else {
165
188
if ( ! isUserDisabled )
166
189
env . logWarning ( `StudioUC(${ name } ): Studio integration is now enabled!` )
0 commit comments