@@ -118,7 +118,6 @@ import Data.Typeable
118
118
import Data.Unique
119
119
import Data.Vector (Vector )
120
120
import qualified Data.Vector as Vector
121
- import Debug.Trace.Flags (userTracingEnabled )
122
121
import Development.IDE.Core.Debouncer
123
122
import Development.IDE.Core.FileUtils (getModTime )
124
123
import Development.IDE.Core.PositionMapping
@@ -168,8 +167,8 @@ import qualified "list-t" ListT
168
167
import qualified StmContainers.Map as STM
169
168
import System.FilePath hiding (makeRelative )
170
169
import System.IO.Unsafe (unsafePerformIO )
171
- import System.Metrics (Store , registerCounter , registerGauge )
172
170
import System.Time.Extra
171
+ import Development.IDE.Types.Monitoring (Monitoring (.. ))
173
172
174
173
data Log
175
174
= LogCreateHieDbExportsMapStart
@@ -464,6 +463,7 @@ data IdeState = IdeState
464
463
,shakeSession :: MVar ShakeSession
465
464
,shakeExtras :: ShakeExtras
466
465
,shakeDatabaseProfile :: ShakeDatabase -> IO (Maybe FilePath )
466
+ ,stopMonitoring :: IO ()
467
467
}
468
468
469
469
@@ -559,11 +559,13 @@ shakeOpen :: Recorder (WithPriority Log)
559
559
-> WithHieDb
560
560
-> IndexQueue
561
561
-> ShakeOptions
562
- -> Maybe Store
562
+ -> Monitoring
563
563
-> Rules ()
564
564
-> IO IdeState
565
565
shakeOpen recorder lspEnv defaultConfig logger debouncer
566
- shakeProfileDir (IdeReportProgress reportProgress) ideTesting@ (IdeTesting testing) withHieDb indexQueue opts metrics rules = mdo
566
+ shakeProfileDir (IdeReportProgress reportProgress)
567
+ ideTesting@ (IdeTesting testing)
568
+ withHieDb indexQueue opts monitoring rules = mdo
567
569
let log :: Logger. Priority -> Log -> IO ()
568
570
log = logWith recorder
569
571
@@ -611,52 +613,37 @@ shakeOpen recorder lspEnv defaultConfig logger debouncer
611
613
rules
612
614
shakeSession <- newEmptyMVar
613
615
shakeDatabaseProfile <- shakeDatabaseProfileIO shakeProfileDir
614
- let ideState = IdeState {.. }
615
616
616
617
IdeOptions
617
618
{ optOTMemoryProfiling = IdeOTMemoryProfiling otProfilingEnabled
618
619
, optProgressStyle
619
620
, optCheckParents
620
621
} <- getIdeOptionsIO shakeExtras
621
622
622
- void $ startTelemetry shakeDb shakeExtras
623
623
startProfilingTelemetry otProfilingEnabled logger $ state shakeExtras
624
624
625
625
checkParents <- optCheckParents
626
- for_ metrics $ \ store -> do
627
- let readValuesCounter = fromIntegral . countRelevantKeys checkParents <$> getStateKeys shakeExtras
628
- readDirtyKeys = fromIntegral . countRelevantKeys checkParents . HSet. toList <$> readTVarIO(dirtyKeys shakeExtras)
629
- readIndexPending = fromIntegral . HMap. size <$> readTVarIO (indexPending $ hiedbWriter shakeExtras)
630
- readExportsMap = fromIntegral . HMap. size . getExportsMap <$> readTVarIO (exportsMap shakeExtras)
631
- readDatabaseCount = fromIntegral . countRelevantKeys checkParents . map fst <$> shakeGetDatabaseKeys shakeDb
632
- readDatabaseStep = fromIntegral <$> shakeGetBuildStep shakeDb
633
-
634
- registerGauge " ghcide.values_count" readValuesCounter store
635
- registerGauge " ghcide.dirty_keys_count" readDirtyKeys store
636
- registerGauge " ghcide.indexing_pending_count" readIndexPending store
637
- registerGauge " ghcide.exports_map_count" readExportsMap store
638
- registerGauge " ghcide.database_count" readDatabaseCount store
639
- registerCounter " ghcide.num_builds" readDatabaseStep store
640
626
641
- return ideState
627
+ -- monitoring
628
+ let readValuesCounter = fromIntegral . countRelevantKeys checkParents <$> getStateKeys shakeExtras
629
+ readDirtyKeys = fromIntegral . countRelevantKeys checkParents . HSet. toList <$> readTVarIO(dirtyKeys shakeExtras)
630
+ readIndexPending = fromIntegral . HMap. size <$> readTVarIO (indexPending $ hiedbWriter shakeExtras)
631
+ readExportsMap = fromIntegral . HMap. size . getExportsMap <$> readTVarIO (exportsMap shakeExtras)
632
+ readDatabaseCount = fromIntegral . countRelevantKeys checkParents . map fst <$> shakeGetDatabaseKeys shakeDb
633
+ readDatabaseStep = fromIntegral <$> shakeGetBuildStep shakeDb
642
634
643
- startTelemetry :: ShakeDatabase -> ShakeExtras -> IO (Async () )
644
- startTelemetry db extras@ ShakeExtras {.. }
645
- | userTracingEnabled = do
646
- countKeys <- mkValueObserver " cached keys count"
647
- countDirty <- mkValueObserver " dirty keys count"
648
- countBuilds <- mkValueObserver " builds count"
649
- IdeOptions {optCheckParents} <- getIdeOptionsIO extras
650
- checkParents <- optCheckParents
651
- regularly 1 $ do
652
- observe countKeys . countRelevantKeys checkParents =<< getStateKeys extras
653
- readTVarIO dirtyKeys >>= observe countDirty . countRelevantKeys checkParents . HSet. toList
654
- shakeGetBuildStep db >>= observe countBuilds
635
+ registerGauge monitoring " ghcide.values_count" readValuesCounter
636
+ registerGauge monitoring " ghcide.dirty_keys_count" readDirtyKeys
637
+ registerGauge monitoring " ghcide.indexing_pending_count" readIndexPending
638
+ registerGauge monitoring " ghcide.exports_map_count" readExportsMap
639
+ registerGauge monitoring " ghcide.database_count" readDatabaseCount
640
+ registerCounter monitoring " ghcide.num_builds" readDatabaseStep
641
+
642
+ stopMonitoring <- start monitoring
643
+
644
+ let ideState = IdeState {.. }
645
+ return ideState
655
646
656
- | otherwise = async (pure () )
657
- where
658
- regularly :: Seconds -> IO () -> IO (Async () )
659
- regularly delay act = async $ forever (act >> sleep delay)
660
647
661
648
getStateKeys :: ShakeExtras -> IO [Key ]
662
649
getStateKeys = (fmap . fmap ) fst . atomically . ListT. toList . STM. listT . state
@@ -679,6 +666,7 @@ shakeShut IdeState{..} = do
679
666
for_ runner cancelShakeSession
680
667
void $ shakeDatabaseProfile shakeDb
681
668
progressStop $ progress shakeExtras
669
+ stopMonitoring
682
670
683
671
684
672
-- | This is a variant of withMVar where the first argument is run unmasked and if it throws
0 commit comments