Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,18 @@ public enum EventOutcome {
/**
* Student updated event outcome.
*/
TRAX_STUDENT_MASTER_UPDATED,
TRAX_STUDENT_MASTER_UPDATED;

public static boolean isValid(String value) {
if (value == null) {
return false;
}
try {
EventOutcome.valueOf(value);
return true;
} catch (IllegalArgumentException e) {
return false;
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -16,5 +16,17 @@ public enum EventType {
XPROGRAM,
ASSESSMENT,
COURSE,
FI10ADD
FI10ADD;

public static boolean isValid(String value) {
if (value == null) {
return false;
}
try {
EventType.valueOf(value);
return true;
} catch (IllegalArgumentException e) {
return false;
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package ca.bc.gov.educ.api.dataconversion.exception;

import lombok.Data;
import lombok.EqualsAndHashCode;

import java.io.Serial;

@EqualsAndHashCode(callSuper = true)
@Data
public class IgnoreEventException extends Exception {

private final String eventType;
private final String eventOutcome;
/**
* The constant serialVersionUID.
*/
@Serial
private static final long serialVersionUID = 5241655513745148898L;

/**
* Instantiates a new Pen reg api runtime exception.
*
* @param message the message
*/
public IgnoreEventException(final String message, String eventType, String eventOutcome) {
super(message);
this.eventType = eventType;
this.eventOutcome = eventOutcome;
}
}
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
package ca.bc.gov.educ.api.dataconversion.messaging.jetstream;

import ca.bc.gov.educ.api.dataconversion.constant.Topics;
import ca.bc.gov.educ.api.dataconversion.exception.IgnoreEventException;
import ca.bc.gov.educ.api.dataconversion.model.ChoreographedEvent;
import ca.bc.gov.educ.api.dataconversion.service.EventHandlerDelegatorService;
import ca.bc.gov.educ.api.dataconversion.util.EducGradDataConversionApiConstants;
import ca.bc.gov.educ.api.dataconversion.util.EventUtils;
import ca.bc.gov.educ.api.dataconversion.util.JsonUtil;
import ca.bc.gov.educ.api.dataconversion.util.LogHelper;
import com.google.common.util.concurrent.ThreadFactoryBuilder;
Expand Down Expand Up @@ -96,7 +98,7 @@ public void onMessage(final Message message) {
try {
val eventString = new String(message.getData());
LogHelper.logMessagingEventDetails(eventString, constants.isSplunkLogHelperEnabled());
final ChoreographedEvent event = JsonUtil.getJsonObjectFromString(ChoreographedEvent.class, eventString);
final ChoreographedEvent event = EventUtils.getChoreographedEventIfValid(eventString);
if (event.getEventPayload() == null) {
message.ack();
log.warn("payload is null, ignoring event :: {}", event);
Expand All @@ -110,6 +112,9 @@ public void onMessage(final Message message) {
}
});
log.debug("received event :: {} ", event);
} catch (final IgnoreEventException ex) {
log.warn("Ignoring event with type :: {} :: and event outcome :: {}", ex.getEventType(), ex.getEventOutcome());
message.ack();
} catch (final Exception ex) {
log.error("Exception ", ex);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package ca.bc.gov.educ.api.dataconversion.model;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.UUID;

@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@JsonIgnoreProperties(ignoreUnknown = true)
public class ChoreographedEventValidation {
UUID eventID;
/**
* The Event type.
*/
String eventType;
/**
* The Event outcome.
*/
String eventOutcome;
/**
* The Activity code.
*/
String activityCode;
/**
* The Event payload.
*/
String eventPayload; // json string
/**
* The Create user.
*/
String createUser;
/**
* The Update user.
*/
String updateUser;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package ca.bc.gov.educ.api.dataconversion.util;

import ca.bc.gov.educ.api.dataconversion.constant.EventOutcome;
import ca.bc.gov.educ.api.dataconversion.constant.EventType;
import ca.bc.gov.educ.api.dataconversion.exception.IgnoreEventException;
import ca.bc.gov.educ.api.dataconversion.model.ChoreographedEvent;
import ca.bc.gov.educ.api.dataconversion.model.ChoreographedEventValidation;
import com.fasterxml.jackson.core.JsonProcessingException;
import org.apache.commons.lang3.StringUtils;


public final class EventUtils {
private EventUtils() {
}

public static ChoreographedEvent getChoreographedEventIfValid(String eventString) throws JsonProcessingException, IgnoreEventException {
final ChoreographedEventValidation event = JsonUtil.getJsonObjectFromString(ChoreographedEventValidation.class, eventString);
if(StringUtils.isNotBlank(event.getEventOutcome()) && !EventOutcome.isValid(event.getEventOutcome())) {
throw new IgnoreEventException("Invalid event outcome", event.getEventType(), event.getEventOutcome());
}else if(StringUtils.isNotBlank(event.getEventType()) && !EventType.isValid(event.getEventType())) {
throw new IgnoreEventException("Invalid event type", event.getEventType(), event.getEventOutcome());
}
return JsonUtil.getJsonObjectFromString(ChoreographedEvent.class, eventString);
}
}