@@ -118,6 +118,7 @@ import Development.IDE.GHC.Orphans ()
118118import Development.IDE.Graph hiding (ShakeValue )
119119import qualified Development.IDE.Graph as Shake
120120import Development.IDE.Graph.Database (ShakeDatabase ,
121+ shakeDatabaseDatabase ,
121122 shakeOpenDatabase ,
122123 shakeProfileDatabase ,
123124 shakeRunDatabaseForKeys )
@@ -154,12 +155,16 @@ import qualified Data.HashSet as HSet
154155import Data.IORef.Extra (atomicModifyIORef'_ ,
155156 atomicModifyIORef_ )
156157import Data.Text (pack )
158+ import Development.IDE.Graph.Database (shakeGetKeys )
159+ import Development.IDE.Graph.Internal.Types (Step (Step ),
160+ databaseStep )
157161import qualified Development.IDE.Types.Exports as ExportsMap
158162import HieDb.Types
159163import Ide.Plugin.Config
160164import qualified Ide.PluginUtils as HLS
161165import Ide.Types (PluginId )
162- import System.Metrics (Store , registerGauge )
166+ import System.Metrics (Store , registerCounter ,
167+ registerGauge )
163168
164169-- | Maximum age (in # builds) of a cached value after which it's considered garbage
165170garbageAge :: Int
@@ -327,7 +332,7 @@ lastValueIO s@ShakeExtras{positionMapping,persistentKeys,state} k file = do
327332 | otherwise = do
328333 pmap <- readVar persistentKeys
329334 mv <- runMaybeT $ do
330- liftIO $ Logger. logDebug (logger s) $ T. pack $ " LOOKUP UP PERSISTENT FOR: " ++ show k
335+ liftIO $ Logger. logDebug (logger s) $ T. pack $ " LOOKUP PERSISTENT FOR: " ++ show k
331336 f <- MaybeT $ pure $ HMap. lookup (Key k) pmap
332337 (dv,del,ver) <- MaybeT $ runIdeAction " lastValueIO" s $ f file
333338 MaybeT $ pure $ (,del,ver) <$> fromDynamic dv
@@ -548,11 +553,23 @@ shakeOpen lspEnv defaultConfig logger debouncer
548553 { optOTMemoryProfiling = IdeOTMemoryProfiling otProfilingEnabled
549554 , optProgressStyle
550555 } <- getIdeOptionsIO shakeExtras
556+
551557 startTelemetry otProfilingEnabled logger $ state shakeExtras
552558
553559 for_ metrics $ \ store -> do
554560 let readValuesCounter = fromIntegral . HMap. size <$> readVar (state shakeExtras)
561+ readDirtyKeys = fromIntegral . Prelude. length <$> readIORef (dirtyKeys shakeExtras)
562+ readIndexPending = fromIntegral . HMap. size <$> readTVarIO (indexPending $ hiedbWriter shakeExtras)
563+ readExportsMap = fromIntegral . HMap. size . getExportsMap <$> readVar (exportsMap shakeExtras)
564+ readDatabaseCount = fromIntegral . Prelude. length <$> shakeGetKeys shakeDb
565+ readDatabaseStep = (\ (Step s) -> fromIntegral s) <$> readIORef (databaseStep $ shakeDatabaseDatabase shakeDb)
566+
555567 registerGauge " ghcide.values_count" readValuesCounter store
568+ registerGauge " ghcide.dirty_keys_count" readDirtyKeys store
569+ registerGauge " ghcide.indexing_pending_count" readIndexPending store
570+ registerCounter " ghcide.exports_map_count" readExportsMap store
571+ registerCounter " ghcide.database_count" readDatabaseCount store
572+ registerCounter " ghcide.build_count" readDatabaseStep store
556573
557574 return ideState
558575
0 commit comments