Skip to content

Commit 78b6948

Browse files
committed
clear current env when deleting last env
1 parent 29ef654 commit 78b6948

File tree

10 files changed

+53
-27
lines changed

10 files changed

+53
-27
lines changed

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

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ void setCurrentById(@NotNull String envId, @Nullable Runnable taskToRunAfterChan
6767
try {
6868
Log.log(LOGGER::debug, "Setting current environment by id , old={},new={}", current, envId);
6969

70-
if (StringUtils.isEmpty(envId)) {
70+
if (StringUtils.isEmpty(envId) || StringUtils.isBlank(envId)) {
7171
Log.log(LOGGER::debug, "setCurrent was called with an empty environment {}", envId);
7272
return;
7373
}
@@ -174,12 +174,18 @@ private void updateCurrentEnv(@Nullable String preferred) {
174174
var oldEnv = current;
175175

176176
var optionalEnv = find(preferred);
177-
if (optionalEnv.isPresent()) {
178-
current = optionalEnv.get();
179-
} else if (current == null) {
180-
current = environments.isEmpty() ? null : environments.get(0);
181-
}
182-
177+
current = optionalEnv.orElseGet(() -> environments.isEmpty() ? null : environments.get(0));
178+
179+
//latestKnownEnvId is updated only if current is not null.
180+
//current will be null on connection lost, or when the last env was deleted. actually when the
181+
// environments list is empty, this code can't distinguish between these two cases.
182+
// so if current is null we keep latestKnownEnvId with its current value. if connection was
183+
// lost and gained it will help restore the current env. if the environments list was empty
184+
// because the last env was deleted then it will keep a value of the latest that actually
185+
// does not exist, but it will change on the first new environment.
186+
//the persistence is changed to null if current is null. on connection lost it will be set
187+
// back with value after connection gained. and if the last env was deleted it will be set
188+
// back with value when a new environment is added.
183189
if (current != null) {
184190
latestKnownEnvId = current.getId();
185191
PersistenceService.getInstance().setLatestSelectedEnvId(latestKnownEnvId);

ide-common/src/main/kotlin/org/digma/intellij/plugin/execution/RunConfigurationInstrumentationHandler.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,9 @@ interface RunConfigurationInstrumentationHandler {
1818

1919
/**
2020
* updates the configuration with instrumentation parameters.
21-
* returns the java tool options for reporting, or null, or error message.
21+
* returns the java tool options and otel resource attributes for reporting, or null.
2222
*/
23-
fun updateParameters(configuration: RunConfiguration, params: SimpleProgramParameters, runnerSettings: RunnerSettings?): String?
23+
fun updateParameters(configuration: RunConfiguration, params: SimpleProgramParameters, runnerSettings: RunnerSettings?): Pair<String, String>?
2424

2525
/**
2626
* returns a description for logging

ide-common/src/main/kotlin/org/digma/intellij/plugin/execution/RunConfigurationInstrumentationService.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,11 @@ interface RunConfigurationInstrumentationService {
1616

1717
/**
1818
* updates the configuration with instrumentation parameters.
19-
* returns the java tool options for reporting, or null if not handled.
19+
* returns the java tool options and otel resource attributes for reporting, or null if not handled.
2020
* the configuration may not be updated because we don't support everything. the service may decide not to instrument.
21-
* may return a string starting with DIGMA_INSTRUMENTATION_ERROR for reporting in case of error.
21+
* may return in place of java tool options a string starting with DIGMA_INSTRUMENTATION_ERROR for reporting in case of error.
2222
*/
23-
fun updateParameters(configuration: RunConfiguration, params: SimpleProgramParameters, runnerSettings: RunnerSettings?): String?
23+
fun updateParameters(configuration: RunConfiguration, params: SimpleProgramParameters, runnerSettings: RunnerSettings?): Pair<String, String>?
2424

2525
/**
2626
* returns a description for logging

ide-common/src/main/kotlin/org/digma/intellij/plugin/persistence/PersistenceService.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ class PersistenceService {
2323

2424
/**
2525
* Do not use this method to get the current environment.
26+
* It is used only for restoring the current env after restart or after connection lost/gained
2627
*/
2728
fun getLatestSelectedEnvId(): String? {
2829
return state.latestSelectedEnvId

ide-common/src/main/kotlin/org/digma/intellij/plugin/posthog/ActivityMonitor.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -515,6 +515,7 @@ class ActivityMonitor(private val project: Project) : Disposable {
515515
runConfigTypeName: String,
516516
description: String,
517517
javaToolOptions: String,
518+
resourceAttributes: String,
518519
observabilityEnabled: Boolean,
519520
connectedToBackend: Boolean
520521
) {
@@ -535,6 +536,8 @@ class ActivityMonitor(private val project: Project) : Disposable {
535536
details["java tool options"] = javaToolOptions
536537
}
537538

539+
details["otel resource attributes"] = resourceAttributes
540+
538541
capture(
539542
"instrumented run configuration",
540543
details

jvm-common/src/main/kotlin/org/digma/intellij/plugin/idea/execution/InstrumentationRunConfigurationExtension.kt

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -63,9 +63,11 @@ class InstrumentationRunConfigurationExtension : RunConfigurationExtension() {
6363
if (runConfigurationHandler == null) {
6464
reportUnknownConfigurationType(configuration)
6565
} else {
66-
val javaToolOptions = runConfigurationHandler.updateParameters(configuration, params, runnerSettings)
67-
if (javaToolOptions != null) {
68-
reportRunConfig(runConfigurationHandler, javaToolOptions, configuration, params)
66+
67+
//instrumentationParams contains the java tool options and otel resource attributes and is used for reporting only
68+
val instrumentationParams = runConfigurationHandler.updateParameters(configuration, params, runnerSettings)
69+
if (instrumentationParams != null) {
70+
reportRunConfig(runConfigurationHandler, instrumentationParams.first, instrumentationParams.second, configuration, params)
6971
} else {
7072
reportUnhandledConfiguration(runConfigurationHandler, configuration, params)
7173
}
@@ -80,6 +82,7 @@ class InstrumentationRunConfigurationExtension : RunConfigurationExtension() {
8082
private fun reportRunConfig(
8183
runConfigurationHandler: RunConfigurationInstrumentationHandler,
8284
javaToolOptions: String,
85+
resourceAttributes: String,
8386
configuration: RunConfiguration,
8487
params: SimpleProgramParameters
8588
) {
@@ -91,6 +94,7 @@ class InstrumentationRunConfigurationExtension : RunConfigurationExtension() {
9194
runConfigurationType.name,
9295
runConfigDescription,
9396
javaToolOptions,
97+
resourceAttributes,
9498
isObservabilityEnabled(),
9599
isConnectedToBackend(configuration.project)
96100
)

jvm-common/src/main/kotlin/org/digma/intellij/plugin/idea/execution/OtelResourceAttributesBuilder.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ open class OtelResourceAttributesBuilder(
2828
}
2929
}
3030

31-
if (!parametersExtractor.hasDigmaEnvironmentIdAttribute(configuration, params) &&
31+
if (!parametersExtractor.hasDigmaEnvironmentIdAttribute() &&
3232
isCentralized(configuration.project)
3333
) {
3434
withUserId()
@@ -59,8 +59,8 @@ open class OtelResourceAttributesBuilder(
5959

6060

6161
private fun needToAddDigmaEnvironmentAttribute(parametersExtractor: ParametersExtractor): Boolean {
62-
return !parametersExtractor.hasDigmaEnvironmentIdAttribute(configuration, params) &&
63-
!parametersExtractor.hasDigmaEnvironmentAttribute(configuration, params)
62+
return !parametersExtractor.hasDigmaEnvironmentIdAttribute() &&
63+
!parametersExtractor.hasDigmaEnvironmentAttribute()
6464
}
6565

6666

jvm-common/src/main/kotlin/org/digma/intellij/plugin/idea/execution/ParametersExtractor.kt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ open class ParametersExtractor(protected val configuration: RunConfiguration, pr
2020
)
2121
}
2222

23-
open fun extractOtelServiceNameFromExternalSystem(configuration: RunConfiguration): String? {
23+
private fun extractOtelServiceNameFromExternalSystem(configuration: RunConfiguration): String? {
2424

2525
return if (configuration is ExternalSystemRunConfiguration) {
2626
configuration.settings.env[OTEL_SERVICE_NAME_ENV_VAR_NAME]
@@ -34,19 +34,19 @@ open class ParametersExtractor(protected val configuration: RunConfiguration, pr
3434
}
3535
}
3636

37-
open fun extractOtelServiceNameFromVmOptions(params: SimpleProgramParameters): String? {
37+
private fun extractOtelServiceNameFromVmOptions(params: SimpleProgramParameters): String? {
3838
if (params is SimpleJavaParameters) {
3939
return params.vmParametersList?.getPropertyValue(OTEL_SERVICE_NAME_PROP_NAME)
4040
}
4141
return null
4242
}
4343

44-
open fun extractOtelServiceNameFromParamsEnv(params: SimpleProgramParameters): String? {
44+
private fun extractOtelServiceNameFromParamsEnv(params: SimpleProgramParameters): String? {
4545
return params.env[OTEL_SERVICE_NAME_ENV_VAR_NAME]
4646
}
4747

4848

49-
open fun hasDigmaEnvironmentIdAttribute(configuration: RunConfiguration, params: SimpleProgramParameters): Boolean {
49+
open fun hasDigmaEnvironmentIdAttribute(): Boolean {
5050
if (configuration is ExternalSystemRunConfiguration &&
5151
configuration.settings.env[OTEL_RESOURCE_ATTRIBUTES]?.contains("$DIGMA_ENVIRONMENT_ID_RESOURCE_ATTRIBUTE=") == true
5252
) {
@@ -56,7 +56,7 @@ open class ParametersExtractor(protected val configuration: RunConfiguration, pr
5656
return params.env[OTEL_RESOURCE_ATTRIBUTES]?.contains("$DIGMA_ENVIRONMENT_ID_RESOURCE_ATTRIBUTE=") ?: false
5757
}
5858

59-
open fun hasDigmaEnvironmentAttribute(configuration: RunConfiguration, params: SimpleProgramParameters): Boolean {
59+
open fun hasDigmaEnvironmentAttribute(): Boolean {
6060
if (configuration is ExternalSystemRunConfiguration &&
6161
configuration.settings.env[OTEL_RESOURCE_ATTRIBUTES]?.contains("$DIGMA_ENVIRONMENT_RESOURCE_ATTRIBUTE=") == true
6262
) {

jvm-common/src/main/kotlin/org/digma/intellij/plugin/idea/execution/handlers/BaseRunConfigurationInstrumentationHandler.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,11 @@ abstract class BaseRunConfigurationInstrumentationHandler : RunConfigurationInst
1717
return getService()?.isApplicableFor(configuration) ?: false
1818
}
1919

20-
override fun updateParameters(configuration: RunConfiguration, params: SimpleProgramParameters, runnerSettings: RunnerSettings?): String? {
20+
override fun updateParameters(
21+
configuration: RunConfiguration,
22+
params: SimpleProgramParameters,
23+
runnerSettings: RunnerSettings?
24+
): Pair<String, String>? {
2125
return getService()?.updateParameters(configuration, params, runnerSettings)
2226
}
2327

jvm-common/src/main/kotlin/org/digma/intellij/plugin/idea/execution/services/BaseJvmRunConfigurationInstrumentationService.kt

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import org.digma.intellij.plugin.idea.execution.ConfigurationCleaner
1313
import org.digma.intellij.plugin.idea.execution.JavaParametersMerger
1414
import org.digma.intellij.plugin.idea.execution.JavaToolOptionsBuilder
1515
import org.digma.intellij.plugin.idea.execution.ModuleResolver
16+
import org.digma.intellij.plugin.idea.execution.OTEL_RESOURCE_ATTRIBUTES
1617
import org.digma.intellij.plugin.idea.execution.OtelResourceAttributesBuilder
1718
import org.digma.intellij.plugin.idea.execution.ParametersExtractor
1819
import org.digma.intellij.plugin.idea.execution.ProjectHeuristics
@@ -24,7 +25,11 @@ import org.digma.intellij.plugin.idea.execution.flavor.InstrumentationFlavor
2425
*/
2526
abstract class BaseJvmRunConfigurationInstrumentationService : RunConfigurationInstrumentationService {
2627

27-
override fun updateParameters(configuration: RunConfiguration, params: SimpleProgramParameters, runnerSettings: RunnerSettings?): String? {
28+
override fun updateParameters(
29+
configuration: RunConfiguration,
30+
params: SimpleProgramParameters,
31+
runnerSettings: RunnerSettings?
32+
): Pair<String, String>? {
2833

2934
val projectHeuristics = getProjectHeuristics(configuration.project)
3035
val moduleResolver = getModuleResolver(configuration, params)
@@ -82,11 +87,14 @@ abstract class BaseJvmRunConfigurationInstrumentationService : RunConfigurationI
8287
getJavaParametersMerger(configuration, params, parametersExtractor)
8388
.mergeJavaToolOptionsAndOtelResourceAttributes(instrumentationFlavor.getFlavor(), javaToolOptions, otelResourceAttributes)
8489

85-
return javaToolOptions
90+
91+
//we need this return value only for reporting what was added to the configuration
92+
val otelResourceAttributesEnv = parametersExtractor.extractEnvValue(OTEL_RESOURCE_ATTRIBUTES)
93+
return Pair(javaToolOptions.toString(), otelResourceAttributesEnv.toString())
8694

8795
} catch (e: Throwable) {
8896
ErrorReporter.getInstance().reportError("${this::class.java}.updateParameters", e)
89-
"$DIGMA_INSTRUMENTATION_ERROR $e"
97+
Pair("$DIGMA_INSTRUMENTATION_ERROR $e", "")
9098
}
9199

92100
}

0 commit comments

Comments
 (0)