Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 8b7c049

Browse files
committedOct 18, 2023
Add method to get agents even for off workspaces
1 parent 3719173 commit 8b7c049

File tree

3 files changed

+26
-3
lines changed

3 files changed

+26
-3
lines changed
 

‎src/main/kotlin/com/coder/gateway/sdk/CoderRestClientService.kt

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.coder.gateway.sdk
22

3+
import com.coder.gateway.models.WorkspaceAgentModel
34
import com.coder.gateway.sdk.convertors.InstantConverter
45
import com.coder.gateway.sdk.ex.AuthenticationResponseException
56
import com.coder.gateway.sdk.ex.TemplateResponseException
@@ -12,6 +13,7 @@ import com.coder.gateway.sdk.v2.models.User
1213
import com.coder.gateway.sdk.v2.models.Workspace
1314
import com.coder.gateway.sdk.v2.models.WorkspaceBuild
1415
import com.coder.gateway.sdk.v2.models.WorkspaceTransition
16+
import com.coder.gateway.sdk.v2.models.toAgentModels
1517
import com.google.gson.Gson
1618
import com.google.gson.GsonBuilder
1719
import com.intellij.ide.plugins.PluginManagerCore
@@ -105,6 +107,23 @@ class CoderRestClient(var url: URL, var token: String, var headerCommand: String
105107
return workspacesResponse.body()!!.workspaces
106108
}
107109

110+
/**
111+
* Retrieves agents for the specified workspaces. Since the workspaces
112+
* response does not include agents when the workspace is off, this fires
113+
* off separate queries to get the agents for each workspace, just like
114+
* `coder config-ssh` does (otherwise we risk removing hosts from the SSH
115+
* config when they are off).
116+
*/
117+
fun agents(workspaces: List<Workspace>): List<WorkspaceAgentModel> {
118+
return workspaces.flatMap {
119+
val resourcesResponse = retroRestClient.templateVersionResources(it.latestBuild.templateVersionID).execute()
120+
if (!resourcesResponse.isSuccessful) {
121+
throw WorkspaceResponseException("Unable to retrieve template resources for ${it.name} from $url: code ${resourcesResponse.code()}, reason: ${resourcesResponse.message().ifBlank { "no reason provided" }}")
122+
}
123+
it.toAgentModels(resourcesResponse.body()!!)
124+
}
125+
}
126+
108127
fun buildInfo(): BuildInfo {
109128
val buildInfoResponse = retroRestClient.buildInfo().execute()
110129
if (!buildInfoResponse.isSuccessful) {

‎src/main/kotlin/com/coder/gateway/sdk/v2/CoderV2RestFacade.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import com.coder.gateway.sdk.v2.models.CreateWorkspaceBuildRequest
55
import com.coder.gateway.sdk.v2.models.Template
66
import com.coder.gateway.sdk.v2.models.User
77
import com.coder.gateway.sdk.v2.models.WorkspaceBuild
8+
import com.coder.gateway.sdk.v2.models.WorkspaceResource
89
import com.coder.gateway.sdk.v2.models.WorkspacesResponse
910
import retrofit2.Call
1011
import retrofit2.http.Body
@@ -39,4 +40,7 @@ interface CoderV2RestFacade {
3940

4041
@GET("api/v2/templates/{templateID}")
4142
fun template(@Path("templateID") templateID: UUID): Call<Template>
42-
}
43+
44+
@GET("api/v2/templateversions/{templateID}/resources")
45+
fun templateVersionResources(@Path("templateID") templateID: UUID): Call<List<WorkspaceResource>>
46+
}

‎src/main/kotlin/com/coder/gateway/sdk/v2/models/Workspace.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,8 @@ data class Workspace(
3131
@SerializedName("last_used_at") val lastUsedAt: Instant,
3232
)
3333

34-
fun Workspace.toAgentModels(): Set<WorkspaceAgentModel> {
35-
val wam = this.latestBuild.resources.filter { it.agents != null }.flatMap { it.agents!! }.map { agent ->
34+
fun Workspace.toAgentModels(resources: List<WorkspaceResource> = this.latestBuild.resources): Set<WorkspaceAgentModel> {
35+
val wam = resources.filter { it.agents != null }.flatMap { it.agents!! }.map { agent ->
3636
val workspaceWithAgentName = "${this.name}.${agent.name}"
3737
val wm = WorkspaceAgentModel(
3838
this.id,

0 commit comments

Comments
 (0)
Please sign in to comment.