mirror of
https://github.com/mii443/prometheus-android-exporter.git
synced 2025-08-22 15:15:35 +00:00
sync
This commit is contained in:
@ -1,3 +0,0 @@
|
||||
package com.birdthedeveloper.prometheus.android.prometheus.android.exporter.worker
|
||||
|
||||
//TODO
|
@ -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<TimeSeriesLabel>) : 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<TimeSeriesLabel> {
|
||||
//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")
|
||||
}
|
||||
|
||||
}
|
@ -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<List of labels including name, List of TimeSeries samples to this TimeSeries>
|
||||
private typealias ConverterHashMap = HashMap<List<TimeSeriesLabel>, MutableList<TimeSeriesSample>>
|
||||
|
||||
class RemoteWriteSenderMemoryStorage : RemoteWriteSenderStorage() {
|
||||
class RemoteWriteSenderMemStorage : RemoteWriteSenderStorage() {
|
||||
|
||||
private fun filterExpiredMetrics(metrics : MutableList<MetricsScrape>){
|
||||
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<TimeSeriesLabel>, samples: MutableList<TimeSeriesSample>
|
||||
): TimeSeries {
|
||||
|
||||
val timeSeriesBuilder: TimeSeries.Builder = TimeSeries.newBuilder()
|
||||
val timeSeriesBuilder: RemoteWrite.TimeSeries.Builder = RemoteWrite.TimeSeries.newBuilder()
|
||||
|
||||
timeSeriesBuilder.addAllLabels(labels.map {
|
||||
it.toProtobufLabel()
|
||||
@ -149,3 +151,61 @@ class RemoteWriteSenderMemoryStorage : RemoteWriteSenderStorage() {
|
||||
return data.count()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//TODO sort this out
|
||||
|
||||
class RemoteWriteSenderSimpleMemoryStorage : RemoteWriteSenderStorage() {
|
||||
private val data: Queue<MetricsScrape> = LinkedList()
|
||||
|
||||
override fun getScrapedSamplesCompressedProtobuf(howMany: Int): ByteArray {
|
||||
if (howMany < 1) {
|
||||
throw IllegalArgumentException("howMany must be bigger than zero")
|
||||
}
|
||||
|
||||
val scrapedMetrics: MutableList<MetricsScrape> = 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()
|
||||
}
|
||||
}
|
@ -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<MetricsScrape> = LinkedList()
|
||||
|
||||
override fun getScrapedSamplesCompressedProtobuf(howMany: Int): ByteArray {
|
||||
if (howMany < 1) {
|
||||
throw IllegalArgumentException("howMany must be bigger than zero")
|
||||
}
|
||||
|
||||
val scrapedMetrics: MutableList<MetricsScrape> = 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")
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user