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
import Control.Concurrent import Control.Concurrent
import Control.Monad import Control.Monad
import System.IO
import System.Log.Formatter import System.Log.Formatter
import System.Log.Handler (setFormatter) import System.Log.Handler (setFormatter)
import System.Log.Handler.Simple import System.Log.Handler.Simple
@ -42,9 +43,13 @@ initLogging = do
handler <- fileHandler "mds.log" DEBUG >>= handler <- fileHandler "mds.log" DEBUG >>=
(\x -> return $ (\x -> return $
setFormatter x (simpleLogFormatter "$utcTime\t {$loggername} <$prio> -> $msg")) 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 (setLevel DEBUG)
updateGlobalLogger rootLoggerName (setHandlers [handler]) updateGlobalLogger rootLoggerName (setHandlers [handler, stderrHandler])
getConfig :: IO MdsConfig getConfig :: IO MdsConfig
getConfig = do getConfig = do

10
src/ATrade/MDS/Protocol.hs

@ -93,9 +93,9 @@ instance FromJSON HAPRequest where
v .: "timeframe_sec" v .: "timeframe_sec"
parseTime :: T.Text -> Aeson.Parser UTCTime parseTime :: T.Text -> Aeson.Parser UTCTime
parseTime text = case Attoparsec.parse timeParse text of parseTime text = case Attoparsec.parseOnly (timeParse <* Attoparsec.endOfInput) text of
Done _ r -> return r Right r -> return r
_ -> fail $ "Can't parse time: " ++ T.unpack text Left e -> fail $ "Can't parse time: " ++ T.unpack text ++ "/" ++ e
timeParse :: Attoparsec.Parser UTCTime timeParse :: Attoparsec.Parser UTCTime
timeParse = do timeParse = do
year <- decimal year <- decimal
@ -105,9 +105,9 @@ timeParse = do
day <- decimal day <- decimal
void $ char 'T' void $ char 'T'
hour <- decimal hour <- decimal
void $ char '-' void $ char ':'
minute <- decimal minute <- decimal
void $ char '-' void $ char ':'
sec <- decimal sec <- decimal
case fromGregorianValid year month day of case fromGregorianValid year month day of
Just gregorianDay -> return $ UTCTime gregorianDay (secondsToDiffTime $ hour * 3600 + minute * 60 + sec) Just gregorianDay -> return $ UTCTime gregorianDay (secondsToDiffTime $ hour * 3600 + minute * 60 + sec)

Loading…
Cancel
Save