From d7c0af105e1e6e02d4f508cd7647bd4ffbc60be2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Pt=C3=A1=C4=8Dek?= Date: Wed, 21 Jun 2023 00:01:31 +0200 Subject: [PATCH] sync --- .../RemoteWriteSenderDatabaseStorage.kt | 3 - .../worker/RemoteWriteSenderDbStorage.kt | 102 ++++++++++++++++++ ...rage.kt => RemoteWriteSenderMemStorage.kt} | 68 +++++++++++- .../worker/RemoteWriteSenderStorage.kt | 100 +---------------- 4 files changed, 169 insertions(+), 104 deletions(-) delete mode 100644 client/app/src/main/java/com/birdthedeveloper/prometheus/android/prometheus/android/exporter/worker/RemoteWriteSenderDatabaseStorage.kt create mode 100644 client/app/src/main/java/com/birdthedeveloper/prometheus/android/prometheus/android/exporter/worker/RemoteWriteSenderDbStorage.kt rename client/app/src/main/java/com/birdthedeveloper/prometheus/android/prometheus/android/exporter/worker/{RemoteWriteSenderMemoryStorage.kt => RemoteWriteSenderMemStorage.kt} (70%) diff --git a/client/app/src/main/java/com/birdthedeveloper/prometheus/android/prometheus/android/exporter/worker/RemoteWriteSenderDatabaseStorage.kt b/client/app/src/main/java/com/birdthedeveloper/prometheus/android/prometheus/android/exporter/worker/RemoteWriteSenderDatabaseStorage.kt deleted file mode 100644 index af40ae1..0000000 --- a/client/app/src/main/java/com/birdthedeveloper/prometheus/android/prometheus/android/exporter/worker/RemoteWriteSenderDatabaseStorage.kt +++ /dev/null @@ -1,3 +0,0 @@ -package com.birdthedeveloper.prometheus.android.prometheus.android.exporter.worker - -//TODO \ No newline at end of file diff --git a/client/app/src/main/java/com/birdthedeveloper/prometheus/android/prometheus/android/exporter/worker/RemoteWriteSenderDbStorage.kt b/client/app/src/main/java/com/birdthedeveloper/prometheus/android/prometheus/android/exporter/worker/RemoteWriteSenderDbStorage.kt new file mode 100644 index 0000000..c688159 --- /dev/null +++ b/client/app/src/main/java/com/birdthedeveloper/prometheus/android/prometheus/android/exporter/worker/RemoteWriteSenderDbStorage.kt @@ -0,0 +1,102 @@ +package com.birdthedeveloper.prometheus.android.prometheus.android.exporter.worker + +import android.content.Context +import androidx.room.Dao +import androidx.room.Database +import androidx.room.Entity +import androidx.room.PrimaryKey +import androidx.room.Query +import androidx.room.Room +import androidx.room.RoomDatabase + +//TODO + +@Entity +data class RoomTimeSeries { + +} + +@Entity +data class RoomSample( + @PrimaryKey(autoGenerate = true) + val id: Int = 0, + val timeStamp : Long, + val value : Double, +) + +@Database( + entities = [RoomTimeSeries::class, RoomSample::class], + version = 1 +) +abstract class RemoteWriteDatabase: RoomDatabase() { + + abstract val dao: RoomDao +} + +@Dao +interface RoomDao { + @Query("")//TODO + fun insertOneTimeSeriesSample(){ + + } + + @Query("") //TODO + fun getNumberOfTimeSeriesSamples(){ + + } + + @Query("") //TODO + fun getTotalNumberOfSamples(){ + + } + +} + +class RemoteWriteSenderDbStorage(getContext: () -> Context) : RemoteWriteSenderStorage(){ + + private val roomDb by lazy { + Room.databaseBuilder( + getContext(), + RemoteWriteDatabase::class.java, + "contacts.db" + ).build() + } + + private fun encodeLabels(labelsList: List) : String{ + //TODO + var result : String = "" + for (label in labelsList){ + // check if label contains escape character + if (label.name.contains("-") || label.value.contains("-")){ + throw IllegalArgumentException("Time series labels should not contain \'-\'") + }else{ + //TODO + } + } + return result + } + + private fun decodeLabels(labels : String) : List { + //TODO + } + override fun writeScrapedSample(metricsScrape: MetricsScrape) { + TODO("Not yet implemented") + } + + override fun getScrapedSamplesCompressedProtobuf(howMany: Int): ByteArray { + TODO("Not yet implemented") + } + + override fun removeNumberOfScrapedSamples(number: Int) { + TODO("Not yet implemented") + } + + override fun isEmpty(): Boolean { + TODO("Not yet implemented") + } + + override fun getLength(): Int { + TODO("Not yet implemented") + } + +} \ No newline at end of file diff --git a/client/app/src/main/java/com/birdthedeveloper/prometheus/android/prometheus/android/exporter/worker/RemoteWriteSenderMemoryStorage.kt b/client/app/src/main/java/com/birdthedeveloper/prometheus/android/prometheus/android/exporter/worker/RemoteWriteSenderMemStorage.kt similarity index 70% rename from client/app/src/main/java/com/birdthedeveloper/prometheus/android/prometheus/android/exporter/worker/RemoteWriteSenderMemoryStorage.kt rename to client/app/src/main/java/com/birdthedeveloper/prometheus/android/prometheus/android/exporter/worker/RemoteWriteSenderMemStorage.kt index d35d707..83f595b 100644 --- a/client/app/src/main/java/com/birdthedeveloper/prometheus/android/prometheus/android/exporter/worker/RemoteWriteSenderMemoryStorage.kt +++ b/client/app/src/main/java/com/birdthedeveloper/prometheus/android/prometheus/android/exporter/worker/RemoteWriteSenderMemStorage.kt @@ -1,16 +1,18 @@ package com.birdthedeveloper.prometheus.android.prometheus.android.exporter.worker import android.util.Log +import remote.write.RemoteWrite import java.util.LinkedList import java.util.Queue // HashMap private typealias ConverterHashMap = HashMap, MutableList> -class RemoteWriteSenderMemoryStorage : RemoteWriteSenderStorage() { +class RemoteWriteSenderMemStorage : RemoteWriteSenderStorage() { private fun filterExpiredMetrics(metrics : MutableList){ - val oldestMetricTimeMs : Long = System.currentTimeMillis() - maxMetricsAge * 1000 + val now : Long = System.currentTimeMillis() + val oldestMetricTimeMs : Long = now() - maxMetricsAge * 1000 var howManyMetricsRemove : Int = 0 // count how many metrics to remove @@ -36,7 +38,7 @@ class RemoteWriteSenderMemoryStorage : RemoteWriteSenderStorage() { labels: List, samples: MutableList ): TimeSeries { - val timeSeriesBuilder: TimeSeries.Builder = TimeSeries.newBuilder() + val timeSeriesBuilder: RemoteWrite.TimeSeries.Builder = RemoteWrite.TimeSeries.newBuilder() timeSeriesBuilder.addAllLabels(labels.map { it.toProtobufLabel() @@ -148,4 +150,62 @@ class RemoteWriteSenderMemoryStorage : RemoteWriteSenderStorage() { override fun getLength(): Int { return data.count() } -} \ No newline at end of file +} + + +//TODO sort this out + +class RemoteWriteSenderSimpleMemoryStorage : RemoteWriteSenderStorage() { + private val data: Queue = LinkedList() + + override fun getScrapedSamplesCompressedProtobuf(howMany: Int): ByteArray { + if (howMany < 1) { + throw IllegalArgumentException("howMany must be bigger than zero") + } + + val scrapedMetrics: MutableList = mutableListOf() + for (i in 1..howMany) { + val oneMetric: MetricsScrape? = data.poll() + if (oneMetric == null) { + break + } else { + scrapedMetrics.add(oneMetric) + } + } + Log.d(TAG, "Getting scraped samples: ${scrapedMetrics.size} samples") + + filterExpiredMetrics(scrapedMetrics) + + val writeRequest: RemoteWrite.WriteRequest = this.metricsScrapeListToProtobuf(scrapedMetrics.toList()) + val bytes: ByteArray = writeRequest.toByteArray() + return this.encodeWithSnappy(bytes) + } + + //TODO use this thing + override fun removeNumberOfScrapedSamples(number: Int) { + if (number > 0) { + for (i in 1..number) { + if(data.isEmpty()){ + break; + }else{ + data.remove() + } + } + } else { + throw IllegalArgumentException("number must by higher than 0") + } + } + + override fun writeScrapedSample(metricsScrape: MetricsScrape) { + Log.d(TAG, "Writing scraped sample to storage") + data.add(metricsScrape) + } + + override fun isEmpty(): Boolean { + return data.isEmpty() + } + + override fun getLength(): Int { + return data.count() + } +} diff --git a/client/app/src/main/java/com/birdthedeveloper/prometheus/android/prometheus/android/exporter/worker/RemoteWriteSenderStorage.kt b/client/app/src/main/java/com/birdthedeveloper/prometheus/android/prometheus/android/exporter/worker/RemoteWriteSenderStorage.kt index 485147f..d806601 100644 --- a/client/app/src/main/java/com/birdthedeveloper/prometheus/android/prometheus/android/exporter/worker/RemoteWriteSenderStorage.kt +++ b/client/app/src/main/java/com/birdthedeveloper/prometheus/android/prometheus/android/exporter/worker/RemoteWriteSenderStorage.kt @@ -104,13 +104,13 @@ data class TimeSeriesSample( abstract class RemoteWriteSenderStorage { companion object{ - protected const val maxMetricsAge : Int = 58 * 60 // 58 minutes + const val maxMetricsAge : Int = 58 * 60 // 58 minutes - protected val remoteWriteLabel: TimeSeriesLabel = TimeSeriesLabel( + val remoteWriteLabel: TimeSeriesLabel = TimeSeriesLabel( name = "backfill", value = "true", ) - protected fun encodeWithSnappy(data: ByteArray): ByteArray { + fun encodeWithSnappy(data: ByteArray): ByteArray { return Snappy.compress(data) } } @@ -122,97 +122,3 @@ abstract class RemoteWriteSenderStorage { abstract fun getLength(): Int } -class RemoteWriteSenderSimpleMemoryStorage : RemoteWriteSenderStorage() { - private val data: Queue = LinkedList() - - override fun getScrapedSamplesCompressedProtobuf(howMany: Int): ByteArray { - if (howMany < 1) { - throw IllegalArgumentException("howMany must be bigger than zero") - } - - val scrapedMetrics: MutableList = mutableListOf() - for (i in 1..howMany) { - val oneMetric: MetricsScrape? = data.poll() - if (oneMetric == null) { - break - } else { - scrapedMetrics.add(oneMetric) - } - } - Log.d(TAG, "Getting scraped samples: ${scrapedMetrics.size} samples") - - filterExpiredMetrics(scrapedMetrics) - - val writeRequest: WriteRequest = this.metricsScrapeListToProtobuf(scrapedMetrics.toList()) - val bytes: ByteArray = writeRequest.toByteArray() - return this.encodeWithSnappy(bytes) - } - - //TODO use this thing - override fun removeNumberOfScrapedSamples(number: Int) { - if (number > 0) { - for (i in 1..number) { - if(data.isEmpty()){ - break; - }else{ - data.remove() - } - } - } else { - throw IllegalArgumentException("number must by higher than 0") - } - } - - override fun writeScrapedSample(metricsScrape: MetricsScrape) { - Log.d(TAG, "Writing scraped sample to storage") - data.add(metricsScrape) - } - - override fun isEmpty(): Boolean { - return data.isEmpty() - } - - override fun getLength(): Int { - return data.count() - } -} - -@Entity -data class RoomLabel { - @PrimaryKey -} - -@Entity -data class RoomTimeSeries { - -} - -interface RoomDao { - @Query - fun insertOneTimeSeriesSample(){ - - } - -} - -class RemoteWriteSenderDatabaseStorage : RemoteWriteSenderStorage() { - override fun getScrapedSamplesCompressedProtobuf(howMany: Int): ByteArray { - TODO("Not yet implemented") - } - - override fun removeNumberOfScrapedSamples(number: Int) { - TODO("Not yet implemented") - } - - override fun writeScrapedSample(metricsScrape: MetricsScrape) { - TODO("Not yet implemented") - } - - override fun isEmpty(): Boolean { - TODO("Not yet implemented") - } - - override fun getLength(): Int { - TODO("Not yet implemented") - } -}