From 101b4af8886bfcebc9f2c4e17e9803ab60e3b1cb Mon Sep 17 00:00:00 2001 From: Denis Tereshkin Date: Sun, 21 Jul 2019 14:02:00 +0700 Subject: [PATCH] HAP: correct time parsing --- app/Main.hs | 7 ++++++- src/ATrade/MDS/Protocol.hs | 10 +++++----- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/app/Main.hs b/app/Main.hs index ac05681..e26ad76 100644 --- a/app/Main.hs +++ b/app/Main.hs @@ -11,6 +11,7 @@ import ATrade.MDS.HistoryServer import Control.Concurrent import Control.Monad +import System.IO import System.Log.Formatter import System.Log.Handler (setFormatter) import System.Log.Handler.Simple @@ -42,9 +43,13 @@ initLogging = do handler <- fileHandler "mds.log" DEBUG >>= (\x -> return $ setFormatter x (simpleLogFormatter "$utcTime\t {$loggername} <$prio> -> $msg")) + stderrHandler <- streamHandler stderr DEBUG >>= + (\x -> return $ + setFormatter x (simpleLogFormatter "$utcTime\t {$loggername} <$prio> -> $msg")) + hSetBuffering stderr LineBuffering updateGlobalLogger rootLoggerName (setLevel DEBUG) - updateGlobalLogger rootLoggerName (setHandlers [handler]) + updateGlobalLogger rootLoggerName (setHandlers [handler, stderrHandler]) getConfig :: IO MdsConfig getConfig = do diff --git a/src/ATrade/MDS/Protocol.hs b/src/ATrade/MDS/Protocol.hs index b3626de..455aba8 100644 --- a/src/ATrade/MDS/Protocol.hs +++ b/src/ATrade/MDS/Protocol.hs @@ -93,9 +93,9 @@ instance FromJSON HAPRequest where v .: "timeframe_sec" parseTime :: T.Text -> Aeson.Parser UTCTime -parseTime text = case Attoparsec.parse timeParse text of - Done _ r -> return r - _ -> fail $ "Can't parse time: " ++ T.unpack text +parseTime text = case Attoparsec.parseOnly (timeParse <* Attoparsec.endOfInput) text of + Right r -> return r + Left e -> fail $ "Can't parse time: " ++ T.unpack text ++ "/" ++ e timeParse :: Attoparsec.Parser UTCTime timeParse = do year <- decimal @@ -105,9 +105,9 @@ timeParse = do day <- decimal void $ char 'T' hour <- decimal - void $ char '-' + void $ char ':' minute <- decimal - void $ char '-' + void $ char ':' sec <- decimal case fromGregorianValid year month day of Just gregorianDay -> return $ UTCTime gregorianDay (secondsToDiffTime $ hour * 3600 + minute * 60 + sec)