in alerting/src/main/kotlin/org/opensearch/alerting/AlertService.kt [169:210]
fun updateActionResultsForBucketLevelAlert(
currentAlert: Alert,
actionResults: Map<String, ActionRunResult>,
alertError: AlertError?
): Alert {
val updatedActionExecutionResults = mutableListOf<ActionExecutionResult>()
val currentActionIds = mutableSetOf<String>()
// Update alert's existing action execution results
for (actionExecutionResult in currentAlert.actionExecutionResults) {
val actionId = actionExecutionResult.actionId
currentActionIds.add(actionId)
val actionRunResult = actionResults[actionId]
when {
actionRunResult == null -> updatedActionExecutionResults.add(actionExecutionResult)
actionRunResult.throttled ->
updatedActionExecutionResults.add(
actionExecutionResult.copy(
throttledCount = actionExecutionResult.throttledCount + 1
)
)
else -> updatedActionExecutionResults.add(actionExecutionResult.copy(lastExecutionTime = actionRunResult.executionTime))
}
}
// Add action execution results not currently present in the alert
updatedActionExecutionResults.addAll(
actionResults.filter { !currentActionIds.contains(it.key) }
.map { ActionExecutionResult(it.key, it.value.executionTime, if (it.value.throttled) 1 else 0) }
)
val updatedErrorHistory = currentAlert.errorHistory.update(alertError)
return if (alertError == null) {
currentAlert.copy(errorHistory = updatedErrorHistory, actionExecutionResults = updatedActionExecutionResults)
} else {
currentAlert.copy(
state = Alert.State.ERROR,
errorMessage = alertError.message,
errorHistory = updatedErrorHistory,
actionExecutionResults = updatedActionExecutionResults
)
}
}