From 5b7c41c82995ecd8552925d5c3fb23e01d5e82e1 Mon Sep 17 00:00:00 2001 From: Thomas Peetz Date: Sat, 22 Aug 2026 02:04:48 +0200 Subject: [PATCH] add Routes and Processors --- kontor-api/Containerfile | 4 +- .../integration/routes/QueueMediaLink.java | 29 +++++++------ .../integration/routes/QueueMediaLoFi.java | 41 +++++++++++++++++++ .../integration/routes/QueueMediaVideo.java | 41 +++++++++++++++++++ .../services/CheckLoFiProcessor.java | 37 +++++++++++++++++ .../services/CheckVideoProcessor.java | 37 +++++++++++++++++ script/cibuild | 2 +- 7 files changed, 174 insertions(+), 17 deletions(-) create mode 100644 kontor-spring/src/main/java/de/thpeetz/kontor/integration/routes/QueueMediaLoFi.java create mode 100644 kontor-spring/src/main/java/de/thpeetz/kontor/integration/routes/QueueMediaVideo.java create mode 100644 kontor-spring/src/main/java/de/thpeetz/kontor/integration/services/CheckLoFiProcessor.java create mode 100644 kontor-spring/src/main/java/de/thpeetz/kontor/integration/services/CheckVideoProcessor.java diff --git a/kontor-api/Containerfile b/kontor-api/Containerfile index 7690598..991a1b0 100644 --- a/kontor-api/Containerfile +++ b/kontor-api/Containerfile @@ -14,7 +14,9 @@ ENV PATH="/root/.local/bin:${PATH}" WORKDIR /app COPY ./pyproject.toml . -RUN --mount=type=bind,source=/home/tpeetz/projects/kontor/kontor-model,target=/container/kontor-model uv add /container/kontor-model +#RUN --mount=type=bind,source=/home/tpeetz/projects/kontor/kontor-model,target=/container/kontor-model uv add /container/kontor-model +#COPY ../kontor-model/ /container +RUN uv add /container/kontor-model RUN uv sync # ------------------------------- Production Stage ------------------------------ ## diff --git a/kontor-spring/src/main/java/de/thpeetz/kontor/integration/routes/QueueMediaLink.java b/kontor-spring/src/main/java/de/thpeetz/kontor/integration/routes/QueueMediaLink.java index 74fba5a..e349cc4 100644 --- a/kontor-spring/src/main/java/de/thpeetz/kontor/integration/routes/QueueMediaLink.java +++ b/kontor-spring/src/main/java/de/thpeetz/kontor/integration/routes/QueueMediaLink.java @@ -21,22 +21,21 @@ public class QueueMediaLink extends RouteBuilder { @Override public void configure() throws Exception { from("jms:queue:media.link") - .errorHandler(deadLetterChannel("jms:queue:DLQ") - .maximumRedeliveries(0) - .useOriginalMessage() - .onPrepareFailure(exchange -> { - exchange.getIn().setHeader("FailureReason", "processing failed"); - }) - ) - .routeId("media.link") - .log("${body}") - .trace(true) - .process(new CheckLinkProcessor(mediaFileService)) - .choice() + .errorHandler(deadLetterChannel("jms:queue:DLQ") + .maximumRedeliveries(0) + .useOriginalMessage() + .onPrepareFailure(exchange -> { + exchange.getIn().setHeader("FailureReason", "processing failed"); + })) + .routeId("media.link") + .log("${body}") + .trace(true) + .process(new CheckLinkProcessor(mediaFileService)) + .choice() .when(exchangeProperty("linkId").isNotNull()) - .to("jms:queue:media.link.add") + .to("jms:queue:media.link.add") .otherwise() - .to("jms:queue:DLQ") - .to("jms:queue:media.link.add.processed"); + .to("jms:queue:DLQ") + .to("jms:queue:media.link.processed"); } } diff --git a/kontor-spring/src/main/java/de/thpeetz/kontor/integration/routes/QueueMediaLoFi.java b/kontor-spring/src/main/java/de/thpeetz/kontor/integration/routes/QueueMediaLoFi.java new file mode 100644 index 0000000..e537d1c --- /dev/null +++ b/kontor-spring/src/main/java/de/thpeetz/kontor/integration/routes/QueueMediaLoFi.java @@ -0,0 +1,41 @@ +package de.thpeetz.kontor.integration.routes; + +import org.apache.camel.builder.RouteBuilder; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import de.thpeetz.kontor.integration.services.CheckLoFiProcessor; +import de.thpeetz.kontor.services.MediaFileService; + +@Component +public class QueueMediaLoFi extends RouteBuilder { + + @Autowired + private final MediaFileService mediaFileService; + + @Autowired + public QueueMediaLoFi(MediaFileService mediaFileService) { + this.mediaFileService = mediaFileService; + } + + @Override + public void configure() throws Exception { + from("jms:queue:media.lofi") + .errorHandler(deadLetterChannel("jms:queue:DLQ") + .maximumRedeliveries(0) + .useOriginalMessage() + .onPrepareFailure(exchange -> { + exchange.getIn().setHeader("FailureReason", "processing failed"); + })) + .routeId("media.lofi") + .log("${body}") + .trace(true) + .process(new CheckLoFiProcessor(mediaFileService)) + .choice() + .when(exchangeProperty("linkId").isNotNull()) + .to("jms:queue:media.lofi.add") + .otherwise() + .to("jms:queue:DLQ") + .to("jms:queue:media.lofi.processed"); + } +} diff --git a/kontor-spring/src/main/java/de/thpeetz/kontor/integration/routes/QueueMediaVideo.java b/kontor-spring/src/main/java/de/thpeetz/kontor/integration/routes/QueueMediaVideo.java new file mode 100644 index 0000000..747e3c5 --- /dev/null +++ b/kontor-spring/src/main/java/de/thpeetz/kontor/integration/routes/QueueMediaVideo.java @@ -0,0 +1,41 @@ +package de.thpeetz.kontor.integration.routes; + +import org.apache.camel.builder.RouteBuilder; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import de.thpeetz.kontor.integration.services.CheckLoFiProcessor; +import de.thpeetz.kontor.services.MediaFileService; + +@Component +public class QueueMediaVideo extends RouteBuilder { + + @Autowired + private final MediaFileService mediaFileService; + + @Autowired + public QueueMediaVideo(MediaFileService mediaFileService) { + this.mediaFileService = mediaFileService; + } + + @Override + public void configure() throws Exception { + from("jms:queue:media.video") + .errorHandler(deadLetterChannel("jms:queue:DLQ") + .maximumRedeliveries(0) + .useOriginalMessage() + .onPrepareFailure(exchange -> { + exchange.getIn().setHeader("FailureReason", "processing failed"); + })) + .routeId("media.video") + .log("${body}") + .trace(true) + .process(new CheckLoFiProcessor(mediaFileService)) + .choice() + .when(exchangeProperty("linkId").isNotNull()) + .to("jms:queue:media.video.add") + .otherwise() + .to("jms:queue:DLQ") + .to("jms:queue:media.video.processed"); + } +} diff --git a/kontor-spring/src/main/java/de/thpeetz/kontor/integration/services/CheckLoFiProcessor.java b/kontor-spring/src/main/java/de/thpeetz/kontor/integration/services/CheckLoFiProcessor.java new file mode 100644 index 0000000..a4142f4 --- /dev/null +++ b/kontor-spring/src/main/java/de/thpeetz/kontor/integration/services/CheckLoFiProcessor.java @@ -0,0 +1,37 @@ +package de.thpeetz.kontor.integration.services; + +import org.apache.camel.Exchange; +import org.apache.camel.Processor; +import org.json.simple.JSONObject; +import org.json.simple.parser.JSONParser; +import org.json.simple.parser.ParseException; + +import de.thpeetz.kontor.services.MediaFileService; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +public class CheckLoFiProcessor implements Processor { + + private final MediaFileService mediaFileService; + + public CheckLoFiProcessor(MediaFileService mediaFileService) { + this.mediaFileService = mediaFileService; + } + + @Override + public void process(Exchange exchange) throws Exception { + String messageBody = exchange.getIn().getBody(String.class); + log.info("message body: {}", messageBody); + + JSONParser parser = new JSONParser(); + try { + JSONObject jsonObject = (JSONObject) parser.parse(messageBody); + String url = (String) jsonObject.get("url"); + log.info("found url: {}", url); + exchange.getIn().setHeader("linkId", null); + } catch (ParseException pe) { + log.info("parse exception: {}", pe.toString()); + exchange.getIn().setHeader("linkId", null); + } + } +} diff --git a/kontor-spring/src/main/java/de/thpeetz/kontor/integration/services/CheckVideoProcessor.java b/kontor-spring/src/main/java/de/thpeetz/kontor/integration/services/CheckVideoProcessor.java new file mode 100644 index 0000000..8e5a58a --- /dev/null +++ b/kontor-spring/src/main/java/de/thpeetz/kontor/integration/services/CheckVideoProcessor.java @@ -0,0 +1,37 @@ +package de.thpeetz.kontor.integration.services; + +import org.apache.camel.Exchange; +import org.apache.camel.Processor; +import org.json.simple.JSONObject; +import org.json.simple.parser.JSONParser; +import org.json.simple.parser.ParseException; + +import de.thpeetz.kontor.services.MediaFileService; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +public class CheckVideoProcessor implements Processor { + + private final MediaFileService mediaFileService; + + public CheckVideoProcessor(MediaFileService mediaFileService) { + this.mediaFileService = mediaFileService; + } + + @Override + public void process(Exchange exchange) throws Exception { + String messageBody = exchange.getIn().getBody(String.class); + log.info("message body: {}", messageBody); + + JSONParser parser = new JSONParser(); + try { + JSONObject jsonObject = (JSONObject) parser.parse(messageBody); + String url = (String) jsonObject.get("url"); + log.info("found url: {}", url); + exchange.getIn().setHeader("linkId", null); + } catch (ParseException pe) { + log.info("parse exception: {}", pe.toString()); + exchange.getIn().setHeader("linkId", null); + } + } +} diff --git a/script/cibuild b/script/cibuild index 18dd619..af8bc23 100755 --- a/script/cibuild +++ b/script/cibuild @@ -9,7 +9,7 @@ cd "$(dirname "$0")/.." echo " => Baue Image localhost/kontor-spring:0.3.0" buildah build -t kontor-spring:0.3.0 kontor-spring echo " => Baue Image localhost/kontor-api:0.3.0" -buildah build --volume /home/tpeetz/projects/kontor/kontor-model:/container/kontor-model kontor-api:0.3.0 kontor-api +buildah build --volume /home/tpeetz/projects/kontor/kontor-model:/container/kontor-model -t kontor-api:0.3.0 kontor-api echo " => Baue Image localhost/kontor-quarkus:0.3.0" buildah build -t kontor-quarkus:0.3.0 kontor-quarkus echo " => Baue Image localhost/kontor-echo:0.3.0"