state = runStateThroughFilters(state);
if (!state.success()) {
logger.info(format("Reaction %s failed in %s.", reaction.name(), state));
+ Optional<State> lastState = reactionState.loadLastState();
saveStateWithIncreasedFailCount(state);
- errorEmailAction.execute(createErrorOutput(reaction, state));
+ if (thisFailureIsTheFirstFailure(lastState)) {
+ errorEmailAction.execute(createErrorOutput(reaction, state));
+ }
return;
}
Optional<State> lastSuccessfulState = reactionState.loadLastSuccessfulState();
logger.info(format("Reaction %s finished.", reaction.name()));
}
+ private static boolean thisFailureIsTheFirstFailure(Optional<State> lastState) {
+ return lastState.map(State::success).orElse(true);
+ }
+
private void saveStateWithIncreasedFailCount(State state) {
Optional<State> lastState = reactionState.loadLastState();
state.setFailCount(lastState.map(State::failCount).orElse(0) + 1);