module Navi.Services.Network.NetInterfaces
( toEvent,
)
where
import Navi.Data.NaviNote
( NaviNote
( MkNaviNote,
body,
summary,
timeout,
urgency
),
)
import Navi.Data.PollInterval (PollInterval (MkPollInterval))
import Navi.Event.Toml qualified as EventToml
import Navi.Event.Types
( AnyEvent (MkAnyEvent),
Event
( MkEvent,
errorNote,
name,
pollInterval,
raiseAlert,
repeatEvent,
serviceType
),
)
import Navi.Prelude
import Navi.Services.Network.NetInterfaces.Toml (NetInterfacesToml)
import Navi.Services.Types (ServiceType (NetworkInterface))
import Pythia.Services.NetInterface
( Device (..),
NetInterface (..),
NetInterfaceState (..),
)
toEvent ::
(MonadIORef m) =>
NetInterfacesToml ->
m AnyEvent
toEvent :: forall (m :: Type -> Type).
MonadIORef m =>
NetInterfacesToml -> m AnyEvent
toEvent NetInterfacesToml
toml = do
RepeatEvent NetInterface
repeatEvent <- Maybe RepeatEventToml -> m (RepeatEvent NetInterface)
forall (m :: Type -> Type) a.
MonadIORef m =>
Maybe RepeatEventToml -> m (RepeatEvent a)
EventToml.mRepeatEventTomlToVal (Maybe RepeatEventToml -> m (RepeatEvent NetInterface))
-> Maybe RepeatEventToml -> m (RepeatEvent NetInterface)
forall a b. (a -> b) -> a -> b
$ NetInterfacesToml
toml NetInterfacesToml
-> Optic' A_Lens NoIx NetInterfacesToml (Maybe RepeatEventToml)
-> Maybe RepeatEventToml
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic' A_Lens NoIx NetInterfacesToml (Maybe RepeatEventToml)
#repeatEvent
ErrorNote
errorNote <- Maybe ErrorNoteToml -> m ErrorNote
forall (m :: Type -> Type).
MonadIORef m =>
Maybe ErrorNoteToml -> m ErrorNote
EventToml.mErrorNoteTomlToVal (Maybe ErrorNoteToml -> m ErrorNote)
-> Maybe ErrorNoteToml -> m ErrorNote
forall a b. (a -> b) -> a -> b
$ NetInterfacesToml
toml NetInterfacesToml
-> Optic' A_Lens NoIx NetInterfacesToml (Maybe ErrorNoteToml)
-> Maybe ErrorNoteToml
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic' A_Lens NoIx NetInterfacesToml (Maybe ErrorNoteToml)
#errorNote
pure
$ Event NetInterface NetInterface -> AnyEvent
forall trigger result.
(Ord trigger, Show result, Show trigger) =>
Event result trigger -> AnyEvent
MkAnyEvent
(Event NetInterface NetInterface -> AnyEvent)
-> Event NetInterface NetInterface -> AnyEvent
forall a b. (a -> b) -> a -> b
$ MkEvent
{ name :: Text
name = Text
"network-interface",
serviceType :: ServiceType NetInterface
serviceType = ServiceType NetInterface
cmd,
pollInterval :: PollInterval
pollInterval = PollInterval
pi,
raiseAlert :: NetInterface -> Maybe (NetInterface, NaviNote)
raiseAlert = NetInterfacesToml -> NetInterface -> Maybe (NetInterface, NaviNote)
toNote NetInterfacesToml
toml,
repeatEvent :: RepeatEvent NetInterface
repeatEvent = RepeatEvent NetInterface
repeatEvent,
errorNote :: ErrorNote
errorNote = ErrorNote
errorNote
}
where
device :: Device
device = Text -> Device
MkDevice (Text -> Device) -> Text -> Device
forall a b. (a -> b) -> a -> b
$ NetInterfacesToml
toml NetInterfacesToml
-> Optic' A_Lens NoIx NetInterfacesToml Text -> Text
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic' A_Lens NoIx NetInterfacesToml Text
#deviceName
pi :: PollInterval
pi = PollInterval -> Maybe PollInterval -> PollInterval
forall a. a -> Maybe a -> a
fromMaybe (Natural -> PollInterval
MkPollInterval Natural
30) (NetInterfacesToml
toml NetInterfacesToml
-> Optic' A_Lens NoIx NetInterfacesToml (Maybe PollInterval)
-> Maybe PollInterval
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic' A_Lens NoIx NetInterfacesToml (Maybe PollInterval)
#pollInterval)
cmd :: ServiceType NetInterface
cmd =
Device -> NetInterfaceApp -> ServiceType NetInterface
NetworkInterface Device
device (NetInterfacesToml
toml NetInterfacesToml
-> Optic' A_Lens NoIx NetInterfacesToml NetInterfaceApp
-> NetInterfaceApp
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic' A_Lens NoIx NetInterfacesToml NetInterfaceApp
#app)
{-# INLINEABLE toEvent #-}
toNote :: NetInterfacesToml -> NetInterface -> Maybe (NetInterface, NaviNote)
toNote :: NetInterfacesToml -> NetInterface -> Maybe (NetInterface, NaviNote)
toNote NetInterfacesToml
noteToml NetInterface
conn =
(NetInterface, NaviNote) -> Maybe (NetInterface, NaviNote)
forall a. a -> Maybe a
Just
( NetInterface
conn,
MkNaviNote
{ summary :: Text
summary = Text
"Network Connectivity",
body :: Maybe Text
body = Text -> Maybe Text
forall a. a -> Maybe a
Just Text
body,
urgency :: Maybe UrgencyLevel
urgency = Maybe UrgencyLevel
forall a. Maybe a
Nothing,
timeout :: Maybe Timeout
timeout = NetInterfacesToml
noteToml NetInterfacesToml
-> Optic' A_Lens NoIx NetInterfacesToml (Maybe Timeout)
-> Maybe Timeout
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic' A_Lens NoIx NetInterfacesToml (Maybe Timeout)
#mTimeout
}
)
where
deviceTxt :: Text
deviceTxt = NetInterface
conn NetInterface -> Optic' A_Lens NoIx NetInterface Text -> Text
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. (Optic A_Lens NoIx NetInterface NetInterface Device Device
#device Optic A_Lens NoIx NetInterface NetInterface Device Device
-> Optic An_Iso NoIx Device Device Text Text
-> Optic' A_Lens NoIx NetInterface Text
forall k l m (is :: IxList) (js :: IxList) (ks :: IxList) s t u v a
b.
(JoinKinds k l m, AppendIndices is js ks) =>
Optic k is s t u v -> Optic l js u v a b -> Optic m ks s t a b
% Optic An_Iso NoIx Device Device Text Text
#unDevice)
nameTxt :: Text
nameTxt = Text -> Maybe Text -> Text
forall a. a -> Maybe a -> a
fromMaybe Text
"Unknown" (Maybe Text -> Text) -> Maybe Text -> Text
forall a b. (a -> b) -> a -> b
$ NetInterface
conn NetInterface
-> Optic' A_Lens NoIx NetInterface (Maybe Text) -> Maybe Text
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic' A_Lens NoIx NetInterface (Maybe Text)
#name
body :: Text
body = Text
"Device " Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
deviceTxt Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
stateTxt
stateTxt :: Text
stateTxt = case NetInterface
conn NetInterface
-> Optic' A_Lens NoIx NetInterface NetInterfaceState
-> NetInterfaceState
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic' A_Lens NoIx NetInterface NetInterfaceState
#state of
NetInterfaceState
NetStateUp -> Text
" is connected to: " Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
nameTxt
NetInterfaceState
NetStateDown -> Text
" is disconnected from: " Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
nameTxt
NetStateUnknown Text
txt -> Text
" is in an unknown state: " Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
txt