@@ -7,25 +7,25 @@ module Simplex.FileTransfer.Server.Stats where
77import Control.Applicative ((<|>) )
88import qualified Data.Attoparsec.ByteString.Char8 as A
99import qualified Data.ByteString.Char8 as B
10+ import Data.IORef
1011import Data.Int (Int64 )
1112import Data.Time.Clock (UTCTime )
1213import Simplex.Messaging.Encoding.String
1314import Simplex.Messaging.Protocol (SenderId )
1415import Simplex.Messaging.Server.Stats (PeriodStats , PeriodStatsData , getPeriodStatsData , newPeriodStats , setPeriodStats )
15- import UnliftIO.STM
1616
1717data FileServerStats = FileServerStats
18- { fromTime :: TVar UTCTime ,
19- filesCreated :: TVar Int ,
20- fileRecipients :: TVar Int ,
21- filesUploaded :: TVar Int ,
22- filesExpired :: TVar Int ,
23- filesDeleted :: TVar Int ,
18+ { fromTime :: IORef UTCTime ,
19+ filesCreated :: IORef Int ,
20+ fileRecipients :: IORef Int ,
21+ filesUploaded :: IORef Int ,
22+ filesExpired :: IORef Int ,
23+ filesDeleted :: IORef Int ,
2424 filesDownloaded :: PeriodStats SenderId ,
25- fileDownloads :: TVar Int ,
26- fileDownloadAcks :: TVar Int ,
27- filesCount :: TVar Int ,
28- filesSize :: TVar Int64
25+ fileDownloads :: IORef Int ,
26+ fileDownloadAcks :: IORef Int ,
27+ filesCount :: IORef Int ,
28+ filesSize :: IORef Int64
2929 }
3030
3131data FileServerStatsData = FileServerStatsData
@@ -45,47 +45,48 @@ data FileServerStatsData = FileServerStatsData
4545
4646newFileServerStats :: UTCTime -> IO FileServerStats
4747newFileServerStats ts = do
48- fromTime <- newTVarIO ts
49- filesCreated <- newTVarIO 0
50- fileRecipients <- newTVarIO 0
51- filesUploaded <- newTVarIO 0
52- filesExpired <- newTVarIO 0
53- filesDeleted <- newTVarIO 0
48+ fromTime <- newIORef ts
49+ filesCreated <- newIORef 0
50+ fileRecipients <- newIORef 0
51+ filesUploaded <- newIORef 0
52+ filesExpired <- newIORef 0
53+ filesDeleted <- newIORef 0
5454 filesDownloaded <- newPeriodStats
55- fileDownloads <- newTVarIO 0
56- fileDownloadAcks <- newTVarIO 0
57- filesCount <- newTVarIO 0
58- filesSize <- newTVarIO 0
55+ fileDownloads <- newIORef 0
56+ fileDownloadAcks <- newIORef 0
57+ filesCount <- newIORef 0
58+ filesSize <- newIORef 0
5959 pure FileServerStats {fromTime, filesCreated, fileRecipients, filesUploaded, filesExpired, filesDeleted, filesDownloaded, fileDownloads, fileDownloadAcks, filesCount, filesSize}
6060
6161getFileServerStatsData :: FileServerStats -> IO FileServerStatsData
6262getFileServerStatsData s = do
63- _fromTime <- readTVarIO $ fromTime (s :: FileServerStats )
64- _filesCreated <- readTVarIO $ filesCreated s
65- _fileRecipients <- readTVarIO $ fileRecipients s
66- _filesUploaded <- readTVarIO $ filesUploaded s
67- _filesExpired <- readTVarIO $ filesExpired s
68- _filesDeleted <- readTVarIO $ filesDeleted s
63+ _fromTime <- readIORef $ fromTime (s :: FileServerStats )
64+ _filesCreated <- readIORef $ filesCreated s
65+ _fileRecipients <- readIORef $ fileRecipients s
66+ _filesUploaded <- readIORef $ filesUploaded s
67+ _filesExpired <- readIORef $ filesExpired s
68+ _filesDeleted <- readIORef $ filesDeleted s
6969 _filesDownloaded <- getPeriodStatsData $ filesDownloaded s
70- _fileDownloads <- readTVarIO $ fileDownloads s
71- _fileDownloadAcks <- readTVarIO $ fileDownloadAcks s
72- _filesCount <- readTVarIO $ filesCount s
73- _filesSize <- readTVarIO $ filesSize s
70+ _fileDownloads <- readIORef $ fileDownloads s
71+ _fileDownloadAcks <- readIORef $ fileDownloadAcks s
72+ _filesCount <- readIORef $ filesCount s
73+ _filesSize <- readIORef $ filesSize s
7474 pure FileServerStatsData {_fromTime, _filesCreated, _fileRecipients, _filesUploaded, _filesExpired, _filesDeleted, _filesDownloaded, _fileDownloads, _fileDownloadAcks, _filesCount, _filesSize}
7575
76- setFileServerStats :: FileServerStats -> FileServerStatsData -> STM ()
76+ -- this function is not thread safe, it is used on server start only
77+ setFileServerStats :: FileServerStats -> FileServerStatsData -> IO ()
7778setFileServerStats s d = do
78- writeTVar (fromTime (s :: FileServerStats )) $! _fromTime (d :: FileServerStatsData )
79- writeTVar (filesCreated s) $! _filesCreated d
80- writeTVar (fileRecipients s) $! _fileRecipients d
81- writeTVar (filesUploaded s) $! _filesUploaded d
82- writeTVar (filesExpired s) $! _filesExpired d
83- writeTVar (filesDeleted s) $! _filesDeleted d
79+ writeIORef (fromTime (s :: FileServerStats )) $! _fromTime (d :: FileServerStatsData )
80+ writeIORef (filesCreated s) $! _filesCreated d
81+ writeIORef (fileRecipients s) $! _fileRecipients d
82+ writeIORef (filesUploaded s) $! _filesUploaded d
83+ writeIORef (filesExpired s) $! _filesExpired d
84+ writeIORef (filesDeleted s) $! _filesDeleted d
8485 setPeriodStats (filesDownloaded s) $! _filesDownloaded d
85- writeTVar (fileDownloads s) $! _fileDownloads d
86- writeTVar (fileDownloadAcks s) $! _fileDownloadAcks d
87- writeTVar (filesCount s) $! _filesCount d
88- writeTVar (filesSize s) $! _filesSize d
86+ writeIORef (fileDownloads s) $! _fileDownloads d
87+ writeIORef (fileDownloadAcks s) $! _fileDownloadAcks d
88+ writeIORef (filesCount s) $! _filesCount d
89+ writeIORef (filesSize s) $! _filesSize d
8990
9091instance StrEncoding FileServerStatsData where
9192 strEncode FileServerStatsData {_fromTime, _filesCreated, _fileRecipients, _filesUploaded, _filesExpired, _filesDeleted, _filesDownloaded, _fileDownloads, _fileDownloadAcks, _filesCount, _filesSize} =
0 commit comments