Skip to content

Commit 2d852e5

Browse files
Merge pull request #2273 from digma-ai/feature/issues-filtering
Feature/issues filtering
2 parents ff92de4 + c7066c9 commit 2d852e5

File tree

13 files changed

+457
-111
lines changed

13 files changed

+457
-111
lines changed

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import org.digma.intellij.plugin.model.rest.event.*;
1212
import org.digma.intellij.plugin.model.rest.highlights.HighlightsRequest;
1313
import org.digma.intellij.plugin.model.rest.insights.*;
14+
import org.digma.intellij.plugin.model.rest.insights.issues.GetIssuesRequestPayload;
1415
import org.digma.intellij.plugin.model.rest.livedata.*;
1516
import org.digma.intellij.plugin.model.rest.login.*;
1617
import org.digma.intellij.plugin.model.rest.lowlevel.*;
@@ -104,6 +105,10 @@ public interface AnalyticsProvider extends Closeable {
104105

105106
String getInsights(Map<String, Object> queryParams);
106107

108+
String getIssues(GetIssuesRequestPayload queryParams);
109+
110+
String getIssuesFilters(Map<String, Object> queryParams);
111+
107112
AssetNavigationResponse getAssetNavigation(String env, String spanCodeObjectId);
108113

109114
String createEnvironments(Map<String, Object> request);

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
@@ -16,6 +16,7 @@
1616
import org.digma.intellij.plugin.model.rest.event.*;
1717
import org.digma.intellij.plugin.model.rest.highlights.HighlightsRequest;
1818
import org.digma.intellij.plugin.model.rest.insights.*;
19+
import org.digma.intellij.plugin.model.rest.insights.issues.GetIssuesRequestPayload;
1920
import org.digma.intellij.plugin.model.rest.livedata.*;
2021
import org.digma.intellij.plugin.model.rest.login.*;
2122
import org.digma.intellij.plugin.model.rest.lowlevel.*;
@@ -262,6 +263,17 @@ public String getInsights(Map<String, Object> queryParams) {
262263
return execute(() -> client.analyticsProvider.getInsights(queryParams));
263264
}
264265

266+
@Override
267+
public String getIssues(GetIssuesRequestPayload queryParams) {
268+
return execute(() -> client.analyticsProvider.getIssues(queryParams));
269+
270+
}
271+
272+
@Override
273+
public String getIssuesFilters(Map<String, Object> queryParams) {
274+
return execute(() -> client.analyticsProvider.getIssuesFilters(queryParams));
275+
}
276+
265277
@Override
266278
public AssetNavigationResponse getAssetNavigation(String env, String spanCodeObjectId) {
267279
return execute(() -> client.analyticsProvider.getAssetNavigation(env, spanCodeObjectId));
@@ -859,6 +871,20 @@ Call<ResponseBody> setInsightCustomStartTime(
859871
@GET("/insights/get_insights_view")
860872
Call<String> getInsights(@QueryMap Map<String, Object> fields);
861873

874+
@Headers({
875+
"Accept: application/+json",
876+
"Content-Type:application/json"
877+
})
878+
@POST("/insights/issues")
879+
Call<String> getIssues(@Body GetIssuesRequestPayload fields);
880+
881+
@Headers({
882+
"Accept: application/+json",
883+
"Content-Type:application/json"
884+
})
885+
@GET("/insights/issues/filters")
886+
Call<String> getIssuesFilters(@QueryMap Map<String, Object> fields);
887+
862888
@Headers({
863889
"Accept: text/plain",
864890
"Content-Type:application/json"

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

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import org.digma.intellij.plugin.model.rest.event.*;
2323
import org.digma.intellij.plugin.model.rest.highlights.HighlightsRequest;
2424
import org.digma.intellij.plugin.model.rest.insights.*;
25+
import org.digma.intellij.plugin.model.rest.insights.issues.GetIssuesRequestPayload;
2526
import org.digma.intellij.plugin.model.rest.livedata.*;
2627
import org.digma.intellij.plugin.model.rest.lowlevel.*;
2728
import org.digma.intellij.plugin.model.rest.navigation.*;
@@ -449,6 +450,18 @@ public String getInsights(@NotNull Map<String, Object> queryParams) throws Analy
449450
return executeCatching(() -> analyticsProviderProxy.getInsights(queryParams));
450451
}
451452

453+
public String getIssues(GetIssuesRequestPayload requestPayload) throws AnalyticsServiceException {
454+
var env = getCurrentEnvironmentId();
455+
requestPayload.setEnvironment(env);
456+
return executeCatching(() -> analyticsProviderProxy.getIssues(requestPayload));
457+
}
458+
459+
public String getIssuesFilters(@NotNull Map<String, Object> queryParams) throws AnalyticsServiceException {
460+
var env = getCurrentEnvironmentId();
461+
queryParams.put(ENVIRONMENT_QUERY_PARAM_NAME, env);
462+
return executeCatching(() -> analyticsProviderProxy.getIssuesFilters(queryParams));
463+
}
464+
452465
public void markInsightsAsRead(@NotNull List<String> insightIds) throws AnalyticsServiceException {
453466
executeCatching(() -> {
454467
analyticsProviderProxy.markInsightsAsRead(insightIds);
@@ -493,10 +506,8 @@ public String register(@NotNull Map<String, Object> queryParams) throws Analytic
493506
}
494507

495508
@NotNull
496-
public InsightsStatsResult getInsightsStats(String spanCodeObjectId) throws AnalyticsServiceException {
497-
509+
public InsightsStatsResult getInsightsStats(String spanCodeObjectId, String insightTypes) throws AnalyticsServiceException {
498510
try {
499-
var env = getCurrentEnvironmentId();
500511
var envId = getCurrentEnvironmentId();
501512
var params = new HashMap<String, Object>();
502513
params.put("Environment", envId);
@@ -505,6 +516,10 @@ public InsightsStatsResult getInsightsStats(String spanCodeObjectId) throws Anal
505516
params.put("ScopedSpanCodeObjectId", spanCodeObjectId);
506517
}
507518

519+
if (insightTypes != null && !insightTypes.isEmpty()) {
520+
params.put("insights", insightTypes);
521+
}
522+
508523
return executeCatching(() -> analyticsProviderProxy.getInsightsStats(params));
509524
} catch (NoSelectedEnvironmentException e) {
510525
Log.debugWithException(LOGGER, project, e, "error calling insights stats", e.getMessage());

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,7 @@ public Env findById(@NotNull String envId) {
187187
}
188188

189189
private Optional<Env> find(@Nullable String envIdToFind) {
190-
if(envIdToFind == null){
190+
if (envIdToFind == null) {
191191
return Optional.empty();
192192
}
193193
return environments.stream().filter(env -> env.getId().equals(envIdToFind)).findFirst();

ide-common/src/main/kotlin/org/digma/intellij/plugin/scope/ScopeManager.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,7 @@ class ScopeManager(private val project: Project) {
167167

168168
//in both these cases, if there are no insights, show analytics
169169
if (preferredView == null || preferredView == View.Insights) {
170-
val insightsStats = AnalyticsService.getInstance(project).getInsightsStats(scope.spanCodeObjectId)
170+
val insightsStats = AnalyticsService.getInstance(project).getInsightsStats(scope.spanCodeObjectId, null)
171171
if (insightsStats.issuesInsightsCount == 0) {
172172
MainContentViewSwitcher.getInstance(project).showAnalytics()
173173
} else {
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package org.digma.intellij.plugin.model.rest.insights.issues
2+
3+
import com.fasterxml.jackson.annotation.JsonCreator
4+
import com.fasterxml.jackson.annotation.JsonIgnoreProperties
5+
import com.fasterxml.jackson.annotation.JsonRawValue
6+
import java.beans.ConstructorProperties
7+
8+
@JsonIgnoreProperties(ignoreUnknown = true)
9+
data class GetIssuesRequestPayload
10+
@JsonCreator(mode = JsonCreator.Mode.PROPERTIES)
11+
@ConstructorProperties(
12+
"environment",
13+
"scopedSpanCodeObjectId",
14+
"displayName",
15+
"showDismissed",
16+
"filters",
17+
"sortBy",
18+
"sortOrder",
19+
"insightTypes",
20+
"page"
21+
)
22+
constructor(
23+
var environment: String?,
24+
val scopedSpanCodeObjectId: String?,
25+
val displayName: String?,
26+
val showDismissed: Boolean,
27+
@JsonRawValue val filters: String,
28+
val sortBy: String,
29+
val sortOrder: String,
30+
@JsonRawValue val insightTypes: String?,
31+
val page: Number
32+
)

src/main/java/org/digma/intellij/plugin/insights/AbstractInsightsMessageRouterHandler.java

Lines changed: 30 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import org.digma.intellij.plugin.analytics.*;
1010
import org.digma.intellij.plugin.common.CodeObjectsUtil;
1111
import org.digma.intellij.plugin.log.Log;
12+
import org.digma.intellij.plugin.model.rest.insights.issues.GetIssuesRequestPayload;
1213
import org.digma.intellij.plugin.model.rest.navigation.*;
1314
import org.digma.intellij.plugin.navigation.codenavigation.CodeNavigator;
1415
import org.digma.intellij.plugin.posthog.*;
@@ -34,7 +35,6 @@ public AbstractInsightsMessageRouterHandler(Project project) {
3435
super(project);
3536
}
3637

37-
3838
@Override
3939
public boolean doOnQuery(@NotNull Project project, @NotNull CefBrowser browser, @NotNull JsonNode requestJsonNode, @NotNull String rawRequest, @NotNull String action) throws Exception {
4040

@@ -68,6 +68,10 @@ public boolean doOnQuery(@NotNull Project project, @NotNull CefBrowser browser,
6868

6969
case "INSIGHTS/UNDISMISS" -> undismissInsight(requestJsonNode);
7070

71+
case "ISSUES/GET_DATA_LIST" -> pushIssuesListData(requestJsonNode);
72+
73+
case "ISSUES/GET_FILTERS" -> pushIssuesFiltersData(requestJsonNode);
74+
7175
default -> {
7276
return false;
7377
}
@@ -82,6 +86,30 @@ private void pushInsightsListData(JsonNode jsonNode) {
8286
InsightsService.getInstance(getProject()).refreshInsightsList(backendQueryParams);
8387
}
8488

89+
private void pushIssuesListData(JsonNode jsonNode) throws JsonProcessingException {
90+
Log.log(LOGGER::debug, getProject(), "got ISSUES/GET_DATA_LIST message");
91+
var payload = getObjectMapper().readTree(jsonNode.get("payload").toString());
92+
var query = payload.get("query");
93+
var request = new GetIssuesRequestPayload(
94+
query.at("/environment").asText(""),
95+
query.at("/scopedSpanCodeObjectId").asText(""),
96+
query.at("/displayName").asText(null),
97+
query.at("/showDismissed").asBoolean(false),
98+
query.at("/filters").toString(),
99+
query.at("/sorting/criterion").asText(null),
100+
query.at("/sorting/order").asText(null),
101+
query.at("/insightTypes").toString(),
102+
query.at("/page").asInt(0));
103+
104+
InsightsService.getInstance(getProject()).refreshIssuesList(request);
105+
}
106+
107+
private void pushIssuesFiltersData(JsonNode jsonNode) {
108+
Log.log(LOGGER::debug, getProject(), "got ISSUES/GET_FILTERS message");
109+
Map<String, Object> backendQueryParams = getQueryMapFromPayload(jsonNode, getObjectMapper());
110+
InsightsService.getInstance(getProject()).refreshIssuesFilters(backendQueryParams);
111+
}
112+
85113
private void dismissInsight(JsonNode jsonNode) {
86114
Log.log(LOGGER::debug, getProject(), "got INSIGHTS/DISMISS message");
87115
var insightId = getPayloadFromRequestNonNull(jsonNode).get("insightId").asText();
@@ -109,15 +137,11 @@ private void getCommitInfo(@NotNull CefBrowser browser, JsonNode jsonNode) throw
109137
}
110138
});
111139

112-
113140
var message = new SetCommitInfoMessage("digma", "INSIGHTS/SET_COMMIT_INFO", new SetCommitInfoData(commitInfos));
114141
serializeAndExecuteWindowPostMessageJavaScript(browser, message);
115142

116143
}
117144

118-
119-
120-
121145
private void linkTicket(@NotNull CefBrowser browser, JsonNode jsonNode) throws JsonProcessingException, AnalyticsServiceException {
122146
Log.log(LOGGER::trace, getProject(), "got INSIGHTS/LINK_TICKET message");
123147
var payload = getObjectMapper().readTree(jsonNode.get("payload").toString());
@@ -288,3 +312,4 @@ private void goToTraceComparison(JsonNode jsonNode) {
288312

289313

290314
}
315+

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

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import org.digma.intellij.plugin.errorreporting.ErrorReporter
1212
import org.digma.intellij.plugin.insights.InsightsServiceImpl
1313
import org.digma.intellij.plugin.log.Log
1414
import org.digma.intellij.plugin.model.rest.insights.MarkInsightsAsReadScope
15+
import org.digma.intellij.plugin.model.rest.insights.issues.GetIssuesRequestPayload
1516
import org.digma.intellij.plugin.persistence.PersistenceService
1617
import org.digma.intellij.plugin.posthog.ActivityMonitor
1718
import org.digma.intellij.plugin.ui.insights.model.SetAllInsightsAsReadData
@@ -21,6 +22,8 @@ import org.digma.intellij.plugin.ui.insights.model.SetDismissedMessage
2122
import org.digma.intellij.plugin.ui.insights.model.SetInsightDataListMessage
2223
import org.digma.intellij.plugin.ui.insights.model.SetInsightsAsReadData
2324
import org.digma.intellij.plugin.ui.insights.model.SetInsightsMarkAsReadMessage
25+
import org.digma.intellij.plugin.ui.insights.model.SetIssuesDataListMessage
26+
import org.digma.intellij.plugin.ui.insights.model.SetIssuesFilterMessage
2427
import org.digma.intellij.plugin.ui.insights.model.SetUnDismissedData
2528
import org.digma.intellij.plugin.ui.insights.model.SetUnDismissedMessage
2629
import org.digma.intellij.plugin.ui.jcef.JCefComponent
@@ -69,6 +72,35 @@ class InsightsService(val project: Project) : InsightsServiceImpl(project) {
6972
}
7073
}
7174

75+
fun refreshIssuesList(request: GetIssuesRequestPayload) {
76+
val message = try {
77+
val issues = AnalyticsService.getInstance(project).getIssues(request)
78+
SetIssuesDataListMessage(issues)
79+
} catch (e: AnalyticsServiceException) {
80+
Log.debugWithException(logger, project, e, "Error loading issues {}", e.message)
81+
val error = ErrorPayload(e.meaningfulMessage)
82+
SetIssuesDataListMessage("{\"totalCount\":0,\"insights\":[]}", error)
83+
}
84+
85+
jCefComponent?.let {
86+
serializeAndExecuteWindowPostMessageJavaScript(it.jbCefBrowser.cefBrowser, message)
87+
}
88+
}
89+
90+
fun refreshIssuesFilters(backendQueryParams: MutableMap<String, Any>) {
91+
val message = try {
92+
val filters = AnalyticsService.getInstance(project).getIssuesFilters(backendQueryParams)
93+
SetIssuesFilterMessage(filters)
94+
} catch (e: AnalyticsServiceException) {
95+
Log.debugWithException(logger, project, e, "Error loading issues filters {}", e.message)
96+
}
97+
98+
jCefComponent?.let {
99+
serializeAndExecuteWindowPostMessageJavaScript(it.jbCefBrowser.cefBrowser, message)
100+
}
101+
}
102+
103+
72104
fun undismissInsight(insightId: String) {
73105
var status = ""
74106
var error: String? = null
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package org.digma.intellij.plugin.ui.insights.model
2+
3+
import com.fasterxml.jackson.annotation.JsonRawValue
4+
import org.digma.intellij.plugin.ui.jcef.JCEFGlobalConstants
5+
import org.digma.intellij.plugin.ui.jcef.model.ErrorPayload
6+
7+
data class SetIssuesDataListMessage(@JsonRawValue val payload: String, val error: ErrorPayload? = null) {
8+
val type = JCEFGlobalConstants.REQUEST_MESSAGE_TYPE
9+
val action = "ISSUES/SET_DATA_LIST"
10+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package org.digma.intellij.plugin.ui.insights.model
2+
3+
import com.fasterxml.jackson.annotation.JsonRawValue
4+
import org.digma.intellij.plugin.ui.jcef.JCEFGlobalConstants
5+
import org.digma.intellij.plugin.ui.jcef.model.ErrorPayload
6+
7+
data class SetIssuesFilterMessage(@JsonRawValue val payload: String, val error: ErrorPayload? = null) {
8+
val type = JCEFGlobalConstants.REQUEST_MESSAGE_TYPE
9+
val action = "ISSUES/SET_FILTERS"
10+
}

0 commit comments

Comments
 (0)