Skip to content

Commit 3ea56b7

Browse files
committed
catch exceptions in settings changed
1 parent 78f7a0c commit 3ea56b7

File tree

4 files changed

+64
-33
lines changed

4 files changed

+64
-33
lines changed

ide-common/src/main/java/org/digma/intellij/plugin/analytics/AnalyticsService.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.fasterxml.jackson.databind.ObjectMapper;
44
import com.intellij.openapi.Disposable;
5+
import com.intellij.openapi.application.ApplicationManager;
56
import com.intellij.openapi.diagnostic.*;
67
import com.intellij.openapi.project.Project;
78
import com.intellij.ui.JBColor;
@@ -152,6 +153,8 @@ private synchronized void replaceClient(String url) {
152153

153154
BackendInfoHolder.getInstance().updateInBackground();
154155

156+
ApplicationManager.getApplication().getMessageBus().syncPublisher(ApiClientChangedEvent.getAPI_CLIENT_CHANGED_TOPIC()).apiClientChanged(url);
157+
155158
}
156159

157160

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package org.digma.intellij.plugin.analytics
2+
3+
import com.intellij.util.messages.Topic
4+
5+
6+
/**
7+
* this is an application event that should fire when we change the api client,
8+
* usually when user changes the api url in settings.
9+
*/
10+
interface ApiClientChangedEvent {
11+
companion object {
12+
@JvmStatic
13+
@Topic.AppLevel
14+
val API_CLIENT_CHANGED_TOPIC: Topic<ApiClientChangedEvent> = Topic.create(
15+
"API CLIENT CHANGED",
16+
ApiClientChangedEvent::class.java
17+
)
18+
}
19+
20+
fun apiClientChanged(newUrl: String)
21+
22+
}

ide-common/src/main/kotlin/org/digma/intellij/plugin/updates/AggressiveUpdateService.kt

Lines changed: 21 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import kotlinx.coroutines.isActive
1616
import kotlinx.coroutines.launch
1717
import org.apache.maven.artifact.versioning.ComparableVersion
1818
import org.digma.intellij.plugin.analytics.AnalyticsService
19+
import org.digma.intellij.plugin.analytics.ApiClientChangedEvent
1920
import org.digma.intellij.plugin.analytics.BackendConnectionEvent
2021
import org.digma.intellij.plugin.common.ExceptionUtils
2122
import org.digma.intellij.plugin.common.buildVersionRequest
@@ -29,7 +30,6 @@ import org.digma.intellij.plugin.model.rest.version.BackendDeploymentType
2930
import org.digma.intellij.plugin.model.rest.version.VersionResponse
3031
import org.digma.intellij.plugin.posthog.ActivityMonitor
3132
import org.digma.intellij.plugin.settings.InternalFileSettings
32-
import org.digma.intellij.plugin.settings.SettingsState
3333
import org.digma.intellij.plugin.updates.AggressiveUpdateService.Companion.getInstance
3434
import org.digma.intellij.plugin.updates.CurrentUpdateState.OK
3535
import org.digma.intellij.plugin.updates.CurrentUpdateState.UPDATE_BACKEND
@@ -112,27 +112,29 @@ class AggressiveUpdateService : Disposable {
112112
})
113113

114114

