{-# LANGUAGE OverloadedStrings #-}

{-# OPTIONS_GHC -Wno-orphans  #-}

module Cardano.Network.Tracing.Churn () where

import Cardano.Logging
import Data.Aeson (Value (..), (.=))
import Data.Text (pack)

import Cardano.Network.PeerSelection.Churn

--------------------------------------------------------------------------------
-- ChurnMode Tracer
--------------------------------------------------------------------------------

instance LogFormatting TraceChurnMode where
  forMachine :: DetailLevel -> TraceChurnMode -> Object
forMachine DetailLevel
_dtal (TraceChurnMode ChurnMode
mode) =
    [Object] -> Object
forall a. Monoid a => [a] -> a
mconcat [ Key
"kind" Key -> Value -> Object
forall v. ToJSON v => Key -> v -> Object
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Text -> Value
String Text
"ChurnMode"
            , Key
"churnMode" Key -> Value -> Object
forall v. ToJSON v => Key -> v -> Object
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Text -> Value
String (String -> Text
pack (String -> Text) -> (ChurnMode -> String) -> ChurnMode -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ChurnMode -> String
forall a. Show a => a -> String
show (ChurnMode -> Text) -> ChurnMode -> Text
forall a b. (a -> b) -> a -> b
$ ChurnMode
mode)
            ]

instance MetaTrace TraceChurnMode where
  namespaceFor :: TraceChurnMode -> Namespace TraceChurnMode
namespaceFor TraceChurnMode {} =
    [Text] -> [Text] -> Namespace TraceChurnMode
forall a. [Text] -> [Text] -> Namespace a
Namespace [] [Text
"PeerSelection", Text
"ChurnMode"]

  severityFor :: Namespace TraceChurnMode -> Maybe TraceChurnMode -> Maybe SeverityS
severityFor Namespace TraceChurnMode
_ (Just TraceChurnMode {}) = SeverityS -> Maybe SeverityS
forall a. a -> Maybe a
Just SeverityS
Info
  severityFor Namespace TraceChurnMode
_ Maybe TraceChurnMode
Nothing                  = Maybe SeverityS
forall a. Maybe a
Nothing

  documentFor :: Namespace TraceChurnMode -> Maybe Text
documentFor (Namespace [Text]
_ [Text
"PeerSelection", Text
"ChurnMode"]) = Text -> Maybe Text
forall a. a -> Maybe a
Just (Text -> Maybe Text) -> Text -> Maybe Text
forall a b. (a -> b) -> a -> b
$ [Text] -> Text
forall a. Monoid a => [a] -> a
mconcat
    [ Text
"Affects churning strategy. For a synced node or operating in GenesisMode "
    , Text
" consensus mode, the default strategy is used. Otherwise for a syncing PraosMode"
    , Text
" node, the legacy bulk sync churning intervals are used whose durations"
    , Text
" depend on whether bootstrap peers are enabled."
    ]
  documentFor Namespace TraceChurnMode
_ = Maybe Text
forall a. Maybe a
Nothing

  allNamespaces :: [Namespace TraceChurnMode]
allNamespaces = [
      [Text] -> [Text] -> Namespace TraceChurnMode
forall a. [Text] -> [Text] -> Namespace a
Namespace [] [Text
"PeerSelection", Text
"ChurnMode"]
    ]