Skip to content

Commit

Permalink
Implement AgentStorage methods
Browse files Browse the repository at this point in the history
  • Loading branch information
OndrejSynakSL committed Jan 14, 2025
1 parent 8e258e0 commit 1a69611
Show file tree
Hide file tree
Showing 6 changed files with 79 additions and 51 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ import io.opentelemetry.exporter.internal.otlp.logs.LogsRequestMarshaler
import io.opentelemetry.sdk.common.CompletableResultCode
import io.opentelemetry.sdk.logs.data.LogRecordData
import io.opentelemetry.sdk.logs.export.LogRecordExporter
import java.io.ByteArrayOutputStream
import java.util.UUID

/**
Expand All @@ -40,9 +41,9 @@ internal class AndroidLogRecordExporter(
val id = UUID.randomUUID().toString()

// Save data to our storage.
agentStorage.createOtelLogDataFile(id).outputStream().buffered().use {
ByteArrayOutputStream().use {
exportRequest.writeBinaryTo(it)
it.flush()
agentStorage.writeOtelLogData(id, it.toByteArray())
}

// Job scheduling
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,11 +61,19 @@ internal class UploadOtelLogRecordDataJob : JobService() {
return
}

val data = storage.readOtelLogData(id)

if (data == null) {
Logger.d(TAG, "startUpload() data is not valid")
jobFinished(params, false)
return
}

httpClient.makePostRequest(
url = url,
queries = emptyList(),
headers = listOf(Header("Content-Type", "application/x-protobuf")),
body = storage.getOtelLogDataFile(id),
body = data,
callback = object : HttpClient.Callback {
override fun onSuccess(response: Response) {
Logger.d(TAG, "startUpload() onSuccess: response=$response, code=${response.code}, body=${response.body.toString(Charsets.UTF_8)}")
Expand Down Expand Up @@ -94,7 +102,7 @@ internal class UploadOtelLogRecordDataJob : JobService() {

private fun deleteData(id: String) {
jobIdStorage.delete(id)
storage.getOtelLogDataFile(id).delete()
storage.deleteOtelLogData(id)
}

companion object {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ internal class AndroidSpanExporter(
val id = UUID.randomUUID().toString()

// Save data to our storage.
agentStorage.createOtelSpanDataFile(id).outputStream().buffered().use {
agentStorage.writeOtelSpanData(id).outputStream().buffered().use {
exportRequest.writeBinaryTo(it)
it.flush()
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,11 +61,19 @@ internal class UploadOtelSpanDataJob : JobService() {
return
}

val data = storage.readOtelSpanData(id)

if (data == null) {
Logger.d(TAG, "startUpload() data is not valid")
jobFinished(params, false)
return
}

httpClient.makePostRequest(
url = url,
queries = emptyList(),
headers = listOf(Header("Content-Type", "application/x-protobuf")),
body = storage.getOtelSpanDataFile(id),
body = data,
callback = object : HttpClient.Callback {
override fun onSuccess(response: Response) {
Logger.d(TAG, "startUpload() onSuccess: response=$response, code=${response.code}, body=${response.body.toString(Charsets.UTF_8)}")
Expand Down Expand Up @@ -94,7 +102,7 @@ internal class UploadOtelSpanDataJob : JobService() {

private fun deleteData(id: String) {
jobIdStorage.delete(id)
storage.getOtelSpanDataFile(id).delete()
storage.deleteOtelSpanData(id)
}

companion object {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,15 +40,8 @@ import java.io.File
* SDK storage structure:
* agent/
* └─<STORAGE_VERSION>/
* └─dataChunks/
* └─<data_chunk_id>/
* ├──metrics.dat
* ├──dataChunk.dat
* ├──wireframe.dat
* └──video/
* ├──<frame_number>.jpg
* ├──video.mp4
* └──metadata.dat
* ├─logs/
* └─spans/
*/
class AgentStorage(context: Context) : IAgentStorage {

Expand All @@ -61,7 +54,7 @@ class AgentStorage(context: Context) : IAgentStorage {
private val agentVersionDir = File(rootDir, "$VERSION${if (preferencesFileManager is EncryptedFileManager) "e" else ""}")
private val preferencesFile = File(agentVersionDir, "preferences/preferences.dat")
private val logDir = File(agentVersionDir, "logs")
private val spanDir = File(agentVersionDir, "spanDir")
private val spanDir = File(agentVersionDir, "spans")

init {
preferences = Preferences(FileSimplePermanentCache(preferencesFile, preferencesFileManager))
Expand Down Expand Up @@ -109,69 +102,83 @@ class AgentStorage(context: Context) : IAgentStorage {
override fun readDeviceId(): String? = preferences.getString(DEVICE_ID)

override fun writeAnonId(value: String) {
TODO("Not yet implemented")
preferences.putString(ANON_ID, value).commit()
}

override fun readAnonId(): String? {
TODO("Not yet implemented")
}
override fun readAnonId(): String? = preferences.getString(ANON_ID)

override fun deleteAnonId() {
TODO("Not yet implemented")
preferences.remove(ANON_ID)
}

override fun writeSessionId(value: String) {
TODO("Not yet implemented")
preferences.putString(SESSION_ID, value).commit()
}

override fun readSessionId(): String? {
TODO("Not yet implemented")
}
override fun readSessionId(): String? = preferences.getString(SESSION_ID)

override fun deleteSessionId() {
TODO("Not yet implemented")
preferences.remove(SESSION_ID)
}

override fun writeSessionValidUntil(value: Long) {
TODO("Not yet implemented")
preferences.putLong(SESSION_VALID_UNTIL, value).commit()
}

override fun readSessionValidUntil(): Long? {
TODO("Not yet implemented")
}
override fun readSessionValidUntil(): Long? = preferences.getLong(SESSION_VALID_UNTIL)

override fun deleteSessionValidUntil() {
TODO("Not yet implemented")
preferences.remove(SESSION_VALID_UNTIL)
}

override fun writeSessionValidUntilInBackground(value: Long) {
TODO("Not yet implemented")
preferences.putLong(SESSION_VALID_UNTIL_IN_BACKGROUND, value).commit()
}

override fun readSessionValidUntilInBackground(): Long? {
TODO("Not yet implemented")
}
override fun readSessionValidUntilInBackground(): Long? = preferences.getLong(SESSION_VALID_UNTIL_IN_BACKGROUND)

override fun deleteSessionValidUntilInBackground() {
TODO("Not yet implemented")
preferences.remove(SESSION_VALID_UNTIL_IN_BACKGROUND)
}

override fun writeOtelLogData(id: String, data: ByteArray): Boolean {
val file: File = otelLogDataFile(id)
val success = encryptedStorage.writeBytes(file, data)
Logger.d(TAG, "createOtelLogDataFile(): id = $id, success = $success")

return success
}

override fun createOtelLogDataFile(id: String): File {
TODO("Not yet implemented")
override fun readOtelLogData(id: String): ByteArray? {
val file: File = otelLogDataFile(id)
return encryptedStorage.readBytes(file)
}

override fun getOtelLogDataFile(id: String): File {
TODO("Not yet implemented")
override fun deleteOtelLogData(id: String) {
val file: File = otelLogDataFile(id)
file.delete()
}

override fun createOtelSpanDataFile(id: String): File {
TODO("Not yet implemented")
override fun writeOtelSpanData(id: String, data: ByteArray): Boolean {
val file: File = otelSpanDataFile(id)
val success = encryptedStorage.writeBytes(file, data)
Logger.d(TAG, "writeOtelSpanData(): id = $id, success = $success")

return success
}
override fun readOtelSpanData(id: String): ByteArray? {
val file: File = otelSpanDataFile(id)
return encryptedStorage.readBytes(file)
}

override fun getOtelSpanDataFile(id: String): File {
TODO("Not yet implemented")
override fun deleteOtelSpanData(id: String) {
val file: File = otelSpanDataFile(id)
file.delete()
}

private fun otelLogDataFile(id: String) = File(logDir, "$id.dat")
private fun otelSpanDataFile(id: String) = File(spanDir, "$id.dat")

fun cleanUpStorage(context: Context): Boolean {
val files = ArrayList<File>()
files += rootDir.listFiles()
Expand All @@ -198,6 +205,10 @@ class AgentStorage(context: Context) : IAgentStorage {
companion object {
private const val BASE_URL = "LOG_BASE_URL"
private const val DEVICE_ID = "DEVICE_ID"
private const val ANON_ID = "ANON_ID"
private const val SESSION_ID = "SESSION_ID"
private const val SESSION_VALID_UNTIL = "SESSION_VALID_UNTIL"
private const val SESSION_VALID_UNTIL_IN_BACKGROUND = "SESSION_VALID_UNTIL_IN_BACKGROUND"

private const val TAG = "AgentStorage"

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,6 @@

package com.splunk.sdk.common.storage

import java.io.File

interface IAgentStorage {
val freeSpace: Long
val rootDirPath: String
Expand Down Expand Up @@ -46,8 +44,10 @@ interface IAgentStorage {
fun readSessionValidUntilInBackground(): Long?
fun deleteSessionValidUntilInBackground()

fun createOtelLogDataFile(id: String): File
fun getOtelLogDataFile(id: String): File
fun createOtelSpanDataFile(id: String): File
fun getOtelSpanDataFile(id: String): File
fun writeOtelLogData(id: String, data: ByteArray): Boolean
fun readOtelLogData(id: String): ByteArray?
fun deleteOtelLogData(id: String)
fun writeOtelSpanData(id: String, data: ByteArray): Boolean
fun readOtelSpanData(id: String): ByteArray?
fun deleteOtelSpanData(id: String)
}

0 comments on commit 1a69611

Please sign in to comment.