Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 5e30b60

Browse files
committed
impl: load ssh metrics from json
This commit contains the data class necessary to unmarshall the ssh network metrics and also the necessary moshi plumbing for converting the json file.
1 parent 8c2271c commit 5e30b60

File tree

2 files changed

+44
-1
lines changed

2 files changed

+44
-1
lines changed

src/main/kotlin/com/coder/toolbox/CoderRemoteEnvironment.kt

+11-1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import com.coder.toolbox.cli.SshCommandProcessHandle
66
import com.coder.toolbox.models.WorkspaceAndAgentStatus
77
import com.coder.toolbox.sdk.CoderRestClient
88
import com.coder.toolbox.sdk.ex.APIResponseException
9+
import com.coder.toolbox.sdk.v2.models.NetworkMetrics
910
import com.coder.toolbox.sdk.v2.models.Workspace
1011
import com.coder.toolbox.sdk.v2.models.WorkspaceAgent
1112
import com.coder.toolbox.util.waitForFalseWithTimeout
@@ -21,6 +22,7 @@ import com.jetbrains.toolbox.api.remoteDev.environments.EnvironmentContentsView
2122
import com.jetbrains.toolbox.api.remoteDev.states.EnvironmentDescription
2223
import com.jetbrains.toolbox.api.remoteDev.states.RemoteEnvironmentState
2324
import com.jetbrains.toolbox.api.ui.actions.ActionDescription
25+
import com.squareup.moshi.Moshi
2426
import kotlinx.coroutines.Job
2527
import kotlinx.coroutines.delay
2628
import kotlinx.coroutines.flow.MutableStateFlow
@@ -61,6 +63,7 @@ class CoderRemoteEnvironment(
6163

6264
override val actionsList: MutableStateFlow<List<ActionDescription>> = MutableStateFlow(getAvailableActions())
6365

66+
private val networkMetricsMarshaller = Moshi.Builder().build().adapter(NetworkMetrics::class.java)
6467
private val proxyCommandHandle = SshCommandProcessHandle(context)
6568
private var pollJob: Job? = null
6669

@@ -150,7 +153,6 @@ class CoderRemoteEnvironment(
150153
override fun beforeConnection() {
151154
context.logger.info("Connecting to $id...")
152155
isConnected.update { true }
153-
154156
pollJob = pollNetworkMetrics()
155157
}
156158

@@ -172,6 +174,14 @@ class CoderRemoteEnvironment(
172174
continue
173175
}
174176
context.logger.debug("Loading metrics from ${metricsFile.absolutePath} for $id")
177+
try {
178+
context.logger.debug("$id metrics: ${networkMetricsMarshaller.fromJson(metricsFile.readText())}")
179+
} catch (e: Exception) {
180+
context.logger.error(
181+
e,
182+
"Error encountered while trying to load network metrics from ${metricsFile.absolutePath} for $id"
183+
)
184+
}
175185
delay(POLL_INTERVAL)
176186
}
177187
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package com.coder.toolbox.sdk.v2.models
2+
3+
import com.squareup.moshi.Json
4+
import com.squareup.moshi.JsonClass
5+
6+
/**
7+
* Coder ssh network metrics. All properties are optional
8+
* because Coder Connect only populates `using_coder_connect`
9+
* while p2p doesn't populate this property.
10+
*/
11+
@JsonClass(generateAdapter = true)
12+
data class NetworkMetrics(
13+
@Json(name = "p2p")
14+
val p2p: Boolean?,
15+
16+
@Json(name = "latency")
17+
val latency: Double?,
18+
19+
@Json(name = "preferred_derp")
20+
val preferredDerp: String?,
21+
22+
@Json(name = "derp_latency")
23+
val derpLatency: Map<String, Double>?,
24+
25+
@Json(name = "upload_bytes_sec")
26+
val uploadBytesSec: Long?,
27+
28+
@Json(name = "download_bytes_sec")
29+
val downloadBytesSec: Long?,
30+
31+
@Json(name = "using_coder_connect")
32+
val usingCoderConnect: Boolean?
33+
)

0 commit comments

Comments
 (0)