{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE TemplateHaskell #-}

module Simplex.Messaging.Agent.Stats where

import Data.Aeson (FromJSON (..), FromJSONKey, ToJSON (..))
import qualified Data.Aeson.TH as J
import Data.Int (Int64)
import Data.Map.Strict (Map)
import qualified Data.Map.Strict as M
import Simplex.Messaging.Agent.Protocol (UserId)
import Simplex.Messaging.Agent.Store.DB (FromField (..), ToField (..), fromTextField_)
import Simplex.Messaging.Parsers (defaultJSON)
import Simplex.Messaging.Protocol (NtfServer, SMPServer, XFTPServer)
import Simplex.Messaging.Util (decodeJSON, encodeJSON)
import UnliftIO.STM

data AgentSMPServerStats = AgentSMPServerStats
  { AgentSMPServerStats -> TVar Int
sentDirect :: TVar Int, -- successfully sent messages
    AgentSMPServerStats -> TVar Int
sentViaProxy :: TVar Int, -- successfully sent messages via proxy
    AgentSMPServerStats -> TVar Int
sentProxied :: TVar Int, -- successfully sent messages to other destination server via this as proxy
    AgentSMPServerStats -> TVar Int
sentDirectAttempts :: TVar Int, -- direct sending attempts (min 1 for each sent message)
    AgentSMPServerStats -> TVar Int
sentViaProxyAttempts :: TVar Int, -- proxy sending attempts
    AgentSMPServerStats -> TVar Int
sentProxiedAttempts :: TVar Int, -- attempts sending to other destination server via this as proxy
    AgentSMPServerStats -> TVar Int
sentAuthErrs :: TVar Int, -- send AUTH errors
    AgentSMPServerStats -> TVar Int
sentQuotaErrs :: TVar Int, -- send QUOTA permanent errors (message expired)
    AgentSMPServerStats -> TVar Int
sentExpiredErrs :: TVar Int, -- send expired errors
    AgentSMPServerStats -> TVar Int
sentOtherErrs :: TVar Int, -- other send permanent errors (excluding above)
    AgentSMPServerStats -> TVar Int
recvMsgs :: TVar Int, -- total messages received
    AgentSMPServerStats -> TVar Int
recvDuplicates :: TVar Int, -- duplicate messages received
    AgentSMPServerStats -> TVar Int
recvCryptoErrs :: TVar Int, -- message decryption errors
    AgentSMPServerStats -> TVar Int
recvErrs :: TVar Int, -- receive errors
    AgentSMPServerStats -> TVar Int
ackMsgs :: TVar Int, -- total messages acknowledged
    AgentSMPServerStats -> TVar Int
ackAttempts :: TVar Int, -- acknowledgement attempts
    AgentSMPServerStats -> TVar Int
ackNoMsgErrs :: TVar Int, -- NO_MSG ack errors
    AgentSMPServerStats -> TVar Int
ackOtherErrs :: TVar Int, -- other permanent ack errors (temporary accounted for in attempts)
    -- conn stats are accounted for rcv queue server
    AgentSMPServerStats -> TVar Int
connCreated :: TVar Int, -- total connections created
    AgentSMPServerStats -> TVar Int
connSecured :: TVar Int, -- connections secured
    AgentSMPServerStats -> TVar Int
connCompleted :: TVar Int, -- connections completed
    AgentSMPServerStats -> TVar Int
connDeleted :: TVar Int, -- total connections deleted
    AgentSMPServerStats -> TVar Int
connDelAttempts :: TVar Int, -- total connection deletion attempts
    AgentSMPServerStats -> TVar Int
connDelErrs :: TVar Int, -- permanent connection deletion errors (temporary accounted for in attempts)
    AgentSMPServerStats -> TVar Int
connSubscribed :: TVar Int, -- total successful subscription
    AgentSMPServerStats -> TVar Int
connSubAttempts :: TVar Int, -- subscription attempts
    AgentSMPServerStats -> TVar Int
connSubIgnored :: TVar Int, -- subscription results ignored (client switched to different session or it was not pending)
    AgentSMPServerStats -> TVar Int
connSubErrs :: TVar Int, -- permanent subscription errors (temporary accounted for in attempts)
    -- notifications stats
    AgentSMPServerStats -> TVar Int
ntfKey :: TVar Int,
    AgentSMPServerStats -> TVar Int
ntfKeyAttempts :: TVar Int,
    AgentSMPServerStats -> TVar Int
ntfKeyDeleted :: TVar Int,
    AgentSMPServerStats -> TVar Int
ntfKeyDeleteAttempts :: TVar Int
  }

data AgentSMPServerStatsData = AgentSMPServerStatsData
  { AgentSMPServerStatsData -> Int
_sentDirect :: Int,
    AgentSMPServerStatsData -> Int
_sentViaProxy :: Int,
    AgentSMPServerStatsData -> Int
_sentProxied :: Int,
    AgentSMPServerStatsData -> Int
_sentDirectAttempts :: Int,
    AgentSMPServerStatsData -> Int
_sentViaProxyAttempts :: Int,
    AgentSMPServerStatsData -> Int
_sentProxiedAttempts :: Int,
    AgentSMPServerStatsData -> Int
_sentAuthErrs :: Int,
    AgentSMPServerStatsData -> Int
_sentQuotaErrs :: Int,
    AgentSMPServerStatsData -> Int
_sentExpiredErrs :: Int,
    AgentSMPServerStatsData -> Int
_sentOtherErrs :: Int,
    AgentSMPServerStatsData -> Int
_recvMsgs :: Int,
    AgentSMPServerStatsData -> Int
_recvDuplicates :: Int,
    AgentSMPServerStatsData -> Int
_recvCryptoErrs :: Int,
    AgentSMPServerStatsData -> Int
_recvErrs :: Int,
    AgentSMPServerStatsData -> Int
_ackMsgs :: Int,
    AgentSMPServerStatsData -> Int
_ackAttempts :: Int,
    AgentSMPServerStatsData -> Int
_ackNoMsgErrs :: Int,
    AgentSMPServerStatsData -> Int
_ackOtherErrs :: Int,
    AgentSMPServerStatsData -> Int
_connCreated :: Int,
    AgentSMPServerStatsData -> Int
_connSecured :: Int,
    AgentSMPServerStatsData -> Int
_connCompleted :: Int,
    AgentSMPServerStatsData -> Int
_connDeleted :: Int,
    AgentSMPServerStatsData -> Int
_connDelAttempts :: Int,
    AgentSMPServerStatsData -> Int
_connDelErrs :: Int,
    AgentSMPServerStatsData -> Int
_connSubscribed :: Int,
    AgentSMPServerStatsData -> Int
_connSubAttempts :: Int,
    AgentSMPServerStatsData -> Int
_connSubIgnored :: Int,
    AgentSMPServerStatsData -> Int
_connSubErrs :: Int,
    AgentSMPServerStatsData -> OptionalInt
_ntfKey :: OptionalInt,
    AgentSMPServerStatsData -> OptionalInt
_ntfKeyAttempts :: OptionalInt,
    AgentSMPServerStatsData -> OptionalInt
_ntfKeyDeleted :: OptionalInt,
    AgentSMPServerStatsData -> OptionalInt
_ntfKeyDeleteAttempts :: OptionalInt
  }
  deriving (Int -> AgentSMPServerStatsData -> ShowS
[AgentSMPServerStatsData] -> ShowS
AgentSMPServerStatsData -> String
(Int -> AgentSMPServerStatsData -> ShowS)
-> (AgentSMPServerStatsData -> String)
-> ([AgentSMPServerStatsData] -> ShowS)
-> Show AgentSMPServerStatsData
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> AgentSMPServerStatsData -> ShowS
showsPrec :: Int -> AgentSMPServerStatsData -> ShowS
$cshow :: AgentSMPServerStatsData -> String
show :: AgentSMPServerStatsData -> String
$cshowList :: [AgentSMPServerStatsData] -> ShowS
showList :: [AgentSMPServerStatsData] -> ShowS
Show)

newtype OptionalInt = OInt {OptionalInt -> Int
toInt :: Int}
  deriving (Integer -> OptionalInt
OptionalInt -> OptionalInt
OptionalInt -> OptionalInt -> OptionalInt
(OptionalInt -> OptionalInt -> OptionalInt)
-> (OptionalInt -> OptionalInt -> OptionalInt)
-> (OptionalInt -> OptionalInt -> OptionalInt)
-> (OptionalInt -> OptionalInt)
-> (OptionalInt -> OptionalInt)
-> (OptionalInt -> OptionalInt)
-> (Integer -> OptionalInt)
-> Num OptionalInt
forall a.
(a -> a -> a)
-> (a -> a -> a)
-> (a -> a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (Integer -> a)
-> Num a
$c+ :: OptionalInt -> OptionalInt -> OptionalInt
+ :: OptionalInt -> OptionalInt -> OptionalInt
$c- :: OptionalInt -> OptionalInt -> OptionalInt
- :: OptionalInt -> OptionalInt -> OptionalInt
$c* :: OptionalInt -> OptionalInt -> OptionalInt
* :: OptionalInt -> OptionalInt -> OptionalInt
$cnegate :: OptionalInt -> OptionalInt
negate :: OptionalInt -> OptionalInt
$cabs :: OptionalInt -> OptionalInt
abs :: OptionalInt -> OptionalInt
$csignum :: OptionalInt -> OptionalInt
signum :: OptionalInt -> OptionalInt
$cfromInteger :: Integer -> OptionalInt
fromInteger :: Integer -> OptionalInt
Num, Int -> OptionalInt -> ShowS
[OptionalInt] -> ShowS
OptionalInt -> String
(Int -> OptionalInt -> ShowS)
-> (OptionalInt -> String)
-> ([OptionalInt] -> ShowS)
-> Show OptionalInt
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> OptionalInt -> ShowS
showsPrec :: Int -> OptionalInt -> ShowS
$cshow :: OptionalInt -> String
show :: OptionalInt -> String
$cshowList :: [OptionalInt] -> ShowS
showList :: [OptionalInt] -> ShowS
Show, [OptionalInt] -> Encoding
[OptionalInt] -> Value
OptionalInt -> Bool
OptionalInt -> Encoding
OptionalInt -> Value
(OptionalInt -> Value)
-> (OptionalInt -> Encoding)
-> ([OptionalInt] -> Value)
-> ([OptionalInt] -> Encoding)
-> (OptionalInt -> Bool)
-> ToJSON OptionalInt
forall a.
(a -> Value)
-> (a -> Encoding)
-> ([a] -> Value)
-> ([a] -> Encoding)
-> (a -> Bool)
-> ToJSON a
$ctoJSON :: OptionalInt -> Value
toJSON :: OptionalInt -> Value
$ctoEncoding :: OptionalInt -> Encoding
toEncoding :: OptionalInt -> Encoding
$ctoJSONList :: [OptionalInt] -> Value
toJSONList :: [OptionalInt] -> Value
$ctoEncodingList :: [OptionalInt] -> Encoding
toEncodingList :: [OptionalInt] -> Encoding
$comitField :: OptionalInt -> Bool
omitField :: OptionalInt -> Bool
ToJSON)

newAgentSMPServerStats :: STM AgentSMPServerStats
newAgentSMPServerStats :: STM AgentSMPServerStats
newAgentSMPServerStats = do
  TVar Int
sentDirect <- Int -> STM (TVar Int)
forall a. a -> STM (TVar a)
newTVar Int
0
  TVar Int
sentViaProxy <- Int -> STM (TVar Int)
forall a. a -> STM (TVar a)
newTVar Int
0
  TVar Int
sentProxied <- Int -> STM (TVar Int)
forall a. a -> STM (TVar a)
newTVar Int
0
  TVar Int
sentDirectAttempts <- Int -> STM (TVar Int)
forall a. a -> STM (TVar a)
newTVar Int
0
  TVar Int
sentViaProxyAttempts <- Int -> STM (TVar Int)
forall a. a -> STM (TVar a)
newTVar Int
0
  TVar Int
sentProxiedAttempts <- Int -> STM (TVar Int)
forall a. a -> STM (TVar a)
newTVar Int
0
  TVar Int
sentAuthErrs <- Int -> STM (TVar Int)
forall a. a -> STM (TVar a)
newTVar Int
0
  TVar Int
sentQuotaErrs <- Int -> STM (TVar Int)
forall a. a -> STM (TVar a)
newTVar Int
0
  TVar Int
sentExpiredErrs <- Int -> STM (TVar Int)
forall a. a -> STM (TVar a)
newTVar Int
0
  TVar Int
sentOtherErrs <- Int -> STM (TVar Int)
forall a. a -> STM (TVar a)
newTVar Int
0
  TVar Int
recvMsgs <- Int -> STM (TVar Int)
forall a. a -> STM (TVar a)
newTVar Int
0
  TVar Int
recvDuplicates <- Int -> STM (TVar Int)
forall a. a -> STM (TVar a)
newTVar Int
0
  TVar Int
recvCryptoErrs <- Int -> STM (TVar Int)
forall a. a -> STM (TVar a)
newTVar Int
0
  TVar Int
recvErrs <- Int -> STM (TVar Int)
forall a. a -> STM (TVar a)
newTVar Int
0
  TVar Int
ackMsgs <- Int -> STM (TVar Int)
forall a. a -> STM (TVar a)
newTVar Int
0
  TVar Int
ackAttempts <- Int -> STM (TVar Int)
forall a. a -> STM (TVar a)
newTVar Int
0
  TVar Int
ackNoMsgErrs <- Int -> STM (TVar Int)
forall a. a -> STM (TVar a)
newTVar Int
0
  TVar Int
ackOtherErrs <- Int -> STM (TVar Int)
forall a. a -> STM (TVar a)
newTVar Int
0
  TVar Int
connCreated <- Int -> STM (TVar Int)
forall a. a -> STM (TVar a)
newTVar Int
0
  TVar Int
connSecured <- Int -> STM (TVar Int)
forall a. a -> STM (TVar a)
newTVar Int
0
  TVar Int
connCompleted <- Int -> STM (TVar Int)
forall a. a -> STM (TVar a)
newTVar Int
0
  TVar Int
connDeleted <- Int -> STM (TVar Int)
forall a. a -> STM (TVar a)
newTVar Int
0
  TVar Int
connDelAttempts <- Int -> STM (TVar Int)
forall a. a -> STM (TVar a)
newTVar Int
0
  TVar Int
connDelErrs <- Int -> STM (TVar Int)
forall a. a -> STM (TVar a)
newTVar Int
0
  TVar Int
connSubscribed <- Int -> STM (TVar Int)
forall a. a -> STM (TVar a)
newTVar Int
0
  TVar Int
connSubAttempts <- Int -> STM (TVar Int)
forall a. a -> STM (TVar a)
newTVar Int
0
  TVar Int
connSubIgnored <- Int -> STM (TVar Int)
forall a. a -> STM (TVar a)
newTVar Int
0
  TVar Int
connSubErrs <- Int -> STM (TVar Int)
forall a. a -> STM (TVar a)
newTVar Int
0
  TVar Int
ntfKey <- Int -> STM (TVar Int)
forall a. a -> STM (TVar a)
newTVar Int
0
  TVar Int
ntfKeyAttempts <- Int -> STM (TVar Int)
forall a. a -> STM (TVar a)
newTVar Int
0
  TVar Int
ntfKeyDeleted <- Int -> STM (TVar Int)
forall a. a -> STM (TVar a)
newTVar Int
0
  TVar Int
ntfKeyDeleteAttempts <- Int -> STM (TVar Int)
forall a. a -> STM (TVar a)
newTVar Int
0
  AgentSMPServerStats -> STM AgentSMPServerStats
forall a. a -> STM a
forall (f :: * -> *) a. Applicative f => a -> f a
pure
    AgentSMPServerStats
      { TVar Int
sentDirect :: TVar Int
sentDirect :: TVar Int
sentDirect,
        TVar Int
sentViaProxy :: TVar Int
sentViaProxy :: TVar Int
sentViaProxy,
        TVar Int
sentProxied :: TVar Int
sentProxied :: TVar Int
sentProxied,
        TVar Int
sentDirectAttempts :: TVar Int
sentDirectAttempts :: TVar Int
sentDirectAttempts,
        TVar Int
sentViaProxyAttempts :: TVar Int
sentViaProxyAttempts :: TVar Int
sentViaProxyAttempts,
        TVar Int
sentProxiedAttempts :: TVar Int
sentProxiedAttempts :: TVar Int
sentProxiedAttempts,
        TVar Int
sentAuthErrs :: TVar Int
sentAuthErrs :: TVar Int
sentAuthErrs,
        TVar Int
sentQuotaErrs :: TVar Int
sentQuotaErrs :: TVar Int
sentQuotaErrs,
        TVar Int
sentExpiredErrs :: TVar Int
sentExpiredErrs :: TVar Int
sentExpiredErrs,
        TVar Int
sentOtherErrs :: TVar Int
sentOtherErrs :: TVar Int
sentOtherErrs,
        TVar Int
recvMsgs :: TVar Int
recvMsgs :: TVar Int
recvMsgs,
        TVar Int
recvDuplicates :: TVar Int
recvDuplicates :: TVar Int
recvDuplicates,
        TVar Int
recvCryptoErrs :: TVar Int
recvCryptoErrs :: TVar Int
recvCryptoErrs,
        TVar Int
recvErrs :: TVar Int
recvErrs :: TVar Int
recvErrs,
        TVar Int
ackMsgs :: TVar Int
ackMsgs :: TVar Int
ackMsgs,
        TVar Int
ackAttempts :: TVar Int
ackAttempts :: TVar Int
ackAttempts,
        TVar Int
ackNoMsgErrs :: TVar Int
ackNoMsgErrs :: TVar Int
ackNoMsgErrs,
        TVar Int
ackOtherErrs :: TVar Int
ackOtherErrs :: TVar Int
ackOtherErrs,
        TVar Int
connCreated :: TVar Int
connCreated :: TVar Int
connCreated,
        TVar Int
connSecured :: TVar Int
connSecured :: TVar Int
connSecured,
        TVar Int
connCompleted :: TVar Int
connCompleted :: TVar Int
connCompleted,
        TVar Int
connDeleted :: TVar Int
connDeleted :: TVar Int
connDeleted,
        TVar Int
connDelAttempts :: TVar Int
connDelAttempts :: TVar Int
connDelAttempts,
        TVar Int
connDelErrs :: TVar Int
connDelErrs :: TVar Int
connDelErrs,
        TVar Int
connSubscribed :: TVar Int
connSubscribed :: TVar Int
connSubscribed,
        TVar Int
connSubAttempts :: TVar Int
connSubAttempts :: TVar Int
connSubAttempts,
        TVar Int
connSubIgnored :: TVar Int
connSubIgnored :: TVar Int
connSubIgnored,
        TVar Int
connSubErrs :: TVar Int
connSubErrs :: TVar Int
connSubErrs,
        TVar Int
ntfKey :: TVar Int
ntfKey :: TVar Int
ntfKey,
        TVar Int
ntfKeyAttempts :: TVar Int
ntfKeyAttempts :: TVar Int
ntfKeyAttempts,
        TVar Int
ntfKeyDeleted :: TVar Int
ntfKeyDeleted :: TVar Int
ntfKeyDeleted,
        TVar Int
ntfKeyDeleteAttempts :: TVar Int
ntfKeyDeleteAttempts :: TVar Int
ntfKeyDeleteAttempts
      }

newAgentSMPServerStatsData :: AgentSMPServerStatsData
newAgentSMPServerStatsData :: AgentSMPServerStatsData
newAgentSMPServerStatsData =
  AgentSMPServerStatsData
    { _sentDirect :: Int
_sentDirect = Int
0,
      _sentViaProxy :: Int
_sentViaProxy = Int
0,
      _sentProxied :: Int
_sentProxied = Int
0,
      _sentDirectAttempts :: Int
_sentDirectAttempts = Int
0,
      _sentViaProxyAttempts :: Int
_sentViaProxyAttempts = Int
0,
      _sentProxiedAttempts :: Int
_sentProxiedAttempts = Int
0,
      _sentAuthErrs :: Int
_sentAuthErrs = Int
0,
      _sentQuotaErrs :: Int
_sentQuotaErrs = Int
0,
      _sentExpiredErrs :: Int
_sentExpiredErrs = Int
0,
      _sentOtherErrs :: Int
_sentOtherErrs = Int
0,
      _recvMsgs :: Int
_recvMsgs = Int
0,
      _recvDuplicates :: Int
_recvDuplicates = Int
0,
      _recvCryptoErrs :: Int
_recvCryptoErrs = Int
0,
      _recvErrs :: Int
_recvErrs = Int
0,
      _ackMsgs :: Int
_ackMsgs = Int
0,
      _ackAttempts :: Int
_ackAttempts = Int
0,
      _ackNoMsgErrs :: Int
_ackNoMsgErrs = Int
0,
      _ackOtherErrs :: Int
_ackOtherErrs = Int
0,
      _connCreated :: Int
_connCreated = Int
0,
      _connSecured :: Int
_connSecured = Int
0,
      _connCompleted :: Int
_connCompleted = Int
0,
      _connDeleted :: Int
_connDeleted = Int
0,
      _connDelAttempts :: Int
_connDelAttempts = Int
0,
      _connDelErrs :: Int
_connDelErrs = Int
0,
      _connSubscribed :: Int
_connSubscribed = Int
0,
      _connSubAttempts :: Int
_connSubAttempts = Int
0,
      _connSubIgnored :: Int
_connSubIgnored = Int
0,
      _connSubErrs :: Int
_connSubErrs = Int
0,
      _ntfKey :: OptionalInt
_ntfKey = OptionalInt
0,
      _ntfKeyAttempts :: OptionalInt
_ntfKeyAttempts = OptionalInt
0,
      _ntfKeyDeleted :: OptionalInt
_ntfKeyDeleted = OptionalInt
0,
      _ntfKeyDeleteAttempts :: OptionalInt
_ntfKeyDeleteAttempts = OptionalInt
0
    }

newAgentSMPServerStats' :: AgentSMPServerStatsData -> STM AgentSMPServerStats
newAgentSMPServerStats' :: AgentSMPServerStatsData -> STM AgentSMPServerStats
newAgentSMPServerStats' AgentSMPServerStatsData
s = do
  TVar Int
sentDirect <- Int -> STM (TVar Int)
forall a. a -> STM (TVar a)
newTVar (Int -> STM (TVar Int)) -> Int -> STM (TVar Int)
forall a b. (a -> b) -> a -> b
$ AgentSMPServerStatsData -> Int
_sentDirect AgentSMPServerStatsData
s
  TVar Int
sentViaProxy <- Int -> STM (TVar Int)
forall a. a -> STM (TVar a)
newTVar (Int -> STM (TVar Int)) -> Int -> STM (TVar Int)
forall a b. (a -> b) -> a -> b
$ AgentSMPServerStatsData -> Int
_sentViaProxy AgentSMPServerStatsData
s
  TVar Int
sentProxied <- Int -> STM (TVar Int)
forall a. a -> STM (TVar a)
newTVar (Int -> STM (TVar Int)) -> Int -> STM (TVar Int)
forall a b. (a -> b) -> a -> b
$ AgentSMPServerStatsData -> Int
_sentProxied AgentSMPServerStatsData
s
  TVar Int
sentDirectAttempts <- Int -> STM (TVar Int)
forall a. a -> STM (TVar a)
newTVar (Int -> STM (TVar Int)) -> Int -> STM (TVar Int)
forall a b. (a -> b) -> a -> b
$ AgentSMPServerStatsData -> Int
_sentDirectAttempts AgentSMPServerStatsData
s
  TVar Int
sentViaProxyAttempts <- Int -> STM (TVar Int)
forall a. a -> STM (TVar a)
newTVar (Int -> STM (TVar Int)) -> Int -> STM (TVar Int)
forall a b. (a -> b) -> a -> b
$ AgentSMPServerStatsData -> Int
_sentViaProxyAttempts AgentSMPServerStatsData
s
  TVar Int
sentProxiedAttempts <- Int -> STM (TVar Int)
forall a. a -> STM (TVar a)
newTVar (Int -> STM (TVar Int)) -> Int -> STM (TVar Int)
forall a b. (a -> b) -> a -> b
$ AgentSMPServerStatsData -> Int
_sentProxiedAttempts AgentSMPServerStatsData
s
  TVar Int
sentAuthErrs <- Int -> STM (TVar Int)
forall a. a -> STM (TVar a)
newTVar (Int -> STM (TVar Int)) -> Int -> STM (TVar Int)
forall a b. (a -> b) -> a -> b
$ AgentSMPServerStatsData -> Int
_sentAuthErrs AgentSMPServerStatsData
s
  TVar Int
sentQuotaErrs <- Int -> STM (TVar Int)
forall a. a -> STM (TVar a)
newTVar (Int -> STM (TVar Int)) -> Int -> STM (TVar Int)
forall a b. (a -> b) -> a -> b
$ AgentSMPServerStatsData -> Int
_sentQuotaErrs AgentSMPServerStatsData
s
  TVar Int
sentExpiredErrs <- Int -> STM (TVar Int)
forall a. a -> STM (TVar a)
newTVar (Int -> STM (TVar Int)) -> Int -> STM (TVar Int)
forall a b. (a -> b) -> a -> b
$ AgentSMPServerStatsData -> Int
_sentExpiredErrs AgentSMPServerStatsData
s
  TVar Int
sentOtherErrs <- Int -> STM (TVar Int)
forall a. a -> STM (TVar a)
newTVar (Int -> STM (TVar Int)) -> Int -> STM (TVar Int)
forall a b. (a -> b) -> a -> b
$ AgentSMPServerStatsData -> Int
_sentOtherErrs AgentSMPServerStatsData
s
  TVar Int
recvMsgs <- Int -> STM (TVar Int)
forall a. a -> STM (TVar a)
newTVar (Int -> STM (TVar Int)) -> Int -> STM (TVar Int)
forall a b. (a -> b) -> a -> b
$ AgentSMPServerStatsData -> Int
_recvMsgs AgentSMPServerStatsData
s
  TVar Int
recvDuplicates <- Int -> STM (TVar Int)
forall a. a -> STM (TVar a)
newTVar (Int -> STM (TVar Int)) -> Int -> STM (TVar Int)
forall a b. (a -> b) -> a -> b
$ AgentSMPServerStatsData -> Int
_recvDuplicates AgentSMPServerStatsData
s
  TVar Int
recvCryptoErrs <- Int -> STM (TVar Int)
forall a. a -> STM (TVar a)
newTVar (Int -> STM (TVar Int)) -> Int -> STM (TVar Int)
forall a b. (a -> b) -> a -> b
$ AgentSMPServerStatsData -> Int
_recvCryptoErrs AgentSMPServerStatsData
s
  TVar Int
recvErrs <- Int -> STM (TVar Int)
forall a. a -> STM (TVar a)
newTVar (Int -> STM (TVar Int)) -> Int -> STM (TVar Int)
forall a b. (a -> b) -> a -> b
$ AgentSMPServerStatsData -> Int
_recvErrs AgentSMPServerStatsData
s
  TVar Int
ackMsgs <- Int -> STM (TVar Int)
forall a. a -> STM (TVar a)
newTVar (Int -> STM (TVar Int)) -> Int -> STM (TVar Int)
forall a b. (a -> b) -> a -> b
$ AgentSMPServerStatsData -> Int
_ackMsgs AgentSMPServerStatsData
s
  TVar Int
ackAttempts <- Int -> STM (TVar Int)
forall a. a -> STM (TVar a)
newTVar (Int -> STM (TVar Int)) -> Int -> STM (TVar Int)
forall a b. (a -> b) -> a -> b
$ AgentSMPServerStatsData -> Int
_ackAttempts AgentSMPServerStatsData
s
  TVar Int
ackNoMsgErrs <- Int -> STM (TVar Int)
forall a. a -> STM (TVar a)
newTVar (Int -> STM (TVar Int)) -> Int -> STM (TVar Int)
forall a b. (a -> b) -> a -> b
$ AgentSMPServerStatsData -> Int
_ackNoMsgErrs AgentSMPServerStatsData
s
  TVar Int
ackOtherErrs <- Int -> STM (TVar Int)
forall a. a -> STM (TVar a)
newTVar (Int -> STM (TVar Int)) -> Int -> STM (TVar Int)
forall a b. (a -> b) -> a -> b
$ AgentSMPServerStatsData -> Int
_ackOtherErrs AgentSMPServerStatsData
s
  TVar Int
connCreated <- Int -> STM (TVar Int)
forall a. a -> STM (TVar a)
newTVar (Int -> STM (TVar Int)) -> Int -> STM (TVar Int)
forall a b. (a -> b) -> a -> b
$ AgentSMPServerStatsData -> Int
_connCreated AgentSMPServerStatsData
s
  TVar Int
connSecured <- Int -> STM (TVar Int)
forall a. a -> STM (TVar a)
newTVar (Int -> STM (TVar Int)) -> Int -> STM (TVar Int)
forall a b. (a -> b) -> a -> b
$ AgentSMPServerStatsData -> Int
_connSecured AgentSMPServerStatsData
s
  TVar Int
connCompleted <- Int -> STM (TVar Int)
forall a. a -> STM (TVar a)
newTVar (Int -> STM (TVar Int)) -> Int -> STM (TVar Int)
forall a b. (a -> b) -> a -> b
$ AgentSMPServerStatsData -> Int
_connCompleted AgentSMPServerStatsData
s
  TVar Int
connDeleted <- Int -> STM (TVar Int)
forall a. a -> STM (TVar a)
newTVar (Int -> STM (TVar Int)) -> Int -> STM (TVar Int)
forall a b. (a -> b) -> a -> b
$ AgentSMPServerStatsData -> Int
_connDeleted AgentSMPServerStatsData
s
  TVar Int
connDelAttempts <- Int -> STM (TVar Int)
forall a. a -> STM (TVar a)
newTVar (Int -> STM (TVar Int)) -> Int -> STM (TVar Int)
forall a b. (a -> b) -> a -> b
$ AgentSMPServerStatsData -> Int
_connDelAttempts AgentSMPServerStatsData
s
  TVar Int
connDelErrs <- Int -> STM (TVar Int)
forall a. a -> STM (TVar a)
newTVar (Int -> STM (TVar Int)) -> Int -> STM (TVar Int)
forall a b. (a -> b) -> a -> b
$ AgentSMPServerStatsData -> Int
_connDelErrs AgentSMPServerStatsData
s
  TVar Int
connSubscribed <- Int -> STM (TVar Int)
forall a. a -> STM (TVar a)
newTVar (Int -> STM (TVar Int)) -> Int -> STM (TVar Int)
forall a b. (a -> b) -> a -> b
$ AgentSMPServerStatsData -> Int
_connSubscribed AgentSMPServerStatsData
s
  TVar Int
connSubAttempts <- Int -> STM (TVar Int)
forall a. a -> STM (TVar a)
newTVar (Int -> STM (TVar Int)) -> Int -> STM (TVar Int)
forall a b. (a -> b) -> a -> b
$ AgentSMPServerStatsData -> Int
_connSubAttempts AgentSMPServerStatsData
s
  TVar Int
connSubIgnored <- Int -> STM (TVar Int)
forall a. a -> STM (TVar a)
newTVar (Int -> STM (TVar Int)) -> Int -> STM (TVar Int)
forall a b. (a -> b) -> a -> b
$ AgentSMPServerStatsData -> Int
_connSubIgnored AgentSMPServerStatsData
s
  TVar Int
connSubErrs <- Int -> STM (TVar Int)
forall a. a -> STM (TVar a)
newTVar (Int -> STM (TVar Int)) -> Int -> STM (TVar Int)
forall a b. (a -> b) -> a -> b
$ AgentSMPServerStatsData -> Int
_connSubErrs AgentSMPServerStatsData
s
  TVar Int
ntfKey <- Int -> STM (TVar Int)
forall a. a -> STM (TVar a)
newTVar (Int -> STM (TVar Int)) -> Int -> STM (TVar Int)
forall a b. (a -> b) -> a -> b
$ OptionalInt -> Int
toInt (OptionalInt -> Int) -> OptionalInt -> Int
forall a b. (a -> b) -> a -> b
$ AgentSMPServerStatsData -> OptionalInt
_ntfKey AgentSMPServerStatsData
s
  TVar Int
ntfKeyAttempts <- Int -> STM (TVar Int)
forall a. a -> STM (TVar a)
newTVar (Int -> STM (TVar Int)) -> Int -> STM (TVar Int)
forall a b. (a -> b) -> a -> b
$ OptionalInt -> Int
toInt (OptionalInt -> Int) -> OptionalInt -> Int
forall a b. (a -> b) -> a -> b
$ AgentSMPServerStatsData -> OptionalInt
_ntfKeyAttempts AgentSMPServerStatsData
s
  TVar Int
ntfKeyDeleted <- Int -> STM (TVar Int)
forall a. a -> STM (TVar a)
newTVar (Int -> STM (TVar Int)) -> Int -> STM (TVar Int)
forall a b. (a -> b) -> a -> b
$ OptionalInt -> Int
toInt (OptionalInt -> Int) -> OptionalInt -> Int
forall a b. (a -> b) -> a -> b
$ AgentSMPServerStatsData -> OptionalInt
_ntfKeyDeleted AgentSMPServerStatsData
s
  TVar Int
ntfKeyDeleteAttempts <- Int -> STM (TVar Int)
forall a. a -> STM (TVar a)
newTVar (Int -> STM (TVar Int)) -> Int -> STM (TVar Int)
forall a b. (a -> b) -> a -> b
$ OptionalInt -> Int
toInt (OptionalInt -> Int) -> OptionalInt -> Int
forall a b. (a -> b) -> a -> b
$ AgentSMPServerStatsData -> OptionalInt
_ntfKeyDeleteAttempts AgentSMPServerStatsData
s
  AgentSMPServerStats -> STM AgentSMPServerStats
forall a. a -> STM a
forall (f :: * -> *) a. Applicative f => a -> f a
pure
    AgentSMPServerStats
      { TVar Int
sentDirect :: TVar Int
sentDirect :: TVar Int
sentDirect,
        TVar Int
sentViaProxy :: TVar Int
sentViaProxy :: TVar Int
sentViaProxy,
        TVar Int
sentProxied :: TVar Int
sentProxied :: TVar Int
sentProxied,
        TVar Int
sentDirectAttempts :: TVar Int
sentDirectAttempts :: TVar Int
sentDirectAttempts,
        TVar Int
sentViaProxyAttempts :: TVar Int
sentViaProxyAttempts :: TVar Int
sentViaProxyAttempts,
        TVar Int
sentProxiedAttempts :: TVar Int
sentProxiedAttempts :: TVar Int
sentProxiedAttempts,
        TVar Int
sentAuthErrs :: TVar Int
sentAuthErrs :: TVar Int
sentAuthErrs,
        TVar Int
sentQuotaErrs :: TVar Int
sentQuotaErrs :: TVar Int
sentQuotaErrs,
        TVar Int
sentExpiredErrs :: TVar Int
sentExpiredErrs :: TVar Int
sentExpiredErrs,
        TVar Int
sentOtherErrs :: TVar Int
sentOtherErrs :: TVar Int
sentOtherErrs,
        TVar Int
recvMsgs :: TVar Int
recvMsgs :: TVar Int
recvMsgs,
        TVar Int
recvDuplicates :: TVar Int
recvDuplicates :: TVar Int
recvDuplicates,
        TVar Int
recvCryptoErrs :: TVar Int
recvCryptoErrs :: TVar Int
recvCryptoErrs,
        TVar Int
recvErrs :: TVar Int
recvErrs :: TVar Int
recvErrs,
        TVar Int
ackMsgs :: TVar Int
ackMsgs :: TVar Int
ackMsgs,
        TVar Int
ackAttempts :: TVar Int
ackAttempts :: TVar Int
ackAttempts,
        TVar Int
ackNoMsgErrs :: TVar Int
ackNoMsgErrs :: TVar Int
ackNoMsgErrs,
        TVar Int
ackOtherErrs :: TVar Int
ackOtherErrs :: TVar Int
ackOtherErrs,
        TVar Int
connCreated :: TVar Int
connCreated :: TVar Int
connCreated,
        TVar Int
connSecured :: TVar Int
connSecured :: TVar Int
connSecured,
        TVar Int
connCompleted :: TVar Int
connCompleted :: TVar Int
connCompleted,
        TVar Int
connDeleted :: TVar Int
connDeleted :: TVar Int
connDeleted,
        TVar Int
connDelAttempts :: TVar Int
connDelAttempts :: TVar Int
connDelAttempts,
        TVar Int
connDelErrs :: TVar Int
connDelErrs :: TVar Int
connDelErrs,
        TVar Int
connSubscribed :: TVar Int
connSubscribed :: TVar Int
connSubscribed,
        TVar Int
connSubAttempts :: TVar Int
connSubAttempts :: TVar Int
connSubAttempts,
        TVar Int
connSubIgnored :: TVar Int
connSubIgnored :: TVar Int
connSubIgnored,
        TVar Int
connSubErrs :: TVar Int
connSubErrs :: TVar Int
connSubErrs,
        TVar Int
ntfKey :: TVar Int
ntfKey :: TVar Int
ntfKey,
        TVar Int
ntfKeyAttempts :: TVar Int
ntfKeyAttempts :: TVar Int
ntfKeyAttempts,
        TVar Int
ntfKeyDeleted :: TVar Int
ntfKeyDeleted :: TVar Int
ntfKeyDeleted,
        TVar Int
ntfKeyDeleteAttempts :: TVar Int
ntfKeyDeleteAttempts :: TVar Int
ntfKeyDeleteAttempts
      }

-- as this is used to periodically update stats in db,
-- this is not STM to decrease contention with stats updates
getAgentSMPServerStats :: AgentSMPServerStats -> IO AgentSMPServerStatsData
getAgentSMPServerStats :: AgentSMPServerStats -> IO AgentSMPServerStatsData
getAgentSMPServerStats AgentSMPServerStats
s = do
  Int
_sentDirect <- TVar Int -> IO Int
forall (m :: * -> *) a. MonadIO m => TVar a -> m a
readTVarIO (TVar Int -> IO Int) -> TVar Int -> IO Int
forall a b. (a -> b) -> a -> b
$ AgentSMPServerStats -> TVar Int
sentDirect AgentSMPServerStats
s
  Int
_sentViaProxy <- TVar Int -> IO Int
forall (m :: * -> *) a. MonadIO m => TVar a -> m a
readTVarIO (TVar Int -> IO Int) -> TVar Int -> IO Int
forall a b. (a -> b) -> a -> b
$ AgentSMPServerStats -> TVar Int
sentViaProxy AgentSMPServerStats
s
  Int
_sentProxied <- TVar Int -> IO Int
forall (m :: * -> *) a. MonadIO m => TVar a -> m a
readTVarIO (TVar Int -> IO Int) -> TVar Int -> IO Int
forall a b. (a -> b) -> a -> b
$ AgentSMPServerStats -> TVar Int
sentProxied AgentSMPServerStats
s
  Int
_sentDirectAttempts <- TVar Int -> IO Int
forall (m :: * -> *) a. MonadIO m => TVar a -> m a
readTVarIO (TVar Int -> IO Int) -> TVar Int -> IO Int
forall a b. (a -> b) -> a -> b
$ AgentSMPServerStats -> TVar Int
sentDirectAttempts AgentSMPServerStats
s
  Int
_sentViaProxyAttempts <- TVar Int -> IO Int
forall (m :: * -> *) a. MonadIO m => TVar a -> m a
readTVarIO (TVar Int -> IO Int) -> TVar Int -> IO Int
forall a b. (a -> b) -> a -> b
$ AgentSMPServerStats -> TVar Int
sentViaProxyAttempts AgentSMPServerStats
s
  Int
_sentProxiedAttempts <- TVar Int -> IO Int
forall (m :: * -> *) a. MonadIO m => TVar a -> m a
readTVarIO (TVar Int -> IO Int) -> TVar Int -> IO Int
forall a b. (a -> b) -> a -> b
$ AgentSMPServerStats -> TVar Int
sentProxiedAttempts AgentSMPServerStats
s
  Int
_sentAuthErrs <- TVar Int -> IO Int
forall (m :: * -> *) a. MonadIO m => TVar a -> m a
readTVarIO (TVar Int -> IO Int) -> TVar Int -> IO Int
forall a b. (a -> b) -> a -> b
$ AgentSMPServerStats -> TVar Int
sentAuthErrs AgentSMPServerStats
s
  Int
_sentQuotaErrs <- TVar Int -> IO Int
forall (m :: * -> *) a. MonadIO m => TVar a -> m a
readTVarIO (TVar Int -> IO Int) -> TVar Int -> IO Int
forall a b. (a -> b) -> a -> b
$ AgentSMPServerStats -> TVar Int
sentQuotaErrs AgentSMPServerStats
s
  Int
_sentExpiredErrs <- TVar Int -> IO Int
forall (m :: * -> *) a. MonadIO m => TVar a -> m a
readTVarIO (TVar Int -> IO Int) -> TVar Int -> IO Int
forall a b. (a -> b) -> a -> b
$ AgentSMPServerStats -> TVar Int
sentExpiredErrs AgentSMPServerStats
s
  Int
_sentOtherErrs <- TVar Int -> IO Int
forall (m :: * -> *) a. MonadIO m => TVar a -> m a
readTVarIO (TVar Int -> IO Int) -> TVar Int -> IO Int
forall a b. (a -> b) -> a -> b
$ AgentSMPServerStats -> TVar Int
sentOtherErrs AgentSMPServerStats
s
  Int
_recvMsgs <- TVar Int -> IO Int
forall (m :: * -> *) a. MonadIO m => TVar a -> m a
readTVarIO (TVar Int -> IO Int) -> TVar Int -> IO Int
forall a b. (a -> b) -> a -> b
$ AgentSMPServerStats -> TVar Int
recvMsgs AgentSMPServerStats
s
  Int
_recvDuplicates <- TVar Int -> IO Int
forall (m :: * -> *) a. MonadIO m => TVar a -> m a
readTVarIO (TVar Int -> IO Int) -> TVar Int -> IO Int
forall a b. (a -> b) -> a -> b
$ AgentSMPServerStats -> TVar Int
recvDuplicates AgentSMPServerStats
s
  Int
_recvCryptoErrs <- TVar Int -> IO Int
forall (m :: * -> *) a. MonadIO m => TVar a -> m a
readTVarIO (TVar Int -> IO Int) -> TVar Int -> IO Int
forall a b. (a -> b) -> a -> b
$ AgentSMPServerStats -> TVar Int
recvCryptoErrs AgentSMPServerStats
s
  Int
_recvErrs <- TVar Int -> IO Int
forall (m :: * -> *) a. MonadIO m => TVar a -> m a
readTVarIO (TVar Int -> IO Int) -> TVar Int -> IO Int
forall a b. (a -> b) -> a -> b
$ AgentSMPServerStats -> TVar Int
recvErrs AgentSMPServerStats
s
  Int
_ackMsgs <- TVar Int -> IO Int
forall (m :: * -> *) a. MonadIO m => TVar a -> m a
readTVarIO (TVar Int -> IO Int) -> TVar Int -> IO Int
forall a b. (a -> b) -> a -> b
$ AgentSMPServerStats -> TVar Int
ackMsgs AgentSMPServerStats
s
  Int
_ackAttempts <- TVar Int -> IO Int
forall (m :: * -> *) a. MonadIO m => TVar a -> m a
readTVarIO (TVar Int -> IO Int) -> TVar Int -> IO Int
forall a b. (a -> b) -> a -> b
$ AgentSMPServerStats -> TVar Int
ackAttempts AgentSMPServerStats
s
  Int
_ackNoMsgErrs <- TVar Int -> IO Int
forall (m :: * -> *) a. MonadIO m => TVar a -> m a
readTVarIO (TVar Int -> IO Int) -> TVar Int -> IO Int
forall a b. (a -> b) -> a -> b
$ AgentSMPServerStats -> TVar Int
ackNoMsgErrs AgentSMPServerStats
s
  Int
_ackOtherErrs <- TVar Int -> IO Int
forall (m :: * -> *) a. MonadIO m => TVar a -> m a
readTVarIO (TVar Int -> IO Int) -> TVar Int -> IO Int
forall a b. (a -> b) -> a -> b
$ AgentSMPServerStats -> TVar Int
ackOtherErrs AgentSMPServerStats
s
  Int
_connCreated <- TVar Int -> IO Int
forall (m :: * -> *) a. MonadIO m => TVar a -> m a
readTVarIO (TVar Int -> IO Int) -> TVar Int -> IO Int
forall a b. (a -> b) -> a -> b
$ AgentSMPServerStats -> TVar Int
connCreated AgentSMPServerStats
s
  Int
_connSecured <- TVar Int -> IO Int
forall (m :: * -> *) a. MonadIO m => TVar a -> m a
readTVarIO (TVar Int -> IO Int) -> TVar Int -> IO Int
forall a b. (a -> b) -> a -> b
$ AgentSMPServerStats -> TVar Int
connSecured AgentSMPServerStats
s
  Int
_connCompleted <- TVar Int -> IO Int
forall (m :: * -> *) a. MonadIO m => TVar a -> m a
readTVarIO (TVar Int -> IO Int) -> TVar Int -> IO Int
forall a b. (a -> b) -> a -> b
$ AgentSMPServerStats -> TVar Int
connCompleted AgentSMPServerStats
s
  Int
_connDeleted <- TVar Int -> IO Int
forall (m :: * -> *) a. MonadIO m => TVar a -> m a
readTVarIO (TVar Int -> IO Int) -> TVar Int -> IO Int
forall a b. (a -> b) -> a -> b
$ AgentSMPServerStats -> TVar Int
connDeleted AgentSMPServerStats
s
  Int
_connDelAttempts <- TVar Int -> IO Int
forall (m :: * -> *) a. MonadIO m => TVar a -> m a
readTVarIO (TVar Int -> IO Int) -> TVar Int -> IO Int
forall a b. (a -> b) -> a -> b
$ AgentSMPServerStats -> TVar Int
connDelAttempts AgentSMPServerStats
s
  Int
_connDelErrs <- TVar Int -> IO Int
forall (m :: * -> *) a. MonadIO m => TVar a -> m a
readTVarIO (TVar Int -> IO Int) -> TVar Int -> IO Int
forall a b. (a -> b) -> a -> b
$ AgentSMPServerStats -> TVar Int
connDelErrs AgentSMPServerStats
s
  Int
_connSubscribed <- TVar Int -> IO Int
forall (m :: * -> *) a. MonadIO m => TVar a -> m a
readTVarIO (TVar Int -> IO Int) -> TVar Int -> IO Int
forall a b. (a -> b) -> a -> b
$ AgentSMPServerStats -> TVar Int
connSubscribed AgentSMPServerStats
s
  Int
_connSubAttempts <- TVar Int -> IO Int
forall (m :: * -> *) a. MonadIO m => TVar a -> m a
readTVarIO (TVar Int -> IO Int) -> TVar Int -> IO Int
forall a b. (a -> b) -> a -> b
$ AgentSMPServerStats -> TVar Int
connSubAttempts AgentSMPServerStats
s
  Int
_connSubIgnored <- TVar Int -> IO Int
forall (m :: * -> *) a. MonadIO m => TVar a -> m a
readTVarIO (TVar Int -> IO Int) -> TVar Int -> IO Int
forall a b. (a -> b) -> a -> b
$ AgentSMPServerStats -> TVar Int
connSubIgnored AgentSMPServerStats
s
  Int
_connSubErrs <- TVar Int -> IO Int
forall (m :: * -> *) a. MonadIO m => TVar a -> m a
readTVarIO (TVar Int -> IO Int) -> TVar Int -> IO Int
forall a b. (a -> b) -> a -> b
$ AgentSMPServerStats -> TVar Int
connSubErrs AgentSMPServerStats
s
  OptionalInt
_ntfKey <- Int -> OptionalInt
OInt (Int -> OptionalInt) -> IO Int -> IO OptionalInt
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> TVar Int -> IO Int
forall (m :: * -> *) a. MonadIO m => TVar a -> m a
readTVarIO (AgentSMPServerStats -> TVar Int
ntfKey AgentSMPServerStats
s)
  OptionalInt
_ntfKeyAttempts <- Int -> OptionalInt
OInt (Int -> OptionalInt) -> IO Int -> IO OptionalInt
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> TVar Int -> IO Int
forall (m :: * -> *) a. MonadIO m => TVar a -> m a
readTVarIO (AgentSMPServerStats -> TVar Int
ntfKeyAttempts AgentSMPServerStats
s)
  OptionalInt
_ntfKeyDeleted <- Int -> OptionalInt
OInt (Int -> OptionalInt) -> IO Int -> IO OptionalInt
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> TVar Int -> IO Int
forall (m :: * -> *) a. MonadIO m => TVar a -> m a
readTVarIO (AgentSMPServerStats -> TVar Int
ntfKeyDeleted AgentSMPServerStats
s)
  OptionalInt
_ntfKeyDeleteAttempts <- Int -> OptionalInt
OInt (Int -> OptionalInt) -> IO Int -> IO OptionalInt
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> TVar Int -> IO Int
forall (m :: * -> *) a. MonadIO m => TVar a -> m a
readTVarIO (AgentSMPServerStats -> TVar Int
ntfKeyDeleteAttempts AgentSMPServerStats
s)
  AgentSMPServerStatsData -> IO AgentSMPServerStatsData
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure
    AgentSMPServerStatsData
      { Int
_sentDirect :: Int
_sentDirect :: Int
_sentDirect,
        Int
_sentViaProxy :: Int
_sentViaProxy :: Int
_sentViaProxy,
        Int
_sentProxied :: Int
_sentProxied :: Int
_sentProxied,
        Int
_sentDirectAttempts :: Int
_sentDirectAttempts :: Int
_sentDirectAttempts,
        Int
_sentViaProxyAttempts :: Int
_sentViaProxyAttempts :: Int
_sentViaProxyAttempts,
        Int
_sentProxiedAttempts :: Int
_sentProxiedAttempts :: Int
_sentProxiedAttempts,
        Int
_sentAuthErrs :: Int
_sentAuthErrs :: Int
_sentAuthErrs,
        Int
_sentQuotaErrs :: Int
_sentQuotaErrs :: Int
_sentQuotaErrs,
        Int
_sentExpiredErrs :: Int
_sentExpiredErrs :: Int
_sentExpiredErrs,
        Int
_sentOtherErrs :: Int
_sentOtherErrs :: Int
_sentOtherErrs,
        Int
_recvMsgs :: Int
_recvMsgs :: Int
_recvMsgs,
        Int
_recvDuplicates :: Int
_recvDuplicates :: Int
_recvDuplicates,
        Int
_recvCryptoErrs :: Int
_recvCryptoErrs :: Int
_recvCryptoErrs,
        Int
_recvErrs :: Int
_recvErrs :: Int
_recvErrs,
        Int
_ackMsgs :: Int
_ackMsgs :: Int
_ackMsgs,
        Int
_ackAttempts :: Int
_ackAttempts :: Int
_ackAttempts,
        Int
_ackNoMsgErrs :: Int
_ackNoMsgErrs :: Int
_ackNoMsgErrs,
        Int
_ackOtherErrs :: Int
_ackOtherErrs :: Int
_ackOtherErrs,
        Int
_connCreated :: Int
_connCreated :: Int
_connCreated,
        Int
_connSecured :: Int
_connSecured :: Int
_connSecured,
        Int
_connCompleted :: Int
_connCompleted :: Int
_connCompleted,
        Int
_connDeleted :: Int
_connDeleted :: Int
_connDeleted,
        Int
_connDelAttempts :: Int
_connDelAttempts :: Int
_connDelAttempts,
        Int
_connDelErrs :: Int
_connDelErrs :: Int
_connDelErrs,
        Int
_connSubscribed :: Int
_connSubscribed :: Int
_connSubscribed,
        Int
_connSubAttempts :: Int
_connSubAttempts :: Int
_connSubAttempts,
        Int
_connSubIgnored :: Int
_connSubIgnored :: Int
_connSubIgnored,
        Int
_connSubErrs :: Int
_connSubErrs :: Int
_connSubErrs,
        OptionalInt
_ntfKey :: OptionalInt
_ntfKey :: OptionalInt
_ntfKey,
        OptionalInt
_ntfKeyAttempts :: OptionalInt
_ntfKeyAttempts :: OptionalInt
_ntfKeyAttempts,
        OptionalInt
_ntfKeyDeleted :: OptionalInt
_ntfKeyDeleted :: OptionalInt
_ntfKeyDeleted,
        OptionalInt
_ntfKeyDeleteAttempts :: OptionalInt
_ntfKeyDeleteAttempts :: OptionalInt
_ntfKeyDeleteAttempts
      }

addSMPStatsData :: AgentSMPServerStatsData -> AgentSMPServerStatsData -> AgentSMPServerStatsData
addSMPStatsData :: AgentSMPServerStatsData
-> AgentSMPServerStatsData -> AgentSMPServerStatsData
addSMPStatsData AgentSMPServerStatsData
sd1 AgentSMPServerStatsData
sd2 =
  AgentSMPServerStatsData
    { _sentDirect :: Int
_sentDirect = AgentSMPServerStatsData -> Int
_sentDirect AgentSMPServerStatsData
sd1 Int -> Int -> Int
forall a. Num a => a -> a -> a
+ AgentSMPServerStatsData -> Int
_sentDirect AgentSMPServerStatsData
sd2,
      _sentViaProxy :: Int
_sentViaProxy = AgentSMPServerStatsData -> Int
_sentViaProxy AgentSMPServerStatsData
sd1 Int -> Int -> Int
forall a. Num a => a -> a -> a
+ AgentSMPServerStatsData -> Int
_sentViaProxy AgentSMPServerStatsData
sd2,
      _sentProxied :: Int
_sentProxied = AgentSMPServerStatsData -> Int
_sentProxied AgentSMPServerStatsData
sd1 Int -> Int -> Int
forall a. Num a => a -> a -> a
+ AgentSMPServerStatsData -> Int
_sentProxied AgentSMPServerStatsData
sd2,
      _sentDirectAttempts :: Int
_sentDirectAttempts = AgentSMPServerStatsData -> Int
_sentDirectAttempts AgentSMPServerStatsData
sd1 Int -> Int -> Int
forall a. Num a => a -> a -> a
+ AgentSMPServerStatsData -> Int
_sentDirectAttempts AgentSMPServerStatsData
sd2,
      _sentViaProxyAttempts :: Int
_sentViaProxyAttempts = AgentSMPServerStatsData -> Int
_sentViaProxyAttempts AgentSMPServerStatsData
sd1 Int -> Int -> Int
forall a. Num a => a -> a -> a
+ AgentSMPServerStatsData -> Int
_sentViaProxyAttempts AgentSMPServerStatsData
sd2,
      _sentProxiedAttempts :: Int
_sentProxiedAttempts = AgentSMPServerStatsData -> Int
_sentProxiedAttempts AgentSMPServerStatsData
sd1 Int -> Int -> Int
forall a. Num a => a -> a -> a
+ AgentSMPServerStatsData -> Int
_sentProxiedAttempts AgentSMPServerStatsData
sd2,
      _sentAuthErrs :: Int
_sentAuthErrs = AgentSMPServerStatsData -> Int
_sentAuthErrs AgentSMPServerStatsData
sd1 Int -> Int -> Int
forall a. Num a => a -> a -> a
+ AgentSMPServerStatsData -> Int
_sentAuthErrs AgentSMPServerStatsData
sd2,
      _sentQuotaErrs :: Int
_sentQuotaErrs = AgentSMPServerStatsData -> Int
_sentQuotaErrs AgentSMPServerStatsData
sd1 Int -> Int -> Int
forall a. Num a => a -> a -> a
+ AgentSMPServerStatsData -> Int
_sentQuotaErrs AgentSMPServerStatsData
sd2,
      _sentExpiredErrs :: Int
_sentExpiredErrs = AgentSMPServerStatsData -> Int
_sentExpiredErrs AgentSMPServerStatsData
sd1 Int -> Int -> Int
forall a. Num a => a -> a -> a
+ AgentSMPServerStatsData -> Int
_sentExpiredErrs AgentSMPServerStatsData
sd2,
      _sentOtherErrs :: Int
_sentOtherErrs = AgentSMPServerStatsData -> Int
_sentOtherErrs AgentSMPServerStatsData
sd1 Int -> Int -> Int
forall a. Num a => a -> a -> a
+ AgentSMPServerStatsData -> Int
_sentOtherErrs AgentSMPServerStatsData
sd2,
      _recvMsgs :: Int
_recvMsgs = AgentSMPServerStatsData -> Int
_recvMsgs AgentSMPServerStatsData
sd1 Int -> Int -> Int
forall a. Num a => a -> a -> a
+ AgentSMPServerStatsData -> Int
_recvMsgs AgentSMPServerStatsData
sd2,
      _recvDuplicates :: Int
_recvDuplicates = AgentSMPServerStatsData -> Int
_recvDuplicates AgentSMPServerStatsData
sd1 Int -> Int -> Int
forall a. Num a => a -> a -> a
+ AgentSMPServerStatsData -> Int
_recvDuplicates AgentSMPServerStatsData
sd2,
      _recvCryptoErrs :: Int
_recvCryptoErrs = AgentSMPServerStatsData -> Int
_recvCryptoErrs AgentSMPServerStatsData
sd1 Int -> Int -> Int
forall a. Num a => a -> a -> a
+ AgentSMPServerStatsData -> Int
_recvCryptoErrs AgentSMPServerStatsData
sd2,
      _recvErrs :: Int
_recvErrs = AgentSMPServerStatsData -> Int
_recvErrs AgentSMPServerStatsData
sd1 Int -> Int -> Int
forall a. Num a => a -> a -> a
+ AgentSMPServerStatsData -> Int
_recvErrs AgentSMPServerStatsData
sd2,
      _ackMsgs :: Int
_ackMsgs = AgentSMPServerStatsData -> Int
_ackMsgs AgentSMPServerStatsData
sd1 Int -> Int -> Int
forall a. Num a => a -> a -> a
+ AgentSMPServerStatsData -> Int
_ackMsgs AgentSMPServerStatsData
sd2,
      _ackAttempts :: Int
_ackAttempts = AgentSMPServerStatsData -> Int
_ackAttempts AgentSMPServerStatsData
sd1 Int -> Int -> Int
forall a. Num a => a -> a -> a
+ AgentSMPServerStatsData -> Int
_ackAttempts AgentSMPServerStatsData
sd2,
      _ackNoMsgErrs :: Int
_ackNoMsgErrs = AgentSMPServerStatsData -> Int
_ackNoMsgErrs AgentSMPServerStatsData
sd1 Int -> Int -> Int
forall a. Num a => a -> a -> a
+ AgentSMPServerStatsData -> Int
_ackNoMsgErrs AgentSMPServerStatsData
sd2,
      _ackOtherErrs :: Int
_ackOtherErrs = AgentSMPServerStatsData -> Int
_ackOtherErrs AgentSMPServerStatsData
sd1 Int -> Int -> Int
forall a. Num a => a -> a -> a
+ AgentSMPServerStatsData -> Int
_ackOtherErrs AgentSMPServerStatsData
sd2,
      _connCreated :: Int
_connCreated = AgentSMPServerStatsData -> Int
_connCreated AgentSMPServerStatsData
sd1 Int -> Int -> Int
forall a. Num a => a -> a -> a
+ AgentSMPServerStatsData -> Int
_connCreated AgentSMPServerStatsData
sd2,
      _connSecured :: Int
_connSecured = AgentSMPServerStatsData -> Int
_connSecured AgentSMPServerStatsData
sd1 Int -> Int -> Int
forall a. Num a => a -> a -> a
+ AgentSMPServerStatsData -> Int
_connSecured AgentSMPServerStatsData
sd2,
      _connCompleted :: Int
_connCompleted = AgentSMPServerStatsData -> Int
_connCompleted AgentSMPServerStatsData
sd1 Int -> Int -> Int
forall a. Num a => a -> a -> a
+ AgentSMPServerStatsData -> Int
_connCompleted AgentSMPServerStatsData
sd2,
      _connDeleted :: Int
_connDeleted = AgentSMPServerStatsData -> Int
_connDeleted AgentSMPServerStatsData
sd1 Int -> Int -> Int
forall a. Num a => a -> a -> a
+ AgentSMPServerStatsData -> Int
_connDeleted AgentSMPServerStatsData
sd2,
      _connDelAttempts :: Int
_connDelAttempts = AgentSMPServerStatsData -> Int
_connDelAttempts AgentSMPServerStatsData
sd1 Int -> Int -> Int
forall a. Num a => a -> a -> a
+ AgentSMPServerStatsData -> Int
_connDelAttempts AgentSMPServerStatsData
sd2,
      _connDelErrs :: Int
_connDelErrs = AgentSMPServerStatsData -> Int
_connDelErrs AgentSMPServerStatsData
sd1 Int -> Int -> Int
forall a. Num a => a -> a -> a
+ AgentSMPServerStatsData -> Int
_connDelErrs AgentSMPServerStatsData
sd2,
      _connSubscribed :: Int
_connSubscribed = AgentSMPServerStatsData -> Int
_connSubscribed AgentSMPServerStatsData
sd1 Int -> Int -> Int
forall a. Num a => a -> a -> a
+ AgentSMPServerStatsData -> Int
_connSubscribed AgentSMPServerStatsData
sd2,
      _connSubAttempts :: Int
_connSubAttempts = AgentSMPServerStatsData -> Int
_connSubAttempts AgentSMPServerStatsData
sd1 Int -> Int -> Int
forall a. Num a => a -> a -> a
+ AgentSMPServerStatsData -> Int
_connSubAttempts AgentSMPServerStatsData
sd2,
      _connSubIgnored :: Int
_connSubIgnored = AgentSMPServerStatsData -> Int
_connSubIgnored AgentSMPServerStatsData
sd1 Int -> Int -> Int
forall a. Num a => a -> a -> a
+ AgentSMPServerStatsData -> Int
_connSubIgnored AgentSMPServerStatsData
sd2,
      _connSubErrs :: Int
_connSubErrs = AgentSMPServerStatsData -> Int
_connSubErrs AgentSMPServerStatsData
sd1 Int -> Int -> Int
forall a. Num a => a -> a -> a
+ AgentSMPServerStatsData -> Int
_connSubErrs AgentSMPServerStatsData
sd2,
      _ntfKey :: OptionalInt
_ntfKey = AgentSMPServerStatsData -> OptionalInt
_ntfKey AgentSMPServerStatsData
sd1 OptionalInt -> OptionalInt -> OptionalInt
forall a. Num a => a -> a -> a
+ AgentSMPServerStatsData -> OptionalInt
_ntfKey AgentSMPServerStatsData
sd2,
      _ntfKeyAttempts :: OptionalInt
_ntfKeyAttempts = AgentSMPServerStatsData -> OptionalInt
_ntfKeyAttempts AgentSMPServerStatsData
sd1 OptionalInt -> OptionalInt -> OptionalInt
forall a. Num a => a -> a -> a
+ AgentSMPServerStatsData -> OptionalInt
_ntfKeyAttempts AgentSMPServerStatsData
sd2,
      _ntfKeyDeleted :: OptionalInt
_ntfKeyDeleted = AgentSMPServerStatsData -> OptionalInt
_ntfKeyDeleted AgentSMPServerStatsData
sd1 OptionalInt -> OptionalInt -> OptionalInt
forall a. Num a => a -> a -> a
+ AgentSMPServerStatsData -> OptionalInt
_ntfKeyDeleted AgentSMPServerStatsData
sd2,
      _ntfKeyDeleteAttempts :: OptionalInt
_ntfKeyDeleteAttempts = AgentSMPServerStatsData -> OptionalInt
_ntfKeyDeleteAttempts AgentSMPServerStatsData
sd1 OptionalInt -> OptionalInt -> OptionalInt
forall a. Num a => a -> a -> a
+ AgentSMPServerStatsData -> OptionalInt
_ntfKeyDeleteAttempts AgentSMPServerStatsData
sd2
    }

data AgentXFTPServerStats = AgentXFTPServerStats
  { AgentXFTPServerStats -> TVar Int
uploads :: TVar Int, -- total replicas uploaded to server
    AgentXFTPServerStats -> TVar Int64
uploadsSize :: TVar Int64, -- total size of uploaded replicas in KB
    AgentXFTPServerStats -> TVar Int
uploadAttempts :: TVar Int, -- upload attempts
    AgentXFTPServerStats -> TVar Int
uploadErrs :: TVar Int, -- upload errors
    AgentXFTPServerStats -> TVar Int
downloads :: TVar Int, -- total replicas downloaded from server
    AgentXFTPServerStats -> TVar Int64
downloadsSize :: TVar Int64, -- total size of downloaded replicas in KB
    AgentXFTPServerStats -> TVar Int
downloadAttempts :: TVar Int, -- download attempts
    AgentXFTPServerStats -> TVar Int
downloadAuthErrs :: TVar Int, -- download AUTH errors
    AgentXFTPServerStats -> TVar Int
downloadErrs :: TVar Int, -- other download errors (excluding above)
    AgentXFTPServerStats -> TVar Int
deletions :: TVar Int, -- total replicas deleted from server
    AgentXFTPServerStats -> TVar Int
deleteAttempts :: TVar Int, -- delete attempts
    AgentXFTPServerStats -> TVar Int
deleteErrs :: TVar Int -- delete errors
  }

data AgentXFTPServerStatsData = AgentXFTPServerStatsData
  { AgentXFTPServerStatsData -> Int
_uploads :: Int,
    AgentXFTPServerStatsData -> Int64
_uploadsSize :: Int64,
    AgentXFTPServerStatsData -> Int
_uploadAttempts :: Int,
    AgentXFTPServerStatsData -> Int
_uploadErrs :: Int,
    AgentXFTPServerStatsData -> Int
_downloads :: Int,
    AgentXFTPServerStatsData -> Int64
_downloadsSize :: Int64,
    AgentXFTPServerStatsData -> Int
_downloadAttempts :: Int,
    AgentXFTPServerStatsData -> Int
_downloadAuthErrs :: Int,
    AgentXFTPServerStatsData -> Int
_downloadErrs :: Int,
    AgentXFTPServerStatsData -> Int
_deletions :: Int,
    AgentXFTPServerStatsData -> Int
_deleteAttempts :: Int,
    AgentXFTPServerStatsData -> Int
_deleteErrs :: Int
  }
  deriving (Int -> AgentXFTPServerStatsData -> ShowS
[AgentXFTPServerStatsData] -> ShowS
AgentXFTPServerStatsData -> String
(Int -> AgentXFTPServerStatsData -> ShowS)
-> (AgentXFTPServerStatsData -> String)
-> ([AgentXFTPServerStatsData] -> ShowS)
-> Show AgentXFTPServerStatsData
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> AgentXFTPServerStatsData -> ShowS
showsPrec :: Int -> AgentXFTPServerStatsData -> ShowS
$cshow :: AgentXFTPServerStatsData -> String
show :: AgentXFTPServerStatsData -> String
$cshowList :: [AgentXFTPServerStatsData] -> ShowS
showList :: [AgentXFTPServerStatsData] -> ShowS
Show)

newAgentXFTPServerStats :: STM AgentXFTPServerStats
newAgentXFTPServerStats :: STM AgentXFTPServerStats
newAgentXFTPServerStats = do
  TVar Int
uploads <- Int -> STM (TVar Int)
forall a. a -> STM (TVar a)
newTVar Int
0
  TVar Int64
uploadsSize <- Int64 -> STM (TVar Int64)
forall a. a -> STM (TVar a)
newTVar Int64
0
  TVar Int
uploadAttempts <- Int -> STM (TVar Int)
forall a. a -> STM (TVar a)
newTVar Int
0
  TVar Int
uploadErrs <- Int -> STM (TVar Int)
forall a. a -> STM (TVar a)
newTVar Int
0
  TVar Int
downloads <- Int -> STM (TVar Int)
forall a. a -> STM (TVar a)
newTVar Int
0
  TVar Int64
downloadsSize <- Int64 -> STM (TVar Int64)
forall a. a -> STM (TVar a)
newTVar Int64
0
  TVar Int
downloadAttempts <- Int -> STM (TVar Int)
forall a. a -> STM (TVar a)
newTVar Int
0
  TVar Int
downloadAuthErrs <- Int -> STM (TVar Int)
forall a. a -> STM (TVar a)
newTVar Int
0
  TVar Int
downloadErrs <- Int -> STM (TVar Int)
forall a. a -> STM (TVar a)
newTVar Int
0
  TVar Int
deletions <- Int -> STM (TVar Int)
forall a. a -> STM (TVar a)
newTVar Int
0
  TVar Int
deleteAttempts <- Int -> STM (TVar Int)
forall a. a -> STM (TVar a)
newTVar Int
0
  TVar Int
deleteErrs <- Int -> STM (TVar Int)
forall a. a -> STM (TVar a)
newTVar Int
0
  AgentXFTPServerStats -> STM AgentXFTPServerStats
forall a. a -> STM a
forall (f :: * -> *) a. Applicative f => a -> f a
pure
    AgentXFTPServerStats
      { TVar Int
uploads :: TVar Int
uploads :: TVar Int
uploads,
        TVar Int64
uploadsSize :: TVar Int64
uploadsSize :: TVar Int64
uploadsSize,
        TVar Int
uploadAttempts :: TVar Int
uploadAttempts :: TVar Int
uploadAttempts,
        TVar Int
uploadErrs :: TVar Int
uploadErrs :: TVar Int
uploadErrs,
        TVar Int
downloads :: TVar Int
downloads :: TVar Int
downloads,
        TVar Int64
downloadsSize :: TVar Int64
downloadsSize :: TVar Int64
downloadsSize,
        TVar Int
downloadAttempts :: TVar Int
downloadAttempts :: TVar Int
downloadAttempts,
        TVar Int
downloadAuthErrs :: TVar Int
downloadAuthErrs :: TVar Int
downloadAuthErrs,
        TVar Int
downloadErrs :: TVar Int
downloadErrs :: TVar Int
downloadErrs,
        TVar Int
deletions :: TVar Int
deletions :: TVar Int
deletions,
        TVar Int
deleteAttempts :: TVar Int
deleteAttempts :: TVar Int
deleteAttempts,
        TVar Int
deleteErrs :: TVar Int
deleteErrs :: TVar Int
deleteErrs
      }

newAgentXFTPServerStatsData :: AgentXFTPServerStatsData
newAgentXFTPServerStatsData :: AgentXFTPServerStatsData
newAgentXFTPServerStatsData =
  AgentXFTPServerStatsData
    { _uploads :: Int
_uploads = Int
0,
      _uploadsSize :: Int64
_uploadsSize = Int64
0,
      _uploadAttempts :: Int
_uploadAttempts = Int
0,
      _uploadErrs :: Int
_uploadErrs = Int
0,
      _downloads :: Int
_downloads = Int
0,
      _downloadsSize :: Int64
_downloadsSize = Int64
0,
      _downloadAttempts :: Int
_downloadAttempts = Int
0,
      _downloadAuthErrs :: Int
_downloadAuthErrs = Int
0,
      _downloadErrs :: Int
_downloadErrs = Int
0,
      _deletions :: Int
_deletions = Int
0,
      _deleteAttempts :: Int
_deleteAttempts = Int
0,
      _deleteErrs :: Int
_deleteErrs = Int
0
    }

newAgentXFTPServerStats' :: AgentXFTPServerStatsData -> STM AgentXFTPServerStats
newAgentXFTPServerStats' :: AgentXFTPServerStatsData -> STM AgentXFTPServerStats
newAgentXFTPServerStats' AgentXFTPServerStatsData
s = do
  TVar Int
uploads <- Int -> STM (TVar Int)
forall a. a -> STM (TVar a)
newTVar (Int -> STM (TVar Int)) -> Int -> STM (TVar Int)
forall a b. (a -> b) -> a -> b
$ AgentXFTPServerStatsData -> Int
_uploads AgentXFTPServerStatsData
s
  TVar Int64
uploadsSize <- Int64 -> STM (TVar Int64)
forall a. a -> STM (TVar a)
newTVar (Int64 -> STM (TVar Int64)) -> Int64 -> STM (TVar Int64)
forall a b. (a -> b) -> a -> b
$ AgentXFTPServerStatsData -> Int64
_uploadsSize AgentXFTPServerStatsData
s
  TVar Int
uploadAttempts <- Int -> STM (TVar Int)
forall a. a -> STM (TVar a)
newTVar (Int -> STM (TVar Int)) -> Int -> STM (TVar Int)
forall a b. (a -> b) -> a -> b
$ AgentXFTPServerStatsData -> Int
_uploadAttempts AgentXFTPServerStatsData
s
  TVar Int
uploadErrs <- Int -> STM (TVar Int)
forall a. a -> STM (TVar a)
newTVar (Int -> STM (TVar Int)) -> Int -> STM (TVar Int)
forall a b. (a -> b) -> a -> b
$ AgentXFTPServerStatsData -> Int
_uploadErrs AgentXFTPServerStatsData
s
  TVar Int
downloads <- Int -> STM (TVar Int)
forall a. a -> STM (TVar a)
newTVar (Int -> STM (TVar Int)) -> Int -> STM (TVar Int)
forall a b. (a -> b) -> a -> b
$ AgentXFTPServerStatsData -> Int
_downloads AgentXFTPServerStatsData
s
  TVar Int64
downloadsSize <- Int64 -> STM (TVar Int64)
forall a. a -> STM (TVar a)
newTVar (Int64 -> STM (TVar Int64)) -> Int64 -> STM (TVar Int64)
forall a b. (a -> b) -> a -> b
$ AgentXFTPServerStatsData -> Int64
_downloadsSize AgentXFTPServerStatsData
s
  TVar Int
downloadAttempts <- Int -> STM (TVar Int)
forall a. a -> STM (TVar a)
newTVar (Int -> STM (TVar Int)) -> Int -> STM (TVar Int)
forall a b. (a -> b) -> a -> b
$ AgentXFTPServerStatsData -> Int
_downloadAttempts AgentXFTPServerStatsData
s
  TVar Int
downloadAuthErrs <- Int -> STM (TVar Int)
forall a. a -> STM (TVar a)
newTVar (Int -> STM (TVar Int)) -> Int -> STM (TVar Int)
forall a b. (a -> b) -> a -> b
$ AgentXFTPServerStatsData -> Int
_downloadAuthErrs AgentXFTPServerStatsData
s
  TVar Int
downloadErrs <- Int -> STM (TVar Int)
forall a. a -> STM (TVar a)
newTVar (Int -> STM (TVar Int)) -> Int -> STM (TVar Int)
forall a b. (a -> b) -> a -> b
$ AgentXFTPServerStatsData -> Int
_downloadErrs AgentXFTPServerStatsData
s
  TVar Int
deletions <- Int -> STM (TVar Int)
forall a. a -> STM (TVar a)
newTVar (Int -> STM (TVar Int)) -> Int -> STM (TVar Int)
forall a b. (a -> b) -> a -> b
$ AgentXFTPServerStatsData -> Int
_deletions AgentXFTPServerStatsData
s
  TVar Int
deleteAttempts <- Int -> STM (TVar Int)
forall a. a -> STM (TVar a)
newTVar (Int -> STM (TVar Int)) -> Int -> STM (TVar Int)
forall a b. (a -> b) -> a -> b
$ AgentXFTPServerStatsData -> Int
_deleteAttempts AgentXFTPServerStatsData
s
  TVar Int
deleteErrs <- Int -> STM (TVar Int)
forall a. a -> STM (TVar a)
newTVar (Int -> STM (TVar Int)) -> Int -> STM (TVar Int)
forall a b. (a -> b) -> a -> b
$ AgentXFTPServerStatsData -> Int
_deleteErrs AgentXFTPServerStatsData
s
  AgentXFTPServerStats -> STM AgentXFTPServerStats
forall a. a -> STM a
forall (f :: * -> *) a. Applicative f => a -> f a
pure
    AgentXFTPServerStats
      { TVar Int
uploads :: TVar Int
uploads :: TVar Int
uploads,
        TVar Int64
uploadsSize :: TVar Int64
uploadsSize :: TVar Int64
uploadsSize,
        TVar Int
uploadAttempts :: TVar Int
uploadAttempts :: TVar Int
uploadAttempts,
        TVar Int
uploadErrs :: TVar Int
uploadErrs :: TVar Int
uploadErrs,
        TVar Int
downloads :: TVar Int
downloads :: TVar Int
downloads,
        TVar Int64
downloadsSize :: TVar Int64
downloadsSize :: TVar Int64
downloadsSize,
        TVar Int
downloadAttempts :: TVar Int
downloadAttempts :: TVar Int
downloadAttempts,
        TVar Int
downloadAuthErrs :: TVar Int
downloadAuthErrs :: TVar Int
downloadAuthErrs,
        TVar Int
downloadErrs :: TVar Int
downloadErrs :: TVar Int
downloadErrs,
        TVar Int
deletions :: TVar Int
deletions :: TVar Int
deletions,
        TVar Int
deleteAttempts :: TVar Int
deleteAttempts :: TVar Int
deleteAttempts,
        TVar Int
deleteErrs :: TVar Int
deleteErrs :: TVar Int
deleteErrs
      }

-- as this is used to periodically update stats in db,
-- this is not STM to decrease contention with stats updates
getAgentXFTPServerStats :: AgentXFTPServerStats -> IO AgentXFTPServerStatsData
getAgentXFTPServerStats :: AgentXFTPServerStats -> IO AgentXFTPServerStatsData
getAgentXFTPServerStats AgentXFTPServerStats
s = do
  Int
_uploads <- TVar Int -> IO Int
forall (m :: * -> *) a. MonadIO m => TVar a -> m a
readTVarIO (TVar Int -> IO Int) -> TVar Int -> IO Int
forall a b. (a -> b) -> a -> b
$ AgentXFTPServerStats -> TVar Int
uploads AgentXFTPServerStats
s
  Int64
_uploadsSize <- TVar Int64 -> IO Int64
forall (m :: * -> *) a. MonadIO m => TVar a -> m a
readTVarIO (TVar Int64 -> IO Int64) -> TVar Int64 -> IO Int64
forall a b. (a -> b) -> a -> b
$ AgentXFTPServerStats -> TVar Int64
uploadsSize AgentXFTPServerStats
s
  Int
_uploadAttempts <- TVar Int -> IO Int
forall (m :: * -> *) a. MonadIO m => TVar a -> m a
readTVarIO (TVar Int -> IO Int) -> TVar Int -> IO Int
forall a b. (a -> b) -> a -> b
$ AgentXFTPServerStats -> TVar Int
uploadAttempts AgentXFTPServerStats
s
  Int
_uploadErrs <- TVar Int -> IO Int
forall (m :: * -> *) a. MonadIO m => TVar a -> m a
readTVarIO (TVar Int -> IO Int) -> TVar Int -> IO Int
forall a b. (a -> b) -> a -> b
$ AgentXFTPServerStats -> TVar Int
uploadErrs AgentXFTPServerStats
s
  Int
_downloads <- TVar Int -> IO Int
forall (m :: * -> *) a. MonadIO m => TVar a -> m a
readTVarIO (TVar Int -> IO Int) -> TVar Int -> IO Int
forall a b. (a -> b) -> a -> b
$ AgentXFTPServerStats -> TVar Int
downloads AgentXFTPServerStats
s
  Int64
_downloadsSize <- TVar Int64 -> IO Int64
forall (m :: * -> *) a. MonadIO m => TVar a -> m a
readTVarIO (TVar Int64 -> IO Int64) -> TVar Int64 -> IO Int64
forall a b. (a -> b) -> a -> b
$ AgentXFTPServerStats -> TVar Int64
downloadsSize AgentXFTPServerStats
s
  Int
_downloadAttempts <- TVar Int -> IO Int
forall (m :: * -> *) a. MonadIO m => TVar a -> m a
readTVarIO (TVar Int -> IO Int) -> TVar Int -> IO Int
forall a b. (a -> b) -> a -> b
$ AgentXFTPServerStats -> TVar Int
downloadAttempts AgentXFTPServerStats
s
  Int
_downloadAuthErrs <- TVar Int -> IO Int
forall (m :: * -> *) a. MonadIO m => TVar a -> m a
readTVarIO (TVar Int -> IO Int) -> TVar Int -> IO Int
forall a b. (a -> b) -> a -> b
$ AgentXFTPServerStats -> TVar Int
downloadAuthErrs AgentXFTPServerStats
s
  Int
_downloadErrs <- TVar Int -> IO Int
forall (m :: * -> *) a. MonadIO m => TVar a -> m a
readTVarIO (TVar Int -> IO Int) -> TVar Int -> IO Int
forall a b. (a -> b) -> a -> b
$ AgentXFTPServerStats -> TVar Int
downloadErrs AgentXFTPServerStats
s
  Int
_deletions <- TVar Int -> IO Int
forall (m :: * -> *) a. MonadIO m => TVar a -> m a
readTVarIO (TVar Int -> IO Int) -> TVar Int -> IO Int
forall a b. (a -> b) -> a -> b
$ AgentXFTPServerStats -> TVar Int
deletions AgentXFTPServerStats
s
  Int
_deleteAttempts <- TVar Int -> IO Int
forall (m :: * -> *) a. MonadIO m => TVar a -> m a
readTVarIO (TVar Int -> IO Int) -> TVar Int -> IO Int
forall a b. (a -> b) -> a -> b
$ AgentXFTPServerStats -> TVar Int
deleteAttempts AgentXFTPServerStats
s
  Int
_deleteErrs <- TVar Int -> IO Int
forall (m :: * -> *) a. MonadIO m => TVar a -> m a
readTVarIO (TVar Int -> IO Int) -> TVar Int -> IO Int
forall a b. (a -> b) -> a -> b
$ AgentXFTPServerStats -> TVar Int
deleteErrs AgentXFTPServerStats
s
  AgentXFTPServerStatsData -> IO AgentXFTPServerStatsData
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure
    AgentXFTPServerStatsData
      { Int
_uploads :: Int
_uploads :: Int
_uploads,
        Int64
_uploadsSize :: Int64
_uploadsSize :: Int64
_uploadsSize,
        Int
_uploadAttempts :: Int
_uploadAttempts :: Int
_uploadAttempts,
        Int
_uploadErrs :: Int
_uploadErrs :: Int
_uploadErrs,
        Int
_downloads :: Int
_downloads :: Int
_downloads,
        Int64
_downloadsSize :: Int64
_downloadsSize :: Int64
_downloadsSize,
        Int
_downloadAttempts :: Int
_downloadAttempts :: Int
_downloadAttempts,
        Int
_downloadAuthErrs :: Int
_downloadAuthErrs :: Int
_downloadAuthErrs,
        Int
_downloadErrs :: Int
_downloadErrs :: Int
_downloadErrs,
        Int
_deletions :: Int
_deletions :: Int
_deletions,
        Int
_deleteAttempts :: Int
_deleteAttempts :: Int
_deleteAttempts,
        Int
_deleteErrs :: Int
_deleteErrs :: Int
_deleteErrs
      }

addXFTPStatsData :: AgentXFTPServerStatsData -> AgentXFTPServerStatsData -> AgentXFTPServerStatsData
addXFTPStatsData :: AgentXFTPServerStatsData
-> AgentXFTPServerStatsData -> AgentXFTPServerStatsData
addXFTPStatsData AgentXFTPServerStatsData
sd1 AgentXFTPServerStatsData
sd2 =
  AgentXFTPServerStatsData
    { _uploads :: Int
_uploads = AgentXFTPServerStatsData -> Int
_uploads AgentXFTPServerStatsData
sd1 Int -> Int -> Int
forall a. Num a => a -> a -> a
+ AgentXFTPServerStatsData -> Int
_uploads AgentXFTPServerStatsData
sd2,
      _uploadsSize :: Int64
_uploadsSize = AgentXFTPServerStatsData -> Int64
_uploadsSize AgentXFTPServerStatsData
sd1 Int64 -> Int64 -> Int64
forall a. Num a => a -> a -> a
+ AgentXFTPServerStatsData -> Int64
_uploadsSize AgentXFTPServerStatsData
sd2,
      _uploadAttempts :: Int
_uploadAttempts = AgentXFTPServerStatsData -> Int
_uploadAttempts AgentXFTPServerStatsData
sd1 Int -> Int -> Int
forall a. Num a => a -> a -> a
+ AgentXFTPServerStatsData -> Int
_uploadAttempts AgentXFTPServerStatsData
sd2,
      _uploadErrs :: Int
_uploadErrs = AgentXFTPServerStatsData -> Int
_uploadErrs AgentXFTPServerStatsData
sd1 Int -> Int -> Int
forall a. Num a => a -> a -> a
+ AgentXFTPServerStatsData -> Int
_uploadErrs AgentXFTPServerStatsData
sd2,
      _downloads :: Int
_downloads = AgentXFTPServerStatsData -> Int
_downloads AgentXFTPServerStatsData
sd1 Int -> Int -> Int
forall a. Num a => a -> a -> a
+ AgentXFTPServerStatsData -> Int
_downloads AgentXFTPServerStatsData
sd2,
      _downloadsSize :: Int64
_downloadsSize = AgentXFTPServerStatsData -> Int64
_downloadsSize AgentXFTPServerStatsData
sd1 Int64 -> Int64 -> Int64
forall a. Num a => a -> a -> a
+ AgentXFTPServerStatsData -> Int64
_downloadsSize AgentXFTPServerStatsData
sd2,
      _downloadAttempts :: Int
_downloadAttempts = AgentXFTPServerStatsData -> Int
_downloadAttempts AgentXFTPServerStatsData
sd1 Int -> Int -> Int
forall a. Num a => a -> a -> a
+ AgentXFTPServerStatsData -> Int
_downloadAttempts AgentXFTPServerStatsData
sd2,
      _downloadAuthErrs :: Int
_downloadAuthErrs = AgentXFTPServerStatsData -> Int
_downloadAuthErrs AgentXFTPServerStatsData
sd1 Int -> Int -> Int
forall a. Num a => a -> a -> a
+ AgentXFTPServerStatsData -> Int
_downloadAuthErrs AgentXFTPServerStatsData
sd2,
      _downloadErrs :: Int
_downloadErrs = AgentXFTPServerStatsData -> Int
_downloadErrs AgentXFTPServerStatsData
sd1 Int -> Int -> Int
forall a. Num a => a -> a -> a
+ AgentXFTPServerStatsData -> Int
_downloadErrs AgentXFTPServerStatsData
sd2,
      _deletions :: Int
_deletions = AgentXFTPServerStatsData -> Int
_deletions AgentXFTPServerStatsData
sd1 Int -> Int -> Int
forall a. Num a => a -> a -> a
+ AgentXFTPServerStatsData -> Int
_deletions AgentXFTPServerStatsData
sd2,
      _deleteAttempts :: Int
_deleteAttempts = AgentXFTPServerStatsData -> Int
_deleteAttempts AgentXFTPServerStatsData
sd1 Int -> Int -> Int
forall a. Num a => a -> a -> a
+ AgentXFTPServerStatsData -> Int
_deleteAttempts AgentXFTPServerStatsData
sd2,
      _deleteErrs :: Int
_deleteErrs = AgentXFTPServerStatsData -> Int
_deleteErrs AgentXFTPServerStatsData
sd1 Int -> Int -> Int
forall a. Num a => a -> a -> a
+ AgentXFTPServerStatsData -> Int
_deleteErrs AgentXFTPServerStatsData
sd2
    }

data AgentNtfServerStats = AgentNtfServerStats
  { AgentNtfServerStats -> TVar Int
ntfCreated :: TVar Int,
    AgentNtfServerStats -> TVar Int
ntfCreateAttempts :: TVar Int,
    AgentNtfServerStats -> TVar Int
ntfChecked :: TVar Int,
    AgentNtfServerStats -> TVar Int
ntfCheckAttempts :: TVar Int,
    AgentNtfServerStats -> TVar Int
ntfDeleted :: TVar Int,
    AgentNtfServerStats -> TVar Int
ntfDelAttempts :: TVar Int
  }

data AgentNtfServerStatsData = AgentNtfServerStatsData
  { AgentNtfServerStatsData -> Int
_ntfCreated :: Int,
    AgentNtfServerStatsData -> Int
_ntfCreateAttempts :: Int,
    AgentNtfServerStatsData -> Int
_ntfChecked :: Int,
    AgentNtfServerStatsData -> Int
_ntfCheckAttempts :: Int,
    AgentNtfServerStatsData -> Int
_ntfDeleted :: Int,
    AgentNtfServerStatsData -> Int
_ntfDelAttempts :: Int
  }
  deriving (Int -> AgentNtfServerStatsData -> ShowS
[AgentNtfServerStatsData] -> ShowS
AgentNtfServerStatsData -> String
(Int -> AgentNtfServerStatsData -> ShowS)
-> (AgentNtfServerStatsData -> String)
-> ([AgentNtfServerStatsData] -> ShowS)
-> Show AgentNtfServerStatsData
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> AgentNtfServerStatsData -> ShowS
showsPrec :: Int -> AgentNtfServerStatsData -> ShowS
$cshow :: AgentNtfServerStatsData -> String
show :: AgentNtfServerStatsData -> String
$cshowList :: [AgentNtfServerStatsData] -> ShowS
showList :: [AgentNtfServerStatsData] -> ShowS
Show)

newAgentNtfServerStats :: STM AgentNtfServerStats
newAgentNtfServerStats :: STM AgentNtfServerStats
newAgentNtfServerStats = do
  TVar Int
ntfCreated <- Int -> STM (TVar Int)
forall a. a -> STM (TVar a)
newTVar Int
0
  TVar Int
ntfCreateAttempts <- Int -> STM (TVar Int)
forall a. a -> STM (TVar a)
newTVar Int
0
  TVar Int
ntfChecked <- Int -> STM (TVar Int)
forall a. a -> STM (TVar a)
newTVar Int
0
  TVar Int
ntfCheckAttempts <- Int -> STM (TVar Int)
forall a. a -> STM (TVar a)
newTVar Int
0
  TVar Int
ntfDeleted <- Int -> STM (TVar Int)
forall a. a -> STM (TVar a)
newTVar Int
0
  TVar Int
ntfDelAttempts <- Int -> STM (TVar Int)
forall a. a -> STM (TVar a)
newTVar Int
0
  AgentNtfServerStats -> STM AgentNtfServerStats
forall a. a -> STM a
forall (f :: * -> *) a. Applicative f => a -> f a
pure
    AgentNtfServerStats
      { TVar Int
ntfCreated :: TVar Int
ntfCreated :: TVar Int
ntfCreated,
        TVar Int
ntfCreateAttempts :: TVar Int
ntfCreateAttempts :: TVar Int
ntfCreateAttempts,
        TVar Int
ntfChecked :: TVar Int
ntfChecked :: TVar Int
ntfChecked,
        TVar Int
ntfCheckAttempts :: TVar Int
ntfCheckAttempts :: TVar Int
ntfCheckAttempts,
        TVar Int
ntfDeleted :: TVar Int
ntfDeleted :: TVar Int
ntfDeleted,
        TVar Int
ntfDelAttempts :: TVar Int
ntfDelAttempts :: TVar Int
ntfDelAttempts
      }

newAgentNtfServerStatsData :: AgentNtfServerStatsData
newAgentNtfServerStatsData :: AgentNtfServerStatsData
newAgentNtfServerStatsData =
  AgentNtfServerStatsData
    { _ntfCreated :: Int
_ntfCreated = Int
0,
      _ntfCreateAttempts :: Int
_ntfCreateAttempts = Int
0,
      _ntfChecked :: Int
_ntfChecked = Int
0,
      _ntfCheckAttempts :: Int
_ntfCheckAttempts = Int
0,
      _ntfDeleted :: Int
_ntfDeleted = Int
0,
      _ntfDelAttempts :: Int
_ntfDelAttempts = Int
0
    }

newAgentNtfServerStats' :: AgentNtfServerStatsData -> STM AgentNtfServerStats
newAgentNtfServerStats' :: AgentNtfServerStatsData -> STM AgentNtfServerStats
newAgentNtfServerStats' AgentNtfServerStatsData
s = do
  TVar Int
ntfCreated <- Int -> STM (TVar Int)
forall a. a -> STM (TVar a)
newTVar (Int -> STM (TVar Int)) -> Int -> STM (TVar Int)
forall a b. (a -> b) -> a -> b
$ AgentNtfServerStatsData -> Int
_ntfCreated AgentNtfServerStatsData
s
  TVar Int
ntfCreateAttempts <- Int -> STM (TVar Int)
forall a. a -> STM (TVar a)
newTVar (Int -> STM (TVar Int)) -> Int -> STM (TVar Int)
forall a b. (a -> b) -> a -> b
$ AgentNtfServerStatsData -> Int
_ntfCreateAttempts AgentNtfServerStatsData
s
  TVar Int
ntfChecked <- Int -> STM (TVar Int)
forall a. a -> STM (TVar a)
newTVar (Int -> STM (TVar Int)) -> Int -> STM (TVar Int)
forall a b. (a -> b) -> a -> b
$ AgentNtfServerStatsData -> Int
_ntfChecked AgentNtfServerStatsData
s
  TVar Int
ntfCheckAttempts <- Int -> STM (TVar Int)
forall a. a -> STM (TVar a)
newTVar (Int -> STM (TVar Int)) -> Int -> STM (TVar Int)
forall a b. (a -> b) -> a -> b
$ AgentNtfServerStatsData -> Int
_ntfCheckAttempts AgentNtfServerStatsData
s
  TVar Int
ntfDeleted <- Int -> STM (TVar Int)
forall a. a -> STM (TVar a)
newTVar (Int -> STM (TVar Int)) -> Int -> STM (TVar Int)
forall a b. (a -> b) -> a -> b
$ AgentNtfServerStatsData -> Int
_ntfDeleted AgentNtfServerStatsData
s
  TVar Int
ntfDelAttempts <- Int -> STM (TVar Int)
forall a. a -> STM (TVar a)
newTVar (Int -> STM (TVar Int)) -> Int -> STM (TVar Int)
forall a b. (a -> b) -> a -> b
$ AgentNtfServerStatsData -> Int
_ntfDelAttempts AgentNtfServerStatsData
s
  AgentNtfServerStats -> STM AgentNtfServerStats
forall a. a -> STM a
forall (f :: * -> *) a. Applicative f => a -> f a
pure
    AgentNtfServerStats
      { TVar Int
ntfCreated :: TVar Int
ntfCreated :: TVar Int
ntfCreated,
        TVar Int
ntfCreateAttempts :: TVar Int
ntfCreateAttempts :: TVar Int
ntfCreateAttempts,
        TVar Int
ntfChecked :: TVar Int
ntfChecked :: TVar Int
ntfChecked,
        TVar Int
ntfCheckAttempts :: TVar Int
ntfCheckAttempts :: TVar Int
ntfCheckAttempts,
        TVar Int
ntfDeleted :: TVar Int
ntfDeleted :: TVar Int
ntfDeleted,
        TVar Int
ntfDelAttempts :: TVar Int
ntfDelAttempts :: TVar Int
ntfDelAttempts
      }

getAgentNtfServerStats :: AgentNtfServerStats -> IO AgentNtfServerStatsData
getAgentNtfServerStats :: AgentNtfServerStats -> IO AgentNtfServerStatsData
getAgentNtfServerStats AgentNtfServerStats
s = do
  Int
_ntfCreated <- TVar Int -> IO Int
forall (m :: * -> *) a. MonadIO m => TVar a -> m a
readTVarIO (TVar Int -> IO Int) -> TVar Int -> IO Int
forall a b. (a -> b) -> a -> b
$ AgentNtfServerStats -> TVar Int
ntfCreated AgentNtfServerStats
s
  Int
_ntfCreateAttempts <- TVar Int -> IO Int
forall (m :: * -> *) a. MonadIO m => TVar a -> m a
readTVarIO (TVar Int -> IO Int) -> TVar Int -> IO Int
forall a b. (a -> b) -> a -> b
$ AgentNtfServerStats -> TVar Int
ntfCreateAttempts AgentNtfServerStats
s
  Int
_ntfChecked <- TVar Int -> IO Int
forall (m :: * -> *) a. MonadIO m => TVar a -> m a
readTVarIO (TVar Int -> IO Int) -> TVar Int -> IO Int
forall a b. (a -> b) -> a -> b
$ AgentNtfServerStats -> TVar Int
ntfChecked AgentNtfServerStats
s
  Int
_ntfCheckAttempts <- TVar Int -> IO Int
forall (m :: * -> *) a. MonadIO m => TVar a -> m a
readTVarIO (TVar Int -> IO Int) -> TVar Int -> IO Int
forall a b. (a -> b) -> a -> b
$ AgentNtfServerStats -> TVar Int
ntfCheckAttempts AgentNtfServerStats
s
  Int
_ntfDeleted <- TVar Int -> IO Int
forall (m :: * -> *) a. MonadIO m => TVar a -> m a
readTVarIO (TVar Int -> IO Int) -> TVar Int -> IO Int
forall a b. (a -> b) -> a -> b
$ AgentNtfServerStats -> TVar Int
ntfDeleted AgentNtfServerStats
s
  Int
_ntfDelAttempts <- TVar Int -> IO Int
forall (m :: * -> *) a. MonadIO m => TVar a -> m a
readTVarIO (TVar Int -> IO Int) -> TVar Int -> IO Int
forall a b. (a -> b) -> a -> b
$ AgentNtfServerStats -> TVar Int
ntfDelAttempts AgentNtfServerStats
s
  AgentNtfServerStatsData -> IO AgentNtfServerStatsData
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure
    AgentNtfServerStatsData
      { Int
_ntfCreated :: Int
_ntfCreated :: Int
_ntfCreated,
        Int
_ntfCreateAttempts :: Int
_ntfCreateAttempts :: Int
_ntfCreateAttempts,
        Int
_ntfChecked :: Int
_ntfChecked :: Int
_ntfChecked,
        Int
_ntfCheckAttempts :: Int
_ntfCheckAttempts :: Int
_ntfCheckAttempts,
        Int
_ntfDeleted :: Int
_ntfDeleted :: Int
_ntfDeleted,
        Int
_ntfDelAttempts :: Int
_ntfDelAttempts :: Int
_ntfDelAttempts
      }

addNtfStatsData :: AgentNtfServerStatsData -> AgentNtfServerStatsData -> AgentNtfServerStatsData
addNtfStatsData :: AgentNtfServerStatsData
-> AgentNtfServerStatsData -> AgentNtfServerStatsData
addNtfStatsData AgentNtfServerStatsData
sd1 AgentNtfServerStatsData
sd2 =
  AgentNtfServerStatsData
    { _ntfCreated :: Int
_ntfCreated = AgentNtfServerStatsData -> Int
_ntfCreated AgentNtfServerStatsData
sd1 Int -> Int -> Int
forall a. Num a => a -> a -> a
+ AgentNtfServerStatsData -> Int
_ntfCreated AgentNtfServerStatsData
sd2,
      _ntfCreateAttempts :: Int
_ntfCreateAttempts = AgentNtfServerStatsData -> Int
_ntfCreateAttempts AgentNtfServerStatsData
sd1 Int -> Int -> Int
forall a. Num a => a -> a -> a
+ AgentNtfServerStatsData -> Int
_ntfCreateAttempts AgentNtfServerStatsData
sd2,
      _ntfChecked :: Int
_ntfChecked = AgentNtfServerStatsData -> Int
_ntfChecked AgentNtfServerStatsData
sd1 Int -> Int -> Int
forall a. Num a => a -> a -> a
+ AgentNtfServerStatsData -> Int
_ntfChecked AgentNtfServerStatsData
sd2,
      _ntfCheckAttempts :: Int
_ntfCheckAttempts = AgentNtfServerStatsData -> Int
_ntfCheckAttempts AgentNtfServerStatsData
sd1 Int -> Int -> Int
forall a. Num a => a -> a -> a
+ AgentNtfServerStatsData -> Int
_ntfCheckAttempts AgentNtfServerStatsData
sd2,
      _ntfDeleted :: Int
_ntfDeleted = AgentNtfServerStatsData -> Int
_ntfDeleted AgentNtfServerStatsData
sd1 Int -> Int -> Int
forall a. Num a => a -> a -> a
+ AgentNtfServerStatsData -> Int
_ntfDeleted AgentNtfServerStatsData
sd2,
      _ntfDelAttempts :: Int
_ntfDelAttempts = AgentNtfServerStatsData -> Int
_ntfDelAttempts AgentNtfServerStatsData
sd1 Int -> Int -> Int
forall a. Num a => a -> a -> a
+ AgentNtfServerStatsData -> Int
_ntfDelAttempts AgentNtfServerStatsData
sd2
    }

-- Type for gathering both smp and xftp stats across all users and servers,
-- to then be persisted to db as a single json.
data AgentPersistedServerStats = AgentPersistedServerStats
  { AgentPersistedServerStats
-> Map (Int64, SMPServer) AgentSMPServerStatsData
smpServersStats :: Map (UserId, SMPServer) AgentSMPServerStatsData,
    AgentPersistedServerStats
-> Map (Int64, XFTPServer) AgentXFTPServerStatsData
xftpServersStats :: Map (UserId, XFTPServer) AgentXFTPServerStatsData,
    AgentPersistedServerStats
-> OptionalMap (Int64, NtfServer) AgentNtfServerStatsData
ntfServersStats :: OptionalMap (UserId, NtfServer) AgentNtfServerStatsData
  }
  deriving (Int -> AgentPersistedServerStats -> ShowS
[AgentPersistedServerStats] -> ShowS
AgentPersistedServerStats -> String
(Int -> AgentPersistedServerStats -> ShowS)
-> (AgentPersistedServerStats -> String)
-> ([AgentPersistedServerStats] -> ShowS)
-> Show AgentPersistedServerStats
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> AgentPersistedServerStats -> ShowS
showsPrec :: Int -> AgentPersistedServerStats -> ShowS
$cshow :: AgentPersistedServerStats -> String
show :: AgentPersistedServerStats -> String
$cshowList :: [AgentPersistedServerStats] -> ShowS
showList :: [AgentPersistedServerStats] -> ShowS
Show)

instance FromJSON OptionalInt where
  parseJSON :: Value -> Parser OptionalInt
parseJSON Value
v = Int -> OptionalInt
OInt (Int -> OptionalInt) -> Parser Int -> Parser OptionalInt
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Value -> Parser Int
forall a. FromJSON a => Value -> Parser a
parseJSON Value
v
  omittedField :: Maybe OptionalInt
omittedField = OptionalInt -> Maybe OptionalInt
forall a. a -> Maybe a
Just (Int -> OptionalInt
OInt Int
0)

newtype OptionalMap k v = OptionalMap (Map k v)
  deriving (Int -> OptionalMap k v -> ShowS
[OptionalMap k v] -> ShowS
OptionalMap k v -> String
(Int -> OptionalMap k v -> ShowS)
-> (OptionalMap k v -> String)
-> ([OptionalMap k v] -> ShowS)
-> Show (OptionalMap k v)
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
forall k v. (Show k, Show v) => Int -> OptionalMap k v -> ShowS
forall k v. (Show k, Show v) => [OptionalMap k v] -> ShowS
forall k v. (Show k, Show v) => OptionalMap k v -> String
$cshowsPrec :: forall k v. (Show k, Show v) => Int -> OptionalMap k v -> ShowS
showsPrec :: Int -> OptionalMap k v -> ShowS
$cshow :: forall k v. (Show k, Show v) => OptionalMap k v -> String
show :: OptionalMap k v -> String
$cshowList :: forall k v. (Show k, Show v) => [OptionalMap k v] -> ShowS
showList :: [OptionalMap k v] -> ShowS
Show, [OptionalMap k v] -> Encoding
[OptionalMap k v] -> Value
OptionalMap k v -> Bool
OptionalMap k v -> Encoding
OptionalMap k v -> Value
(OptionalMap k v -> Value)
-> (OptionalMap k v -> Encoding)
-> ([OptionalMap k v] -> Value)
-> ([OptionalMap k v] -> Encoding)
-> (OptionalMap k v -> Bool)
-> ToJSON (OptionalMap k v)
forall a.
(a -> Value)
-> (a -> Encoding)
-> ([a] -> Value)
-> ([a] -> Encoding)
-> (a -> Bool)
-> ToJSON a
forall k v.
(ToJSON v, ToJSONKey k) =>
[OptionalMap k v] -> Encoding
forall k v. (ToJSON v, ToJSONKey k) => [OptionalMap k v] -> Value
forall k v. (ToJSON v, ToJSONKey k) => OptionalMap k v -> Bool
forall k v. (ToJSON v, ToJSONKey k) => OptionalMap k v -> Encoding
forall k v. (ToJSON v, ToJSONKey k) => OptionalMap k v -> Value
$ctoJSON :: forall k v. (ToJSON v, ToJSONKey k) => OptionalMap k v -> Value
toJSON :: OptionalMap k v -> Value
$ctoEncoding :: forall k v. (ToJSON v, ToJSONKey k) => OptionalMap k v -> Encoding
toEncoding :: OptionalMap k v -> Encoding
$ctoJSONList :: forall k v. (ToJSON v, ToJSONKey k) => [OptionalMap k v] -> Value
toJSONList :: [OptionalMap k v] -> Value
$ctoEncodingList :: forall k v.
(ToJSON v, ToJSONKey k) =>
[OptionalMap k v] -> Encoding
toEncodingList :: [OptionalMap k v] -> Encoding
$comitField :: forall k v. (ToJSON v, ToJSONKey k) => OptionalMap k v -> Bool
omitField :: OptionalMap k v -> Bool
ToJSON)

instance (FromJSONKey k, Ord k, FromJSON v) => FromJSON (OptionalMap k v) where
  parseJSON :: Value -> Parser (OptionalMap k v)
parseJSON Value
v = Map k v -> OptionalMap k v
forall k v. Map k v -> OptionalMap k v
OptionalMap (Map k v -> OptionalMap k v)
-> Parser (Map k v) -> Parser (OptionalMap k v)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Value -> Parser (Map k v)
forall a. FromJSON a => Value -> Parser a
parseJSON Value
v
  omittedField :: Maybe (OptionalMap k v)
omittedField = OptionalMap k v -> Maybe (OptionalMap k v)
forall a. a -> Maybe a
Just (Map k v -> OptionalMap k v
forall k v. Map k v -> OptionalMap k v
OptionalMap Map k v
forall k a. Map k a
M.empty)

$(J.deriveJSON defaultJSON ''AgentSMPServerStatsData)

$(J.deriveJSON defaultJSON ''AgentXFTPServerStatsData)

$(J.deriveJSON defaultJSON ''AgentNtfServerStatsData)

$(J.deriveJSON defaultJSON ''AgentPersistedServerStats)

instance ToField AgentPersistedServerStats where
  toField :: AgentPersistedServerStats -> SQLData
toField = Text -> SQLData
forall a. ToField a => a -> SQLData
toField (Text -> SQLData)
-> (AgentPersistedServerStats -> Text)
-> AgentPersistedServerStats
-> SQLData
forall b c a. (b -> c) -> (a -> b) -> a -> c
. AgentPersistedServerStats -> Text
forall a. ToJSON a => a -> Text
encodeJSON

instance FromField AgentPersistedServerStats where
  fromField :: FieldParser AgentPersistedServerStats
fromField = (Text -> Maybe AgentPersistedServerStats)
-> FieldParser AgentPersistedServerStats
forall a. Typeable a => (Text -> Maybe a) -> Field -> Ok a
fromTextField_ Text -> Maybe AgentPersistedServerStats
forall a. FromJSON a => Text -> Maybe a
decodeJSON