Skip to content

Commit d758633

Browse files
authored
Merge pull request #2355 from digma-ai/feature/report
added reporting ui
2 parents 7a43f4d + 31f0a9e commit d758633

File tree

19 files changed

+1982
-24
lines changed

19 files changed

+1982
-24
lines changed

CHANGELOG.md

Lines changed: 28 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -9,33 +9,47 @@
99
- remove-unused-var by @shalom938 in https://github.com/digma-ai/digma-intellij-plugin/pull/2351
1010
- report error from autoRefreshJob by @shalom938 in https://github.com/digma-ai/digma-intellij-plugin/pull/2352
1111
- register-centralized-logout-event by @shalom938 in https://github.com/digma-ai/digma-intellij-plugin/pull/2353
12-
- enable-frequency-detector-for-ui-error Closes #2349 by @shalom938 in https://github.com/digma-ai/digma-intellij-plugin/pull/2350
12+
- enable-frequency-detector-for-ui-error Closes #2349 by @shalom938
13+
in https://github.com/digma-ai/digma-intellij-plugin/pull/2350
1314
- update eap to latest by @shalom938 in https://github.com/digma-ai/digma-intellij-plugin/pull/2357
14-
- upgrade to intellij platform gradle plugin 2.0.0 release Closes #2286 by @shalom938 in https://github.com/digma-ai/digma-intellij-plugin/pull/2359
15+
- upgrade to intellij platform gradle plugin 2.0.0 release Closes #2286 by @shalom938
16+
in https://github.com/digma-ai/digma-intellij-plugin/pull/2359
1517
- Update Main UI by @kshmidt-digma in https://github.com/digma-ai/digma-intellij-plugin/pull/2361
1618
- treat unknown as latest in add env by @shalom938 in https://github.com/digma-ai/digma-intellij-plugin/pull/2354
1719
- more info in auth events by @shalom938 in https://github.com/digma-ai/digma-intellij-plugin/pull/2362
1820
- Update Main UI by @kshmidt-digma in https://github.com/digma-ai/digma-intellij-plugin/pull/2360
1921

2022
## 2.0.363 - 2024-07-30
2123

