6
6
import com .linkedin .datahub .graphql .generated .Entity ;
7
7
import com .linkedin .datahub .graphql .generated .EntityIncidentsResult ;
8
8
import com .linkedin .datahub .graphql .generated .Incident ;
9
+ import com .linkedin .datahub .graphql .generated .IncidentPriority ;
9
10
import com .linkedin .datahub .graphql .types .incident .IncidentMapper ;
10
11
import com .linkedin .entity .EntityResponse ;
11
12
import com .linkedin .entity .client .EntityClient ;
@@ -38,6 +39,9 @@ public class EntityIncidentsResolver
38
39
static final String INCIDENT_ENTITIES_SEARCH_INDEX_FIELD_NAME = "entities.keyword" ;
39
40
static final String INCIDENT_STATE_SEARCH_INDEX_FIELD_NAME = "state" ;
40
41
static final String CREATED_TIME_SEARCH_INDEX_FIELD_NAME = "created" ;
42
+ static final String INCIDENT_STAGE_SEARCH_INDEX_FIELD_NAME = "stage" ;
43
+ static final String INCIDENT_PRIORITY_SEARCH_INDEX_FIELD_NAME = "priority" ;
44
+ static final String INCIDENT_ASSIGNEES_SEARCH_INDEX_FIELD_NAME = "assignees" ;
41
45
42
46
private final EntityClient _entityClient ;
43
47
@@ -55,12 +59,18 @@ public CompletableFuture<EntityIncidentsResult> get(DataFetchingEnvironment envi
55
59
final Integer start = environment .getArgumentOrDefault ("start" , 0 );
56
60
final Integer count = environment .getArgumentOrDefault ("count" , 20 );
57
61
final Optional <String > maybeState = Optional .ofNullable (environment .getArgument ("state" ));
58
-
62
+ final Optional <String > maybeStage = Optional .ofNullable (environment .getArgument ("stage" ));
63
+ final Optional <String > maybePriority =
64
+ Optional .ofNullable (environment .getArgument ("priority" ));
65
+ final Optional <List <String >> maybeAssigneeUrns =
66
+ Optional .ofNullable (environment .getArgument ("assigneeUrns" ));
59
67
try {
60
68
// Step 1: Fetch set of incidents associated with the target entity from the Search
61
69
// Index!
62
70
// We use the search index so that we can easily sort by the last updated time.
63
- final Filter filter = buildIncidentsEntityFilter (entityUrn , maybeState );
71
+ final Filter filter =
72
+ buildIncidentsFilter (
73
+ entityUrn , maybeState , maybeStage , maybePriority , maybeAssigneeUrns );
64
74
final List <SortCriterion > sortCriteria = buildIncidentsSortCriteria ();
65
75
final SearchResult searchResult =
66
76
_entityClient .filter (
@@ -110,13 +120,33 @@ public CompletableFuture<EntityIncidentsResult> get(DataFetchingEnvironment envi
110
120
"get" );
111
121
}
112
122
113
- private Filter buildIncidentsEntityFilter (
114
- final String entityUrn , final Optional <String > maybeState ) {
115
- final Map <String , String > criterionMap = new HashMap <>();
116
- criterionMap .put (INCIDENT_ENTITIES_SEARCH_INDEX_FIELD_NAME , entityUrn );
123
+ private Filter buildIncidentsFilter (
124
+ final String entityUrn ,
125
+ final Optional <String > maybeState ,
126
+ final Optional <String > maybeStage ,
127
+ final Optional <String > maybePriority ,
128
+ final Optional <List <String >> maybeAssigneeUrns ) {
129
+ final Map <String , List <String >> criterionMap = new HashMap <>();
130
+ criterionMap .put (
131
+ INCIDENT_ENTITIES_SEARCH_INDEX_FIELD_NAME , Collections .singletonList (entityUrn ));
117
132
maybeState .ifPresent (
118
- incidentState -> criterionMap .put (INCIDENT_STATE_SEARCH_INDEX_FIELD_NAME , incidentState ));
119
- return QueryUtils .newFilter (criterionMap );
133
+ incidentState ->
134
+ criterionMap .put (
135
+ INCIDENT_STATE_SEARCH_INDEX_FIELD_NAME , Collections .singletonList (incidentState )));
136
+ maybeStage .ifPresent (
137
+ incidentStage ->
138
+ criterionMap .put (
139
+ INCIDENT_STAGE_SEARCH_INDEX_FIELD_NAME , Collections .singletonList (incidentStage )));
140
+ maybePriority .ifPresent (
141
+ incidentPriority ->
142
+ criterionMap .put (
143
+ INCIDENT_PRIORITY_SEARCH_INDEX_FIELD_NAME ,
144
+ Collections .singletonList (
145
+ IncidentUtils .mapIncidentPriority (IncidentPriority .valueOf (incidentPriority ))
146
+ .toString ())));
147
+ maybeAssigneeUrns .ifPresent (
148
+ assigneeUrns -> criterionMap .put (INCIDENT_ASSIGNEES_SEARCH_INDEX_FIELD_NAME , assigneeUrns ));
149
+ return QueryUtils .newListsFilter (criterionMap );
120
150
}
121
151
122
152
private List <SortCriterion > buildIncidentsSortCriteria () {
0 commit comments