33
44module Main where
55
6+ import Cardano.Timeseries.Import.PlainCBOR
67import Cardano.Timeseries.Query (interp )
78import Cardano.Timeseries.Query.Parser (expr )
9+ import Cardano.Timeseries.Query.Value (Error , Value )
810import Cardano.Timeseries.Store
911import Cardano.Timeseries.Store.Flat (Flat , Point (instant , name ))
1012import Cardano.Timeseries.Store.Parser (points )
1113
14+ import Control.Monad (forever )
15+ import Control.Monad.Except (runExceptT )
16+ import Control.Monad.State.Strict (evalState )
1217import Data.Attoparsec (skipMany )
13- import Data.Attoparsec.Text (decimal , parseOnly , space )
18+ import Data.Attoparsec.Text (decimal , endOfInput , parseOnly , space )
19+ import Data.Foldable (for_ , traverse_ )
1420import Data.Text (pack )
1521import GHC.List (foldl' )
1622import System.Exit (die )
23+ import System.IO (hFlush , stdout )
24+
25+ snapshotsFile :: String
26+ snapshotsFile = " 6nodes_4hours_1mininterval.cbor"
27+
28+ printStore :: Flat Double -> IO ()
29+ printStore = traverse_ print
30+
31+ printQueryResult :: Either Error Value -> IO ()
32+ printQueryResult (Left err) = putStrLn (" Error: " <> err)
33+ printQueryResult (Right ok) = print ok
34+
35+ interactive :: Flat Double -> IO ()
36+ interactive store = forever $ do
37+ putStr " > "
38+ hFlush stdout
39+ queryString <- getLine
40+ case parseOnly (expr <* skipMany space <* endOfInput) (pack queryString) of
41+ Left err -> putStrLn err
42+ Right query -> do
43+ putStrLn (" Expr: " <> show query)
44+ printQueryResult (evalState (runExceptT $ interp store mempty query 0 ) 0 )
1745
1846main :: IO ()
1947main = do
48+ content <- readFileSnapshots snapshotsFile
49+ let store = snapshotsToFlatStore content
50+ interactive store
51+
52+ main1 :: IO ()
53+ main1 = do
2054 putStrLn " This is a prototype!"
2155 string <- readFile " dataset.txt"
2256 let result = parseOnly (points decimal <* skipMany space) (pack string)
@@ -26,12 +60,12 @@ main = do
2660 print (dataset :: [Point Integer ])
2761 let store = foldl' (\ s p -> insert s (name p) (instant p)) (new :: Flat Double ) (fmap (fmap fromIntegral ) dataset)
2862 string <- readFile " expression.txt"
29- let result = parseOnly (expr <* skipMany space) (pack string)
63+ let result = parseOnly (expr <* skipMany space <* endOfInput ) (pack string)
3064 case result of
3165 Left err -> die err
3266 Right expr -> do
3367 print expr
34-
68+
3569 -- no instance Show Value
3670 -- print $ interp store expr 15
3771
0 commit comments