Skip to content

Commit a7d5930

Browse files
committed
feat(alerts): enhance update alert status logic to support false positive tagging
1 parent 11c8d41 commit a7d5930

4 files changed

Lines changed: 48 additions & 25 deletions

File tree

backend/src/main/java/com/park/utmstack/service/UtmAlertService.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,4 +27,7 @@ void updateStatus(List<String> alertIds, int status, String statusObservation) t
2727
void convertToIncident(List<String> eventIds, String incidentName, Integer incidentId, String incidentSource) throws ElasticsearchIndexDocumentUpdateException;
2828

2929
List<AlertType> getAlertsByIds(List<String> ids) throws UtmElasticsearchException;
30+
31+
void updateStatusAndTag(List<String> alertIds, int status, String statusObservation) throws UtmElasticsearchException,
32+
IOException, ElasticsearchIndexDocumentUpdateException;
3033
}

backend/src/main/java/com/park/utmstack/service/impl/UtmAlertServiceImpl.java

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,7 @@ public void updateStatus(List<String> alertIds, int status, String statusObserva
175175
String attemptMsg = String.format("Attempt to update status to %1$s for alerts with ids: %2$s",
176176
AlertStatus.getByCode(status).getName(), alertsIds);
177177
eventService.createEvent(attemptMsg, ApplicationEventType.ALERT_STATUS_UPDATE_ATTEMPT, extra);
178+
178179
String ruleScript = "ctx._source.status=%1$s;" +
179180
"ctx._source.statusLabel='%2$s';" +
180181
"ctx._source.statusObservation=\"%3$s\";";
@@ -200,6 +201,42 @@ public void updateStatus(List<String> alertIds, int status, String statusObserva
200201
}
201202
}
202203

204+
public void updateStatusAndTag(List<String> alertIds, int status, String statusObservation) {
205+
206+
updateStatus(alertIds, status, statusObservation);
207+
208+
if (status == AlertStatus.COMPLETED.getCode()) {
209+
String alertsIds = String.join(",", alertIds);
210+
Map<String, Object> extra = Map.of(
211+
"alertIds", alertsIds,
212+
"newStatus", status
213+
);
214+
215+
String attemptMsg = String.format("Attempt to mark alerts as false positive for ids: %s", alertsIds);
216+
eventService.createEvent(attemptMsg, ApplicationEventType.ALERT_STATUS_UPDATE_ATTEMPT, extra);
217+
218+
// Script para modificar el tag
219+
String script = String.format("if (ctx._source.tags == null) { ctx._source.tags = []; } " +
220+
"if (!ctx._source.tags.contains('%s')) { ctx._source.tags.add('%s'); }", Constants.FALSE_POSITIVE_TAG, Constants.FALSE_POSITIVE_TAG);
221+
222+
List<FilterType> filters = new ArrayList<>();
223+
filters.add(new FilterType(Constants.alertIdKeyword, OperatorType.IS_ONE_OF_TERMS_OR, alertIds));
224+
filters.add(new FilterType(Constants.alertParentIdKeyword, OperatorType.IS_ONE_OF_TERMS_OR, alertIds));
225+
226+
elasticsearchService.updateByQuery(
227+
SearchUtil.toQuery(filters),
228+
Constants.SYS_INDEX_PATTERN.get(SystemIndexPattern.ALERTS),
229+
script
230+
);
231+
232+
String successMsg = String.format(
233+
"Alerts with ids %s marked as false positive", alertsIds
234+
);
235+
eventService.createEvent(successMsg, ApplicationEventType.ALERT_NOTE_UPDATE_SUCCESS, extra);
236+
}
237+
}
238+
239+
203240
@Override
204241
public void updateTags(List<String> alertIds, List<String> tags, Boolean createRule) throws
205242
ElasticsearchIndexDocumentUpdateException {

backend/src/main/java/com/park/utmstack/util/exceptions/ElasticsearchIndexDocumentUpdateException.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,4 @@ public class ElasticsearchIndexDocumentUpdateException extends RuntimeException
44
public ElasticsearchIndexDocumentUpdateException(String message) {
55
super(message);
66
}
7-
}
7+
}

backend/src/main/java/com/park/utmstack/web/rest/UtmAlertResource.java

Lines changed: 7 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@
66
import com.park.utmstack.service.application_events.ApplicationEventService;
77
import com.park.utmstack.util.AlertUtil;
88
import com.park.utmstack.util.ResponseUtil;
9+
import com.park.utmstack.util.enums.AlertStatus;
910
import com.park.utmstack.web.rest.util.HeaderUtil;
11+
import lombok.Data;
1012
import org.slf4j.Logger;
1113
import org.slf4j.LoggerFactory;
1214
import org.springframework.http.HttpStatus;
@@ -50,6 +52,9 @@ public UtmAlertResource(UtmAlertService utmAlertService,
5052
)
5153
public ResponseEntity<Void> updateAlertStatus(@RequestBody UpdateAlertStatusRequestBody rq) throws IOException {
5254
final String ctx = CLASSNAME + ".updateAlertStatus";
55+
if (rq.getStatus() == AlertStatus.COMPLETED.getCode() && rq.isAddFalsePositiveTag()) {
56+
utmAlertService.updateStatusAndTag(rq.getAlertIds(), rq.getStatus(), rq.getStatusObservation());
57+
}
5358
utmAlertService.updateStatus(rq.getAlertIds(), rq.getStatus(), rq.getStatusObservation());
5459

5560
return ResponseEntity.ok().build();
@@ -145,36 +150,14 @@ public void setCreateRule(Boolean createRule) {
145150
}
146151
}
147152

153+
@Data
148154
public static class UpdateAlertStatusRequestBody {
149155
@NotNull
150156
private List<String> alertIds;
151157
private String statusObservation;
152158
@NotNull
153159
private int status;
154-
155-
public List<String> getAlertIds() {
156-
return alertIds;
157-
}
158-
159-
public void setAlertIds(List<String> alertIds) {
160-
this.alertIds = alertIds;
161-
}
162-
163-
public String getStatusObservation() {
164-
return statusObservation;
165-
}
166-
167-
public void setStatusObservation(String statusObservation) {
168-
this.statusObservation = statusObservation;
169-
}
170-
171-
public int getStatus() {
172-
return status;
173-
}
174-
175-
public void setStatus(int status) {
176-
this.status = status;
177-
}
160+
boolean addFalsePositiveTag;
178161
}
179162

180163
public static class UpdateAlertSolutionRequestBody {

0 commit comments

Comments
 (0)