Browse Source

HAP: correct time parsing

master
Denis Tereshkin 6 years ago
parent
commit
101b4af888
  1. 7
      app/Main.hs
  2. 10
      src/ATrade/MDS/Protocol.hs

7
app/Main.hs

@ -11,6 +11,7 @@ import ATrade.MDS.HistoryServer @@ -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 @@ -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

10
src/ATrade/MDS/Protocol.hs

@ -93,9 +93,9 @@ instance FromJSON HAPRequest where @@ -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 @@ -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)

Loading…
Cancel
Save