22-
- register user on successful login Closes #2317 by @shalom938 in https://github.com/digma-ai/digma-intellij-plugin/pull/2320
23-
- expandable-text-fieldfor-ext-obs Closes #2312 by @shalom938 in https://github.com/digma-ai/digma-intellij-plugin/pull/2321
24-
- don't show eof error in notifications Closes #2319 by @shalom938 in https://github.com/digma-ai/digma-intellij-plugin/pull/2322
25-
- stop reporting ProcessCanceledException to posthog by @shalom938 in https://github.com/digma-ai/digma-intellij-plugin/pull/2324
24+
- register user on successful login Closes #2317 by @shalom938
25+
in https://github.com/digma-ai/digma-intellij-plugin/pull/2320
26+
- expandable-text-fieldfor-ext-obs Closes #2312 by @shalom938
27+
in https://github.com/digma-ai/digma-intellij-plugin/pull/2321
28+
- don't show eof error in notifications Closes #2319 by @shalom938
29+
in https://github.com/digma-ai/digma-intellij-plugin/pull/2322
30+
- stop reporting ProcessCanceledException to posthog by @shalom938
31+
in https://github.com/digma-ai/digma-intellij-plugin/pull/2324
2632
- dont-report-URISyntaxException by @shalom938 in https://github.com/digma-ai/digma-intellij-plugin/pull/2328
27-
- add-plugin-version-to-all-events-for-easy-filtering by @shalom938 in https://github.com/digma-ai/digma-intellij-plugin/pull/2325
33+
- add-plugin-version-to-all-events-for-easy-filtering by @shalom938
34+
in https://github.com/digma-ai/digma-intellij-plugin/pull/2325
2835
- dont-report-URISyntaxException by @shalom938 in https://github.com/digma-ai/digma-intellij-plugin/pull/2326
29-
- keep-api-token-for-logout-when-changing-api-url Closes #2329 by @shalom938 in https://github.com/digma-ai/digma-intellij-plugin/pull/2330
36+
- keep-api-token-for-logout-when-changing-api-url Closes #2329 by @shalom938
37+
in https://github.com/digma-ai/digma-intellij-plugin/pull/2330
3038
- better settings validation Closes #2334 by @shalom938 in https://github.com/digma-ai/digma-intellij-plugin/pull/2335
31-
- better locking on new account creation Closes #2336 by @shalom938 in https://github.com/digma-ai/digma-intellij-plugin/pull/2337
39+
- better locking on new account creation Closes #2336 by @shalom938
40+
in https://github.com/digma-ai/digma-intellij-plugin/pull/2337
3241
- remove refresh delay from settings by @shalom938 in https://github.com/digma-ai/digma-intellij-plugin/pull/2339
33-
- remove-duplicate-error-report Closes #2262 by @shalom938 in https://github.com/digma-ai/digma-intellij-plugin/pull/2341
42+
- remove-duplicate-error-report Closes #2262 by @shalom938
43+
in https://github.com/digma-ai/digma-intellij-plugin/pull/2341
3444
- stop-reporting-index-not-ready-exception by @shalom938 in https://github.com/digma-ai/digma-intellij-plugin/pull/2344
35-
- send event when scheduler size increased Closes #2333 by @shalom938 in https://github.com/digma-ai/digma-intellij-plugin/pull/2342
36-
- fix-StringIndexOutOfBoundsException Closes #2338 by @shalom938 in https://github.com/digma-ai/digma-intellij-plugin/pull/2340
37-
- handle index not ready in ScopeManager Closes #2331 by @shalom938 in https://github.com/digma-ai/digma-intellij-plugin/pull/2346
38-
- retry docker engine if the error is pod already exists Closes #2276 by @shalom938 in https://github.com/digma-ai/digma-intellij-plugin/pull/2348
45+
- send event when scheduler size increased Closes #2333 by @shalom938
46+
in https://github.com/digma-ai/digma-intellij-plugin/pull/2342
47+
- fix-StringIndexOutOfBoundsException Closes #2338 by @shalom938
48+
in https://github.com/digma-ai/digma-intellij-plugin/pull/2340
49+
- handle index not ready in ScopeManager Closes #2331 by @shalom938
50+
in https://github.com/digma-ai/digma-intellij-plugin/pull/2346
51+
- retry docker engine if the error is pod already exists Closes #2276 by @shalom938
52+
in https://github.com/digma-ai/digma-intellij-plugin/pull/2348
3953
- Feature/new nav by @kshmidt-digma in https://github.com/digma-ai/digma-intellij-plugin/pull/2311
4054

4155
## 2.0.362 - 2024-07-25

