summaryrefslogtreecommitdiff
path: root/wallet
diff options
context:
space:
mode:
authorIván Ávalos <avalos@disroot.org>2024-03-27 12:40:07 -0600
committerIván Ávalos <avalos@disroot.org>2024-03-28 12:21:11 -0600
commitc3c7cd00b6fd2110bc8ca6c36b4a561d9d3d0f2d (patch)
treeff976f5aa3309c452b760208bd70d83ab66bad9c /wallet
parent4c78c29776fdd482e13fc445b68ad7fe091b4def (diff)
downloadtaler-android-c3c7cd00b6fd2110bc8ca6c36b4a561d9d3d0f2d.tar.gz
taler-android-c3c7cd00b6fd2110bc8ca6c36b4a561d9d3d0f2d.tar.bz2
taler-android-c3c7cd00b6fd2110bc8ca6c36b4a561d9d3d0f2d.zip
[wallet] Deserialize observability event to JSON object
bug 0008509
Diffstat (limited to 'wallet')
-rw-r--r--wallet/src/main/java/net/taler/wallet/events/ObservabilityDialog.kt4
-rw-r--r--wallet/src/main/java/net/taler/wallet/events/ObservabilityEvent.kt221
-rw-r--r--wallet/src/main/res/values/strings.xml4
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>