diff --git a/kraken-java-sdk/kraken-java-sdk-sync/src/main/java/com/consoleconnect/kraken/operator/sync/service/push/PushAPIActivityLogScheduler.java b/kraken-java-sdk/kraken-java-sdk-sync/src/main/java/com/consoleconnect/kraken/operator/sync/service/push/PushAPIActivityLogScheduler.java index 4b292eab6..da3426460 100644 --- a/kraken-java-sdk/kraken-java-sdk-sync/src/main/java/com/consoleconnect/kraken/operator/sync/service/push/PushAPIActivityLogScheduler.java +++ b/kraken-java-sdk/kraken-java-sdk-sync/src/main/java/com/consoleconnect/kraken/operator/sync/service/push/PushAPIActivityLogScheduler.java @@ -99,17 +99,30 @@ List pushApiActivityLogToExternalSystem() { } private List 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(); } } @@ -141,10 +154,33 @@ private List pushLogsInBatches( entities.getNumber(), entities.getSize(), entities.getTotalElements())); - var res = - sendLogsToExternalSystem( - ClientEvent.of(CLIENT_ID, CLIENT_PUSH_API_ACTIVITY_LOG, payload)); + HttpResponse 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()); } diff --git a/kraken-java-sdk/kraken-java-sdk-sync/src/test/java/com/consoleconnect/kraken/operator/sync/service/push/PushAPIActivityLogSchedulerTest.java b/kraken-java-sdk/kraken-java-sdk-sync/src/test/java/com/consoleconnect/kraken/operator/sync/service/push/PushAPIActivityLogSchedulerTest.java index 6b090ad30..915e5c6c6 100644 --- a/kraken-java-sdk/kraken-java-sdk-sync/src/test/java/com/consoleconnect/kraken/operator/sync/service/push/PushAPIActivityLogSchedulerTest.java +++ b/kraken-java-sdk/kraken-java-sdk-sync/src/test/java/com/consoleconnect/kraken/operator/sync/service/push/PushAPIActivityLogSchedulerTest.java @@ -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