From 9ecfb5c9040f9a51886272b073c8a67738f8082e Mon Sep 17 00:00:00 2001 From: root Date: Sun, 21 Sep 2025 18:43:30 +0500 Subject: [PATCH] generate --- Dockerfile | 4 +-- .../service/ReportGenerationService.java | 26 ++++++++++++++----- src/main/resources/application.properties | 3 +++ 3 files changed, 25 insertions(+), 8 deletions(-) diff --git a/Dockerfile b/Dockerfile index e4db24c..803d2ea 100644 --- a/Dockerfile +++ b/Dockerfile @@ -25,5 +25,5 @@ RUN chown appuser:appgroup app.jar # Switch to the non-root user USER appuser -# Run the jar file with JVM flags for heap dump generation on OutOfMemoryError -ENTRYPOINT ["java", "-XX:+HeapDumpOnOutOfMemoryError", "-XX:HeapDumpPath=/dumps/heap.hprof", "-jar", "app.jar"] \ No newline at end of file +# Run the jar file with JVM flags for heap dump generation on OutOfMemoryError and headless mode +ENTRYPOINT ["java", "-Djava.awt.headless=true", "-XX:+HeapDumpOnOutOfMemoryError", "-XX:HeapDumpPath=/dumps/heap.hprof", "-jar", "app.jar"] \ No newline at end of file diff --git a/src/main/java/kz/konturai/parser/service/ReportGenerationService.java b/src/main/java/kz/konturai/parser/service/ReportGenerationService.java index bc97385..f24c044 100644 --- a/src/main/java/kz/konturai/parser/service/ReportGenerationService.java +++ b/src/main/java/kz/konturai/parser/service/ReportGenerationService.java @@ -325,14 +325,28 @@ public class ReportGenerationService { } private byte[] buildSentimentChart(Map sentiment) { - DefaultPieDataset dataset = new DefaultPieDataset<>(); - for (Map.Entry e : sentiment.entrySet()) { - dataset.setValue(e.getKey(), e.getValue()); - } - JFreeChart chart = ChartFactory.createPieChart("Sentiment", dataset, true, false, false); try { - return EncoderUtil.encode(chart.createBufferedImage(800, 500), ImageFormat.PNG); + // Disable font rendering to avoid Docker font issues + System.setProperty("java.awt.headless", "true"); + + DefaultPieDataset dataset = new DefaultPieDataset<>(); + for (Map.Entry e : sentiment.entrySet()) { + dataset.setValue(e.getKey(), e.getValue()); + } + + JFreeChart chart = ChartFactory.createPieChart("Sentiment", dataset, true, false, false); + + // Create buffered image with headless graphics + java.awt.image.BufferedImage image = new java.awt.image.BufferedImage(800, 500, + java.awt.image.BufferedImage.TYPE_INT_RGB); + java.awt.Graphics2D g2d = image.createGraphics(); + g2d.setRenderingHint(java.awt.RenderingHints.KEY_ANTIALIASING, java.awt.RenderingHints.VALUE_ANTIALIAS_ON); + chart.draw(g2d, new java.awt.geom.Rectangle2D.Double(0, 0, 800, 500)); + g2d.dispose(); + + return EncoderUtil.encode(image, ImageFormat.PNG); } catch (Exception ex) { + // Return null if chart generation fails return null; } } diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index a1a5ba1..55d16df 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -3,6 +3,9 @@ minio.endpoint=http://92.38.48.166:9000 minio.access-key=z9HhZTjzhVWqw3D20u7q minio.secret-key=lhhHtJow1b10z6EZRMTQIU1tsKkoaxCVpSypCrcb minio.bucket-name=konturai + +# Headless mode for chart generation in Docker +java.awt.headless=true spring.application.name=parser # MongoDB Configuration