@@ -36,7 +36,6 @@ import okhttp3.logging.HttpLoggingInterceptor
36
36
import org.imgscalr.Scalr
37
37
import retrofit2.Retrofit
38
38
import retrofit2.converter.gson.GsonConverterFactory
39
- import java.io.IOException
40
39
import java.net.HttpURLConnection
41
40
import java.net.URL
42
41
import java.time.Instant
@@ -103,6 +102,11 @@ open class BaseCoderRestClient(
103
102
.build().create(CoderV2RestFacade ::class .java)
104
103
}
105
104
105
+ private fun <T > error (action : String , res : retrofit2.Response <T >): String {
106
+ val details = res.errorBody()?.charStream()?.use{ it.readText() } ? : " no details provided"
107
+ return " Unable to $action : url=$url , code=${res.code()} , details=$details "
108
+ }
109
+
106
110
/* *
107
111
* Authenticate and load information about the current user and the build
108
112
* version.
@@ -122,11 +126,7 @@ open class BaseCoderRestClient(
122
126
fun me (): User {
123
127
val userResponse = retroRestClient.me().execute()
124
128
if (! userResponse.isSuccessful) {
125
- throw AuthenticationResponseException (
126
- " Unable to authenticate to $url : code ${userResponse.code()} , ${
127
- userResponse.message().ifBlank { " has your token expired?" }
128
- } "
129
- )
129
+ throw AuthenticationResponseException (error(" authenticate" , userResponse))
130
130
}
131
131
132
132
return userResponse.body()!!
@@ -139,11 +139,7 @@ open class BaseCoderRestClient(
139
139
fun workspaces (): List <Workspace > {
140
140
val workspacesResponse = retroRestClient.workspaces(" owner:me" ).execute()
141
141
if (! workspacesResponse.isSuccessful) {
142
- throw WorkspaceResponseException (
143
- " Unable to retrieve workspaces from $url : code ${workspacesResponse.code()} , reason: ${
144
- workspacesResponse.message().ifBlank { " no reason provided" }
145
- } "
146
- )
142
+ throw WorkspaceResponseException (error(" retrieve workspaces" , workspacesResponse))
147
143
}
148
144
149
145
return workspacesResponse.body()!! .workspaces
@@ -169,31 +165,23 @@ open class BaseCoderRestClient(
169
165
fun resources (workspace : Workspace ): List <WorkspaceResource > {
170
166
val resourcesResponse = retroRestClient.templateVersionResources(workspace.latestBuild.templateVersionID).execute()
171
167
if (! resourcesResponse.isSuccessful) {
172
- throw WorkspaceResponseException (
173
- " Unable to retrieve template resources for ${workspace.name} from $url : code ${resourcesResponse.code()} , reason: ${
174
- resourcesResponse.message().ifBlank { " no reason provided" }
175
- } "
176
- )
168
+ throw WorkspaceResponseException (error(" retrieve resources for ${workspace.name} " , resourcesResponse))
177
169
}
178
170
return resourcesResponse.body()!!
179
171
}
180
172
181
173
fun buildInfo (): BuildInfo {
182
174
val buildInfoResponse = retroRestClient.buildInfo().execute()
183
175
if (! buildInfoResponse.isSuccessful) {
184
- throw java.lang.IllegalStateException (" Unable to retrieve build information for $url , code: ${ buildInfoResponse.code()} , reason: ${buildInfoResponse.message().ifBlank { " no reason provided " }} " )
176
+ throw java.lang.IllegalStateException (error( " retrieve build information" , buildInfoResponse) )
185
177
}
186
178
return buildInfoResponse.body()!!
187
179
}
188
180
189
181
private fun template (templateID : UUID ): Template {
190
182
val templateResponse = retroRestClient.template(templateID).execute()
191
183
if (! templateResponse.isSuccessful) {
192
- throw TemplateResponseException (
193
- " Unable to retrieve template with ID $templateID from $url , code: ${templateResponse.code()} , reason: ${
194
- templateResponse.message().ifBlank { " no reason provided" }
195
- } "
196
- )
184
+ throw TemplateResponseException (error(" retrieve template with ID $templateID " , templateResponse))
197
185
}
198
186
return templateResponse.body()!!
199
187
}
@@ -202,11 +190,7 @@ open class BaseCoderRestClient(
202
190
val buildRequest = CreateWorkspaceBuildRequest (null , WorkspaceTransition .START , null , null , null , null )
203
191
val buildResponse = retroRestClient.createWorkspaceBuild(workspaceID, buildRequest).execute()
204
192
if (buildResponse.code() != HttpURLConnection .HTTP_CREATED ) {
205
- throw WorkspaceResponseException (
206
- " Unable to build workspace $workspaceName on $url , code: ${buildResponse.code()} , reason: ${
207
- buildResponse.message().ifBlank { " no reason provided" }
208
- } "
209
- )
193
+ throw WorkspaceResponseException (error(" start workspace $workspaceName " , buildResponse))
210
194
}
211
195
212
196
return buildResponse.body()!!
@@ -216,11 +200,7 @@ open class BaseCoderRestClient(
216
200
val buildRequest = CreateWorkspaceBuildRequest (null , WorkspaceTransition .STOP , null , null , null , null )
217
201
val buildResponse = retroRestClient.createWorkspaceBuild(workspaceID, buildRequest).execute()
218
202
if (buildResponse.code() != HttpURLConnection .HTTP_CREATED ) {
219
- throw WorkspaceResponseException (
220
- " Unable to stop workspace $workspaceName on $url , code: ${buildResponse.code()} , reason: ${
221
- buildResponse.message().ifBlank { " no reason provided" }
222
- } "
223
- )
203
+ throw WorkspaceResponseException (error(" stop workspace $workspaceName " , buildResponse))
224
204
}
225
205
226
206
return buildResponse.body()!!
@@ -245,11 +225,7 @@ open class BaseCoderRestClient(
245
225
CreateWorkspaceBuildRequest (template.activeVersionID, WorkspaceTransition .START , null , null , null , null )
246
226
val buildResponse = retroRestClient.createWorkspaceBuild(workspaceID, buildRequest).execute()
247
227
if (buildResponse.code() != HttpURLConnection .HTTP_CREATED ) {
248
- throw WorkspaceResponseException (
249
- " Unable to update workspace $workspaceName on $url , code: ${buildResponse.code()} , reason: ${
250
- buildResponse.message().ifBlank { " no reason provided" }
251
- } "
252
- )
228
+ throw WorkspaceResponseException (error(" update workspace $workspaceName " , buildResponse))
253
229
}
254
230
255
231
return buildResponse.body()!!
0 commit comments