-
Notifications
You must be signed in to change notification settings - Fork 156
/
Config.hs
97 lines (89 loc) · 3.82 KB
/
Config.hs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE NoImplicitPrelude #-}
module Cardano.DbSync.Config (
ConfigFile (..),
GenesisConfig (..),
GenesisFile (..),
LedgerStateDir (..),
NetworkName (..),
ShelleyConfig (..),
SocketPath (..),
SyncCommand (..),
SyncProtocol (..),
SyncNodeConfig (..),
SyncNodeParams (..),
cardanoLedgerConfig,
genesisProtocolMagicId,
readCardanoGenesisConfig,
readSyncNodeConfig,
configureLogging,
) where
import qualified Cardano.BM.Configuration.Model as Logging
import qualified Cardano.BM.Setup as Logging
import Cardano.BM.Trace (Trace)
import qualified Cardano.BM.Trace as Logging
import Cardano.DbSync.Api (extractInsertOptions)
import Cardano.DbSync.Config.Cardano
import Cardano.DbSync.Config.Node (NodeConfig (..), parseNodeConfig, parseSyncPreConfig, readByteStringFromFile)
import Cardano.DbSync.Config.Shelley
import Cardano.DbSync.Config.Types
import Cardano.Prelude
import System.FilePath (takeDirectory, (</>))
configureLogging :: SyncNodeConfig -> Text -> IO (Trace IO Text)
configureLogging syncNodeConfig loggingName = do
if not (dncEnableLogging syncNodeConfig)
then pure Logging.nullTracer
else liftIO $ Logging.setupTrace (Right $ dncLoggingConfig syncNodeConfig) loggingName
readSyncNodeConfig :: ConfigFile -> IO SyncNodeConfig
readSyncNodeConfig (ConfigFile fp) = do
pcfg <- (adjustNodeFilePath . parseSyncPreConfig) =<< readByteStringFromFile fp "DbSync"
ncfg <- parseNodeConfig =<< readByteStringFromFile (pcNodeConfigFilePath pcfg) "node"
coalesceConfig pcfg ncfg (mkAdjustPath pcfg)
where
adjustNodeFilePath :: IO SyncPreConfig -> IO SyncPreConfig
adjustNodeFilePath spc = do
cfg <- spc
pure $ cfg {pcNodeConfigFile = adjustNodeConfigFilePath (takeDirectory fp </>) (pcNodeConfigFile cfg)}
coalesceConfig ::
SyncPreConfig ->
NodeConfig ->
(FilePath -> FilePath) ->
IO SyncNodeConfig
coalesceConfig pcfg ncfg adjustGenesisPath = do
lc <- Logging.setupFromRepresentation $ pcLoggingConfig pcfg
let (conwayGenesisFile', conwayGenesisHash')
| pcEnableConway pcfg = (ncConwayGenesisFile ncfg, ncConwayGenesisHash ncfg)
| otherwise = (Nothing, Nothing)
pure $
SyncNodeConfig
{ dncNetworkName = pcNetworkName pcfg
, dncLoggingConfig = lc
, dncNodeConfigFile = pcNodeConfigFile pcfg
, dncProtocol = ncProtocol ncfg
, dncRequiresNetworkMagic = ncRequiresNetworkMagic ncfg
, dncEnableLogging = pcEnableLogging pcfg
, dncEnableMetrics = pcEnableMetrics pcfg
, dncPrometheusPort = pcPrometheusPort pcfg
, dncPBftSignatureThreshold = ncPBftSignatureThreshold ncfg
, dncByronGenesisFile = adjustGenesisFilePath adjustGenesisPath (ncByronGenesisFile ncfg)
, dncByronGenesisHash = ncByronGenesisHash ncfg
, dncShelleyGenesisFile = adjustGenesisFilePath adjustGenesisPath (ncShelleyGenesisFile ncfg)
, dncShelleyGenesisHash = ncShelleyGenesisHash ncfg
, dncAlonzoGenesisFile = adjustGenesisFilePath adjustGenesisPath (ncAlonzoGenesisFile ncfg)
, dncAlonzoGenesisHash = ncAlonzoGenesisHash ncfg
, dncConwayGenesisFile =
adjustGenesisFilePath adjustGenesisPath <$> conwayGenesisFile'
, dncConwayGenesisHash = conwayGenesisHash'
, dncByronProtocolVersion = ncByronProtocolVersion ncfg
, dncShelleyHardFork = ncShelleyHardFork ncfg
, dncAllegraHardFork = ncAllegraHardFork ncfg
, dncMaryHardFork = ncMaryHardFork ncfg
, dncAlonzoHardFork = ncAlonzoHardFork ncfg
, dncBabbageHardFork = ncBabbageHardFork ncfg
, dncConwayHardFork = ncConwayHardFork ncfg
, dncInsertOptions = extractInsertOptions pcfg
}
mkAdjustPath :: SyncPreConfig -> (FilePath -> FilePath)
mkAdjustPath cfg fp = takeDirectory (pcNodeConfigFilePath cfg) </> fp