1
1
{-# LANGUAGE BangPatterns #-}
2
+ {-# LANGUAGE FlexibleInstances #-}
3
+ {-# LANGUAGE OverloadedStrings #-}
2
4
3
5
module Cardano.Tracer.Handlers.RTView.State.Historical
4
6
( BlockchainHistory (.. )
5
7
, DataName (.. )
6
8
, History
7
9
, HistoricalPoint
10
+ , HistoricalPoints
8
11
, POSIXTime
9
12
, ResourcesHistory (.. )
10
13
, TransactionsHistory (.. )
@@ -20,14 +23,19 @@ module Cardano.Tracer.Handlers.RTView.State.Historical
20
23
21
24
import Control.Concurrent.STM (atomically )
22
25
import Control.Concurrent.STM.TVar (TVar , modifyTVar' , newTVarIO , readTVarIO )
26
+ import Control.Monad (mzero )
27
+ import qualified Data.ByteString.Char8 as BSC
28
+ import Data.Csv (FromField (.. ), ToField (.. ))
23
29
import Data.Map.Strict (Map )
24
30
import qualified Data.Map.Strict as M
25
31
import Data.Set (Set )
26
32
import qualified Data.Set as S
27
- import Data.Text (Text )
33
+ import Data.Text (Text , isInfixOf )
34
+ import Data.Text.Encoding (decodeUtf8 )
28
35
import Data.Text.Read (decimal , double )
29
36
import Data.Time.Clock (UTCTime )
30
37
import Data.Word (Word64 )
38
+ import Text.Printf (printf )
31
39
32
40
import Cardano.Tracer.Handlers.RTView.Update.Utils
33
41
import Cardano.Tracer.Types (NodeId )
@@ -73,6 +81,17 @@ instance Num ValueH where
73
81
74
82
type HistoricalPoint = (POSIXTime , ValueH )
75
83
84
+ instance FromField ValueH where
85
+ parseField s =
86
+ let t = decodeUtf8 s in
87
+ if " ." `isInfixOf` t
88
+ then either (const mzero) (return . ValueD . fst ) $ double t
89
+ else either (const mzero) (return . ValueI . fst ) $ decimal t
90
+
91
+ instance ToField ValueH where
92
+ toField (ValueI i) = toField i
93
+ toField (ValueD d) = BSC. pack $ printf " %.3f" d
94
+
76
95
type HistoricalPoints = Set HistoricalPoint
77
96
78
97
-- | Historical points for particular data.
@@ -104,7 +123,7 @@ data DataName
104
123
| TxsProcessedNumData
105
124
| MempoolBytesData
106
125
| TxsInMempoolData
107
- deriving (Eq , Ord )
126
+ deriving (Eq , Ord , Read , Show )
108
127
109
128
type HistoricalData = Map DataName HistoricalPoints
110
129
type History = TVar (Map NodeId HistoricalData )
0 commit comments