[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[taler-taler-android] 02/05: [wallet] Deserialize observability event to
From: |
gnunet |
Subject: |
[taler-taler-android] 02/05: [wallet] Deserialize observability event to JSON object |
Date: |
Mon, 01 Apr 2024 14:34:27 +0200 |
This is an automated email from the git hooks/post-receive script.
torsten-grote pushed a commit to branch master
in repository taler-android.
commit c3c7cd00b6fd2110bc8ca6c36b4a561d9d3d0f2d
Author: Iván Ávalos <avalos@disroot.org>
AuthorDate: Wed Mar 27 12:40:07 2024 -0600
[wallet] Deserialize observability event to JSON object
bug 0008509
---
.../net/taler/wallet/events/ObservabilityDialog.kt | 4 +-
.../net/taler/wallet/events/ObservabilityEvent.kt | 221 ++++++---------------
wallet/src/main/res/values/strings.xml | 4 +-
3 files changed, 68 insertions(+), 161 deletions(-)
diff --git
a/wallet/src/main/java/net/taler/wallet/events/ObservabilityDialog.kt
b/wallet/src/main/java/net/taler/wallet/events/ObservabilityDialog.kt
index 600f143..9164e77 100644
--- a/wallet/src/main/java/net/taler/wallet/events/ObservabilityDialog.kt
+++ b/wallet/src/main/java/net/taler/wallet/events/ObservabilityDialog.kt
@@ -106,9 +106,9 @@ fun ObservabilityComposable(
@Composable
fun ObservabilityItem(event: ObservabilityEvent) {
- val title = stringResource(event.titleRes)
- val body = BackendManager.json.encodeToString(event)
val context = LocalContext.current
+ val title = event.getTitle(context)
+ val body = BackendManager.json.encodeToString(event.body)
ListItem(
modifier = Modifier.fillMaxWidth(),
diff --git a/wallet/src/main/java/net/taler/wallet/events/ObservabilityEvent.kt
b/wallet/src/main/java/net/taler/wallet/events/ObservabilityEvent.kt
index 51e4f7a..cb710f7 100644
--- a/wallet/src/main/java/net/taler/wallet/events/ObservabilityEvent.kt
+++ b/wallet/src/main/java/net/taler/wallet/events/ObservabilityEvent.kt
@@ -16,166 +16,73 @@
package net.taler.wallet.events
-import androidx.annotation.StringRes
-import kotlinx.serialization.SerialName
+import android.content.Context
+import kotlinx.serialization.KSerializer
import kotlinx.serialization.Serializable
+import kotlinx.serialization.descriptors.SerialDescriptor
+import kotlinx.serialization.encoding.Decoder
+import kotlinx.serialization.encoding.Encoder
+import kotlinx.serialization.json.JsonDecoder
import kotlinx.serialization.json.JsonElement
-import net.taler.common.Timestamp
+import kotlinx.serialization.json.JsonObject
+import kotlinx.serialization.json.jsonObject
+import kotlinx.serialization.json.jsonPrimitive
import net.taler.wallet.R
-import net.taler.wallet.backend.TalerErrorInfo
-@Serializable
-sealed class ObservabilityEvent {
- @get:StringRes
- abstract val titleRes: Int
- @Serializable
- @SerialName("http-fetch-start")
- data class HttpFetchStart(
- val id: String,
- @SerialName("when")
- val timestamp: Timestamp,
- val url: String,
-
- override val titleRes: Int = R.string.event_http_fetch_start,
- ): ObservabilityEvent()
-
- @Serializable
- @SerialName("http-fetch-finish-success")
- data class HttpFetchFinishSuccess(
- val id: String,
- @SerialName("when")
- val timestamp: Timestamp,
- val url: String,
- val status: Int,
-
- override val titleRes: Int = R.string.event_http_fetch_finish_success,
- ): ObservabilityEvent()
-
- @Serializable
- @SerialName("http-fetch-finish-error")
- data class HttpFetchFinishError(
- val id: String,
- @SerialName("when")
- val timestamp: Timestamp,
- val url: String,
- val error: TalerErrorInfo,
-
- override val titleRes: Int = R.string.event_http_fetch_finish_error,
- ): ObservabilityEvent()
-
- @Serializable
- @SerialName("db-query-start")
- data class DbQueryStart(
- val name: String,
- val location: String,
-
- override val titleRes: Int = R.string.event_db_query_start,
- ): ObservabilityEvent()
-
- @Serializable
- @SerialName("db-query-finish-success")
- data class DbQueryFinishSuccess(
- val name: String,
- val location: String,
-
- override val titleRes: Int = R.string.event_db_query_finish_success,
- ): ObservabilityEvent()
-
- @Serializable
- @SerialName("db-query-finish-error")
- data class DbQueryFinishError(
- val name: String,
- val location: String,
-
- override val titleRes: Int = R.string.event_db_query_finish_error,
- ): ObservabilityEvent()
-
- @Serializable
- @SerialName("request-start")
- data class RequestStart(
- override val titleRes: Int = R.string.event_request_start,
- ): ObservabilityEvent()
-
- @Serializable
- @SerialName("request-finish-success")
- data class RequestFinishSuccess(
- override val titleRes: Int = R.string.event_request_finish_success,
- ): ObservabilityEvent()
-
- @Serializable
- @SerialName("request-finish-error")
- data class RequestFinishError(
- override val titleRes: Int = R.string.event_request_finish_error,
- ): ObservabilityEvent()
-
- @Serializable
- @SerialName("task-start")
- data class TaskStart(
- val taskId: String,
-
- override val titleRes: Int = R.string.event_task_start,
- ): ObservabilityEvent()
-
- @Serializable
- @SerialName("task-stop")
- data class TaskStop(
- val taskId: String,
-
- override val titleRes: Int = R.string.event_task_stop,
- ): ObservabilityEvent()
-
- @Serializable
- @SerialName("task-reset")
- data class TaskReset(
- val taskId: String,
-
- override val titleRes: Int = R.string.event_task_reset,
- ): ObservabilityEvent()
-
- @Serializable
- @SerialName("declare-task-dependency")
- data class DeclareTaskDependency(
- val taskId: String,
-
- override val titleRes: Int = R.string.event_declare_task_dependency,
- ): ObservabilityEvent()
-
- @Serializable
- @SerialName("crypto-start")
- data class CryptoStart(
- val operation: String,
-
- override val titleRes: Int = R.string.event_crypto_start,
- ): ObservabilityEvent()
-
- @Serializable
- @SerialName("crypto-finish-success")
- data class CryptoFinishSuccess(
- val operation: String,
-
- override val titleRes: Int = R.string.event_crypto_finished_success,
- ): ObservabilityEvent()
-
- @Serializable
- @SerialName("crypto-finish-error")
- data class CryptoFinishError(
- val operation: String,
-
- override val titleRes: Int = R.string.event_crypto_finished_error,
- ): ObservabilityEvent()
-
- @Serializable
- @SerialName("sheperd-task-result")
- data class ShepherdTaskResult(
- val resultType: String,
-
- override val titleRes: Int = R.string.event_shepherd_task_result,
- ): ObservabilityEvent()
-
- @Serializable
- @SerialName("unknown")
- data class Unknown(
- override val titleRes: Int = R.string.event_unknown,
- ): ObservabilityEvent()
+@Serializable(with = ObservabilityEventSerializer::class)
+class ObservabilityEvent(
+ val body: JsonObject,
+ val type: String,
+) {
+
+ fun getTitle(c: Context) = when (type) {
+ "http-fetch-start" -> c.getString(R.string.event_http_fetch_start)
+ "http-fetch-finish-error" ->
c.getString(R.string.event_http_fetch_finish_error)
+ "http-fetch-finish-success" ->
c.getString(R.string.event_http_fetch_finish_success)
+ "db-query-start" -> c.getString(R.string.event_db_query_start)
+ "db-query-finish-success" ->
c.getString(R.string.event_db_query_finish_success)
+ "db-query-finish-error" ->
c.getString(R.string.event_db_query_finish_error)
+ "request-start" -> c.getString(R.string.event_request_start)
+ "request-finish-success" ->
c.getString(R.string.event_request_finish_success)
+ "request-finish-error" ->
c.getString(R.string.event_request_finish_error)
+ "task-start" -> c.getString(R.string.event_task_start)
+ "task-stop" -> c.getString(R.string.event_task_stop)
+ "task-reset" -> c.getString(R.string.event_task_reset)
+ "sheperd-task-result" ->
c.getString(R.string.event_shepherd_task_result)
+ "declare-task-dependency" ->
c.getString(R.string.event_declare_task_dependency)
+ "crypto-start" -> c.getString(R.string.event_crypto_start)
+ "crypto-finish-success" ->
c.getString(R.string.event_crypto_finish_success)
+ "crypto-finish-error" ->
c.getString(R.string.event_crypto_finish_error)
+ "unknown" -> c.getString(R.string.event_unknown)
+ else -> type
+ }
+}
+
+class ObservabilityEventSerializer: KSerializer<ObservabilityEvent> {
+ private val jsonElementSerializer = JsonElement.serializer()
+
+ override val descriptor: SerialDescriptor
+ get() = jsonElementSerializer.descriptor
+
+ override fun deserialize(decoder: Decoder): ObservabilityEvent {
+ require(decoder is JsonDecoder)
+ val jsonObject = decoder
+ .decodeJsonElement()
+ .jsonObject
+
+ val type = jsonObject["type"]
+ ?.jsonPrimitive
+ ?.content
+ ?: "unknown"
+
+ return ObservabilityEvent(
+ body = jsonObject,
+ type = type,
+ )
+ }
+
+ override fun serialize(encoder: Encoder, value: ObservabilityEvent) {
+ encoder.encodeSerializableValue(JsonObject.serializer(), value.body)
+ }
}
\ No newline at end of file
diff --git a/wallet/src/main/res/values/strings.xml
b/wallet/src/main/res/values/strings.xml
index db2630f..31d007d 100644
--- a/wallet/src/main/res/values/strings.xml
+++ b/wallet/src/main/res/values/strings.xml
@@ -287,8 +287,8 @@ GNU Taler is immune against many types of fraud, such as
phishing of credit card
<string name="event_task_reset">Task reset</string>
<string name="event_declare_task_dependency">Task dependency
declared</string>
<string name="event_crypto_start">Crypto operation started</string>
- <string name="event_crypto_finished_success">Crypto operation
succeeded</string>
- <string name="event_crypto_finished_error">Crypto operation
finished</string>
+ <string name="event_crypto_finish_success">Crypto operation
succeeded</string>
+ <string name="event_crypto_finish_error">Crypto operation finished</string>
<string name="event_shepherd_task_result">Shepherd task result</string>
<string name="event_unknown">Unknown event</string>
--
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.