From 81532221d447aff1ef33286a9869be44fe0e153d Mon Sep 17 00:00:00 2001 From: Krzysztof Rudnicki Date: Sun, 20 Apr 2025 14:28:21 +0200 Subject: [PATCH] fix: alert visualizer does sometihing --- .../anomaly/visualizer/AlertVisualizer.java | 27 ++++++++++++++++++- .../generator/TransactionGenerator.java | 2 +- 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/alarm-visualizer/src/main/java/com/anomaly/visualizer/AlertVisualizer.java b/alarm-visualizer/src/main/java/com/anomaly/visualizer/AlertVisualizer.java index 29c436b1..209f6405 100644 --- a/alarm-visualizer/src/main/java/com/anomaly/visualizer/AlertVisualizer.java +++ b/alarm-visualizer/src/main/java/com/anomaly/visualizer/AlertVisualizer.java @@ -2,6 +2,11 @@ package com.anomaly.visualizer; import com.anomaly.model.TransactionAlert; import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonParseException; import org.apache.kafka.clients.consumer.*; import org.apache.kafka.common.serialization.StringDeserializer; //import org.slf4j.Logger; @@ -10,6 +15,7 @@ import org.apache.kafka.common.serialization.StringDeserializer; import javax.swing.*; import javax.swing.table.DefaultTableModel; import java.awt.*; +import java.lang.reflect.Type; import java.time.Duration; import java.time.Instant; import java.time.ZoneId; @@ -22,7 +28,11 @@ public class AlertVisualizer { private static final String BOOTSTRAP_SERVERS = "localhost:9092"; private static final String GROUP_ID = "alert-visualizer-group"; private static final String TOPIC = "alerts"; - private static final Gson gson = new Gson(); + + // Custom Gson instance with Instant type adapter + private static final Gson gson = new GsonBuilder() + .registerTypeAdapter(Instant.class, new InstantDeserializer()) + .create(); // UI Components private static JFrame frame; @@ -33,6 +43,21 @@ public class AlertVisualizer { private static final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").withZone(ZoneId.systemDefault()); + // Custom deserializer for Instant + private static class InstantDeserializer implements JsonDeserializer { + @Override + public Instant deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) + throws JsonParseException { + try { + // Try parsing as long (epoch milliseconds) + return Instant.ofEpochMilli(json.getAsLong()); + } catch (NumberFormatException e) { + // Try parsing as ISO-8601 string + return Instant.parse(json.getAsString()); + } + } + } + public static void main(String[] args) { setupUI(); diff --git a/transaction-simulator/src/main/java/com/anomaly/generator/TransactionGenerator.java b/transaction-simulator/src/main/java/com/anomaly/generator/TransactionGenerator.java index d9a52a07..1c05b7b4 100644 --- a/transaction-simulator/src/main/java/com/anomaly/generator/TransactionGenerator.java +++ b/transaction-simulator/src/main/java/com/anomaly/generator/TransactionGenerator.java @@ -21,7 +21,7 @@ public class TransactionGenerator { private static final int ANOMALY_FREQUENCY = 3; // Probability of generating an anomaly (1%) - private static final double ANOMALY_PROBABILITY = 0.01; + private static final double ANOMALY_PROBABILITY = 0.5; // Initialize card and user data static {