concrete-haskell-0.1.0.13: utils/InspectCommunications.hs
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE StandaloneDeriving #-}
{-# LANGUAGE TypeOperators #-}
module Main (main) where
import Data.Monoid ((<>))
import qualified Data.ByteString.Lazy as BS
import qualified Codec.Compression.GZip as GZip
import qualified Codec.Compression.BZip as BZip
import qualified Data.Concrete.Utils as CU
import Data.Concrete.Autogen.Communication_Types (default_Communication, Communication(..))
import qualified Data.Concrete.Autogen.FetchCommunicationService_Client as FetchService
import Data.Concrete.Autogen.Access_Types (FetchRequest(..))
import Data.Concrete.Services (connectToService)
import qualified Data.Vector as V
import Control.Monad (liftM, mapM, join)
import Data.List (intercalate, concat)
import qualified Data.Text.Lazy as T
import Data.Maybe (fromJust, catMaybes, maybeToList, fromMaybe)
import System.IO (stdin, stdout, stderr, openFile, Handle, IOMode(..), hPutStrLn)
import System.FilePath (takeExtension)
import Options.Generic
data Parameters w = Parameters { inputFile :: w ::: Maybe String <?> "Input file, possibly compressed (.bz2 or .gz)"
, start :: w ::: Maybe Int <?> "Index of first Communication to show"
, end :: w ::: Maybe Int <?> "Index of last Communication to show"
, host :: w ::: Maybe String <?> "Host name for FetchCommunicationService"
, port :: w ::: Maybe Int <?> "Port number for FetchCommunicationService"
}
deriving (Generic)
instance ParseRecord (Parameters Wrapped)
deriving instance Show (Parameters Unwrapped)
main = do
ps <- unwrapRecord "Inspect Concrete Communications"
let s = start ps
e = end ps
cb = (\x -> (putStrLn . T.unpack) (CU.showCommunication x))
cs <- case inputFile ps of
Nothing -> do
con <- connectToService ((fromMaybe "0.0.0.0" . host) ps) ((fromMaybe 9090 . port) ps)
c <- FetchService.getCommunicationCount con
print c
l <- FetchService.getCommunicationIDs con 0 c
--print l
c' <- FetchService.fetch con (FetchRequest (V.drop 50 l) Nothing)
print c'
return ()
Just f -> case takeExtension f of
--".tar" -> CU.readCommunicationsFromTar <$> (BS.readFile f)
--".tgz" -> CU.readCommunicationsFromTar <$> ((liftM GZip.decompress . BS.readFile) f)
--".tbz2" -> CU.readCommunicationsFromTar <$> ((liftM BZip.decompress . BS.readFile) f)
--".zip" -> return $ CU.readCommunicationsFromZip f
--".bz2" -> CU.mapCommunicationsFromBytes cb s e <$> ((liftM BZip.decompress . BS.readFile) f)
--".gz" -> CU.mapCommunicationsFromBytes cb s e <$> ((liftM GZip.decompress . BS.readFile) f)
_ -> error "unimplemented" --CU.mapCommunicationsFromBytes cb s e <$> (BS.readFile f)
--Nothing -> CU.readCommunicationsFromBytes <$> (BS.hGetContents stdin)
return ()