BlockDownload probe

This commit is contained in:
voidlizard 2024-11-01 11:42:53 +03:00
parent 76c9fe5445
commit 4dae285d25
3 changed files with 30 additions and 8 deletions

View File

@ -3,7 +3,6 @@
module BlockDownload where
import HBS2.Peer.Prelude
import HBS2.Base58
import HBS2.Actors.Peer
import HBS2.Data.Types.Peer
import HBS2.Data.Detect
@ -22,20 +21,16 @@ import HBS2.Misc.PrettyStuff
import PeerTypes
import PeerInfo
import Brains
import DownloadMon
import Control.Concurrent.STM qualified as STM
import Control.Monad.Trans.Cont
import Control.Monad.Reader
import Control.Monad.Trans.Maybe
import Data.Cache qualified as Cache
import Data.HashMap.Strict (HashMap)
import Data.HashMap.Strict qualified as HashMap
import Data.HashMap.Strict qualified as HM
import Data.HashSet (HashSet)
import Data.HashSet qualified as HS
import Data.IntMap.Strict (IntMap)
import Data.IntMap.Strict qualified as IntMap
import Data.IntSet qualified as IntSet
import Data.Maybe
@ -44,9 +39,6 @@ import Data.ByteString.Lazy (ByteString)
import Data.List qualified as L
import Lens.Micro.Platform
import Codec.Serialise
import Data.Hashable
import System.Random.Shuffle (shuffleM)
import Control.Concurrent (getNumCapabilities)
import Streaming.Prelude qualified as S
import System.Random
@ -630,6 +622,22 @@ blockDownloadLoop env0 = do
debug $ red "WAIT FOR PEERS TIMEOUT" <+> pretty blk
atomically $ writeTVar busy mempty
void $ ContT $ withAsync $ forever do
pause @'Seconds 10
let DownloadEnv{..} = env0
let DownloadMonEnv{..} = _downloadMon
p <- readTVarIO _downloadProbe
acceptReport p =<< S.toList_ do
S.yield =<< liftIO (readTVarIO _blockInQ <&> ("blockInQ",) . fromIntegral . HashMap.size)
S.yield =<< liftIO (readTVarIO _downloads <&> ("downloads",) . fromIntegral . HashMap.size)
S.yield =<< liftIO (readTVarIO nonces <&> ("nonces",) . fromIntegral . HashMap.size)
S.yield =<< liftIO (readTVarIO busy <&> ("busy",) . fromIntegral . HashMap.size)
S.yield =<< liftIO (readTVarIO rates <&> ("rates",) . fromIntegral . IntMap.size)
S.yield =<< liftIO (readTVarIO fetchH <&> ("fetchH",) . fromIntegral . HS.size)
S.yield =<< liftIO (readTVarIO sizes <&> ("sizes",) . fromIntegral . HashMap.size)
S.yield =<< liftIO (readTVarIO sizeReq <&> ("sizeReq",) . fromIntegral . HashMap.size)
S.yield =<< liftIO (readTVarIO seen <&> ("seen",) . fromIntegral . HashMap.size)
forever do
withPeerM e $ withDownload env0 do
pause @'Seconds 5

View File

@ -815,6 +815,10 @@ runPeer opts = respawnOnError opts $ runResourceT do
denv <- newDownloadEnv brains
dProbe <- newSimpleProbe "BlockDownload"
addProbe dProbe
downloadEnvSetProbe denv dProbe
pl <- AnyPeerLocator <$> newBrainyPeerLocator @e (SomeBrains @e brains) mempty
-- FIXME: messaing-watchdog

View File

@ -4,6 +4,7 @@
{-# Language AllowAmbiguousTypes #-}
{-# Language MultiWayIf #-}
{-# Language FunctionalDependencies #-}
{-# Language RecordWildCards #-}
module PeerTypes
( module PeerTypes
, module PeerLogger
@ -257,11 +258,19 @@ data DownloadEnv e =
-- , _blockProposed :: Cache (Hash HbSync, Peer e) ()
, _downloadMon :: DownloadMonEnv
, _downloadBrains :: SomeBrains e
, _downloadProbe :: TVar AnyProbe
}
makeLenses 'DownloadEnv
downloadEnvSetProbe :: forall e m . (MonadIO m, MyPeer e)
=> DownloadEnv e
-> AnyProbe
-> m ()
downloadEnvSetProbe DownloadEnv{..} p = do
atomically $ writeTVar _downloadProbe p
newDownloadEnv :: (MonadIO m, MyPeer e, HasBrains e brains) => brains -> m (DownloadEnv e)
newDownloadEnv brains = liftIO do
DownloadEnv <$> newTVarIO mempty
@ -271,6 +280,7 @@ newDownloadEnv brains = liftIO do
-- <*> Cache.newCache (Just (toTimeSpec (2 :: Timeout 'Seconds)))
<*> downloadMonNew
<*> pure (SomeBrains brains)
<*> newTVarIO (AnyProbe ())
newtype BlockDownloadM e m a =
BlockDownloadM { fromBlockDownloadM :: ReaderT (DownloadEnv e) m a }