mirror of https://github.com/voidlizard/hbs2
BlockDownload probe
This commit is contained in:
parent
4c4e773fa5
commit
b11f233a60
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 }
|
||||
|
|
Loading…
Reference in New Issue