Moves static relay stats to a injectable object

This commit is contained in:
Vitor Pamplona
2025-10-10 11:38:22 -04:00
parent 0bc38c1fa4
commit 0fab3afea2
6 changed files with 23 additions and 11 deletions
@@ -60,6 +60,7 @@ import com.vitorpamplona.amethyst.ui.screen.UiSettingsState
import com.vitorpamplona.amethyst.ui.tor.TorManager
import com.vitorpamplona.quartz.nip01Core.relay.client.INostrClient
import com.vitorpamplona.quartz.nip01Core.relay.client.NostrClient
import com.vitorpamplona.quartz.nip01Core.relay.client.stats.RelayStats
import com.vitorpamplona.quartz.nip03Timestamp.VerificationStateCache
import com.vitorpamplona.quartz.nip03Timestamp.ots.OtsBlockHeightCache
import com.vitorpamplona.quartz.utils.Log
@@ -196,6 +197,8 @@ class AppModules(
// Tries to verify new OTS events when they arrive.
val otsEventVerifier = IncomingOtsEventVerifier(otsVerifCache, cache, applicationDefaultScope)
val relayStats = RelayStats(client)
val logger = if (isDebug) RelaySpeedLogger(client) else null
// Coordinates all subscriptions for the Nostr Client
@@ -21,12 +21,12 @@
package com.vitorpamplona.amethyst.model
import android.util.LruCache
import com.vitorpamplona.amethyst.Amethyst
import com.vitorpamplona.amethyst.ui.note.njumpLink
import com.vitorpamplona.quartz.nip01Core.core.Address
import com.vitorpamplona.quartz.nip01Core.core.AddressableEvent
import com.vitorpamplona.quartz.nip01Core.core.Event
import com.vitorpamplona.quartz.nip01Core.core.HexKey
import com.vitorpamplona.quartz.nip01Core.relay.client.stats.RelayStats
import com.vitorpamplona.quartz.nip01Core.relay.normalizer.NormalizedRelayUrl
import com.vitorpamplona.quartz.nip19Bech32.Nip19Parser
import com.vitorpamplona.quartz.nip19Bech32.entities.NAddress
@@ -93,7 +93,9 @@ class AntiSpamFilter {
val spammer = logOffender(hash, event)
if (spammer.shouldHide() && relay != null) {
RelayStats.newSpam(relay, "$link1 $link2")
Amethyst.instance.relayStats
.get(relay)
.newSpam("$link1 $link2")
}
flowSpam.tryEmit(AntiSpamState(this))
@@ -119,7 +121,9 @@ class AntiSpamFilter {
val spammer = logOffender(hash, event)
if (spammer.shouldHide() && relay != null) {
RelayStats.newSpam(relay, "$link1 $link2")
Amethyst.instance.relayStats
.get(relay)
.newSpam("$link1 $link2")
}
flowSpam.tryEmit(AntiSpamState(this))
@@ -50,6 +50,7 @@ import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import com.vitorpamplona.amethyst.Amethyst
import com.vitorpamplona.amethyst.R
import com.vitorpamplona.amethyst.model.nip11RelayInfo.loadRelayInfo
import com.vitorpamplona.amethyst.ui.actions.CrossfadeIfEnabled
@@ -74,7 +75,6 @@ import com.vitorpamplona.amethyst.ui.theme.StdPadding
import com.vitorpamplona.amethyst.ui.theme.StdVertSpacer
import com.vitorpamplona.quartz.nip01Core.core.EmptyTagList
import com.vitorpamplona.quartz.nip01Core.relay.client.stats.RelayDebugMessage
import com.vitorpamplona.quartz.nip01Core.relay.client.stats.RelayStats
import com.vitorpamplona.quartz.nip01Core.relay.normalizer.NormalizedRelayUrl
import com.vitorpamplona.quartz.nip01Core.relay.normalizer.RelayUrlNormalizer
import com.vitorpamplona.quartz.nip01Core.relay.normalizer.displayUrl
@@ -129,7 +129,7 @@ fun RelayInformationScreen(
val messages =
remember(relay) {
RelayStats
Amethyst.instance.relayStats
.get(url = relay)
.messages
.snapshot()
@@ -158,7 +158,10 @@ fun RelayInformationScreen(
iconUrl = relayInfo.icon,
loadProfilePicture = accountViewModel.settings.showProfilePictures(),
loadRobohash = accountViewModel.settings.isNotPerformanceMode(),
RelayStats.get(relay).pingInMs,
pingInMs =
Amethyst.instance.relayStats
.get(relay)
.pingInMs,
iconModifier = LargeRelayIconModifier,
)
}
@@ -21,9 +21,9 @@
package com.vitorpamplona.amethyst.ui.screen.loggedIn.relays.common
import androidx.compose.runtime.Immutable
import com.vitorpamplona.amethyst.Amethyst
import com.vitorpamplona.amethyst.model.User
import com.vitorpamplona.quartz.nip01Core.relay.client.stats.RelayStat
import com.vitorpamplona.quartz.nip01Core.relay.client.stats.RelayStats
import com.vitorpamplona.quartz.nip01Core.relay.normalizer.NormalizedRelayUrl
@Immutable
@@ -41,6 +41,6 @@ fun relaySetupInfoBuilder(
): BasicRelaySetupInfo =
BasicRelaySetupInfo(
relay = normalized,
relayStat = RelayStats.get(normalized),
relayStat = Amethyst.instance.relayStats.get(normalized),
forcesTor = forcesTor,
)
@@ -24,7 +24,6 @@ import com.vitorpamplona.amethyst.Amethyst
import com.vitorpamplona.amethyst.model.LocalCache
import com.vitorpamplona.amethyst.ui.screen.loggedIn.relays.common.BasicRelaySetupInfo
import com.vitorpamplona.amethyst.ui.screen.loggedIn.relays.common.BasicRelaySetupInfoModel
import com.vitorpamplona.quartz.nip01Core.relay.client.stats.RelayStats
import com.vitorpamplona.quartz.nip01Core.relay.normalizer.NormalizedRelayUrl
class ConnectedRelayListViewModel : BasicRelaySetupInfoModel() {
@@ -35,7 +34,7 @@ class ConnectedRelayListViewModel : BasicRelaySetupInfoModel() {
.map {
BasicRelaySetupInfo(
relay = it,
relayStat = RelayStats.get(it),
relayStat = Amethyst.instance.relayStats.get(it),
forcesTor =
Amethyst.instance.torEvaluatorFlow.flow.value
.useTor(it),
@@ -21,9 +21,12 @@
package com.vitorpamplona.quartz.nip01Core.relay.client.stats
import androidx.collection.LruCache
import com.vitorpamplona.quartz.nip01Core.relay.client.INostrClient
import com.vitorpamplona.quartz.nip01Core.relay.normalizer.NormalizedRelayUrl
object RelayStats {
class RelayStats(
val client: INostrClient,
) {
private val innerCache =
object : LruCache<NormalizedRelayUrl, RelayStat>(1000) {
override fun create(key: NormalizedRelayUrl): RelayStat = RelayStat()