@@ -118,6 +118,7 @@ import Development.IDE.GHC.Orphans ()
118
118
import Development.IDE.Graph hiding (ShakeValue )
119
119
import qualified Development.IDE.Graph as Shake
120
120
import Development.IDE.Graph.Database (ShakeDatabase ,
121
+ shakeDatabaseDatabase ,
121
122
shakeOpenDatabase ,
122
123
shakeProfileDatabase ,
123
124
shakeRunDatabaseForKeys )
@@ -154,12 +155,16 @@ import qualified Data.HashSet as HSet
154
155
import Data.IORef.Extra (atomicModifyIORef'_ ,
155
156
atomicModifyIORef_ )
156
157
import Data.Text (pack )
158
+ import Development.IDE.Graph.Database (shakeGetKeys )
159
+ import Development.IDE.Graph.Internal.Types (Step (Step ),
160
+ databaseStep )
157
161
import qualified Development.IDE.Types.Exports as ExportsMap
158
162
import HieDb.Types
159
163
import Ide.Plugin.Config
160
164
import qualified Ide.PluginUtils as HLS
161
165
import Ide.Types (PluginId )
162
- import System.Metrics (Store , registerGauge )
166
+ import System.Metrics (Store , registerCounter ,
167
+ registerGauge )
163
168
164
169
-- | Maximum age (in # builds) of a cached value after which it's considered garbage
165
170
garbageAge :: Int
@@ -327,7 +332,7 @@ lastValueIO s@ShakeExtras{positionMapping,persistentKeys,state} k file = do
327
332
| otherwise = do
328
333
pmap <- readVar persistentKeys
329
334
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
331
336
f <- MaybeT $ pure $ HMap. lookup (Key k) pmap
332
337
(dv,del,ver) <- MaybeT $ runIdeAction " lastValueIO" s $ f file
333
338
MaybeT $ pure $ (,del,ver) <$> fromDynamic dv
@@ -548,11 +553,23 @@ shakeOpen lspEnv defaultConfig logger debouncer
548
553
{ optOTMemoryProfiling = IdeOTMemoryProfiling otProfilingEnabled
549
554
, optProgressStyle
550
555
} <- getIdeOptionsIO shakeExtras
556
+
551
557
startTelemetry otProfilingEnabled logger $ state shakeExtras
552
558
553
559
for_ metrics $ \ store -> do
554
560
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
+
555
567
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
556
573
557
574
return ideState
558
575
0 commit comments