@@ -3,6 +3,7 @@ package org.digma.intellij.plugin.docker
33import com.intellij.execution.configurations.GeneralCommandLine
44import com.intellij.execution.process.ProcessOutput
55import com.intellij.execution.util.ExecUtil
6+ import com.intellij.icons.AllIcons
67import com.intellij.openapi.application.ApplicationManager
78import com.intellij.openapi.components.Service
89import 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\n Docker daemon is down" , " " , null )
399+ Messages .showMessageDialog(
400+ project,
401+ " Digma engine failed to start\n Docker daemon is down" ,
402+ " Digma Engine Error" ,
403+ AllIcons .General .Error
404+ )
388405 }
389406 }
390407 } else {
0 commit comments