11{-# LANGUAGE DeriveGeneric #-}
22{-# LANGUAGE DerivingStrategies #-}
3- {-# LANGUAGE LambdaCase #-}
43{-# LANGUAGE RecordWildCards #-}
54{-# LANGUAGE ScopedTypeVariables #-}
65
@@ -17,10 +16,9 @@ import Control.Exception (throwIO)
1716import qualified Data.Aeson as AE
1817import Data.ByteString (ByteString )
1918import qualified Data.ByteString.Char8 as BS
20- import Data.Functor
2119import Data.List (foldl' )
2220import qualified Data.Map.Strict as Map
23- import Data.Maybe (fromMaybe , isJust )
21+ import Data.Maybe (isJust )
2422import Data.Text (Text , split )
2523import Data.Yaml
2624import GHC.Generics
@@ -51,11 +49,12 @@ readConfigurationWithDefault fp defaultConf = do
5149 fileConf <- either throwIO pure . parseRepresentation =<< BS. readFile fp
5250 pure $ mergeWithDefault fileConf defaultConf
5351
54-
5552mergeWithDefault :: TraceConfig -> TraceConfig -> TraceConfig
5653mergeWithDefault fileConf defaultConf =
5754 TraceConfig
58- (mergeOptionsWithDefault (tcOptions fileConf) (tcOptions defaultConf))
55+ (if (not . Map. null ) (tcOptions fileConf)
56+ then tcOptions fileConf
57+ else tcOptions defaultConf)
5958 (tcForwarder fileConf)
6059 (if isJust (tcNodeName fileConf)
6160 then tcNodeName fileConf
@@ -67,44 +66,6 @@ mergeWithDefault fileConf defaultConf =
6766 then tcResourceFrequency fileConf
6867 else tcResourceFrequency defaultConf)
6968
70- mergeOptionsWithDefault ::
71- Map. Map [Text ] [ConfigOption ]
72- -> Map. Map [Text ] [ConfigOption ]
73- -> Map. Map [Text ] [ConfigOption ]
74- mergeOptionsWithDefault fileOpts defaultOpts =
75- foldr mergeOptsNs defaultOpts (Map. toList fileOpts)
76- where
77- mergeOptsNs :: ([Text ],[ConfigOption ]) -> Map. Map [Text ] [ConfigOption ] -> Map. Map [Text ] [ConfigOption ]
78- mergeOptsNs (ns,opts) into =
79- case Map. lookup ns into of
80- Nothing -> Map. insert ns opts into
81- Just currentOpts -> Map. insert ns (mergeOpts opts currentOpts) into
82-
83- mergeOpts :: [ConfigOption ] -> [ConfigOption ] -> [ConfigOption ]
84- mergeOpts fromFile fromDefault = foldr mergeOpt fromDefault fromFile
85-
86- mergeOpt :: ConfigOption -> [ConfigOption ] -> [ConfigOption ]
87- mergeOpt (ConfSeverity severityF) configList =
88- ConfSeverity severityF : filter (\ case
89- ConfSeverity _ -> False
90- _ -> True ) configList
91- mergeOpt (ConfDetail detailLevel) configList =
92- ConfDetail detailLevel : filter (\ case
93- ConfDetail _ -> False
94- _ -> True ) configList
95- mergeOpt (ConfBackend backendConfig) configList =
96- ConfBackend backendConfig : filter (\ case
97- ConfBackend _ -> False
98- _ -> True ) configList
99- mergeOpt (ConfLimiter maxFrequency) configList =
100- if maxFrequency /= 0.0
101- then ConfLimiter maxFrequency : filter (\ case
102- ConfLimiter _ -> False
103- _ -> True ) configList
104- else filter (\ case
105- ConfLimiter _ -> False
106- _ -> True ) configList
107-
10869parseRepresentation :: ByteString -> Either ParseException TraceConfig
10970parseRepresentation bs = transform (decodeEither' bs)
11071 where
@@ -136,7 +97,7 @@ parseRepresentation bs = transform (decodeEither' bs)
13697
13798data ConfigRepresentation = ConfigRepresentation {
13899 traceOptions :: OptionsRepresentation
139- , traceOptionForwarder :: TraceOptionForwarder
100+ , traceOptionForwarder :: Maybe TraceOptionForwarder
140101 , traceOptionNodeName :: Maybe Text
141102 , traceOptionPeerFrequency :: Maybe Int
142103 , traceOptionResourceFrequency :: Maybe Int
@@ -148,7 +109,7 @@ type OptionsRepresentation = Map.Map Text ConfigOptionRep
148109instance AE. FromJSON ConfigRepresentation where
149110 parseJSON (Object obj) = ConfigRepresentation
150111 <$> obj .: " TraceOptions"
151- <*> ( obj .:? " TraceOptionForwarder" <&> fromMaybe defaultForwarder)
112+ <*> obj .:? " TraceOptionForwarder"
152113 <*> obj .:? " TraceOptionNodeName"
153114 <*> obj .:? " TraceOptionPeerFrequency"
154115 <*> obj .:? " TraceOptionResourceFrequency"
0 commit comments