Skip to content
Open
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 @@ -99,17 +99,30 @@ List<PushExternalSystemPayload> pushApiActivityLogToExternalSystem() {
}

private List<PushExternalSystemPayload> pushLogs(MgmtEventEntity mgmtEvent) {
log.info(
"Starting pushLogs for eventId:{} with current status={}",
mgmtEvent.getId(),
mgmtEvent.getStatus());
mgmtEvent.setStatus(EventStatusType.IN_PROGRESS.name());
mgmtEventRepository.save(mgmtEvent);
log.info("Event {} status updated to IN_PROGRESS", mgmtEvent.getId());
var logInfo = fromJson(mgmtEvent.getPayload(), PushLogActivityLogInfo.class);
log.info("Successfully parsed pushLogs payload for eventId:{}", mgmtEvent.getId());
try {
log.info("pushLogs in batches for eventId:{} ...", mgmtEvent.getId());
var sent = pushLogsInBatches(logInfo, mgmtEvent.getId());
log.info(
"pushLogs successfully pushed {} logs for eventId:{}", sent.size(), mgmtEvent.getId());
mgmtEvent.setStatus(EventStatusType.DONE.name());
mgmtEventRepository.save(mgmtEvent);
log.info("pushLogs Event {} status updated to DONE", mgmtEvent.getId());
return sent;
} catch (Exception ex) {
log.error(
"Failed to pushLogs for eventId:{} error={}", mgmtEvent.getId(), ex.getMessage(), ex);
mgmtEvent.setStatus(EventStatusType.FAILED.name());
mgmtEventRepository.save(mgmtEvent);
log.warn("pushLogs event {} status updated to FAILED", mgmtEvent.getId());
return emptyList();
}
}
Expand Down Expand Up @@ -141,10 +154,33 @@ private List<PushExternalSystemPayload> pushLogsInBatches(
entities.getNumber(),
entities.getSize(),
entities.getTotalElements()));
var res =
sendLogsToExternalSystem(
ClientEvent.of(CLIENT_ID, CLIENT_PUSH_API_ACTIVITY_LOG, payload));
HttpResponse<String> res = null;
try {
res =
sendLogsToExternalSystem(
ClientEvent.of(CLIENT_ID, CLIENT_PUSH_API_ACTIVITY_LOG, payload));
log.info(
"External system responded eventId:{} page:{} statusCode:{}",
eventId,
page,
res.getCode());
} catch (Exception e) {
log.error(
"Exception occurred while sending logs to external system "
+ "eventId:{} page:{} error:{}",
eventId,
page,
e.getMessage(),
e);
throw new KrakenException(
500, "Exception while sending logs to external system: " + e.getMessage(), e);
}
if (res.getCode() != 200) {
log.error(
"External system returned non-200 status eventId:{} page:{} message:{}",
eventId,
page,
res.getMessage());
throw new KrakenException(
400, "Pushing logs to external system filed with status: " + res.getCode());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,37 @@ static void tearDown() {
mockWebServer.shutdown();
}

@Test
void giveApiLogs_whenSendLogsThrowsException_thenEventInStatusFailed() {
// given: mock external system throws an exception
mockWebServer.enqueue(
new MockResponse()
.setResponseCode(200)
.setBodyDelay(0, java.util.concurrent.TimeUnit.MILLISECONDS)
.setSocketPolicy(okhttp3.mockwebserver.SocketPolicy.DISCONNECT_AT_START));

// prepare logs
var endTime = ZonedDateTime.parse(NOW_WITH_TIMEZONE);
var startTime = endTime.minusDays(1);
var logs = createLogs(toUTC(endTime), ENV_ID);
apiActivityLogRepository.saveAll(logs);

// create mgmt event
var logEvent = createPushApiActivityLogEvent(ENV_ID, startTime, endTime, "userId1");

// when
var sent = sut.pushApiActivityLogToExternalSystem();

// then
var event =
mgmtEventRepository
.findById(logEvent.getId())
.orElseThrow(() -> new RuntimeException("Missing event " + logEvent.getId()));

assertThat(event.getStatus()).isEqualTo(EventStatusType.FAILED.name());
assertThat(sent).isEmpty();
}

@Test
void givenApiLogs_whenPushApiActivityLogToExternalSystem_thenAllLogsSentAndEventInStatusDone() {
// given
Expand Down
Loading