From 26c368d82a5bb1366f2b2cb50bdba82f29d6db96 Mon Sep 17 00:00:00 2001 From: spaced4ndy <8711996+spaced4ndy@users.noreply.github.com> Date: Mon, 17 Jun 2024 16:44:30 +0400 Subject: [PATCH] refactor --- src/Simplex/Messaging/Agent/Client.hs | 36 +++++++++++++-------------- src/Simplex/Messaging/Agent/Stats.hs | 17 +++---------- 2 files changed, 22 insertions(+), 31 deletions(-) diff --git a/src/Simplex/Messaging/Agent/Client.hs b/src/Simplex/Messaging/Agent/Client.hs index d27534f18..e6995620c 100644 --- a/src/Simplex/Messaging/Agent/Client.hs +++ b/src/Simplex/Messaging/Agent/Client.hs @@ -91,6 +91,7 @@ module Simplex.Messaging.Agent.Client AgentServersSummary (..), SMPServerSessions (..), XFTPServerSessions (..), + getAgentServersStats, getAgentServersSummary, getAgentSubscriptions, slowNetworkConfig, @@ -1970,11 +1971,10 @@ incXFTPServerStat AgentClient {xftpServersStats} userId srv sel n = do -- and stats are used to track real network activity (probably also via smpClients), -- so they [stats] would be accounted for proxy (unless we want double counting messages as sent and proxied) data AgentServersSummary = AgentServersSummary - { smpServersSessions :: Map (UserId, SMPServer) SMPServerSessions, - smpServersStats :: Map (UserId, SMPServer) AgentSMPServerStatsData, + { serverStats :: AgentServerStats, + smpServersSessions :: Map (UserId, SMPServer) SMPServerSessions, onlyProxiedSMPServers :: [SMPServer], - xftpServersSessions :: Map (UserId, XFTPServer) XFTPServerSessions, - xftpServersStats :: Map (UserId, XFTPServer) AgentXFTPServerStatsData + xftpServersSessions :: Map (UserId, XFTPServer) XFTPServerSessions } deriving (Show) @@ -1993,29 +1993,29 @@ data XFTPServerSessions = XFTPServerSessions } deriving (Show) -getAgentServersStats :: AgentClient -> IO AgentPersistedServerStats +getAgentServersStats :: AgentClient -> IO AgentServerStats getAgentServersStats AgentClient {smpServersStats, xftpServersStats} = do - sss <- readTVarIO smpServersStats - smpServersStatsData <- mapM (atomically . getAgentSMPServerStats) sss - xss <- readTVarIO xftpServersStats - xftpServersStatsData <- mapM (atomically . getAgentXFTPServerStats) xss - pure AgentPersistedServerStats {smpServersStatsData, xftpServersStatsData} - -getAgentServersSummary :: AgentClient -> IO AgentServersSummary -getAgentServersSummary AgentClient {smpServersStats, xftpServersStats} = do sss <- readTVarIO smpServersStats sss' <- mapM (atomically . getAgentSMPServerStats) sss xss <- readTVarIO xftpServersStats xss' <- mapM (atomically . getAgentXFTPServerStats) xss pure - AgentServersSummary - { smpServersSessions = M.empty, -- collect, see SMPServerSessions - smpServersStats = sss', - onlyProxiedSMPServers = [], -- collect, smpProxiedRelays (key) minus smpClients - xftpServersSessions = M.empty, -- collect, see XFTPServerSessions + AgentServerStats + { smpServersStats = sss', xftpServersStats = xss' } +getAgentServersSummary :: AgentClient -> IO AgentServersSummary +getAgentServersSummary c = do + serverStats <- getAgentServersStats c + pure + AgentServersSummary + { serverStats, + smpServersSessions = M.empty, -- collect, see SMPServerSessions + onlyProxiedSMPServers = [], -- collect, smpProxiedRelays (key) minus smpClients + xftpServersSessions = M.empty -- collect, see XFTPServerSessions + } + data SubInfo = SubInfo {userId :: UserId, server :: Text, rcvId :: Text, subError :: Maybe String} deriving (Show) diff --git a/src/Simplex/Messaging/Agent/Stats.hs b/src/Simplex/Messaging/Agent/Stats.hs index cf0b6c295..7f68458c8 100644 --- a/src/Simplex/Messaging/Agent/Stats.hs +++ b/src/Simplex/Messaging/Agent/Stats.hs @@ -346,18 +346,9 @@ setAgentXFTPServerStats s d = do writeTVar (replDeleteAttempts s) $! _replDeleteAttempts d writeTVar (replDeleteErr s) $! _replDeleteErr d --- Type for gathering both smp and xftp stats across all users and servers. --- --- Idea is to provide agent with a single path to save/restore stats, instead of managing it in UI --- and providing agent with "initial stats". --- --- Agent would use this unifying type to write/read json representation of all stats --- and populating AgentClient maps: --- smpServersStats :: TMap (UserId, SMPServer) AgentSMPServerStats, --- xftpServersStats :: TMap (UserId, XFTPServer) AgentXFTPServerStats -data AgentPersistedServerStats = AgentPersistedServerStats - { smpServersStatsData :: Map (UserId, SMPServer) AgentSMPServerStatsData, - xftpServersStatsData :: Map (UserId, XFTPServer) AgentXFTPServerStatsData +data AgentServerStats = AgentServerStats + { smpServersStats :: Map (UserId, SMPServer) AgentSMPServerStatsData, + xftpServersStats :: Map (UserId, XFTPServer) AgentXFTPServerStatsData } deriving (Show) @@ -365,4 +356,4 @@ $(J.deriveJSON defaultJSON ''AgentSMPServerStatsData) $(J.deriveJSON defaultJSON ''AgentXFTPServerStatsData) -$(J.deriveJSON defaultJSON ''AgentPersistedServerStats) +$(J.deriveJSON defaultJSON ''AgentServerStats)