Skip to content

Commit 4c6544e

Browse files
authored
Feature/support jaeger external link (#141)
1 parent e0bab11 commit 4c6544e

File tree

5 files changed

+53
-5
lines changed

5 files changed

+53
-5
lines changed
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package org.digma.intellij.plugin.settings;
2+
3+
public enum LinkMode {
4+
Internal,
5+
External,
6+
}

ide-common/src/main/java/org/digma/intellij/plugin/settings/ProjectSettings.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,8 @@ public JComponent getPreferredFocusedComponent() {
4141
@Override
4242
public boolean isModified() {
4343
SettingsState settings = SettingsState.getInstance(project);
44-
return isUrlChanged(settings) || isApiTokenChanged(settings) || isRefreshDelayChanged(settings) || isJaegerUrlChanged(settings);
44+
return isUrlChanged(settings) || isApiTokenChanged(settings) || isRefreshDelayChanged(settings)
45+
|| isJaegerUrlChanged(settings) || isJaegerLinkModeChanged(settings);
4546
}
4647

4748
private boolean isRefreshDelayChanged(SettingsState settings) {
@@ -60,6 +61,10 @@ private boolean isJaegerUrlChanged(SettingsState settings) {
6061
return !Objects.equals(settings.jaegerUrl, mySettingsComponent.getJaegerUrl());
6162
}
6263

64+
private boolean isJaegerLinkModeChanged(SettingsState settings) {
65+
return !Objects.equals(settings.jaegerLinkMode, mySettingsComponent.getJaegerLinkMode());
66+
}
67+
6368
@Override
6469
public void apply() throws ConfigurationException {
6570
SettingsState settings = SettingsState.getInstance(project);
@@ -84,6 +89,7 @@ public void apply() throws ConfigurationException {
8489
settings.apiToken = theApiToken;
8590
settings.refreshDelay = Integer.parseInt(mySettingsComponent.getRefreshDelayText());
8691
settings.jaegerUrl = mySettingsComponent.getJaegerUrl();
92+
settings.jaegerLinkMode = mySettingsComponent.getJaegerLinkMode();
8793
settings.fireChanged();
8894
}
8995

@@ -94,6 +100,7 @@ public void reset() {
94100
mySettingsComponent.setApiToken(settings.apiToken);
95101
mySettingsComponent.setRefreshDelayText(String.valueOf(settings.refreshDelay));
96102
mySettingsComponent.setJaegerUrl(settings.jaegerUrl);
103+
mySettingsComponent.setJaegerLinkMode(settings.jaegerLinkMode);
97104
}
98105

99106
@Override

ide-common/src/main/java/org/digma/intellij/plugin/settings/SettingsComponent.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package org.digma.intellij.plugin.settings;
22

33
import com.intellij.openapi.project.Project;
4+
import com.intellij.openapi.ui.ComboBox;
5+
import com.intellij.ui.EnumComboBoxModel;
46
import com.intellij.ui.JBColor;
57
import com.intellij.ui.components.JBLabel;
68
import com.intellij.ui.components.JBTextField;
@@ -22,6 +24,7 @@ public class SettingsComponent {
2224
private final JBTextField myApiToken = new JBTextField();
2325
private final JBTextField myRefreshDelay = new JBTextField();
2426
private final JBTextField myJaegerUrlText = new JBTextField();
27+
private final ComboBox<LinkMode> myJaegerLinkModeComboBox = new ComboBox<>(new EnumComboBoxModel<>(LinkMode.class));
2528

2629
public SettingsComponent(Project project) {
2730

@@ -77,6 +80,7 @@ public boolean verify(JComponent input) {
7780
}
7881
});
7982

83+
var myJaegerLinkModeLabel = new JBLabel("Jaeger Link Mode: ");
8084

8185
var resetButton = new JButton("Reset to defaults");
8286
resetButton.addActionListener(e -> resetToDefaults());
@@ -86,6 +90,7 @@ public boolean verify(JComponent input) {
8690
.addLabeledComponent(new JBLabel("Api token:"), myApiToken, 1, false)
8791
.addLabeledComponent(myRefreshLabel, myRefreshDelay, 1, false)
8892
.addLabeledComponent(myJaegerUrlLabel, myJaegerUrlText, 1, false)
93+
.addLabeledComponent(myJaegerLinkModeLabel, myJaegerLinkModeComboBox, 1, false)
8994
.addComponent(resetButton)
9095
.addComponentFillVertically(new JPanel(), 0)
9196
.getPanel();
@@ -129,6 +134,14 @@ public void setJaegerUrl(String newText) {
129134
myJaegerUrlText.setText(newText.trim());
130135
}
131136

137+
public LinkMode getJaegerLinkMode() {
138+
return (LinkMode) myJaegerLinkModeComboBox.getSelectedItem();
139+
}
140+
141+
public void setJaegerLinkMode(LinkMode linkMode) {
142+
myJaegerLinkModeComboBox.setSelectedItem(linkMode);
143+
}
144+
132145
@NotNull
133146
public String getRefreshDelayText() {
134147
return myRefreshDelay.getText().trim();
@@ -143,5 +156,6 @@ private void resetToDefaults(){
143156
this.setApiToken(null);
144157
this.setRefreshDelayText(String.valueOf(SettingsState.DEFAULT_REFRESH_DELAY));
145158
this.setJaegerUrl(SettingsState.DEFAULT_JAEGER_URL);
159+
this.setJaegerLinkMode(SettingsState.DEFAULT_JAEGER_LINK_MODE);
146160
}
147161
}

ide-common/src/main/java/org/digma/intellij/plugin/settings/SettingsState.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,14 @@ public class SettingsState implements PersistentStateComponent<SettingsState> ,
2626
public static final String DEFAULT_API_URL = "https://localhost:5051";
2727
public static final int DEFAULT_REFRESH_DELAY = 30;
2828
public static final String DEFAULT_JAEGER_URL = ""; // http://localhost:16686
29+
public static final LinkMode DEFAULT_JAEGER_LINK_MODE = LinkMode.Internal;
2930
public String apiUrl = DEFAULT_API_URL;
3031
public int refreshDelay = DEFAULT_REFRESH_DELAY;
3132
@Nullable
3233
public String apiToken = null;
3334
@Nullable
3435
public String jaegerUrl = DEFAULT_JAEGER_URL;
36+
public LinkMode jaegerLinkMode = DEFAULT_JAEGER_LINK_MODE;
3537
private final List<SettingsChangeListener> listeners = new ArrayList<>();
3638

3739
public static SettingsState getInstance(Project project) {

src/main/kotlin/org/digma/intellij/plugin/ui/list/insights/SpanPanels.kt

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,29 @@
11
package org.digma.intellij.plugin.ui.list.insights
22

33
import com.google.common.io.CharStreams
4+
import com.intellij.ide.BrowserUtil
45
import com.intellij.openapi.fileEditor.impl.HTMLEditorProvider
56
import com.intellij.openapi.project.Project
67
import com.intellij.ui.components.JBLabel
78
import com.intellij.ui.components.JBPanel
89
import com.intellij.util.containers.isNullOrEmpty
910
import com.intellij.util.ui.JBUI.Borders.empty
1011
import org.digma.intellij.plugin.analytics.AnalyticsService
11-
import org.digma.intellij.plugin.model.rest.insights.*
12+
import org.digma.intellij.plugin.model.rest.insights.SpanDurationsInsight
13+
import org.digma.intellij.plugin.model.rest.insights.SpanDurationsPercentile
14+
import org.digma.intellij.plugin.model.rest.insights.SpanFlow
15+
import org.digma.intellij.plugin.model.rest.insights.SpanInfo
16+
import org.digma.intellij.plugin.model.rest.insights.SpanUsagesInsight
17+
import org.digma.intellij.plugin.settings.LinkMode
1218
import org.digma.intellij.plugin.settings.SettingsState
13-
import org.digma.intellij.plugin.ui.common.*
19+
import org.digma.intellij.plugin.ui.common.CopyableLabel
20+
import org.digma.intellij.plugin.ui.common.CopyableLabelHtml
1421
import org.digma.intellij.plugin.ui.common.Html.ARROW_RIGHT
22+
import org.digma.intellij.plugin.ui.common.Laf
23+
import org.digma.intellij.plugin.ui.common.asHtml
24+
import org.digma.intellij.plugin.ui.common.span
25+
import org.digma.intellij.plugin.ui.common.spanBold
26+
import org.digma.intellij.plugin.ui.common.spanGrayed
1527
import org.digma.intellij.plugin.ui.list.ListItemActionButton
1628
import org.digma.intellij.plugin.ui.list.PanelsLayoutHelper
1729
import org.digma.intellij.plugin.ui.model.TraceSample
@@ -252,8 +264,15 @@ fun buildButtonToJaeger(
252264
val editorTitle = "Jaeger sample traces of Span ${spanName}"
253265

254266
val button = ListItemActionButton(linkCaption)
255-
button.addActionListener {
256-
HTMLEditorProvider.openEditor(project, editorTitle, htmlContent)
267+
if (settingsState.jaegerLinkMode == LinkMode.Internal) {
268+
button.addActionListener {
269+
HTMLEditorProvider.openEditor(project, editorTitle, htmlContent)
270+
}
271+
} else {
272+
// handle LinkMode.External
273+
button.addActionListener {
274+
BrowserUtil.browse(jaegerUrl, project)
275+
}
257276
}
258277

259278
return button

0 commit comments

Comments
 (0)