-
-
Save MarcusXavierr/a91253b0fccf5ae2684bf4bfa7771c21 to your computer and use it in GitHub Desktop.
Improved code CIS 194 week 2
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{-# OPTIONS_GHC -Wall #-} | |
module Main where | |
import Log | |
parse :: String -> [LogMessage] | |
parse xs = map parseMessage $ lines xs | |
parseMessage :: String -> LogMessage | |
parseMessage = createLog . words | |
createLog :: [String] -> LogMessage | |
createLog ("E":err:t:m) = LogMessage (Error (read err)) ( read t ) (unwords m ) | |
createLog ("I":t:m) = LogMessage Info ( read t ) (unwords m ) | |
createLog ("W":t:m) = LogMessage Warning ( read t ) (unwords m ) | |
createLog xs = Unknown (unwords xs ) | |
insert :: LogMessage -> MessageTree -> MessageTree | |
insert logM Leaf = Node Leaf logM Leaf | |
insert logM (Node l m r) | |
|getTimestamp logM > getTimestamp m = Node l m ( insert logM r ) | |
|getTimestamp logM < getTimestamp m = Node ( insert logM l ) m r | |
|otherwise = Node l m r | |
getTimestamp :: LogMessage -> TimeStamp | |
getTimestamp (Unknown _) = error "Unknown logmessage dont have timestamp" | |
getTimestamp (LogMessage _ x _) = x | |
build :: [LogMessage] -> MessageTree | |
build = foldr insert Leaf | |
inOrder :: MessageTree -> [LogMessage] | |
inOrder Leaf = [] | |
inOrder (Node l m r) = inOrder l ++ [m] ++ inOrder r | |
whatWentWrong :: [LogMessage] -> [String] | |
whatWentWrong = map getMessageFromLog . filter (\x -> isError x && getErrorIntensity x > 50 ) | |
isError :: LogMessage -> Bool | |
isError (LogMessage (Error _) _ _) = True | |
isError _ = False | |
getMessageFromLog :: LogMessage -> String | |
getMessageFromLog (Unknown _) = error "Unknown dont have message" | |
getMessageFromLog (LogMessage _ _ m) = m | |
getErrorIntensity :: LogMessage -> Int | |
getErrorIntensity (LogMessage (Error x) _ _) = x | |
getErrorIntensity _ = error "this function only works with Error type" | |
sortLog :: [LogMessage] -> [LogMessage] | |
sortLog = inOrder . build |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment