@Override public void sendProjectAnalysisUpdate(Analysis analysis, Supplier<WebhookPayload> payloadSupplier) { List<Webhook> webhooks = readWebHooksFrom(analysis.getProjectUuid()) .map(dto -> new Webhook(dto.getUuid(), analysis.getProjectUuid(), analysis.getCeTaskUuid(), analysis.getAnalysisUuid(), dto.getName(), dto.getUrl())) .collect(MoreCollectors.toList()); if (webhooks.isEmpty()) { return; } WebhookPayload payload = payloadSupplier.get(); webhooks.forEach(webhook -> asyncExecution.addToQueue(() -> { WebhookDelivery delivery = caller.call(webhook, payload); log(delivery); deliveryStorage.persist(delivery); })); asyncExecution.addToQueue(() -> deliveryStorage.purge(analysis.getProjectUuid())); }
public void persist(WebhookDelivery delivery) { WebhookDeliveryDao dao = dbClient.webhookDeliveryDao(); try (DbSession dbSession = dbClient.openSession(false)) { dao.insert(dbSession, toDto(delivery)); dbSession.commit(); } }
@Test public void persist_error_stacktrace() { when(uuidFactory.create()).thenReturn(DELIVERY_UUID); WebhookDelivery delivery = newBuilderTemplate() .setError(new IOException("fail to connect")) .build(); underTest.persist(delivery); WebhookDeliveryDto dto = dbClient.webhookDeliveryDao().selectByUuid(dbSession, DELIVERY_UUID).get(); assertThat(dto.getErrorStacktrace()).contains("java.io.IOException", "fail to connect"); }
@Test public void purge_deletes_records_older_than_one_month_on_the_project() { when(system.now()).thenReturn(NOW); dbClient.webhookDeliveryDao().insert(dbSession, newDto("D1", "PROJECT_1", TWO_MONTHS_AGO)); dbClient.webhookDeliveryDao().insert(dbSession, newDto("D2", "PROJECT_1", TWO_WEEKS_AGO)); dbClient.webhookDeliveryDao().insert(dbSession, newDto("D3", "PROJECT_2", TWO_MONTHS_AGO)); dbSession.commit(); underTest.purge("PROJECT_1"); // do not purge another project PROJECT_2 assertThat(selectAllDeliveryUuids(dbTester, dbSession)).containsOnly("D2", "D3"); }
@Test public void persist_effective_url_if_present() { when(uuidFactory.create()).thenReturn(DELIVERY_UUID); String effectiveUrl = randomAlphabetic(15); WebhookDelivery delivery = newBuilderTemplate() .setEffectiveUrl(effectiveUrl) .build(); underTest.persist(delivery); WebhookDeliveryDto dto = dbClient.webhookDeliveryDao().selectByUuid(dbSession, DELIVERY_UUID).get(); assertThat(dto.getUrl()).isEqualTo(effectiveUrl); }
@Override public void sendProjectAnalysisUpdate(Analysis analysis, Supplier<WebhookPayload> payloadSupplier) { List<Webhook> webhooks = readWebHooksFrom(analysis.getProjectUuid()) .map(dto -> new Webhook(dto.getUuid(), analysis.getProjectUuid(), analysis.getCeTaskUuid(), analysis.getAnalysisUuid(), dto.getName(), dto.getUrl())) .collect(MoreCollectors.toList()); if (webhooks.isEmpty()) { return; } WebhookPayload payload = payloadSupplier.get(); webhooks.forEach(webhook -> asyncExecution.addToQueue(() -> { WebhookDelivery delivery = caller.call(webhook, payload); log(delivery); deliveryStorage.persist(delivery); })); asyncExecution.addToQueue(() -> deliveryStorage.purge(analysis.getProjectUuid())); }
@Test public void persist_generates_uuid_then_inserts_record() { when(uuidFactory.create()).thenReturn(DELIVERY_UUID); WebhookDelivery delivery = newBuilderTemplate().build(); underTest.persist(delivery); WebhookDeliveryDto dto = dbClient.webhookDeliveryDao().selectByUuid(dbSession, DELIVERY_UUID).get(); assertThat(dto.getUuid()).isEqualTo(DELIVERY_UUID); assertThat(dto.getWebhookUuid()).isEqualTo("WEBHOOK_UUID_1"); assertThat(dto.getComponentUuid()).isEqualTo(delivery.getWebhook().getComponentUuid()); assertThat(dto.getCeTaskUuid()).isEqualTo(delivery.getWebhook().getCeTaskUuid().get()); assertThat(dto.getName()).isEqualTo(delivery.getWebhook().getName()); assertThat(dto.getUrl()).isEqualTo(delivery.getWebhook().getUrl()); assertThat(dto.getCreatedAt()).isEqualTo(delivery.getAt()); assertThat(dto.getHttpStatus()).isEqualTo(delivery.getHttpStatus().get()); assertThat(dto.getDurationMs()).isEqualTo(delivery.getDurationInMs().get()); assertThat(dto.getPayload()).isEqualTo(delivery.getPayload().getJson()); assertThat(dto.getErrorStacktrace()).isNull(); }
public void persist(WebhookDelivery delivery) { WebhookDeliveryDao dao = dbClient.webhookDeliveryDao(); try (DbSession dbSession = dbClient.openSession(false)) { dao.insert(dbSession, toDto(delivery)); dbSession.commit(); } }