115-
SettingsState.getInstance().addChangeListener({
116-
117-
@Suppress("UnstableApiUsage")
118-
disposingScope().launch {
119-
try {
120-
//update state immediately after settings change. we are interested in api url change, but it will
121-
// do no harm to call it on any settings change
122-
updateState()
123-
} catch (c: CancellationException) {
124-
Log.debugWithException(logger, c, "settings change canceled {}", c)
125-
} catch (e: Throwable) {
126-
val message = ExceptionUtils.getNonEmptyMessage(e)
127-
Log.debugWithException(logger, e, "error in settings changed {}", message)
128-
errorReporter.reportError("${this::class.simpleName}.settingsChange", e)
115+
ApplicationManager.getApplication().messageBus.connect(this).subscribe(ApiClientChangedEvent.API_CLIENT_CHANGED_TOPIC, object :
116+
ApiClientChangedEvent {
117+
override fun apiClientChanged(newUrl: String) {
118+
@Suppress("UnstableApiUsage")
119+
disposingScope().launch {
120+
try {
121+
//update state immediately after settings change. we are interested in api url change, but it will
122+
// do no harm to call it on any settings change
123+
updateState()
124+
} catch (c: CancellationException) {
125+
Log.debugWithException(logger, c, "settings change canceled {}", c)
126+
} catch (e: Throwable) {
127+
val message = ExceptionUtils.getNonEmptyMessage(e)
128+
Log.debugWithException(logger, e, "error in settings changed {}", message)
129+
errorReporter.reportError("${this::class.simpleName}.settingsChange", e)
130+
}
131+
132+
//and call startMonitoring just in case it is stopped by a previous connectionLost but there was no connection gained
133+
startMonitoring()
129134
}
130-
131-
//and call startMonitoring just in case it is stopped by a previous connectionLost but there was no connection gained
132-
startMonitoring()
133135
}
134136

135-
}, this)
137+
})
136138

137139
} else {
138140
Log.log(logger::info, "not starting, disabled in internal settings")

ide-common/src/main/kotlin/org/digma/intellij/plugin/updates/UpdatesService.kt

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import kotlinx.coroutines.isActive
1313
import kotlinx.coroutines.launch
1414
import org.apache.maven.artifact.versioning.ComparableVersion
1515
import org.digma.intellij.plugin.analytics.AnalyticsService
16+
import org.digma.intellij.plugin.analytics.ApiClientChangedEvent
1617
import org.digma.intellij.plugin.analytics.BackendConnectionEvent
1718
import org.digma.intellij.plugin.common.EDT
1819
import org.digma.intellij.plugin.common.ExceptionUtils
@@ -25,7 +26,6 @@ import org.digma.intellij.plugin.model.rest.version.BackendDeploymentType
2526
import org.digma.intellij.plugin.model.rest.version.BackendVersionResponse
2627
import org.digma.intellij.plugin.model.rest.version.VersionResponse
2728
import org.digma.intellij.plugin.settings.InternalFileSettings
28-
import org.digma.intellij.plugin.settings.SettingsState
2929
import org.digma.intellij.plugin.ui.panels.DigmaResettablePanel
3030
import java.util.concurrent.TimeUnit
3131
import kotlin.time.Duration
@@ -107,22 +107,26 @@ class UpdatesService(private val project: Project) : Disposable {
107107
})
108108

109109

110-
SettingsState.getInstance().addChangeListener({
111-
@Suppress("UnstableApiUsage")
112-
disposingScope().launch {
113-
try {
114-
//update state immediately after settings change. we are interested in api url change, but it will
115-
// do no harm to call it on any settings change
116-
checkForNewerVersions()
117-
} catch (e: CancellationException) {
118-
Log.debugWithException(logger, e, "Exception in checkForNewerVersions")
119-
} catch (e: Throwable) {
120-
Log.debugWithException(logger, e, "Exception in checkForNewerVersions {}", ExceptionUtils.getNonEmptyMessage(e))
121-
ErrorReporter.getInstance().reportError("UpdatesService.settingsChanged", e)
110+
111+
ApplicationManager.getApplication().messageBus.connect(this)
112+
.subscribe(ApiClientChangedEvent.API_CLIENT_CHANGED_TOPIC, object : ApiClientChangedEvent {
113+
override fun apiClientChanged(newUrl: String) {
114+
@Suppress("UnstableApiUsage")
115+
disposingScope().launch {
116+
try {
117+
//update state immediately after settings change. we are interested in api url change, but it will
118+
// do no harm to call it on any settings change
119+
checkForNewerVersions()
120+
} catch (e: CancellationException) {
121+
Log.debugWithException(logger, e, "Exception in checkForNewerVersions")
122+
} catch (e: Throwable) {
123+
Log.debugWithException(logger, e, "Exception in checkForNewerVersions {}", ExceptionUtils.getNonEmptyMessage(e))
124+
ErrorReporter.getInstance().reportError("UpdatesService.settingsChanged", e)
125+
}
122126
}
123127
}
124128

125-
}, this)
129+
})
126130
}
127131

128132
override fun dispose() {

0 commit comments

Comments
 (0)