module Data.Aviation.Stratux.Types.Status(
Status(..)
, HasStatus(..)
) where
import Control.Applicative((<*>), (<$>))
import Data.Bool(Bool)
import Data.Eq(Eq)
import Data.Int(Int, Int64)
import Data.Ord(Ord)
import Data.String(String)
import Data.Time(UTCTime)
import Control.Lens(makeClassy)
import Data.Aeson(FromJSON(parseJSON), ToJSON(toJSON), (.=), (.:), object, withObject)
import Data.Aviation.Stratux.Types.GpsSolution(GpsSolution)
import Data.Aviation.Stratux.Types.UTCTimes(HasUTCTimes(utcTimes))
import Prelude(Show, Float)
data Status =
Status {
_version :: String
, _build :: String
, _hardwareBuild :: String
, _devices :: Int
, _connectedUsers :: Int
, _uatMessagesLastMinute :: Int
, _uatMessagesMax :: Int
, _esMessagesLastMinute :: Int
, _esMessagesMax :: Int
, _gpsSatellitesLocked :: Int
, _gpsSatellitesSeen :: Int
, _gpsSatellitesTracked :: Int
, _gpsConnected :: Bool
, _gpsSolution :: GpsSolution
, _ry835ai_connected :: Bool
, _uptime :: Int64
, _clock :: UTCTime
, _uptimeClock :: UTCTime
, _cpuTemp :: Float
, _networkDataMessagesSent :: Int64
, _networkDataMessagesSentNonqueueable :: Int64
, _networkDataBytesSent :: Int64
, _networkDataBytesSentNonqueueable :: Int64
, _networkDataMessagesSentLastSec :: Int64
, _networkDataMessagesSentNonqueueableLastSec :: Int64
, _networkDataBytesSentLastSec :: Int64
, _networkDataBytesSentNonqueueableLastSec :: Int64
, _errors :: [String]
} deriving (Eq, Ord, Show)
makeClassy ''Status
instance FromJSON Status where
parseJSON =
withObject "Status" (\x ->
Status <$>
x .: "Version" <*>
x .: "Build" <*>
x .: "HardwareBuild" <*>
x .: "Devices" <*>
x .: "Connected_Users" <*>
x .: "UAT_messages_last_minute" <*>
x .: "UAT_messages_max" <*>
x .: "ES_messages_last_minute" <*>
x .: "ES_messages_max" <*>
x .: "GPS_satellites_locked" <*>
x .: "GPS_satellites_seen" <*>
x .: "GPS_satellites_tracked" <*>
x .: "GPS_connected" <*>
x .: "GPS_solution" <*>
x .: "RY835AI_connected" <*>
x .: "Uptime" <*>
x .: "Clock" <*>
x .: "UptimeClock" <*>
x .: "CPUTemp" <*>
x .: "NetworkDataMessagesSent" <*>
x .: "NetworkDataMessagesSentNonqueueable" <*>
x .: "NetworkDataBytesSent" <*>
x .: "NetworkDataBytesSentNonqueueable" <*>
x .: "NetworkDataMessagesSentLastSec" <*>
x .: "NetworkDataMessagesSentNonqueueableLastSec" <*>
x .: "NetworkDataBytesSentLastSec" <*>
x .: "NetworkDataBytesSentNonqueueableLastSec" <*>
x .: "Errors")
instance ToJSON Status where
toJSON (Status version_ build_ hardwareBuild_ devices_ connectedUsers_ uatMessagesLastMinute_ uatMessagesMax_ esMessagesLastMinute_ esMessagesMax_ gpsSatellitesLocked_ gpsSatellitesSeen_ gpsSatellitesTracked_ gpsConnected_ gpsSolution_ ry835ai_connected_ uptime_ clock_ uptimeClock_ cpuTemp_ networkDataMessagesSent_ networkDataMessagesSentNonqueueable_ networkDataBytesSent_ networkDataBytesSentNonqueueable_ networkDataMessagesSentLastSec_ networkDataMessagesSentNonqueueableLastSec_ networkDataBytesSentLastSec_ networkDataBytesSentNonqueueableLastSec_ errors_) =
object [
"Version" .= version_
, "Build" .= build_
, "HardwareBuild" .= hardwareBuild_
, "Devices" .= devices_
, "Connected_Users" .= connectedUsers_
, "UAT_messages_last_minute" .= uatMessagesLastMinute_
, "UAT_messages_max" .= uatMessagesMax_
, "ES_messages_last_minute" .= esMessagesLastMinute_
, "ES_messages_max" .= esMessagesMax_
, "GPS_satellites_locked" .= gpsSatellitesLocked_
, "GPS_satellites_seen" .= gpsSatellitesSeen_
, "GPS_satellites_tracked" .= gpsSatellitesTracked_
, "GPS_connected" .= gpsConnected_
, "GPS_solution" .= gpsSolution_
, "RY835AI_connected" .= ry835ai_connected_
, "Uptime" .= uptime_
, "Clock" .= clock_
, "UptimeClock" .= uptimeClock_
, "CPUTemp" .= cpuTemp_
, "NetworkDataMessagesSent" .= networkDataMessagesSent_
, "NetworkDataMessagesSentNonqueueable" .= networkDataMessagesSentNonqueueable_
, "NetworkDataBytesSent" .= networkDataBytesSent_
, "NetworkDataBytesSentNonqueueable" .= networkDataBytesSentNonqueueable_
, "NetworkDataMessagesSentLastSec" .= networkDataMessagesSentLastSec_
, "NetworkDataMessagesSentNonqueueableLastSec" .= networkDataMessagesSentNonqueueableLastSec_
, "NetworkDataBytesSentLastSec" .= networkDataBytesSentLastSec_
, "NetworkDataBytesSentNonqueueableLastSec" .= networkDataBytesSentNonqueueableLastSec_
, "Errors" .= errors_
]
instance HasUTCTimes Status where
utcTimes f (Status version_ build_ hardwareBuild_ devices_ connectedUsers_ uatMessagesLastMinute_ uatMessagesMax_ esMessagesLastMinute_ esMessagesMax_ gpsSatellitesLocked_ gpsSatellitesSeen_ gpsSatellitesTracked_ gpsConnected_ gpsSolution_ ry835aiconnected_ uptime_ clock_ uptimeClock_ cpuTemp_ networkDataMessagesSent_ networkDataMessagesSentNonqueueable_ networkDataBytesSent_ networkDataBytesSentNonqueueable_ networkDataMessagesSentLastSec_ networkDataMessagesSentNonqueueableLastSec_ networkDataBytesSentLastSec_ networkDataBytesSentNonqueueableLastSec_ errors_) =
(\clock__ uptimeClock__ ->
Status version_ build_ hardwareBuild_ devices_ connectedUsers_ uatMessagesLastMinute_ uatMessagesMax_ esMessagesLastMinute_ esMessagesMax_ gpsSatellitesLocked_ gpsSatellitesSeen_ gpsSatellitesTracked_ gpsConnected_ gpsSolution_ ry835aiconnected_ uptime_ clock__ uptimeClock__ cpuTemp_ networkDataMessagesSent_ networkDataMessagesSentNonqueueable_ networkDataBytesSent_ networkDataBytesSentNonqueueable_ networkDataMessagesSentLastSec_ networkDataMessagesSentNonqueueableLastSec_ networkDataBytesSentLastSec_ networkDataBytesSentNonqueueableLastSec_ errors_) <$>
f clock_ <*>
f uptimeClock_