Guest User

Untitled

a guest
Jun 17th, 2018
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.25 KB | None | 0 0
  1. #
  2. # Script builded to ruby 1.9.1
  3. #
  4. require 'CSV'
  5.  
  6. class ArrayIterator
  7. #
  8. # Class ArrayIterator
  9. # Implementation of Iterator pattern
  10. #
  11.  
  12. def initialize(array)
  13. @array = array
  14. @index = 0
  15. end
  16.  
  17. def has_next?
  18. @index < @array.length
  19. end
  20.  
  21. def has_prev?
  22. @index != 0
  23. end
  24.  
  25. def item
  26. @array[@index]
  27. end
  28.  
  29. def next_item
  30. value = @array[@index]
  31. @index += 1
  32. value
  33. end
  34.  
  35. def prev_item
  36. @array[@index-1]
  37. end
  38.  
  39. def same_event
  40. value = item
  41. prev_value = prev_item
  42. if (has_prev? and (value['session_id'] == prev_value['session_id']))
  43. ((value['when'].to_i - prev_value['when'].to_i) < 3600)
  44. else
  45. false
  46. end
  47. end
  48.  
  49. end
  50.  
  51. class Geekopardy
  52. #
  53. # Class to construct the statistics
  54. #
  55.  
  56. def initialize
  57. @data = {}
  58. end
  59.  
  60. def new_user(user)
  61. @data[user] = {} unless @data.keys.include? user
  62. end
  63.  
  64. def new_visit(item)
  65. @data[item['session_id']]["event_#{@data[item['session_id']].size+1}"] = []
  66. end
  67.  
  68. def new_view(item)
  69. @data[item['session_id']]["event_#{@data[item['session_id']].size}"] << item['when']
  70. end
  71.  
  72. def users
  73. @data.keys
  74. end
  75.  
  76. def events(user)
  77. @data[user].keys
  78. end
  79.  
  80. def views(user,event)
  81. @data[user][event]
  82. end
  83. end
  84.  
  85. file = CSV.open('events.csv','r',{:col_sep => "\t", :headers => true}).to_a
  86.  
  87. array = ArrayIterator.new(file)
  88. geekopardy = Geekopardy.new
  89.  
  90. while array.has_next?
  91. item = array.item
  92. geekopardy.new_user item['session_id']
  93. geekopardy.new_visit item unless array.same_event
  94. geekopardy.new_view item
  95. array.next_item
  96. end
  97.  
  98. #
  99. # Print the results
  100. # Print each timestamp of page view
  101. #
  102. geekopardy.users.each do |user|
  103. puts "--------------------- USER #{user} ---------------------"
  104. geekopardy.events(user).each do |event|
  105. puts "\t------------- #{event} -------------"
  106. geekopardy.views(user, event).each do |view|
  107. puts "\t\t" + Time.at(view.to_i).to_s
  108. end
  109. end
  110. end
  111.  
  112. #
  113. # Print the results
  114. # Print a sum of page view
  115. #
  116. puts "\n\r\n\r"
  117. geekopardy.users.each do |user|
  118. puts "--------------------- USER #{user} ---------------------"
  119. geekopardy.events(user).each do |event|
  120. puts "\t------------- #{event} -------------"
  121. puts "\t Pages View: " + geekopardy.views(user, event).size.to_s
  122. end
  123. end
Add Comment
Please, Sign In to add comment