{-# OPTIONS_GHC -fno-warn-unused-imports #-}
{-# LANGUAGE NoImplicitPrelude           #-}
{-# LANGUAGE TemplateHaskell             #-}
{-# LANGUAGE RecordWildCards             #-}

-- |
-- Module:      SwiftNav.SBP.Profiling
-- Copyright:   Copyright (C) 2015-2021 Swift Navigation, Inc.
-- License:     MIT
-- Contact:     https://support.swiftnav.com
-- Stability:   experimental
-- Portability: portable
--
-- \< Standardized profiling messages from Swift Navigation devices. \>

module SwiftNav.SBP.Profiling
  ( module SwiftNav.SBP.Profiling
  ) where

import BasicPrelude
import Control.Lens
import Control.Monad.Loops
import Data.Binary
import Data.Binary.Get
import Data.Binary.IEEE754
import Data.Binary.Put
import Data.ByteString.Lazy    hiding (ByteString)
import Data.Int
import Data.Word
import SwiftNav.SBP.TH
import SwiftNav.SBP.Types

{-# ANN module ("HLint: ignore Use camelCase"::String) #-}
{-# ANN module ("HLint: ignore Redundant do"::String) #-}
{-# ANN module ("HLint: ignore Use newtype instead of data"::String) #-}


msgMeasurementPoint :: Word16
msgMeasurementPoint :: Word16
msgMeasurementPoint = Word16
0xCF00

-- | SBP class for message MSG_MEASUREMENT_POINT (0xCF00).
--
-- Tracks execution time of certain code paths in specially built products.
-- This message should only be expected and processed on the direction of
-- Swift's engineering teams.
data MsgMeasurementPoint = MsgMeasurementPoint
  { MsgMeasurementPoint -> Word32
_msgMeasurementPoint_total_time   :: !Word32
    -- ^ Total time spent in measurement point (microseconds)
  , MsgMeasurementPoint -> Word16
_msgMeasurementPoint_num_executions :: !Word16
    -- ^ Number of times measurement point has executed
  , MsgMeasurementPoint -> Word32
_msgMeasurementPoint_min          :: !Word32
    -- ^ Minimum execution time (microseconds)
  , MsgMeasurementPoint -> Word32
_msgMeasurementPoint_max          :: !Word32
    -- ^ Maximum execution time (microseconds)
  , MsgMeasurementPoint -> Word64
_msgMeasurementPoint_return_addr  :: !Word64
    -- ^ Return address
  , MsgMeasurementPoint -> Word64
_msgMeasurementPoint_id           :: !Word64
    -- ^ Unique ID
  , MsgMeasurementPoint -> Word64
_msgMeasurementPoint_slice_time   :: !Word64
    -- ^ CPU slice time (milliseconds)
  , MsgMeasurementPoint -> Word16
_msgMeasurementPoint_line         :: !Word16
    -- ^ Line number
  , MsgMeasurementPoint -> Text
_msgMeasurementPoint_func         :: !Text
    -- ^ Function name
  } deriving ( Int -> MsgMeasurementPoint -> ShowS
[MsgMeasurementPoint] -> ShowS
MsgMeasurementPoint -> String
(Int -> MsgMeasurementPoint -> ShowS)
-> (MsgMeasurementPoint -> String)
-> ([MsgMeasurementPoint] -> ShowS)
-> Show MsgMeasurementPoint
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> MsgMeasurementPoint -> ShowS
showsPrec :: Int -> MsgMeasurementPoint -> ShowS
$cshow :: MsgMeasurementPoint -> String
show :: MsgMeasurementPoint -> String
$cshowList :: [MsgMeasurementPoint] -> ShowS
showList :: [MsgMeasurementPoint] -> ShowS
Show, ReadPrec [MsgMeasurementPoint]
ReadPrec MsgMeasurementPoint
Int -> ReadS MsgMeasurementPoint
ReadS [MsgMeasurementPoint]
(Int -> ReadS MsgMeasurementPoint)
-> ReadS [MsgMeasurementPoint]
-> ReadPrec MsgMeasurementPoint
-> ReadPrec [MsgMeasurementPoint]
-> Read MsgMeasurementPoint
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
$creadsPrec :: Int -> ReadS MsgMeasurementPoint
readsPrec :: Int -> ReadS MsgMeasurementPoint
$creadList :: ReadS [MsgMeasurementPoint]
readList :: ReadS [MsgMeasurementPoint]
$creadPrec :: ReadPrec MsgMeasurementPoint
readPrec :: ReadPrec MsgMeasurementPoint
$creadListPrec :: ReadPrec [MsgMeasurementPoint]
readListPrec :: ReadPrec [MsgMeasurementPoint]
Read, MsgMeasurementPoint -> MsgMeasurementPoint -> Bool
(MsgMeasurementPoint -> MsgMeasurementPoint -> Bool)
-> (MsgMeasurementPoint -> MsgMeasurementPoint -> Bool)
-> Eq MsgMeasurementPoint
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: MsgMeasurementPoint -> MsgMeasurementPoint -> Bool
== :: MsgMeasurementPoint -> MsgMeasurementPoint -> Bool
$c/= :: MsgMeasurementPoint -> MsgMeasurementPoint -> Bool
/= :: MsgMeasurementPoint -> MsgMeasurementPoint -> Bool
Eq )

instance Binary MsgMeasurementPoint where
  get :: Get MsgMeasurementPoint
get = do
    Word32
_msgMeasurementPoint_total_time <- Get Word32
getWord32le
    Word16
_msgMeasurementPoint_num_executions <- Get Word16
getWord16le
    Word32
_msgMeasurementPoint_min <- Get Word32
getWord32le
    Word32
_msgMeasurementPoint_max <- Get Word32
getWord32le
    Word64
_msgMeasurementPoint_return_addr <- Get Word64
getWord64le
    Word64
_msgMeasurementPoint_id <- Get Word64
getWord64le
    Word64
_msgMeasurementPoint_slice_time <- Get Word64
getWord64le
    Word16
_msgMeasurementPoint_line <- Get Word16
getWord16le
    Text
_msgMeasurementPoint_func <- ByteString -> Text
decodeUtf8 (ByteString -> Text)
-> (ByteString -> ByteString) -> ByteString -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. ByteString -> ByteString
toStrict (ByteString -> Text) -> Get ByteString -> Get Text
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Get ByteString
getRemainingLazyByteString
    MsgMeasurementPoint -> Get MsgMeasurementPoint
forall a. a -> Get a
forall (f :: * -> *) a. Applicative f => a -> f a
pure MsgMeasurementPoint {Word16
Word32
Word64
Text
_msgMeasurementPoint_total_time :: Word32
_msgMeasurementPoint_num_executions :: Word16
_msgMeasurementPoint_min :: Word32
_msgMeasurementPoint_max :: Word32
_msgMeasurementPoint_return_addr :: Word64
_msgMeasurementPoint_id :: Word64
_msgMeasurementPoint_slice_time :: Word64
_msgMeasurementPoint_line :: Word16
_msgMeasurementPoint_func :: Text
_msgMeasurementPoint_total_time :: Word32
_msgMeasurementPoint_num_executions :: Word16
_msgMeasurementPoint_min :: Word32
_msgMeasurementPoint_max :: Word32
_msgMeasurementPoint_return_addr :: Word64
_msgMeasurementPoint_id :: Word64
_msgMeasurementPoint_slice_time :: Word64
_msgMeasurementPoint_line :: Word16
_msgMeasurementPoint_func :: Text
..}

  put :: MsgMeasurementPoint -> Put
put MsgMeasurementPoint {Word16
Word32
Word64
Text
_msgMeasurementPoint_total_time :: MsgMeasurementPoint -> Word32
_msgMeasurementPoint_num_executions :: MsgMeasurementPoint -> Word16
_msgMeasurementPoint_min :: MsgMeasurementPoint -> Word32
_msgMeasurementPoint_max :: MsgMeasurementPoint -> Word32
_msgMeasurementPoint_return_addr :: MsgMeasurementPoint -> Word64
_msgMeasurementPoint_id :: MsgMeasurementPoint -> Word64
_msgMeasurementPoint_slice_time :: MsgMeasurementPoint -> Word64
_msgMeasurementPoint_line :: MsgMeasurementPoint -> Word16
_msgMeasurementPoint_func :: MsgMeasurementPoint -> Text
_msgMeasurementPoint_total_time :: Word32
_msgMeasurementPoint_num_executions :: Word16
_msgMeasurementPoint_min :: Word32
_msgMeasurementPoint_max :: Word32
_msgMeasurementPoint_return_addr :: Word64
_msgMeasurementPoint_id :: Word64
_msgMeasurementPoint_slice_time :: Word64
_msgMeasurementPoint_line :: Word16
_msgMeasurementPoint_func :: Text
..} = do
    Word32 -> Put
putWord32le Word32
_msgMeasurementPoint_total_time
    Word16 -> Put
putWord16le Word16
_msgMeasurementPoint_num_executions
    Word32 -> Put
putWord32le Word32
_msgMeasurementPoint_min
    Word32 -> Put
putWord32le Word32
_msgMeasurementPoint_max
    Word64 -> Put
putWord64le Word64
_msgMeasurementPoint_return_addr
    Word64 -> Put
putWord64le Word64
_msgMeasurementPoint_id
    Word64 -> Put
putWord64le Word64
_msgMeasurementPoint_slice_time
    Word16 -> Put
putWord16le Word16
_msgMeasurementPoint_line
    ByteString -> Put
putByteString (ByteString -> Put) -> ByteString -> Put
forall a b. (a -> b) -> a -> b
$ Text -> ByteString
encodeUtf8 Text
_msgMeasurementPoint_func

$(makeSBP 'msgMeasurementPoint ''MsgMeasurementPoint)
$(makeJSON "_msgMeasurementPoint_" ''MsgMeasurementPoint)
$(makeLenses ''MsgMeasurementPoint)

msgProfilingSystemInfo :: Word16
msgProfilingSystemInfo :: Word16
msgProfilingSystemInfo = Word16
0xCF01

-- | SBP class for message MSG_PROFILING_SYSTEM_INFO (0xCF01).
--
-- Contains basic information about system resource usage. System is defined
-- in terms of the source of this message and may vary from  sender to sender.
-- Refer to product documentation to understand the exact scope and meaning of
-- this message.
data MsgProfilingSystemInfo = MsgProfilingSystemInfo
  { MsgProfilingSystemInfo -> Word64
_msgProfilingSystemInfo_total_cpu_time :: !Word64
    -- ^ Total cpu time in microseconds consumed by this system
  , MsgProfilingSystemInfo -> Word64
_msgProfilingSystemInfo_age          :: !Word64
    -- ^ Age of the producing system in microseconds
  , MsgProfilingSystemInfo -> Word8
_msgProfilingSystemInfo_n_threads    :: !Word8
    -- ^ Number of threads being tracked by this system
  , MsgProfilingSystemInfo -> Word32
_msgProfilingSystemInfo_heap_usage   :: !Word32
    -- ^ Number of bytes allocated on the heap
  } deriving ( Int -> MsgProfilingSystemInfo -> ShowS
[MsgProfilingSystemInfo] -> ShowS
MsgProfilingSystemInfo -> String
(Int -> MsgProfilingSystemInfo -> ShowS)
-> (MsgProfilingSystemInfo -> String)
-> ([MsgProfilingSystemInfo] -> ShowS)
-> Show MsgProfilingSystemInfo
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> MsgProfilingSystemInfo -> ShowS
showsPrec :: Int -> MsgProfilingSystemInfo -> ShowS
$cshow :: MsgProfilingSystemInfo -> String
show :: MsgProfilingSystemInfo -> String
$cshowList :: [MsgProfilingSystemInfo] -> ShowS
showList :: [MsgProfilingSystemInfo] -> ShowS
Show, ReadPrec [MsgProfilingSystemInfo]
ReadPrec MsgProfilingSystemInfo
Int -> ReadS MsgProfilingSystemInfo
ReadS [MsgProfilingSystemInfo]
(Int -> ReadS MsgProfilingSystemInfo)
-> ReadS [MsgProfilingSystemInfo]
-> ReadPrec MsgProfilingSystemInfo
-> ReadPrec [MsgProfilingSystemInfo]
-> Read MsgProfilingSystemInfo
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
$creadsPrec :: Int -> ReadS MsgProfilingSystemInfo
readsPrec :: Int -> ReadS MsgProfilingSystemInfo
$creadList :: ReadS [MsgProfilingSystemInfo]
readList :: ReadS [MsgProfilingSystemInfo]
$creadPrec :: ReadPrec MsgProfilingSystemInfo
readPrec :: ReadPrec MsgProfilingSystemInfo
$creadListPrec :: ReadPrec [MsgProfilingSystemInfo]
readListPrec :: ReadPrec [MsgProfilingSystemInfo]
Read, MsgProfilingSystemInfo -> MsgProfilingSystemInfo -> Bool
(MsgProfilingSystemInfo -> MsgProfilingSystemInfo -> Bool)
-> (MsgProfilingSystemInfo -> MsgProfilingSystemInfo -> Bool)
-> Eq MsgProfilingSystemInfo
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: MsgProfilingSystemInfo -> MsgProfilingSystemInfo -> Bool
== :: MsgProfilingSystemInfo -> MsgProfilingSystemInfo -> Bool
$c/= :: MsgProfilingSystemInfo -> MsgProfilingSystemInfo -> Bool
/= :: MsgProfilingSystemInfo -> MsgProfilingSystemInfo -> Bool
Eq )

instance Binary MsgProfilingSystemInfo where
  get :: Get MsgProfilingSystemInfo
get = do
    Word64
_msgProfilingSystemInfo_total_cpu_time <- Get Word64
getWord64le
    Word64
_msgProfilingSystemInfo_age <- Get Word64
getWord64le
    Word8
_msgProfilingSystemInfo_n_threads <- Get Word8
getWord8
    Word32
_msgProfilingSystemInfo_heap_usage <- Get Word32
getWord32le
    MsgProfilingSystemInfo -> Get MsgProfilingSystemInfo
forall a. a -> Get a
forall (f :: * -> *) a. Applicative f => a -> f a
pure MsgProfilingSystemInfo {Word8
Word32
Word64
_msgProfilingSystemInfo_total_cpu_time :: Word64
_msgProfilingSystemInfo_age :: Word64
_msgProfilingSystemInfo_n_threads :: Word8
_msgProfilingSystemInfo_heap_usage :: Word32
_msgProfilingSystemInfo_total_cpu_time :: Word64
_msgProfilingSystemInfo_age :: Word64
_msgProfilingSystemInfo_n_threads :: Word8
_msgProfilingSystemInfo_heap_usage :: Word32
..}

  put :: MsgProfilingSystemInfo -> Put
put MsgProfilingSystemInfo {Word8
Word32
Word64
_msgProfilingSystemInfo_total_cpu_time :: MsgProfilingSystemInfo -> Word64
_msgProfilingSystemInfo_age :: MsgProfilingSystemInfo -> Word64
_msgProfilingSystemInfo_n_threads :: MsgProfilingSystemInfo -> Word8
_msgProfilingSystemInfo_heap_usage :: MsgProfilingSystemInfo -> Word32
_msgProfilingSystemInfo_total_cpu_time :: Word64
_msgProfilingSystemInfo_age :: Word64
_msgProfilingSystemInfo_n_threads :: Word8
_msgProfilingSystemInfo_heap_usage :: Word32
..} = do
    Word64 -> Put
putWord64le Word64
_msgProfilingSystemInfo_total_cpu_time
    Word64 -> Put
putWord64le Word64
_msgProfilingSystemInfo_age
    Word8 -> Put
putWord8 Word8
_msgProfilingSystemInfo_n_threads
    Word32 -> Put
putWord32le Word32
_msgProfilingSystemInfo_heap_usage

$(makeSBP 'msgProfilingSystemInfo ''MsgProfilingSystemInfo)
$(makeJSON "_msgProfilingSystemInfo_" ''MsgProfilingSystemInfo)
$(makeLenses ''MsgProfilingSystemInfo)

msgProfilingThreadInfo :: Word16
msgProfilingThreadInfo :: Word16
msgProfilingThreadInfo = Word16
0xCF02

-- | SBP class for message MSG_PROFILING_THREAD_INFO (0xCF02).
--
-- Contains profiling information related to a single thread being tracked by
-- the producing system. Refer to product documentation to understand the
-- exact scope and meaning of this message.
data MsgProfilingThreadInfo = MsgProfilingThreadInfo
  { MsgProfilingThreadInfo -> Word64
_msgProfilingThreadInfo_total_cpu_time :: !Word64
    -- ^ Total cpu time in microseconds consumed by this thread
  , MsgProfilingThreadInfo -> Word64
_msgProfilingThreadInfo_age          :: !Word64
    -- ^ Age of the thread in microseconds
  , MsgProfilingThreadInfo -> Word8
_msgProfilingThreadInfo_state        :: !Word8
    -- ^ Thread state
  , MsgProfilingThreadInfo -> Word32
_msgProfilingThreadInfo_stack_size   :: !Word32
    -- ^ Stack size in bytes
  , MsgProfilingThreadInfo -> Word32
_msgProfilingThreadInfo_stack_usage  :: !Word32
    -- ^ Stack high water usage in bytes
  , MsgProfilingThreadInfo -> Text
_msgProfilingThreadInfo_name         :: !Text
    -- ^ Thread name
  } deriving ( Int -> MsgProfilingThreadInfo -> ShowS
[MsgProfilingThreadInfo] -> ShowS
MsgProfilingThreadInfo -> String
(Int -> MsgProfilingThreadInfo -> ShowS)
-> (MsgProfilingThreadInfo -> String)
-> ([MsgProfilingThreadInfo] -> ShowS)
-> Show MsgProfilingThreadInfo
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> MsgProfilingThreadInfo -> ShowS
showsPrec :: Int -> MsgProfilingThreadInfo -> ShowS
$cshow :: MsgProfilingThreadInfo -> String
show :: MsgProfilingThreadInfo -> String
$cshowList :: [MsgProfilingThreadInfo] -> ShowS
showList :: [MsgProfilingThreadInfo] -> ShowS
Show, ReadPrec [MsgProfilingThreadInfo]
ReadPrec MsgProfilingThreadInfo
Int -> ReadS MsgProfilingThreadInfo
ReadS [MsgProfilingThreadInfo]
(Int -> ReadS MsgProfilingThreadInfo)
-> ReadS [MsgProfilingThreadInfo]
-> ReadPrec MsgProfilingThreadInfo
-> ReadPrec [MsgProfilingThreadInfo]
-> Read MsgProfilingThreadInfo
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
$creadsPrec :: Int -> ReadS MsgProfilingThreadInfo
readsPrec :: Int -> ReadS MsgProfilingThreadInfo
$creadList :: ReadS [MsgProfilingThreadInfo]
readList :: ReadS [MsgProfilingThreadInfo]
$creadPrec :: ReadPrec MsgProfilingThreadInfo
readPrec :: ReadPrec MsgProfilingThreadInfo
$creadListPrec :: ReadPrec [MsgProfilingThreadInfo]
readListPrec :: ReadPrec [MsgProfilingThreadInfo]
Read, MsgProfilingThreadInfo -> MsgProfilingThreadInfo -> Bool
(MsgProfilingThreadInfo -> MsgProfilingThreadInfo -> Bool)
-> (MsgProfilingThreadInfo -> MsgProfilingThreadInfo -> Bool)
-> Eq MsgProfilingThreadInfo
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: MsgProfilingThreadInfo -> MsgProfilingThreadInfo -> Bool
== :: MsgProfilingThreadInfo -> MsgProfilingThreadInfo -> Bool
$c/= :: MsgProfilingThreadInfo -> MsgProfilingThreadInfo -> Bool
/= :: MsgProfilingThreadInfo -> MsgProfilingThreadInfo -> Bool
Eq )

instance Binary MsgProfilingThreadInfo where
  get :: Get MsgProfilingThreadInfo
get = do
    Word64
_msgProfilingThreadInfo_total_cpu_time <- Get Word64
getWord64le
    Word64
_msgProfilingThreadInfo_age <- Get Word64
getWord64le
    Word8
_msgProfilingThreadInfo_state <- Get Word8
getWord8
    Word32
_msgProfilingThreadInfo_stack_size <- Get Word32
getWord32le
    Word32
_msgProfilingThreadInfo_stack_usage <- Get Word32
getWord32le
    Text
_msgProfilingThreadInfo_name <- ByteString -> Text
decodeUtf8 (ByteString -> Text)
-> (ByteString -> ByteString) -> ByteString -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. ByteString -> ByteString
toStrict (ByteString -> Text) -> Get ByteString -> Get Text
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Get ByteString
getRemainingLazyByteString
    MsgProfilingThreadInfo -> Get MsgProfilingThreadInfo
forall a. a -> Get a
forall (f :: * -> *) a. Applicative f => a -> f a
pure MsgProfilingThreadInfo {Word8
Word32
Word64
Text
_msgProfilingThreadInfo_total_cpu_time :: Word64
_msgProfilingThreadInfo_age :: Word64
_msgProfilingThreadInfo_state :: Word8
_msgProfilingThreadInfo_stack_size :: Word32
_msgProfilingThreadInfo_stack_usage :: Word32
_msgProfilingThreadInfo_name :: Text
_msgProfilingThreadInfo_total_cpu_time :: Word64
_msgProfilingThreadInfo_age :: Word64
_msgProfilingThreadInfo_state :: Word8
_msgProfilingThreadInfo_stack_size :: Word32
_msgProfilingThreadInfo_stack_usage :: Word32
_msgProfilingThreadInfo_name :: Text
..}

  put :: MsgProfilingThreadInfo -> Put
put MsgProfilingThreadInfo {Word8
Word32
Word64
Text
_msgProfilingThreadInfo_total_cpu_time :: MsgProfilingThreadInfo -> Word64
_msgProfilingThreadInfo_age :: MsgProfilingThreadInfo -> Word64
_msgProfilingThreadInfo_state :: MsgProfilingThreadInfo -> Word8
_msgProfilingThreadInfo_stack_size :: MsgProfilingThreadInfo -> Word32
_msgProfilingThreadInfo_stack_usage :: MsgProfilingThreadInfo -> Word32
_msgProfilingThreadInfo_name :: MsgProfilingThreadInfo -> Text
_msgProfilingThreadInfo_total_cpu_time :: Word64
_msgProfilingThreadInfo_age :: Word64
_msgProfilingThreadInfo_state :: Word8
_msgProfilingThreadInfo_stack_size :: Word32
_msgProfilingThreadInfo_stack_usage :: Word32
_msgProfilingThreadInfo_name :: Text
..} = do
    Word64 -> Put
putWord64le Word64
_msgProfilingThreadInfo_total_cpu_time
    Word64 -> Put
putWord64le Word64
_msgProfilingThreadInfo_age
    Word8 -> Put
putWord8 Word8
_msgProfilingThreadInfo_state
    Word32 -> Put
putWord32le Word32
_msgProfilingThreadInfo_stack_size
    Word32 -> Put
putWord32le Word32
_msgProfilingThreadInfo_stack_usage
    ByteString -> Put
putByteString (ByteString -> Put) -> ByteString -> Put
forall a b. (a -> b) -> a -> b
$ Text -> ByteString
encodeUtf8 Text
_msgProfilingThreadInfo_name

$(makeSBP 'msgProfilingThreadInfo ''MsgProfilingThreadInfo)
$(makeJSON "_msgProfilingThreadInfo_" ''MsgProfilingThreadInfo)
$(makeLenses ''MsgProfilingThreadInfo)

-- | ResourceBucket.
--
-- Information about allocation of various resources grouped by buckets. Refer
-- to product documentation to understand the meaning and values in this
-- message.
data ResourceBucket = ResourceBucket
  { ResourceBucket -> Text
_resourceBucket_name           :: !Text
    -- ^ Bucket name
  , ResourceBucket -> Word8
_resourceBucket_thread         :: !Word8
    -- ^ Number of threads
  , ResourceBucket -> Word8
_resourceBucket_mutex          :: !Word8
    -- ^ Number of mutexes
  , ResourceBucket -> Word8
_resourceBucket_cv             :: !Word8
    -- ^ Number of condition variables
  , ResourceBucket -> Word8
_resourceBucket_io             :: !Word8
    -- ^ Number of IO handles
  , ResourceBucket -> Word32
_resourceBucket_heap_bytes_alloc :: !Word32
    -- ^ Number of bytes allocated on the heap
  , ResourceBucket -> Word32
_resourceBucket_heap_bytes_free :: !Word32
    -- ^ Number of bytes freed on the heap
  , ResourceBucket -> Word32
_resourceBucket_io_write       :: !Word32
    -- ^ Number of bytes written to IO handles
  , ResourceBucket -> Word32
_resourceBucket_io_read        :: !Word32
    -- ^ Number of bytes read from IO handles
  } deriving ( Int -> ResourceBucket -> ShowS
[ResourceBucket] -> ShowS
ResourceBucket -> String
(Int -> ResourceBucket -> ShowS)
-> (ResourceBucket -> String)
-> ([ResourceBucket] -> ShowS)
-> Show ResourceBucket
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> ResourceBucket -> ShowS
showsPrec :: Int -> ResourceBucket -> ShowS
$cshow :: ResourceBucket -> String
show :: ResourceBucket -> String
$cshowList :: [ResourceBucket] -> ShowS
showList :: [ResourceBucket] -> ShowS
Show, ReadPrec [ResourceBucket]
ReadPrec ResourceBucket
Int -> ReadS ResourceBucket
ReadS [ResourceBucket]
(Int -> ReadS ResourceBucket)
-> ReadS [ResourceBucket]
-> ReadPrec ResourceBucket
-> ReadPrec [ResourceBucket]
-> Read ResourceBucket
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
$creadsPrec :: Int -> ReadS ResourceBucket
readsPrec :: Int -> ReadS ResourceBucket
$creadList :: ReadS [ResourceBucket]
readList :: ReadS [ResourceBucket]
$creadPrec :: ReadPrec ResourceBucket
readPrec :: ReadPrec ResourceBucket
$creadListPrec :: ReadPrec [ResourceBucket]
readListPrec :: ReadPrec [ResourceBucket]
Read, ResourceBucket -> ResourceBucket -> Bool
(ResourceBucket -> ResourceBucket -> Bool)
-> (ResourceBucket -> ResourceBucket -> Bool) -> Eq ResourceBucket
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: ResourceBucket -> ResourceBucket -> Bool
== :: ResourceBucket -> ResourceBucket -> Bool
$c/= :: ResourceBucket -> ResourceBucket -> Bool
/= :: ResourceBucket -> ResourceBucket -> Bool
Eq )

instance Binary ResourceBucket where
  get :: Get ResourceBucket
get = do
    Text
_resourceBucket_name <- ByteString -> Text
decodeUtf8 (ByteString -> Text) -> Get ByteString -> Get Text
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Int -> Get ByteString
getByteString Int
21
    Word8
_resourceBucket_thread <- Get Word8
getWord8
    Word8
_resourceBucket_mutex <- Get Word8
getWord8
    Word8
_resourceBucket_cv <- Get Word8
getWord8
    Word8
_resourceBucket_io <- Get Word8
getWord8
    Word32
_resourceBucket_heap_bytes_alloc <- Get Word32
getWord32le
    Word32
_resourceBucket_heap_bytes_free <- Get Word32
getWord32le
    Word32
_resourceBucket_io_write <- Get Word32
getWord32le
    Word32
_resourceBucket_io_read <- Get Word32
getWord32le
    ResourceBucket -> Get ResourceBucket
forall a. a -> Get a
forall (f :: * -> *) a. Applicative f => a -> f a
pure ResourceBucket {Word8
Word32
Text
_resourceBucket_name :: Text
_resourceBucket_thread :: Word8
_resourceBucket_mutex :: Word8
_resourceBucket_cv :: Word8
_resourceBucket_io :: Word8
_resourceBucket_heap_bytes_alloc :: Word32
_resourceBucket_heap_bytes_free :: Word32
_resourceBucket_io_write :: Word32
_resourceBucket_io_read :: Word32
_resourceBucket_name :: Text
_resourceBucket_thread :: Word8
_resourceBucket_mutex :: Word8
_resourceBucket_cv :: Word8
_resourceBucket_io :: Word8
_resourceBucket_heap_bytes_alloc :: Word32
_resourceBucket_heap_bytes_free :: Word32
_resourceBucket_io_write :: Word32
_resourceBucket_io_read :: Word32
..}

  put :: ResourceBucket -> Put
put ResourceBucket {Word8
Word32
Text
_resourceBucket_name :: ResourceBucket -> Text
_resourceBucket_thread :: ResourceBucket -> Word8
_resourceBucket_mutex :: ResourceBucket -> Word8
_resourceBucket_cv :: ResourceBucket -> Word8
_resourceBucket_io :: ResourceBucket -> Word8
_resourceBucket_heap_bytes_alloc :: ResourceBucket -> Word32
_resourceBucket_heap_bytes_free :: ResourceBucket -> Word32
_resourceBucket_io_write :: ResourceBucket -> Word32
_resourceBucket_io_read :: ResourceBucket -> Word32
_resourceBucket_name :: Text
_resourceBucket_thread :: Word8
_resourceBucket_mutex :: Word8
_resourceBucket_cv :: Word8
_resourceBucket_io :: Word8
_resourceBucket_heap_bytes_alloc :: Word32
_resourceBucket_heap_bytes_free :: Word32
_resourceBucket_io_write :: Word32
_resourceBucket_io_read :: Word32
..} = do
    ByteString -> Put
putByteString (ByteString -> Put) -> ByteString -> Put
forall a b. (a -> b) -> a -> b
$ Text -> ByteString
encodeUtf8 Text
_resourceBucket_name
    Word8 -> Put
putWord8 Word8
_resourceBucket_thread
    Word8 -> Put
putWord8 Word8
_resourceBucket_mutex
    Word8 -> Put
putWord8 Word8
_resourceBucket_cv
    Word8 -> Put
putWord8 Word8
_resourceBucket_io
    Word32 -> Put
putWord32le Word32
_resourceBucket_heap_bytes_alloc
    Word32 -> Put
putWord32le Word32
_resourceBucket_heap_bytes_free
    Word32 -> Put
putWord32le Word32
_resourceBucket_io_write
    Word32 -> Put
putWord32le Word32
_resourceBucket_io_read

$(makeJSON "_resourceBucket_" ''ResourceBucket)
$(makeLenses ''ResourceBucket)

msgProfilingResourceCounter :: Word16
msgProfilingResourceCounter :: Word16
msgProfilingResourceCounter = Word16
0xCF03

-- | SBP class for message MSG_PROFILING_RESOURCE_COUNTER (0xCF03).
--
-- Information about resource buckets. Refer to product documentation to
-- understand the meaning and values in this message.
data MsgProfilingResourceCounter = MsgProfilingResourceCounter
  { MsgProfilingResourceCounter -> Word8
_msgProfilingResourceCounter_seq_no :: !Word8
    -- ^ Message number in complete sequence
  , MsgProfilingResourceCounter -> Word8
_msgProfilingResourceCounter_seq_len :: !Word8
    -- ^ Length of message sequence
  , MsgProfilingResourceCounter -> [ResourceBucket]
_msgProfilingResourceCounter_buckets :: ![ResourceBucket]
    -- ^ List of resource buckets
  } deriving ( Int -> MsgProfilingResourceCounter -> ShowS
[MsgProfilingResourceCounter] -> ShowS
MsgProfilingResourceCounter -> String
(Int -> MsgProfilingResourceCounter -> ShowS)
-> (MsgProfilingResourceCounter -> String)
-> ([MsgProfilingResourceCounter] -> ShowS)
-> Show MsgProfilingResourceCounter
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> MsgProfilingResourceCounter -> ShowS
showsPrec :: Int -> MsgProfilingResourceCounter -> ShowS
$cshow :: MsgProfilingResourceCounter -> String
show :: MsgProfilingResourceCounter -> String
$cshowList :: [MsgProfilingResourceCounter] -> ShowS
showList :: [MsgProfilingResourceCounter] -> ShowS
Show, ReadPrec [MsgProfilingResourceCounter]
ReadPrec MsgProfilingResourceCounter
Int -> ReadS MsgProfilingResourceCounter
ReadS [MsgProfilingResourceCounter]
(Int -> ReadS MsgProfilingResourceCounter)
-> ReadS [MsgProfilingResourceCounter]
-> ReadPrec MsgProfilingResourceCounter
-> ReadPrec [MsgProfilingResourceCounter]
-> Read MsgProfilingResourceCounter
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
$creadsPrec :: Int -> ReadS MsgProfilingResourceCounter
readsPrec :: Int -> ReadS MsgProfilingResourceCounter
$creadList :: ReadS [MsgProfilingResourceCounter]
readList :: ReadS [MsgProfilingResourceCounter]
$creadPrec :: ReadPrec MsgProfilingResourceCounter
readPrec :: ReadPrec MsgProfilingResourceCounter
$creadListPrec :: ReadPrec [MsgProfilingResourceCounter]
readListPrec :: ReadPrec [MsgProfilingResourceCounter]
Read, MsgProfilingResourceCounter -> MsgProfilingResourceCounter -> Bool
(MsgProfilingResourceCounter
 -> MsgProfilingResourceCounter -> Bool)
-> (MsgProfilingResourceCounter
    -> MsgProfilingResourceCounter -> Bool)
-> Eq MsgProfilingResourceCounter
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: MsgProfilingResourceCounter -> MsgProfilingResourceCounter -> Bool
== :: MsgProfilingResourceCounter -> MsgProfilingResourceCounter -> Bool
$c/= :: MsgProfilingResourceCounter -> MsgProfilingResourceCounter -> Bool
/= :: MsgProfilingResourceCounter -> MsgProfilingResourceCounter -> Bool
Eq )

instance Binary MsgProfilingResourceCounter where
  get :: Get MsgProfilingResourceCounter
get = do
    Word8
_msgProfilingResourceCounter_seq_no <- Get Word8
getWord8
    Word8
_msgProfilingResourceCounter_seq_len <- Get Word8
getWord8
    [ResourceBucket]
_msgProfilingResourceCounter_buckets <- Get Bool -> Get ResourceBucket -> Get [ResourceBucket]
forall (m :: * -> *) a. Monad m => m Bool -> m a -> m [a]
whileM (Bool -> Bool
not (Bool -> Bool) -> Get Bool -> Get Bool
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Get Bool
isEmpty) Get ResourceBucket
forall t. Binary t => Get t
get
    MsgProfilingResourceCounter -> Get MsgProfilingResourceCounter
forall a. a -> Get a
forall (f :: * -> *) a. Applicative f => a -> f a
pure MsgProfilingResourceCounter {[ResourceBucket]
Word8
_msgProfilingResourceCounter_seq_no :: Word8
_msgProfilingResourceCounter_seq_len :: Word8
_msgProfilingResourceCounter_buckets :: [ResourceBucket]
_msgProfilingResourceCounter_seq_no :: Word8
_msgProfilingResourceCounter_seq_len :: Word8
_msgProfilingResourceCounter_buckets :: [ResourceBucket]
..}

  put :: MsgProfilingResourceCounter -> Put
put MsgProfilingResourceCounter {[ResourceBucket]
Word8
_msgProfilingResourceCounter_seq_no :: MsgProfilingResourceCounter -> Word8
_msgProfilingResourceCounter_seq_len :: MsgProfilingResourceCounter -> Word8
_msgProfilingResourceCounter_buckets :: MsgProfilingResourceCounter -> [ResourceBucket]
_msgProfilingResourceCounter_seq_no :: Word8
_msgProfilingResourceCounter_seq_len :: Word8
_msgProfilingResourceCounter_buckets :: [ResourceBucket]
..} = do
    Word8 -> Put
putWord8 Word8
_msgProfilingResourceCounter_seq_no
    Word8 -> Put
putWord8 Word8
_msgProfilingResourceCounter_seq_len
    (ResourceBucket -> Put) -> [ResourceBucket] -> Put
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ ResourceBucket -> Put
forall t. Binary t => t -> Put
put [ResourceBucket]
_msgProfilingResourceCounter_buckets

$(makeSBP 'msgProfilingResourceCounter ''MsgProfilingResourceCounter)
$(makeJSON "_msgProfilingResourceCounter_" ''MsgProfilingResourceCounter)
$(makeLenses ''MsgProfilingResourceCounter)