Advertisement
Guest User

Untitled

a guest
Apr 24th, 2015
236
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.39 KB | None | 0 0
  1. {-# OPTIONS_GHC -Wall #-}
  2. module LogAnalysis where
  3.  
  4. import Log
  5.  
  6. -- Exercise 1
  7. --
  8.  
  9. -- TODO: deal with parse exception?
  10. --
  11. parseMessage :: String -> LogMessage
  12. parseMessage str = case words str of
  13. ("I":t:s) -> LogMessage Info (read t) (unwords s)
  14. ("W":t:s) -> LogMessage Warning (read t) (unwords s)
  15. ("E":i:t:s) -> LogMessage (Error (read i)) (read t) (unwords s)
  16. _ -> Unknown str
  17.  
  18.  
  19. parse :: String -> [LogMessage]
  20. parse = (map parseMessage) . lines
  21.  
  22. -- Exercise 2
  23. --
  24. insert :: LogMessage -> MessageTree -> MessageTree
  25. insert (Unknown _) node = node
  26. insert m Leaf = Node Leaf m Leaf
  27. insert m@(LogMessage _ t _) (Node l m'@(LogMessage _ t' _) r)
  28. | t <= t' = Node (insert m l) m' r
  29. | t > t' = Node l m' (insert m r)
  30. insert _ n = n -- to disable warning
  31.  
  32. -- Exercise 3
  33. --
  34. build :: [LogMessage] -> MessageTree
  35. build = foldl (flip insert) Leaf
  36.  
  37. -- Exercise 4
  38. --
  39.  
  40. inOrder :: MessageTree -> [LogMessage]
  41. inOrder Leaf = []
  42. inOrder (Node l m r) = inOrder l ++ [m] ++ inOrder r
  43.  
  44. -- fmap ((take 10) . inOrder . build) $ testParse parse 100 "error.log"
  45.  
  46. -- Exercise 5
  47. --
  48. whatWentWrong :: [LogMessage] -> [String]
  49. whatWentWrong = (map (\(LogMessage _ _ s) -> s)) . inOrder . build . filter whatWentWrongFilter
  50. where whatWentWrongFilter (LogMessage (Error e) _ _) = e >= 50
  51. whatWentWrongFilter _ = False
  52.  
  53. -- fmap whatWentWrong $ testParse parse 10000 "error.log"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement