{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-|
Module : Rollbar.Item.Server
Description : Metadata about the server this package is running on.
Copyright : (c) Hardy Jones, 2017
License : BSD3
Maintainer : jones3.hardy@gmail.com
Stability : experimental
-}
module Rollbar.Item.Server
( Server(..)
, Root(..)
, Branch(..)
) where
import Data.Aeson (KeyValue, ToJSON, object, pairs, toEncoding, toJSON, (.=))
import Data.Maybe (catMaybes)
import Data.String (IsString)
import GHC.Generics (Generic)
import Network.HostName (HostName)
import Rollbar.Item.CodeVersion (CodeVersion)
import qualified Data.Text as T
-- | Information about the server using this package.
data Server
= Server
{ host :: Maybe HostName
-- ^ The hostname of the server.
, root :: Maybe Root
-- ^ The root directory the server is running in.
, branch :: Maybe Branch
-- ^ The checked out branch the server is running on.
, serverCodeVersion :: Maybe CodeVersion
-- ^ The version of the server.
}
deriving (Eq, Generic, Show)
serverKVs :: KeyValue kv => Server -> [Maybe kv]
serverKVs Server{..} =
[ ("host" .=) <$> host
, ("root" .=) <$> root
, ("branch" .=) <$> branch
, ("code_version" .=) <$> serverCodeVersion
]
instance ToJSON Server where
toJSON = object . catMaybes . serverKVs
toEncoding = pairs . mconcat . catMaybes . serverKVs
-- | The root directory.
newtype Root
= Root T.Text
deriving (Eq, IsString, Show, ToJSON)
-- | The git branch the server is running on.
newtype Branch
= Branch T.Text
deriving (Eq, IsString, Show, ToJSON)