Skip to content

Commit 3a592ad

Browse files
authored
Merge pull request #2404 from digma-ai/add-error-for-docker-daemon-down
Add error for docker daemon down Closes #2040
2 parents 6b10341 + b9245c1 commit 3a592ad

File tree

1 file changed

+26
-9
lines changed

1 file changed

+26
-9
lines changed

ide-common/src/main/kotlin/org/digma/intellij/plugin/docker/DockerService.kt

Lines changed: 26 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package org.digma.intellij.plugin.docker
33
import com.intellij.execution.configurations.GeneralCommandLine
44
import com.intellij.execution.process.ProcessOutput
55
import com.intellij.execution.util.ExecUtil
6+
import com.intellij.icons.AllIcons
67
import com.intellij.openapi.application.ApplicationManager
78
import com.intellij.openapi.components.Service
89
import com.intellij.openapi.components.service
@@ -88,6 +89,8 @@ class DockerService {
8889
private fun isDockerDaemonDownExitValue(exitValue: String): Boolean {
8990
return exitValue.contains("Cannot connect to the Docker daemon", true) ||//mac, linux
9091
exitValue.contains("docker daemon is not running", true) || //win
92+
//this is an error on windows with docker desktop that will be solved by starting docker desktop
93+
(exitValue.contains("error during connect", true) && exitValue.contains("The system cannot find the file specified", true)) || //win
9194
exitValue.contains("Error while fetching server API version", true)
9295
}
9396

@@ -143,9 +146,10 @@ class DockerService {
143146

144147
var exitValue = engine.up(project, downloader.composeFile, dockerComposeCmd)
145148
if (exitValue != "0") {
149+
ActivityMonitor.getInstance(project).registerDigmaEngineEventError("installEngine", exitValue)
146150
Log.log(logger::warn, "error installing engine {}", exitValue)
147151
if (isDockerDaemonDownExitValue(exitValue)) {
148-
exitValue = doRetryFlowWhenDockerDaemonIsDown(project) {
152+
exitValue = doRetryFlowWhenDockerDaemonIsDown(project, exitValue) {
149153
engine.up(project, downloader.composeFile, dockerComposeCmd)
150154
}
151155
}
@@ -188,6 +192,7 @@ class DockerService {
188192
if (dockerComposeCmd != null) {
189193
val exitValue = engine.up(project, downloader.composeFile, dockerComposeCmd)
190194
if (exitValue != "0") {
195+
ActivityMonitor.getInstance(project).registerDigmaEngineEventError("upgradeEngine", exitValue)
191196
Log.log(logger::warn, "error upgrading engine {}", exitValue)
192197
}
193198
} else {
@@ -224,6 +229,7 @@ class DockerService {
224229

225230
val exitValue = engine.stop(project, downloader.composeFile, dockerComposeCmd)
226231
if (exitValue != "0") {
232+
ActivityMonitor.getInstance(project).registerDigmaEngineEventError("stopEngine", exitValue)
227233
Log.log(logger::warn, "error stopping engine {}", exitValue)
228234
}
229235
notifyResult(exitValue, resultTask)
@@ -272,9 +278,10 @@ class DockerService {
272278

273279
var exitValue = engine.start(project, downloader.composeFile, dockerComposeCmd)
274280
if (exitValue != "0") {
281+
ActivityMonitor.getInstance(project).registerDigmaEngineEventError("startEngine", exitValue)
275282
Log.log(logger::warn, "error starting engine {}", exitValue)
276283
if (isDockerDaemonDownExitValue(exitValue)) {
277-
exitValue = doRetryFlowWhenDockerDaemonIsDown(project) {
284+
exitValue = doRetryFlowWhenDockerDaemonIsDown(project, exitValue) {
278285
engine.start(project, downloader.composeFile, dockerComposeCmd)
279286
}
280287
}
@@ -321,6 +328,7 @@ class DockerService {
321328
if (dockerComposeCmd != null) {
322329
val exitValue = engine.remove(project, downloader.composeFile, dockerComposeCmd)
323330
if (exitValue != "0") {
331+
ActivityMonitor.getInstance(project).registerDigmaEngineEventError("removeEngine", exitValue)
324332
Log.log(logger::warn, "error uninstalling engine {}", exitValue)
325333
}
326334
notifyResult(exitValue, resultTask)
@@ -355,36 +363,45 @@ class DockerService {
355363
}
356364

357365

358-
private fun doRetryFlowWhenDockerDaemonIsDown(project: Project, runCommand: Supplier<String>): String {
366+
private fun doRetryFlowWhenDockerDaemonIsDown(project: Project, prevExitValue: String, runCommand: Supplier<String>): String {
359367

360368
val eventName = "docker-daemon-is-down"
361369

362-
ActivityMonitor.getInstance(project).registerDigmaEngineEventInfo(eventName)
370+
ActivityMonitor.getInstance(project).registerDigmaEngineEventInfo(eventName, mapOf("exitValue" to prevExitValue))
363371

372+
//try to start docker daemon, usually it will fail
364373
tryStartDockerDaemon(project)
365374

375+
//run the command again, maybe restart docker daemon succeeded
366376
var exitValue = runCommand.get()
367377

368378
if (isDockerDaemonDownExitValue(exitValue)) {
369379
var res = MessageConstants.YES
370380
ApplicationManager.getApplication().invokeAndWait {
371381
res = Messages.showYesNoDialog(
372382
project,
373-
"Please make sure the Docker daemon is running\n" +
383+
"It seems that docker daemon is not running.\n" +
384+
"Please make sure the Docker daemon is running by restarting the service or starting docker desktop app.\n" +
374385
"Once the Docker daemon is running, press the retry button.\n",
375-
"Digma Engine Failed to Run",
386+
"Digma Engine Failed to Start",
376387
"Retry",
377388
"Cancel",
378-
null
389+
AllIcons.General.Information
379390
)
380391
}
381392
if (res == MessageConstants.YES) {
382393
ActivityMonitor.getInstance(project).registerDigmaEngineEventInfo(eventName, mapOf("message" to "retry triggered by user"))
383394
exitValue = runCommand.get()
384395
if (isDockerDaemonDownExitValue(exitValue)) {
385-
ActivityMonitor.getInstance(project).registerDigmaEngineEventInfo(eventName, mapOf("message" to "restart daemon failed"))
396+
ActivityMonitor.getInstance(project)
397+
.registerDigmaEngineEventInfo(eventName, mapOf("message" to "restart daemon failed after user retry attempt"))
386398
ApplicationManager.getApplication().invokeAndWait {
387-
Messages.showMessageDialog(project, "Digma engine failed to run\nDocker daemon is down", "", null)
399+
Messages.showMessageDialog(
400+
project,
401+
"Digma engine failed to start\nDocker daemon is down",
402+
"Digma Engine Error",
403+
AllIcons.General.Error
404+
)
388405
}
389406
}
390407
} else {

0 commit comments

Comments
 (0)