/MovingAverageLoadUnsortedLog.groovy

http://groovy-log-analyzer.googlecode.com/ · Groovy · 46 lines · 42 code · 2 blank · 2 comment · 9 complexity · 48c7f199d02e443d713f4ce1578e84c9 MD5 · raw file

  1. def logtimes = []
  2. def times = []
  3. def movingAverages = []
  4. //Ignores type for now: TODO
  5. movingAverage = {ln, window , type, membershipFunction ->
  6. if (!membershipFunction(ln)) return
  7. def matcher = ln =~ /[\[]([^\]]*)[\]]/
  8. if(matcher)
  9. {
  10. sdate = matcher[0][1]
  11. formatter = new java.text.SimpleDateFormat("dd/MMM/yyyy:HH:mm:ss z");
  12. def date = (Date)formatter.parse(sdate)
  13. logtimes << date
  14. }
  15. }
  16. //Ignore type for now
  17. movingAverageResult = { type, window ->
  18. if(logtimes)
  19. {
  20. Collections.sort(logtimes)
  21. for(date in logtimes){
  22. if(times.size() == 0)
  23. {
  24. times << date.getTime()
  25. }else
  26. {
  27. newTime = date.getTime()
  28. while(times.size() > 0 && newTime-times[0] > window)
  29. {
  30. times.remove(0);
  31. }
  32. times<<newTime
  33. if(times.size() > 1)
  34. {
  35. def deltaTime = newTime - times[0]
  36. if(deltaTime)
  37. movingAverages << times.size()*1000/deltaTime
  38. }
  39. }
  40. }
  41. logtimes = false
  42. }
  43. movingAverages
  44. }