From 4562f52c9b540944200b33d4ffbd60b3cbc5ee79 Mon Sep 17 00:00:00 2001 From: mjkwiatkowski Date: Wed, 17 Jun 2026 18:08:56 +0200 Subject: feat: managed to retrieve metric-by-metric from Redis in real time --- .../main/kotlin/org/opendc/common/utils/Redis.kt | 64 ++++++++++++++++------ 1 file changed, 46 insertions(+), 18 deletions(-) (limited to 'opendc-common/src/main/kotlin/org/opendc/common') diff --git a/opendc-common/src/main/kotlin/org/opendc/common/utils/Redis.kt b/opendc-common/src/main/kotlin/org/opendc/common/utils/Redis.kt index b659d40a..bf674a33 100644 --- a/opendc-common/src/main/kotlin/org/opendc/common/utils/Redis.kt +++ b/opendc-common/src/main/kotlin/org/opendc/common/utils/Redis.kt @@ -4,40 +4,68 @@ import com.fasterxml.jackson.dataformat.toml.TomlMapper import redis.clients.jedis.RedisClient import redis.clients.jedis.StreamEntryID import redis.clients.jedis.params.XReadParams +import java.util.Map import java.util.Properties + /** * This class represents the Redis server instance. * @author Mateusz Kwiatkowski * @see https://redis.io/docs/latest/ * * @see https://redis.io/docs/latest/develop/data-types/streams/ + * + * @see https://www.javadoc.io/doc/redis.clients/jedis/latest/index.html */ @Suppress("DEPRECATION") -public class Redis { - private var properties : Properties +public class Redis private constructor() { + private var jedis : RedisClient? = null + private var properties : Properties? = null init { - properties = TomlMapper().readerFor(Properties().javaClass) - .readValue(Kafka::class.java.getResource("/producer.toml")) + properties = TomlMapper().readerFor(Properties().javaClass).readValue(Kafka::class.java.getResource("/subscriber.toml")) + jedis = RedisClient.create("redis://localhost:${properties?.getProperty("port")}") } - public fun run() { - val jedis : RedisClient = RedisClient.create("redis://localhost:6379") + public companion object { + private var instance: Redis? = null - val res5 = jedis.xread( - XReadParams.xReadParams().block(300).count(100), - object : HashMap() { - init { - put("${properties.getProperty("table")}", StreamEntryID()) + public fun getInstance(): Redis? { + if (instance == null) { + instance = Redis() + } + return instance + } + } + + public fun readOne() { + while(true) { + val messages = jedis?.xread( + XReadParams.xReadParams(), + Map.of("${properties?.getProperty("table")}", StreamEntryID() + )); + + if (messages != null) { + for (stream in messages) { + for (entry in stream.value) { + if(entry.getFields().get("downtime") != null) { + entry.getFields().get("downtime")?.toDouble()?.let { + if (it > 0) { + println("ID: " + entry.getID()) + } + } + } } - }) + } + } + } + // https://redis.io/docs/latest/develop/use-cases/streaming/java-jedis/ + // In Redis you can subscribe to updates to a stream. + // You should base your application off this. + // You can listen for new items with XREAD - // in Redis you can subscribe to updates to a stream. - // you should base your application off this. - // you can listen for new items with XREAD - println(res5) - jedis.close() + // do not close for now + //jedis.close() } -} \ No newline at end of file +} -- cgit v1.2.3