mirror of https://github.com/voidlizard/hbs2
BlockDownload probe
This commit is contained in:
parent
76c9fe5445
commit
4dae285d25
|
@ -3,7 +3,6 @@
|
||||||
module BlockDownload where
|
module BlockDownload where
|
||||||
|
|
||||||
import HBS2.Peer.Prelude
|
import HBS2.Peer.Prelude
|
||||||
import HBS2.Base58
|
|
||||||
import HBS2.Actors.Peer
|
import HBS2.Actors.Peer
|
||||||
import HBS2.Data.Types.Peer
|
import HBS2.Data.Types.Peer
|
||||||
import HBS2.Data.Detect
|
import HBS2.Data.Detect
|
||||||
|
@ -22,20 +21,16 @@ import HBS2.Misc.PrettyStuff
|
||||||
|
|
||||||
import PeerTypes
|
import PeerTypes
|
||||||
import PeerInfo
|
import PeerInfo
|
||||||
import Brains
|
|
||||||
import DownloadMon
|
|
||||||
|
|
||||||
import Control.Concurrent.STM qualified as STM
|
import Control.Concurrent.STM qualified as STM
|
||||||
import Control.Monad.Trans.Cont
|
import Control.Monad.Trans.Cont
|
||||||
import Control.Monad.Reader
|
import Control.Monad.Reader
|
||||||
import Control.Monad.Trans.Maybe
|
import Control.Monad.Trans.Maybe
|
||||||
import Data.Cache qualified as Cache
|
|
||||||
import Data.HashMap.Strict (HashMap)
|
import Data.HashMap.Strict (HashMap)
|
||||||
import Data.HashMap.Strict qualified as HashMap
|
import Data.HashMap.Strict qualified as HashMap
|
||||||
import Data.HashMap.Strict qualified as HM
|
import Data.HashMap.Strict qualified as HM
|
||||||
import Data.HashSet (HashSet)
|
import Data.HashSet (HashSet)
|
||||||
import Data.HashSet qualified as HS
|
import Data.HashSet qualified as HS
|
||||||
import Data.IntMap.Strict (IntMap)
|
|
||||||
import Data.IntMap.Strict qualified as IntMap
|
import Data.IntMap.Strict qualified as IntMap
|
||||||
import Data.IntSet qualified as IntSet
|
import Data.IntSet qualified as IntSet
|
||||||
import Data.Maybe
|
import Data.Maybe
|
||||||
|
@ -44,9 +39,6 @@ import Data.ByteString.Lazy (ByteString)
|
||||||
import Data.List qualified as L
|
import Data.List qualified as L
|
||||||
import Lens.Micro.Platform
|
import Lens.Micro.Platform
|
||||||
import Codec.Serialise
|
import Codec.Serialise
|
||||||
import Data.Hashable
|
|
||||||
import System.Random.Shuffle (shuffleM)
|
|
||||||
import Control.Concurrent (getNumCapabilities)
|
|
||||||
import Streaming.Prelude qualified as S
|
import Streaming.Prelude qualified as S
|
||||||
import System.Random
|
import System.Random
|
||||||
|
|
||||||
|
@ -630,6 +622,22 @@ blockDownloadLoop env0 = do
|
||||||
debug $ red "WAIT FOR PEERS TIMEOUT" <+> pretty blk
|
debug $ red "WAIT FOR PEERS TIMEOUT" <+> pretty blk
|
||||||
atomically $ writeTVar busy mempty
|
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
|
forever do
|
||||||
withPeerM e $ withDownload env0 do
|
withPeerM e $ withDownload env0 do
|
||||||
pause @'Seconds 5
|
pause @'Seconds 5
|
||||||
|
|
|
@ -815,6 +815,10 @@ runPeer opts = respawnOnError opts $ runResourceT do
|
||||||
|
|
||||||
denv <- newDownloadEnv brains
|
denv <- newDownloadEnv brains
|
||||||
|
|
||||||
|
dProbe <- newSimpleProbe "BlockDownload"
|
||||||
|
addProbe dProbe
|
||||||
|
downloadEnvSetProbe denv dProbe
|
||||||
|
|
||||||
pl <- AnyPeerLocator <$> newBrainyPeerLocator @e (SomeBrains @e brains) mempty
|
pl <- AnyPeerLocator <$> newBrainyPeerLocator @e (SomeBrains @e brains) mempty
|
||||||
|
|
||||||
-- FIXME: messaing-watchdog
|
-- FIXME: messaing-watchdog
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
{-# Language AllowAmbiguousTypes #-}
|
{-# Language AllowAmbiguousTypes #-}
|
||||||
{-# Language MultiWayIf #-}
|
{-# Language MultiWayIf #-}
|
||||||
{-# Language FunctionalDependencies #-}
|
{-# Language FunctionalDependencies #-}
|
||||||
|
{-# Language RecordWildCards #-}
|
||||||
module PeerTypes
|
module PeerTypes
|
||||||
( module PeerTypes
|
( module PeerTypes
|
||||||
, module PeerLogger
|
, module PeerLogger
|
||||||
|
@ -257,11 +258,19 @@ data DownloadEnv e =
|
||||||
-- , _blockProposed :: Cache (Hash HbSync, Peer e) ()
|
-- , _blockProposed :: Cache (Hash HbSync, Peer e) ()
|
||||||
, _downloadMon :: DownloadMonEnv
|
, _downloadMon :: DownloadMonEnv
|
||||||
, _downloadBrains :: SomeBrains e
|
, _downloadBrains :: SomeBrains e
|
||||||
|
, _downloadProbe :: TVar AnyProbe
|
||||||
}
|
}
|
||||||
|
|
||||||
makeLenses 'DownloadEnv
|
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 :: (MonadIO m, MyPeer e, HasBrains e brains) => brains -> m (DownloadEnv e)
|
||||||
newDownloadEnv brains = liftIO do
|
newDownloadEnv brains = liftIO do
|
||||||
DownloadEnv <$> newTVarIO mempty
|
DownloadEnv <$> newTVarIO mempty
|
||||||
|
@ -271,6 +280,7 @@ newDownloadEnv brains = liftIO do
|
||||||
-- <*> Cache.newCache (Just (toTimeSpec (2 :: Timeout 'Seconds)))
|
-- <*> Cache.newCache (Just (toTimeSpec (2 :: Timeout 'Seconds)))
|
||||||
<*> downloadMonNew
|
<*> downloadMonNew
|
||||||
<*> pure (SomeBrains brains)
|
<*> pure (SomeBrains brains)
|
||||||
|
<*> newTVarIO (AnyProbe ())
|
||||||
|
|
||||||
newtype BlockDownloadM e m a =
|
newtype BlockDownloadM e m a =
|
||||||
BlockDownloadM { fromBlockDownloadM :: ReaderT (DownloadEnv e) m a }
|
BlockDownloadM { fromBlockDownloadM :: ReaderT (DownloadEnv e) m a }
|
||||||
|
|
Loading…
Reference in New Issue