analytics-provider/src/main/java/org/digma/intellij/plugin/analytics/AnalyticsProvider.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,10 @@ public interface AnalyticsProvider extends Closeable {
6969

7070
String getServices(String environment);
7171

72+
String getAssetsReportStats(Map<String, Object> queryParams);
73+
74+
String getIssuesReportStats(Map<String, Object> queryParams);
75+
7276
String getNotifications(NotificationsRequest notificationsRequest);
7377

7478
void setReadNotificationsTime(SetReadNotificationsRequest setReadNotificationsRequest);

analytics-provider/src/main/java/org/digma/intellij/plugin/analytics/RestAnalyticsProvider.java

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,16 @@ public String getServices(String environment) {
232232
return execute(() -> client.analyticsProvider.getServices(environment));
233233
}
234234

235+
@Override
236+
public String getIssuesReportStats(Map<String, Object> queryParams) {
237+
return execute(() -> client.analyticsProvider.getIssuesReportStats(queryParams));
238+
}
239+
240+
@Override
241+
public String getAssetsReportStats(Map<String, Object> queryParams) {
242+
return execute(() -> client.analyticsProvider.getAssetsReportStats(queryParams));
243+
}
244+
235245
@Override
236246
public String getNotifications(NotificationsRequest notificationsRequest) {
237247
return execute(() -> client.analyticsProvider.getNotifications(notificationsRequest));
@@ -852,6 +862,22 @@ Call<Void> setInsightCustomStartTime(
852862
@GET("assets/get_filter")
853863
Call<String> getAssetFilters(@QueryMap Map<String, Object> fields);
854864

865+
@Headers({
866+
"Accept: application/+json",
867+
"Content-Type:application/json"
868+
})
869+
@GET("reports/issues/statistics")
870+
Call<String> getIssuesReportStats(@QueryMap Map<String, Object> fields);
871+
872+
873+
@Headers({
874+
"Accept: application/+json",
875+
"Content-Type:application/json"
876+
})
877+
@GET("reports/assets/statistics")
878+
Call<String> getAssetsReportStats(@QueryMap Map<String, Object> fields);
879+
880+
855881
@GET("services/getServices")
856882
Call<String> getServices(@Query("environment") String environment);
857883

github-actions/validate-posthog-url/action.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
NOT IN USE
1+
NOT IN USE
22
name: 'Validate posthog url'
33
description: 'Validate posthog url'
44
inputs:

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

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -314,13 +314,20 @@ public String getAssets(@NotNull Map<String, Object> queryParams) throws Analyti
314314
analyticsProviderProxy.getAssets(queryParams));
315315
}
316316

317-
public String getServices() throws AnalyticsServiceException {
317+
public String getServices(String environment) throws AnalyticsServiceException {
318+
return executeCatching(() ->
319+
analyticsProviderProxy.getServices(environment));
320+
}
318321

319-
var env = getCurrentEnvironmentId();
322+
public String getAssetsReportStats(@NotNull Map<String, Object> queryParams) throws AnalyticsServiceException {
320323
return executeCatching(() ->
321-
analyticsProviderProxy.getServices(env));
324+
analyticsProviderProxy.getAssetsReportStats(queryParams));
322325
}
323326

327+
public String getIssuesReportStats(@NotNull Map<String, Object> queryParams) throws AnalyticsServiceException {
328+
return executeCatching(() ->
329+
analyticsProviderProxy.getIssuesReportStats(queryParams));
330+
}
324331

325332
public void resetThrottlingStatus() throws AnalyticsServiceException {
326333
executeCatching(() -> {

src/main/java/org/digma/intellij/plugin/dashboard/DashboardIndexTemplateBuilder.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,13 @@
1010
import org.digma.intellij.plugin.settings.SettingsState;
1111
import org.digma.intellij.plugin.ui.common.JaegerUtilKt;
1212
import org.digma.intellij.plugin.ui.jcef.BaseIndexTemplateBuilderKt;
13-
import static org.digma.intellij.plugin.ui.jcef.BaseIndexTemplateBuilderKt.IS_LOGGING_ENABLED;
13+
1414
import java.io.*;
1515
import java.nio.charset.StandardCharsets;
1616
import java.util.HashMap;
1717

1818
import static org.digma.intellij.plugin.analytics.EnvUtilsKt.getCurrentEnvironmentId;
19+
import static org.digma.intellij.plugin.ui.jcef.BaseIndexTemplateBuilderKt.IS_LOGGING_ENABLED;
1920
import static org.digma.intellij.plugin.ui.jcef.JCEFUtilsKt.getIsLoggingEnabledSystemProperty;
2021

2122
public class DashboardIndexTemplateBuilder {
@@ -32,6 +33,7 @@ public class DashboardIndexTemplateBuilder {
3233
private static final String IS_JAEGER_ENABLED = "isJaegerEnabled";
3334
private static final String DASHBOARD_ENVIRONMENT = "dashboardEnvironment";
3435
private static final String DIGMA_API_URL = "digmaApiUrl";
36+
private static final String INITIAL_ROUTE_PARAM_NAME = "initial_route";
3537

3638
private final Configuration freemarketConfiguration = new Configuration(Configuration.VERSION_2_3_30);
3739

@@ -62,7 +64,7 @@ public InputStream build(Project project, DashboardVirtualFile dashboardVirtualF
6264

6365
data.put(DASHBOARD_ENVIRONMENT, getCurrentEnvironmentId(project));
6466
data.put(IS_LOGGING_ENABLED,getIsLoggingEnabledSystemProperty());
65-
67+
data.put(INITIAL_ROUTE_PARAM_NAME, dashboardVirtualFile.getPath());
6668
Template template = freemarketConfiguration.getTemplate(INDEX_TEMPLATE_NAME);
6769
StringWriter stringWriter = new StringWriter();
6870
template.process(data, stringWriter);

src/main/java/org/digma/intellij/plugin/dashboard/DashboardMessageRouterHandler.java

Lines changed: 57 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,19 +6,21 @@
66
import com.intellij.openapi.diagnostic.Logger;
77
import com.intellij.openapi.project.Project;
88
import org.cef.browser.*;
9-
import org.digma.intellij.plugin.analytics.AnalyticsServiceException;
9+
import org.digma.intellij.plugin.analytics.*;
1010
import org.digma.intellij.plugin.dashboard.incoming.GoToSpan;
1111
import org.digma.intellij.plugin.dashboard.outgoing.*;
1212
import org.digma.intellij.plugin.errorreporting.ErrorReporter;
1313
import org.digma.intellij.plugin.log.Log;
1414
import org.digma.intellij.plugin.posthog.ActivityMonitor;
15+
import org.digma.intellij.plugin.ui.dashboard.reports.model.*;
1516
import org.digma.intellij.plugin.ui.jcef.BaseMessageRouterHandler;
1617
import org.digma.intellij.plugin.ui.jcef.model.ErrorPayload;
1718
import org.jetbrains.annotations.NotNull;
1819

1920
import java.util.*;
2021

2122
import static org.digma.intellij.plugin.common.JsonUtilsKt.objectNodeToMap;
23+
import static org.digma.intellij.plugin.ui.jcef.JCEFUtilsKt.getMapFromNode;
2224
import static org.digma.intellij.plugin.ui.jcef.JCefBrowserUtilsKt.*;
2325

2426
public class DashboardMessageRouterHandler extends BaseMessageRouterHandler {
@@ -49,6 +51,15 @@ public boolean doOnQuery(@NotNull Project project, @NotNull CefBrowser browser,
4951
GoToSpan goToSpan = jsonToObject(requestJsonNode, GoToSpan.class);
5052
DashboardService.getInstance(project).goToSpan(goToSpan);
5153
}
54+
case "DASHBOARD/GET_SERVICES" -> {
55+
pushServices(browser, requestJsonNode);
56+
}
57+
case "DASHBOARD/GET_REPORT_ISSUES_STATS" -> {
58+
pushIssuesReportStats(browser, requestJsonNode);
59+
}
60+
case "DASHBOARD/GET_REPORT_ASSETS_STATS" -> {
61+
pushAssetsReportStats(browser, requestJsonNode);
62+
}
5263
case "GLOBAL/GET_BACKEND_INFO" -> {
5364
//do nothing, dashboard app sends that for some reason, but it's not necessary
5465
}
@@ -65,6 +76,51 @@ public boolean doOnQuery(@NotNull Project project, @NotNull CefBrowser browser,
6576
}
6677

6778

79+
private void pushServices(CefBrowser browser, JsonNode requestJsonNode) {
80+
var project = getProject();
81+
Log.log(logger::trace, project, "pushServices called");
82+
var requestPayload = getPayloadFromRequestNonNull(requestJsonNode);
83+
var env = requestPayload.get("environment").asText();
84+
try {
85+
var payload = AnalyticsService.getInstance(project).getServices(env);
86+
var message = new SetServicesMessage(payload);
87+
Log.log(logger::trace, project, "sending DASHBOARD/GET_SERVICES message");
88+
serializeAndExecuteWindowPostMessageJavaScript(browser, message);
89+
} catch (AnalyticsServiceException ex) {
90+
Log.log(logger::trace, getProject(), "sending DASHBOARD/GET_SERVICES message with error");
91+
}
92+
}
93+
94+
private void pushAssetsReportStats(CefBrowser browser, JsonNode requestJsonNode) {
95+
var project = getProject();
96+
var requestPayload = getPayloadFromRequestNonNull(requestJsonNode);
97+
var backendQueryParams = getMapFromNode(requestPayload, getObjectMapper());
98+
Log.log(logger::trace, project, "pushAssetsReportStats called");
99+
try {
100+
var payload = AnalyticsService.getInstance(project).getAssetsReportStats(backendQueryParams);
101+
var message = new SetAssetsReportStatsMessage(payload);
102+
Log.log(logger::trace, project, "sending DASHBOARD/GET_REPORT_ASSETS_STATS message");
103+
serializeAndExecuteWindowPostMessageJavaScript(browser, message);
104+
} catch (AnalyticsServiceException ex) {
105+
Log.log(logger::trace, getProject(), "sending DASHBOARD/GET_REPORT_ASSETS_STATS message with error");
106+
}
107+
}
108+
109+
private void pushIssuesReportStats(CefBrowser browser, JsonNode requestJsonNode) {
110+
var project = getProject();
111+
var requestPayload = getPayloadFromRequestNonNull(requestJsonNode);
112+
var backendQueryParams = getMapFromNode(requestPayload, getObjectMapper());
113+
Log.log(logger::trace, project, "pushIssuesReportStats called");
114+
try {
115+
var payload = AnalyticsService.getInstance(project).getIssuesReportStats(backendQueryParams);
116+
var message = new SetIssuesReportStatsMessage(payload);
117+
Log.log(logger::trace, project, "sending DASHBOARD/GET_REPORT_ISSUES_STATS message");
118+
serializeAndExecuteWindowPostMessageJavaScript(browser, message);
119+
} catch (AnalyticsServiceException ex) {
120+
Log.log(logger::trace, getProject(), "sending DASHBOARD/GET_REPORT_ISSUES_STATS message with error");
121+
}
122+
}
123+
68124
private void getData(CefBrowser browser, JsonNode requestJsonNode) throws JsonProcessingException {
69125

70126
var payload = getPayloadFromRequestNonNull(requestJsonNode);
@@ -112,8 +168,6 @@ private void sendEmptyDataWithError(CefBrowser browser, String errorMessage, Str
112168
}
113169

114170

115-
116-
117171
private void onInitialize(CefBrowser browser) {
118172
doCommonInitialize(browser);
119173
}

src/main/java/org/digma/intellij/plugin/dashboard/DashboardService.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,20 @@ public void openDashboard(@NotNull String dashboardName) {
5757

5858
}
5959

60+
public void openReport(@NotNull String reportName) {
61+
62+
if (showExisting(reportName)) {
63+
return;
64+
}
65+
66+
EDT.ensureEDT(() -> {
67+
var file = DashboardVirtualFile.createVirtualFile(reportName);
68+
file.setPath("report");
69+
FileEditorManager.getInstance(project).openFile(file, true, true);
70+
});
71+
72+
}
73+
6074
private boolean showExisting(@NotNull String dashboardName) {
6175
for (var editor : FileEditorManager.getInstance(project).getAllEditors()) {
6276
var file = editor.getFile();

src/main/java/org/digma/intellij/plugin/dashboard/DashboardVirtualFile.java

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,12 @@ public class DashboardVirtualFile extends LightVirtualFile implements DigmaVirtu
1111

1212
public static final Key<String> DASHBOARD_EDITOR_KEY = Key.create("Digma.DASHBOARD_EDITOR_KEY");
1313
private String dashboardName;
14+
private String path;
15+
1416
public DashboardVirtualFile(String myTitle) {
1517
super(myTitle);
1618
setFileType(DashboardFileType.INSTANCE);
19+
setPath("");
1720
setWritable(false);
1821
putUserData(FileEditorManagerImpl.FORBID_PREVIEW_TAB, true);
1922
}
@@ -23,7 +26,7 @@ public static boolean isDashboardVirtualFile(@NotNull VirtualFile file) {
2326
}
2427

2528
@NotNull
26-
public static VirtualFile createVirtualFile(@NotNull String dashboardName) {
29+
public static DashboardVirtualFile createVirtualFile(@NotNull String dashboardName) {
2730
var file = new DashboardVirtualFile(dashboardName);
2831
file.setDashboardName(dashboardName);
2932
DASHBOARD_EDITOR_KEY.set(file, DashboardFileEditorProvider.DASHBOARD_EDITOR_TYPE);
@@ -37,4 +40,13 @@ public void setDashboardName(String documentationPage) {
3740
public String getDashboardName() {
3841
return dashboardName;
3942
}
43+
44+
public void setPath(String newPath) {
45+
this.path = newPath;
46+
}
47+
48+
@NotNull
49+
public String getPath() {
50+
return path;
51+
}
4052
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package org.digma.intellij.plugin.ui.dashboard.reports.model
2+
3+
import com.fasterxml.jackson.annotation.JsonRawValue
4+
import org.digma.intellij.plugin.ui.jcef.JCEFGlobalConstants
5+
6+
data class SetAssetsReportStatsMessage(@JsonRawValue val payload: String) {
7+
val type = JCEFGlobalConstants.REQUEST_MESSAGE_TYPE
8+
val action = "DASHBOARD/SET_REPORT_ASSETS_STATS"
9+
}

0 commit comments

Comments
 (0)