redis_analytics 0.6.0 → 0.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (291) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile.lock +159 -40
  3. data/{LICENSE → MIT-LICENSE} +0 -0
  4. data/README.md +54 -64
  5. data/TODO.md +1 -0
  6. data/app/controllers/redis_analytics/api_controller.rb +50 -0
  7. data/app/controllers/redis_analytics/application_controller.rb +4 -0
  8. data/app/controllers/redis_analytics/visits_controller.rb +9 -0
  9. data/app/helpers/redis_analytics/application_helper.rb +4 -0
  10. data/app/helpers/redis_analytics/visits_helper.rb +74 -0
  11. data/app/views/layouts/redis_analytics/application.html.erb +17 -0
  12. data/app/views/redis_analytics/application/_footer.html.erb +3 -0
  13. data/{lib/redis_analytics/dashboard/views/footer.erb → app/views/redis_analytics/application/_footer.html.erb~} +0 -0
  14. data/{lib/redis_analytics/dashboard/views/header.erb → app/views/redis_analytics/application/_header.html.erb} +1 -1
  15. data/{lib/redis_analytics/dashboard/views/widgets/bounce_rate.erb → app/views/redis_analytics/visits/_bounce_rate.html.erb} +1 -1
  16. data/{lib/redis_analytics/dashboard/views/widgets/browsers_donut.erb → app/views/redis_analytics/visits/_browsers_donut.html.erb} +1 -1
  17. data/{lib/redis_analytics/dashboard/views/widgets/first_visits.erb → app/views/redis_analytics/visits/_first_visits.html.erb} +1 -1
  18. data/{lib/redis_analytics/dashboard/views/widgets/page_depth.erb → app/views/redis_analytics/visits/_page_depth.html.erb} +1 -1
  19. data/{lib/redis_analytics/dashboard/views/widgets/referers_donut.erb → app/views/redis_analytics/visits/_referers_donut.html.erb} +0 -0
  20. data/{lib/redis_analytics/dashboard/views/widgets/total_page_views.erb → app/views/redis_analytics/visits/_total_page_views.html.erb} +1 -1
  21. data/{lib/redis_analytics/dashboard/views/widgets/total_visits.erb → app/views/redis_analytics/visits/_total_visits.html.erb} +1 -1
  22. data/app/views/redis_analytics/visits/_unique_visits_line.html.erb +26 -0
  23. data/{lib/redis_analytics/dashboard/views/widgets/unique_visits_line.erb → app/views/redis_analytics/visits/_unique_visits_line.html.erb~} +1 -1
  24. data/app/views/redis_analytics/visits/_visit_duration.html.erb +3 -0
  25. data/{lib/redis_analytics/dashboard/views/widgets/visit_spark.erb → app/views/redis_analytics/visits/_visit_spark.html.erb} +1 -1
  26. data/{lib/redis_analytics/dashboard/views/widgets/visitor_recency_slices.erb → app/views/redis_analytics/visits/_visitor_recency_slices.html.erb} +1 -1
  27. data/{lib/redis_analytics/dashboard/views/widgets/visits_area.erb → app/views/redis_analytics/visits/_visits_area.html.erb} +2 -2
  28. data/{lib/redis_analytics/dashboard/views/widgets/visits_donut.erb → app/views/redis_analytics/visits/_visits_donut.html.erb} +0 -0
  29. data/{lib/redis_analytics/dashboard/views/visits_js.erb → app/views/redis_analytics/visits/_visits_js.html.erb} +13 -10
  30. data/{lib/redis_analytics/dashboard/views/widgets/world_map.erb → app/views/redis_analytics/visits/_world_map.html.erb} +1 -1
  31. data/app/views/redis_analytics/visits/index.html.erb +69 -0
  32. data/{lib/redis_analytics/dashboard/views/visits.erb → app/views/redis_analytics/visits/index.html.erb~} +0 -0
  33. data/bin/GeoIP.dat +0 -0
  34. data/config.ru +2 -2
  35. data/config/routes.rb +5 -0
  36. data/coverage/assets/0.8.0/application.css +799 -0
  37. data/coverage/assets/0.8.0/application.js +1559 -0
  38. data/coverage/assets/0.8.0/colorbox/border.png +0 -0
  39. data/coverage/assets/0.8.0/colorbox/controls.png +0 -0
  40. data/coverage/assets/0.8.0/colorbox/loading.gif +0 -0
  41. data/coverage/assets/0.8.0/colorbox/loading_background.png +0 -0
  42. data/coverage/assets/0.8.0/favicon_green.png +0 -0
  43. data/coverage/assets/0.8.0/favicon_red.png +0 -0
  44. data/coverage/assets/0.8.0/favicon_yellow.png +0 -0
  45. data/coverage/assets/0.8.0/loading.gif +0 -0
  46. data/coverage/assets/0.8.0/magnify.png +0 -0
  47. data/coverage/assets/0.8.0/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  48. data/coverage/assets/0.8.0/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  49. data/coverage/assets/0.8.0/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  50. data/coverage/assets/0.8.0/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  51. data/coverage/assets/0.8.0/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  52. data/coverage/assets/0.8.0/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  53. data/coverage/assets/0.8.0/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  54. data/coverage/assets/0.8.0/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  55. data/coverage/assets/0.8.0/smoothness/images/ui-icons_222222_256x240.png +0 -0
  56. data/coverage/assets/0.8.0/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
  57. data/coverage/assets/0.8.0/smoothness/images/ui-icons_454545_256x240.png +0 -0
  58. data/coverage/assets/0.8.0/smoothness/images/ui-icons_888888_256x240.png +0 -0
  59. data/coverage/assets/0.8.0/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
  60. data/coverage/index.html +3484 -0
  61. data/lib/redis_analytics.rb +5 -12
  62. data/lib/redis_analytics/configuration.rb +2 -3
  63. data/lib/redis_analytics/engine.rb +18 -0
  64. data/lib/redis_analytics/filter.rb +1 -2
  65. data/lib/redis_analytics/helpers.rb +1 -2
  66. data/lib/redis_analytics/metrics.rb +1 -2
  67. data/lib/redis_analytics/time_ext.rb +0 -76
  68. data/lib/redis_analytics/tracker.rb +35 -24
  69. data/lib/redis_analytics/version.rb +2 -3
  70. data/lib/redis_analytics/visit.rb +4 -5
  71. data/lib/tasks/redis_analytics_tasks.rake +4 -0
  72. data/redis_analytics.gemspec +20 -20
  73. data/script/rails +8 -0
  74. data/spec/lib/redis_analytics/analytics_spec.rb +0 -59
  75. data/spec/lib/redis_analytics/configuration_spec.rb +19 -19
  76. data/spec/lib/redis_analytics/{dashboard_spec.rb → engine_spec.rb} +2 -8
  77. data/spec/lib/redis_analytics/filter_spec.rb +4 -4
  78. data/spec/lib/redis_analytics/tracker_spec.rb +45 -6
  79. data/spec/spec_helper.rb +2 -2
  80. data/test/dummy/README.rdoc +261 -0
  81. data/test/dummy/Rakefile +7 -0
  82. data/test/dummy/app/assets/javascripts/application.js +15 -0
  83. data/test/dummy/app/assets/stylesheets/application.css +13 -0
  84. data/test/dummy/app/controllers/application_controller.rb +3 -0
  85. data/test/dummy/app/helpers/application_helper.rb +2 -0
  86. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  87. data/test/dummy/config.ru +4 -0
  88. data/test/dummy/config/application.rb +67 -0
  89. data/test/dummy/config/boot.rb +10 -0
  90. data/test/dummy/config/database.yml +25 -0
  91. data/test/dummy/config/environment.rb +5 -0
  92. data/test/dummy/config/environments/development.rb +37 -0
  93. data/test/dummy/config/environments/production.rb +67 -0
  94. data/test/dummy/config/environments/test.rb +37 -0
  95. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  96. data/test/dummy/config/initializers/inflections.rb +15 -0
  97. data/test/dummy/config/initializers/mime_types.rb +5 -0
  98. data/test/dummy/config/initializers/secret_token.rb +7 -0
  99. data/test/dummy/config/initializers/session_store.rb +8 -0
  100. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  101. data/test/dummy/config/locales/en.yml +5 -0
  102. data/test/dummy/config/routes.rb +4 -0
  103. data/test/dummy/db/development.sqlite3 +0 -0
  104. data/test/dummy/db/production.sqlite3 +0 -0
  105. data/test/dummy/log/development.log +1605 -0
  106. data/test/dummy/log/production.log +882 -0
  107. data/test/dummy/public/404.html +26 -0
  108. data/test/dummy/public/422.html +26 -0
  109. data/test/dummy/public/500.html +25 -0
  110. data/test/dummy/public/assets/application-ac39e235d42f60499cd65a4b78076ba3.css +14 -0
  111. data/test/dummy/public/assets/application-ac39e235d42f60499cd65a4b78076ba3.css.gz +0 -0
  112. data/test/dummy/public/assets/application-c900658d554ff9f314a2e1b97cd68997.js +10752 -0
  113. data/test/dummy/public/assets/application-c900658d554ff9f314a2e1b97cd68997.js.gz +0 -0
  114. data/test/dummy/public/assets/manifest-5bcba723c313582b1d428fc3bf592b29.json +1 -0
  115. data/test/dummy/public/favicon.ico +0 -0
  116. data/test/dummy/script/rails +6 -0
  117. data/test/dummy/tmp/cache/assets/C86/E20/sprockets%2F04d6293b6d7c30b20475e886dc634936 +0 -0
  118. data/test/dummy/tmp/cache/assets/C88/400/sprockets%2F1bb834b9f3b720193591960cf7f31497 +0 -0
  119. data/test/dummy/tmp/cache/assets/C8D/800/sprockets%2Fb484d3480591b77bf84376f1f41a6457 +0 -0
  120. data/test/dummy/tmp/cache/assets/C97/230/sprockets%2Ff8c56a6d1d5685424871464fc480f956 +0 -0
  121. data/test/dummy/tmp/cache/assets/C98/560/sprockets%2Ff14a2366122e6017b965b32290b8abb0 +0 -0
  122. data/test/dummy/tmp/cache/assets/CAE/7D0/sprockets%2F1f0b25ca08195d3582e4fe04396e9270 +0 -0
  123. data/test/dummy/tmp/cache/assets/CB9/550/sprockets%2F0505a9fb5602a3fae429f389832747d8 +0 -0
  124. data/test/dummy/tmp/cache/assets/CBA/030/sprockets%2F510aa1c63fe533f77a197367b79f2919 +0 -0
  125. data/test/dummy/tmp/cache/assets/CBC/630/sprockets%2F8fca8928788707a4ba625519ab402d58 +0 -0
  126. data/test/dummy/tmp/cache/assets/CC6/EE0/sprockets%2Fb6d3cc91f7b3559f985a978176b44324 +0 -0
  127. data/test/dummy/tmp/cache/assets/CC9/9C0/sprockets%2F84294e9b30cf387e6d8a35f82616a796 +0 -0
  128. data/test/dummy/tmp/cache/assets/CDA/880/sprockets%2F6b1913c56c962748122caf34704afdb5 +0 -0
  129. data/test/dummy/tmp/cache/assets/CDD/BF0/sprockets%2F1f5080b606781094922ecaccd9d508f2 +0 -0
  130. data/test/dummy/tmp/cache/assets/CF0/BB0/sprockets%2F48cd49adc4f96c8324c46c45641b6865 +0 -0
  131. data/test/dummy/tmp/cache/assets/CFE/380/sprockets%2F8e8d04799794da144a9907a9f82e0cf8 +0 -0
  132. data/test/dummy/tmp/cache/assets/D06/470/sprockets%2F2e9124aa82b45552ba5a8307f4f16a8e +0 -0
  133. data/test/dummy/tmp/cache/assets/D06/B80/sprockets%2Fb658eb46471a1b356c0e13962f1a52ee +0 -0
  134. data/test/dummy/tmp/cache/assets/D07/520/sprockets%2F0176f74cb205f694569fa21a53b2fa0e +0 -0
  135. data/test/dummy/tmp/cache/assets/D0A/3C0/sprockets%2F8fd1601c6d442f22a88d0e43bb87117f +0 -0
  136. data/test/dummy/tmp/cache/assets/D10/130/sprockets%2F7af0bd97720d268b9835405c8bae2d06 +0 -0
  137. data/test/dummy/tmp/cache/assets/D15/450/sprockets%2Fae3344670b608424cdc864eca5496fb9 +0 -0
  138. data/test/dummy/tmp/cache/assets/D16/7F0/sprockets%2F73d738bf9b779ad016ed62131d85cc16 +0 -0
  139. data/test/dummy/tmp/cache/assets/D16/A30/sprockets%2F23659e6e2161bb90c6f382ecbef73906 +0 -0
  140. data/test/dummy/tmp/cache/assets/D2B/060/sprockets%2Fd5891eb52eb6329a928461796e9ddfe5 +0 -0
  141. data/test/dummy/tmp/cache/assets/D32/810/sprockets%2F640ab72cec151bc94248b091f6b763bb +0 -0
  142. data/test/dummy/tmp/cache/assets/D37/C50/sprockets%2F00afdaa74ea16690227f771ae0879e1c +0 -0
  143. data/test/dummy/tmp/cache/assets/D39/A80/sprockets%2Ff850350eb319d86a5e0c02c2279cffa5 +0 -0
  144. data/test/dummy/tmp/cache/assets/D3F/170/sprockets%2F3b7a50f2bb29ad782e0352fc784d582f +0 -0
  145. data/test/dummy/tmp/cache/assets/D54/280/sprockets%2F8e51b269010978fe78fa369f6dfa1bf6 +0 -0
  146. data/test/dummy/tmp/cache/assets/D5C/120/sprockets%2F6b74e64b0422b8c574caba3a1746acd2 +0 -0
  147. data/test/dummy/tmp/cache/assets/D5D/E00/sprockets%2Fee3d10401f2a2d4a84f4fe56181fe1c1 +0 -0
  148. data/test/dummy/tmp/cache/assets/D68/310/sprockets%2Fa6108a4fca3b4012f99dcf46e24f5f60 +0 -0
  149. data/test/dummy/tmp/cache/assets/D6C/8C0/sprockets%2F06e1e915faab12cbf879a6b15b9136e7 +0 -0
  150. data/test/dummy/tmp/cache/assets/D70/310/sprockets%2Fab142f83166b2fc048379c9dfddd355a +0 -0
  151. data/test/dummy/tmp/cache/assets/D74/9F0/sprockets%2F59ed8bd7c6ca0dbe0f1921ee14667375 +0 -0
  152. data/test/dummy/tmp/cache/assets/D76/270/sprockets%2F006a046ae88edf3f8c84dc30ef8056d8 +0 -0
  153. data/test/dummy/tmp/cache/assets/D82/590/sprockets%2Fa6f6f970aa669d95690af983eb2b6a5c +0 -0
  154. data/test/dummy/tmp/cache/assets/D8D/440/sprockets%2F486b3eff5dce57385a599ef92be18c65 +0 -0
  155. data/test/dummy/tmp/cache/assets/D93/FF0/sprockets%2Fd06dd1928f37e37a29edb4dbaeb20403 +0 -0
  156. data/test/dummy/tmp/cache/assets/D99/350/sprockets%2F31bdb7fc1c62c06d71678d04fd0db9b8 +0 -0
  157. data/test/dummy/tmp/cache/assets/D9C/070/sprockets%2F9be5d5a71da06ce64d0ed17b3937e15d +0 -0
  158. data/test/dummy/tmp/cache/assets/D9E/5B0/sprockets%2Fd3f2f56488b7ac4890a2ad0bfef7c322 +0 -0
  159. data/test/dummy/tmp/cache/assets/DA4/020/sprockets%2F0fc75dd594e2c890f93a6dcd7332aaa8 +0 -0
  160. data/test/dummy/tmp/cache/assets/DA4/6B0/sprockets%2F17a2e22cd7356ee86da5d99f0a08bbf7 +0 -0
  161. data/test/dummy/tmp/cache/assets/DA5/470/sprockets%2Fa49ebde3ec35e12d52892e188a5cfd90 +0 -0
  162. data/test/dummy/tmp/cache/assets/DA6/D90/sprockets%2Fe3d875d9f2fb7341ae0e31f64c90e6bf +0 -0
  163. data/test/dummy/tmp/cache/assets/DA7/CA0/sprockets%2F0a03bffc91afd8872e8986daf8a2309b +0 -0
  164. data/test/dummy/tmp/cache/assets/DAD/FC0/sprockets%2F9b6809cd65f83a6bfaee80543f9e0ab7 +0 -0
  165. data/test/dummy/tmp/cache/assets/DC4/410/sprockets%2F7c23fbd015fe022d7eed035b4ff3a59c +0 -0
  166. data/test/dummy/tmp/cache/assets/DCB/CA0/sprockets%2F940121ecc7ae38abf79cc78efadf2212 +0 -0
  167. data/test/dummy/tmp/cache/assets/DCC/C10/sprockets%2F7cb37eb6b6ca3028ffd5c5420d8d7fc1 +0 -0
  168. data/test/dummy/tmp/cache/assets/DCD/4E0/sprockets%2Fcff1de305ed821d80d98f4cafa27414d +0 -0
  169. data/test/dummy/tmp/cache/assets/E07/1E0/sprockets%2Fd79ac6cbbaf490e5a3f09ab8288d3c9e +0 -0
  170. data/test/dummy/tmp/cache/assets/E39/680/sprockets%2F1e91e9837edc18aeeaf8df3c82f2af0e +0 -0
  171. data/test/dummy/tmp/cache/assets/E56/670/sprockets%2Fbd0e4d12cea996e0d2eebaa879a17eca +0 -0
  172. data/test/dummy/tmp/cache/assets/E57/150/sprockets%2Fdfa6edddd9357edcafaf06c20d21e561 +0 -0
  173. data/test/dummy/tmp/cache/assets/E5B/2B0/sprockets%2Ffebbeb2ea0bcd485bf5b9bd6190b9f44 +0 -0
  174. data/test/dummy/tmp/cache/assets/development/sprockets/006eb7cc017cf18c3ea32cab97f0cc3c +0 -0
  175. data/test/dummy/tmp/cache/assets/development/sprockets/00afdaa74ea16690227f771ae0879e1c +0 -0
  176. data/test/dummy/tmp/cache/assets/development/sprockets/0125613fec11977628d50d4198ef25f3 +0 -0
  177. data/test/dummy/tmp/cache/assets/development/sprockets/04d6293b6d7c30b20475e886dc634936 +0 -0
  178. data/test/dummy/tmp/cache/assets/development/sprockets/0c6b5095a86cd9aa4d15f4258a08f315 +0 -0
  179. data/test/dummy/tmp/cache/assets/development/sprockets/17a2e22cd7356ee86da5d99f0a08bbf7 +0 -0
  180. data/test/dummy/tmp/cache/assets/development/sprockets/192691b9e0bedebfde12633bb3629d0b +0 -0
  181. data/test/dummy/tmp/cache/assets/development/sprockets/1e91e9837edc18aeeaf8df3c82f2af0e +0 -0
  182. data/test/dummy/tmp/cache/assets/development/sprockets/1f0b25ca08195d3582e4fe04396e9270 +0 -0
  183. data/test/dummy/tmp/cache/assets/development/sprockets/23659e6e2161bb90c6f382ecbef73906 +0 -0
  184. data/test/dummy/tmp/cache/assets/development/sprockets/23b9bf2d5f9b45144a2803844eaa826e +0 -0
  185. data/test/dummy/tmp/cache/assets/development/sprockets/243cc575289b3170af701574d19d6353 +0 -0
  186. data/test/dummy/tmp/cache/assets/development/sprockets/24abc0717cf109a24278323c0d6756a0 +0 -0
  187. data/test/dummy/tmp/cache/assets/development/sprockets/2b6cc5f28a12c36cd4095832a5107969 +0 -0
  188. data/test/dummy/tmp/cache/assets/development/sprockets/326592f095651b767387e7c1d2b01dfe +0 -0
  189. data/test/dummy/tmp/cache/assets/development/sprockets/3bb822a002a8951f71e53f450090799b +0 -0
  190. data/test/dummy/tmp/cache/assets/development/sprockets/3f91dad02acd15d7437b62ddca53c58b +0 -0
  191. data/test/dummy/tmp/cache/assets/development/sprockets/486b3eff5dce57385a599ef92be18c65 +0 -0
  192. data/test/dummy/tmp/cache/assets/development/sprockets/48cd49adc4f96c8324c46c45641b6865 +0 -0
  193. data/test/dummy/tmp/cache/assets/development/sprockets/4b5d99d538ae32ad329cb37e413dbacc +0 -0
  194. data/test/dummy/tmp/cache/assets/development/sprockets/4e89e9cec1b5e275bfeb078a9abfef44 +0 -0
  195. data/test/dummy/tmp/cache/assets/development/sprockets/510aa1c63fe533f77a197367b79f2919 +0 -0
  196. data/test/dummy/tmp/cache/assets/development/sprockets/5cf60638cb580f41112a5a83eb3b72ef +0 -0
  197. data/test/dummy/tmp/cache/assets/development/sprockets/5dfbbe7f012f6cb7c29b1298cd9ff406 +0 -0
  198. data/test/dummy/tmp/cache/assets/development/sprockets/640ab72cec151bc94248b091f6b763bb +0 -0
  199. data/test/dummy/tmp/cache/assets/development/sprockets/6760a9b2947edeec5433ca0ff9d7a295 +0 -0
  200. data/test/dummy/tmp/cache/assets/development/sprockets/6b74e64b0422b8c574caba3a1746acd2 +0 -0
  201. data/test/dummy/tmp/cache/assets/development/sprockets/6c2f18f7338d56feecce32780357521c +0 -0
  202. data/test/dummy/tmp/cache/assets/development/sprockets/6f292799ddb92a69f64c5a60c921a2d6 +0 -0
  203. data/test/dummy/tmp/cache/assets/development/sprockets/731ed4a2128ad4c7240bb520611c8404 +0 -0
  204. data/test/dummy/tmp/cache/assets/development/sprockets/73d738bf9b779ad016ed62131d85cc16 +0 -0
  205. data/test/dummy/tmp/cache/assets/development/sprockets/7477fb841e65b8c9c48c40c13935a851 +0 -0
  206. data/test/dummy/tmp/cache/assets/development/sprockets/77412054774bd02630c93c1e8ac6b26a +0 -0
  207. data/test/dummy/tmp/cache/assets/development/sprockets/7751914469530dae0646d92467e9d72e +0 -0
  208. data/test/dummy/tmp/cache/assets/development/sprockets/794a40bf52fa0deda8b4e5efa8ac523a +0 -0
  209. data/test/dummy/tmp/cache/assets/development/sprockets/7af0bd97720d268b9835405c8bae2d06 +0 -0
  210. data/test/dummy/tmp/cache/assets/development/sprockets/82ecc84179ce77914906a81d29b483cf +0 -0
  211. data/test/dummy/tmp/cache/assets/development/sprockets/8d62150b658b3a8b6fed7e8951f52392 +0 -0
  212. data/test/dummy/tmp/cache/assets/development/sprockets/8e51b269010978fe78fa369f6dfa1bf6 +0 -0
  213. data/test/dummy/tmp/cache/assets/development/sprockets/8e8d04799794da144a9907a9f82e0cf8 +0 -0
  214. data/test/dummy/tmp/cache/assets/development/sprockets/8ea331810c31cbe1ba34b91a02f769e7 +0 -0
  215. data/test/dummy/tmp/cache/assets/development/sprockets/8fd1601c6d442f22a88d0e43bb87117f +0 -0
  216. data/test/dummy/tmp/cache/assets/development/sprockets/953bc37b1ee0915247dba29773960202 +0 -0
  217. data/test/dummy/tmp/cache/assets/development/sprockets/978f6f32b21b72d3e89b0c0f6f3a4a83 +0 -0
  218. data/test/dummy/tmp/cache/assets/development/sprockets/994386d11af17e88b6d107b83f41f8b5 +0 -0
  219. data/test/dummy/tmp/cache/assets/development/sprockets/9b077a68a557a208cf34297edadebdd2 +0 -0
  220. data/test/dummy/tmp/cache/assets/development/sprockets/9b54afa4ef026f4c288feeec49f2f526 +0 -0
  221. data/test/dummy/tmp/cache/assets/development/sprockets/9b6809cd65f83a6bfaee80543f9e0ab7 +0 -0
  222. data/test/dummy/tmp/cache/assets/development/sprockets/9be5d5a71da06ce64d0ed17b3937e15d +0 -0
  223. data/test/dummy/tmp/cache/assets/development/sprockets/a29d0dc527ff5ce1252ccf6370514620 +0 -0
  224. data/test/dummy/tmp/cache/assets/development/sprockets/a49ebde3ec35e12d52892e188a5cfd90 +0 -0
  225. data/test/dummy/tmp/cache/assets/development/sprockets/a6108a4fca3b4012f99dcf46e24f5f60 +0 -0
  226. data/test/dummy/tmp/cache/assets/development/sprockets/aad6778bf60f6f1919628606c92cfd6f +0 -0
  227. data/test/dummy/tmp/cache/assets/development/sprockets/ab142f83166b2fc048379c9dfddd355a +0 -0
  228. data/test/dummy/tmp/cache/assets/development/sprockets/ae3344670b608424cdc864eca5496fb9 +0 -0
  229. data/test/dummy/tmp/cache/assets/development/sprockets/b01583a39abd5ce0a3d2b2967c6f75bd +0 -0
  230. data/test/dummy/tmp/cache/assets/development/sprockets/b2780e7c581a2f0cb1d61346c6d1c1cd +0 -0
  231. data/test/dummy/tmp/cache/assets/development/sprockets/b3f0354298e8a43af381a6e42a03f0bc +0 -0
  232. data/test/dummy/tmp/cache/assets/development/sprockets/b52b477f01cb65c5e1c6a91f6f0be20c +0 -0
  233. data/test/dummy/tmp/cache/assets/development/sprockets/b6fbc3e4c5191de2cc58174a3eeb7cfc +0 -0
  234. data/test/dummy/tmp/cache/assets/development/sprockets/bb39143b57041f96c48b71e92f7e09f2 +0 -0
  235. data/test/dummy/tmp/cache/assets/development/sprockets/be0b9e741941205338510e296868aab2 +0 -0
  236. data/test/dummy/tmp/cache/assets/development/sprockets/c9e69990b1552b575b271aaabbfc4eb5 +0 -0
  237. data/test/dummy/tmp/cache/assets/development/sprockets/c9eeea792acbd377e29de43d6b491291 +0 -0
  238. data/test/dummy/tmp/cache/assets/development/sprockets/cb67795d1180b371b5b749662b9adefb +0 -0
  239. data/test/dummy/tmp/cache/assets/development/sprockets/cfdf466647e83eb93e0d6630e4b51a25 +0 -0
  240. data/test/dummy/tmp/cache/assets/development/sprockets/cff1de305ed821d80d98f4cafa27414d +0 -0
  241. data/test/dummy/tmp/cache/assets/development/sprockets/d5891eb52eb6329a928461796e9ddfe5 +0 -0
  242. data/test/dummy/tmp/cache/assets/development/sprockets/d7491740e7757fe2ec57fd6d25461e5c +0 -0
  243. data/test/dummy/tmp/cache/assets/development/sprockets/d80f54242a6e7f4399481b7357d439a4 +0 -0
  244. data/test/dummy/tmp/cache/assets/development/sprockets/df16db3bfcc56fafc73b853b7999be1f +0 -0
  245. data/test/dummy/tmp/cache/assets/development/sprockets/dfa6edddd9357edcafaf06c20d21e561 +0 -0
  246. data/test/dummy/tmp/cache/assets/development/sprockets/e3d875d9f2fb7341ae0e31f64c90e6bf +0 -0
  247. data/test/dummy/tmp/cache/assets/development/sprockets/e7bd439b274a2155050b47e5a64ea72d +0 -0
  248. data/test/dummy/tmp/cache/assets/development/sprockets/ee3d10401f2a2d4a84f4fe56181fe1c1 +0 -0
  249. data/test/dummy/tmp/cache/assets/development/sprockets/f14a2366122e6017b965b32290b8abb0 +0 -0
  250. data/test/dummy/tmp/cache/assets/development/sprockets/f9a412f49281cc7e6512f0787f7ba05f +0 -0
  251. data/test/dummy/tmp/cache/assets/development/sprockets/febbeb2ea0bcd485bf5b9bd6190b9f44 +0 -0
  252. data/test/dummy/tmp/cache/assets/production/sprockets/00afdaa74ea16690227f771ae0879e1c +0 -0
  253. data/test/dummy/tmp/cache/assets/production/sprockets/13fe41fee1fe35b49d145bcc06610705 +0 -0
  254. data/test/dummy/tmp/cache/assets/production/sprockets/2f5173deea6c795b8fdde723bb4b63af +0 -0
  255. data/test/dummy/tmp/cache/assets/production/sprockets/357970feca3ac29060c1e3861e2c0953 +0 -0
  256. data/test/dummy/tmp/cache/assets/production/sprockets/73d738bf9b779ad016ed62131d85cc16 +0 -0
  257. data/test/dummy/tmp/cache/assets/production/sprockets/cffd775d018f68ce5dba1ee0d951a994 +0 -0
  258. data/test/dummy/tmp/cache/assets/production/sprockets/d771ace226fc8215a3572e0aa35bb0d6 +0 -0
  259. data/test/dummy/tmp/cache/assets/production/sprockets/dfa6edddd9357edcafaf06c20d21e561 +0 -0
  260. data/test/dummy/tmp/cache/assets/production/sprockets/f7cbd26ba1d28d48de824f0e94586655 +0 -0
  261. data/test/dummy/tmp/cache/assets/production/sprockets/febbeb2ea0bcd485bf5b9bd6190b9f44 +0 -0
  262. data/test/integration/navigation_test.rb +10 -0
  263. data/test/redis_analytics_test.rb +7 -0
  264. data/test/test_helper.rb +15 -0
  265. data/{lib/redis_analytics/dashboard/public/javascripts/vendor/bootstrap → vendor/assets/javascripts/redis_analytics}/bootstrap.min.js +0 -0
  266. data/vendor/assets/javascripts/redis_analytics/engine.js +15 -0
  267. data/{lib/redis_analytics/dashboard/public/javascripts/vendor → vendor/assets/javascripts/redis_analytics}/jquery-jvectormap-1.2.2.min.js +0 -0
  268. data/{lib/redis_analytics/dashboard/public/javascripts/vendor → vendor/assets/javascripts/redis_analytics}/jquery-jvectormap-world-mill-en.js +0 -0
  269. data/{lib/redis_analytics/dashboard/public/javascripts/vendor → vendor/assets/javascripts/redis_analytics}/morris.min.js +0 -0
  270. data/{lib/redis_analytics/dashboard/public/javascripts/vendor → vendor/assets/javascripts/redis_analytics}/raphael-min.js +0 -0
  271. data/{lib/redis_analytics/dashboard/public/css → vendor/assets/stylesheets/redis_analytics}/bootstrap-responsive.min.css +0 -0
  272. data/{lib/redis_analytics/dashboard/public/css → vendor/assets/stylesheets/redis_analytics}/bootstrap.min.css +0 -0
  273. data/vendor/assets/stylesheets/redis_analytics/engine.css +12 -0
  274. data/{lib/redis_analytics/dashboard/public/css → vendor/assets/stylesheets/redis_analytics}/jquery-jvectormap-1.2.2.css +0 -0
  275. data/{lib/redis_analytics/dashboard/public/css → vendor/assets/stylesheets/redis_analytics}/morris.css +0 -0
  276. metadata +307 -122
  277. data/bin/redis_analytics_dashboard +0 -17
  278. data/lib/redis_analytics/analytics.rb +0 -45
  279. data/lib/redis_analytics/api.rb +0 -60
  280. data/lib/redis_analytics/dashboard.rb +0 -53
  281. data/lib/redis_analytics/dashboard/public/img/favicon.ico +0 -0
  282. data/lib/redis_analytics/dashboard/public/img/glyphicons-halflings-white.png +0 -0
  283. data/lib/redis_analytics/dashboard/public/img/glyphicons-halflings.png +0 -0
  284. data/lib/redis_analytics/dashboard/public/javascripts/vendor/jquery-1.9.1.min.js +0 -5
  285. data/lib/redis_analytics/dashboard/views/activity.erb +0 -7
  286. data/lib/redis_analytics/dashboard/views/dialogs/unique_visits.erb +0 -41
  287. data/lib/redis_analytics/dashboard/views/dialogs/visits.erb +0 -40
  288. data/lib/redis_analytics/dashboard/views/layout.erb +0 -16
  289. data/lib/redis_analytics/dashboard/views/widgets/visit_duration.erb +0 -3
  290. data/lib/redis_analytics/railtie.rb +0 -13
  291. data/wsd.png +0 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: b0ef5f23c2318259c84c82a4bdadc2807a98b9f4
4
+ data.tar.gz: f7d5120d54362f3db06621fc3a0d2a8d49de5e56
5
+ SHA512:
6
+ metadata.gz: dbf6336fa2e451e0a96cb19f0431a6d26ae9677f42442b8ec75a600f1d80d0b9006d1eedb950e5be8e57974017979622c887311c4be58a3f5231bdcf89c1aa0f
7
+ data.tar.gz: caeb72ecf45491fbd8c147e1388c9a1dbd209ac903ea6820d2f814696884cb5dac16f08d045273252b1b909ea6bff5d79cae61350c6c92aa00e2949d50bbdcc7
@@ -1,57 +1,176 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- redis_analytics (0.1.0)
5
- activesupport (>= 3.2.0)
6
- browser (>= 0.1.6)
7
- geoip (>= 1.2.1)
8
- json (>= 1.7.7)
9
- rack (>= 1.4.0)
10
- redis (>= 3.0.2)
11
- sinatra (>= 1.3.3)
4
+ redis_analytics (0.7.0)
5
+ browser
6
+ geoip
7
+ jquery-rails
8
+ json
9
+ rails (>= 3.2.0, < 5)
10
+ redis
11
+ sqlite3
12
12
 
13
13
  GEM
14
14
  remote: http://rubygems.org/
15
15
  specs:
16
- activesupport (3.2.13)
17
- i18n (= 0.6.1)
18
- multi_json (~> 1.0)
19
- browser (0.1.6)
20
- diff-lcs (1.1.3)
21
- geoip (1.2.1)
22
- i18n (0.6.1)
23
- json (1.7.7)
24
- metaclass (0.0.1)
25
- mocha (0.12.7)
16
+ actionmailer (4.1.0)
17
+ actionpack (= 4.1.0)
18
+ actionview (= 4.1.0)
19
+ mail (~> 2.5.4)
20
+ actionpack (4.1.0)
21
+ actionview (= 4.1.0)
22
+ activesupport (= 4.1.0)
23
+ rack (~> 1.5.2)
24
+ rack-test (~> 0.6.2)
25
+ actionview (4.1.0)
26
+ activesupport (= 4.1.0)
27
+ builder (~> 3.1)
28
+ erubis (~> 2.7.0)
29
+ activemodel (4.1.0)
30
+ activesupport (= 4.1.0)
31
+ builder (~> 3.1)
32
+ activerecord (4.1.0)
33
+ activemodel (= 4.1.0)
34
+ activesupport (= 4.1.0)
35
+ arel (~> 5.0.0)
36
+ activesupport (4.1.0)
37
+ i18n (~> 0.6, >= 0.6.9)
38
+ json (~> 1.7, >= 1.7.7)
39
+ minitest (~> 5.1)
40
+ thread_safe (~> 0.1)
41
+ tzinfo (~> 1.1)
42
+ arel (5.0.0)
43
+ browser (0.4.1)
44
+ builder (3.2.2)
45
+ celluloid (0.15.2)
46
+ timers (~> 1.1.0)
47
+ celluloid-io (0.15.0)
48
+ celluloid (>= 0.15.0)
49
+ nio4r (>= 0.5.0)
50
+ coderay (1.1.0)
51
+ coveralls (0.7.0)
52
+ multi_json (~> 1.3)
53
+ rest-client
54
+ simplecov (>= 0.7)
55
+ term-ansicolor
56
+ thor
57
+ diff-lcs (1.2.5)
58
+ docile (1.1.3)
59
+ erubis (2.7.0)
60
+ fakeredis (0.4.3)
61
+ redis (~> 3.0.0)
62
+ ffi (1.9.3)
63
+ formatador (0.2.4)
64
+ geoip (1.4.0)
65
+ guard (2.6.0)
66
+ formatador (>= 0.2.4)
67
+ listen (~> 2.7)
68
+ lumberjack (~> 1.0)
69
+ pry (>= 0.9.12)
70
+ thor (>= 0.18.1)
71
+ guard-rspec (4.2.8)
72
+ guard (~> 2.1)
73
+ rspec (>= 2.14, < 4.0)
74
+ hike (1.2.3)
75
+ i18n (0.6.9)
76
+ jquery-rails (3.1.0)
77
+ railties (>= 3.0, < 5.0)
78
+ thor (>= 0.14, < 2.0)
79
+ json (1.8.1)
80
+ listen (2.7.1)
81
+ celluloid (>= 0.15.2)
82
+ celluloid-io (>= 0.15.0)
83
+ rb-fsevent (>= 0.9.3)
84
+ rb-inotify (>= 0.9)
85
+ lumberjack (1.0.5)
86
+ mail (2.5.4)
87
+ mime-types (~> 1.16)
88
+ treetop (~> 1.4.8)
89
+ metaclass (0.0.4)
90
+ method_source (0.8.2)
91
+ mime-types (1.25.1)
92
+ minitest (5.3.2)
93
+ mocha (1.0.0)
26
94
  metaclass (~> 0.0.1)
27
- multi_json (1.7.1)
95
+ multi_json (1.9.2)
96
+ nio4r (1.0.0)
97
+ polyglot (0.3.4)
98
+ pry (0.9.12.6)
99
+ coderay (~> 1.0)
100
+ method_source (~> 0.8)
101
+ slop (~> 3.4)
28
102
  rack (1.5.2)
29
- rack-protection (1.5.0)
30
- rack
31
103
  rack-test (0.6.2)
32
104
  rack (>= 1.0)
33
- rake (10.0.3)
34
- redis (3.0.2)
35
- rspec (2.11.0)
36
- rspec-core (~> 2.11.0)
37
- rspec-expectations (~> 2.11.0)
38
- rspec-mocks (~> 2.11.0)
39
- rspec-core (2.11.1)
40
- rspec-expectations (2.11.3)
41
- diff-lcs (~> 1.1.3)
42
- rspec-mocks (2.11.3)
43
- sinatra (1.3.3)
44
- rack (~> 1.3, >= 1.3.6)
45
- rack-protection (~> 1.2)
46
- tilt (~> 1.3, >= 1.3.3)
47
- tilt (1.3.6)
105
+ rails (4.1.0)
106
+ actionmailer (= 4.1.0)
107
+ actionpack (= 4.1.0)
108
+ actionview (= 4.1.0)
109
+ activemodel (= 4.1.0)
110
+ activerecord (= 4.1.0)
111
+ activesupport (= 4.1.0)
112
+ bundler (>= 1.3.0, < 2.0)
113
+ railties (= 4.1.0)
114
+ sprockets-rails (~> 2.0)
115
+ railties (4.1.0)
116
+ actionpack (= 4.1.0)
117
+ activesupport (= 4.1.0)
118
+ rake (>= 0.8.7)
119
+ thor (>= 0.18.1, < 2.0)
120
+ rake (10.2.2)
121
+ rb-fsevent (0.9.4)
122
+ rb-inotify (0.9.3)
123
+ ffi (>= 0.5.0)
124
+ redis (3.0.7)
125
+ rest-client (1.6.7)
126
+ mime-types (>= 1.16)
127
+ rspec (2.14.1)
128
+ rspec-core (~> 2.14.0)
129
+ rspec-expectations (~> 2.14.0)
130
+ rspec-mocks (~> 2.14.0)
131
+ rspec-core (2.14.8)
132
+ rspec-expectations (2.14.5)
133
+ diff-lcs (>= 1.1.3, < 2.0)
134
+ rspec-mocks (2.14.6)
135
+ simplecov (0.8.2)
136
+ docile (~> 1.1.0)
137
+ multi_json
138
+ simplecov-html (~> 0.8.0)
139
+ simplecov-html (0.8.0)
140
+ slop (3.5.0)
141
+ sprockets (2.12.0)
142
+ hike (~> 1.2)
143
+ multi_json (~> 1.0)
144
+ rack (~> 1.0)
145
+ tilt (~> 1.1, != 1.3.0)
146
+ sprockets-rails (2.1.1)
147
+ actionpack (>= 3.0)
148
+ activesupport (>= 3.0)
149
+ sprockets (~> 2.8)
150
+ sqlite3 (1.3.9)
151
+ term-ansicolor (1.3.0)
152
+ tins (~> 1.0)
153
+ thor (0.19.1)
154
+ thread_safe (0.3.3)
155
+ tilt (1.4.1)
156
+ timers (1.1.0)
157
+ tins (1.1.0)
158
+ treetop (1.4.15)
159
+ polyglot
160
+ polyglot (>= 0.3.1)
161
+ tzinfo (1.1.0)
162
+ thread_safe (~> 0.1)
48
163
 
49
164
  PLATFORMS
50
165
  ruby
51
166
 
52
167
  DEPENDENCIES
53
- mocha (>= 0.12.7)
54
- rack-test (>= 0.6.2)
55
- rake (>= 10.0.3)
168
+ coveralls
169
+ fakeredis
170
+ guard-rspec
171
+ mocha
172
+ rack-test
173
+ rake
56
174
  redis_analytics!
57
- rspec (>= 2.11.0)
175
+ rspec
176
+ simplecov
File without changes
data/README.md CHANGED
@@ -2,11 +2,11 @@
2
2
 
3
3
  ### What is redis_analytics?
4
4
 
5
- A gem that provides a Redis based web analytics solution for your rack-compliant apps
5
+ A ruby gem that uses redis to track web analytics for your rails apps
6
6
 
7
7
  ### Why should I use it?
8
8
 
9
- It gives you detailed analytics about visitors, unique visitors, browsers, OS, visitor recency, traffic sources and more
9
+ It gives you detailed analytics about visitors, unique visitors, browsers, OS, visitor recency, traffic sources, etc
10
10
 
11
11
  ### Does it have a cool dashboard?
12
12
 
@@ -14,11 +14,9 @@ Yes, It uses the excellent [Morris.js](http://www.oesmith.co.uk/morris.js/) for
14
14
 
15
15
  ![Screenshot](https://github.com/saturnine/redis_analytics/raw/master/screenshot.png)
16
16
 
17
- ### OK, so how do I install it?
17
+ ### Cool! So how do I install it?
18
18
 
19
- `gem install redis_analytics`
20
-
21
- or in your `Gemfile`
19
+ In your `Gemfile`
22
20
 
23
21
  ```ruby
24
22
  gem 'redis_analytics'
@@ -27,53 +25,36 @@ gem 'redis_analytics'
27
25
  Make sure your redis server is running! Redis configuration is outside the scope of this README, but
28
26
  check out the [Redis documentation](http://redis.io/documentation).
29
27
 
30
- ### How do I enable tracking in my rack-compliant app?
31
-
32
- #### Step 1: Load the redis_analytics library and configure it
28
+ ### How do I enable tracking in my rails apps?
33
29
 
34
30
  ```ruby
35
- # this is not required unless you use :require => false in your Gemfile
36
31
  require 'redis_analytics'
37
32
 
38
- # configure your redis connection (this is mandatory) and namespace (this is optional)
39
- Rack::RedisAnalytics.configure do |configuration|
33
+ # configure your redis_connection (mandatory) and redis_namespace (optional)
34
+ RedisAnalytics.configure do |configuration|
40
35
  configuration.redis_connection = Redis.new(:host => 'localhost', :port => '6379')
41
36
  configuration.redis_namespace = 'ra'
42
37
  end
43
38
  ```
44
- #### Step 2: Use the Tracker rack middleware (NOT REQUIRED FOR RAILS)
45
-
46
- ```ruby
47
- # in Sinatra you would do...
48
- use Rack::RedisAnalytics::Tracker
49
- ```
50
-
51
- For rails the middleware is added automatically, so you do not need to add it manually using `config.middleware.use`
52
39
 
53
40
  ### Where can I see the dashboard?
54
41
 
55
- Simply navigate to `/redis_analytics` in your rack app
56
-
57
- You can also run the standalone dashboard sinatra app like:
58
-
59
- `redis_analytics_dashboard --redis-host 127.0.0.1 --redis-port 6379 --redis-namespace ra`
60
-
61
- ### Where do I change the dashboard URL endpoint?
62
-
63
- Set a dashboard endpoint in your configuration:
42
+ The Dashboard is a `Rails::Engine`. Just mount it into your `routes.rb` file at your favorite endpoint
64
43
 
65
44
  ```ruby
66
- Rack::RedisAnalytics.configure do |configuration|
67
- configuration.dashboard_endpoint = '/dashboard'
45
+ Rails.application.routes.draw do
46
+ mount RedisAnalytics::Dashboard::Engine => "/dashboard"
68
47
  end
69
48
  ```
70
49
 
71
- ### What if I have multiple rails apps that I want to track as one?
50
+ and navigate to `/dashboard` in your app
72
51
 
73
- In the configuration, keep the value of redis_namespace the same across all your rails apps
52
+ ### What if I have multiple rails apps that I want to track as one single website?
53
+
54
+ Just make sure you use the same `redis_connection` and `redis_namespace` in the configuration for all your rails apps
74
55
 
75
56
  ```ruby
76
- Rack::RedisAnalytics.configure do |configuration|
57
+ RedisAnalytics.configure do |configuration|
77
58
  configuration.redis_connection = Redis.new(:host => 'localhost', :port => '6379')
78
59
  configuration.redis_namespace = 'mywebsite.org'
79
60
  end
@@ -86,7 +67,7 @@ Also it is recommended to regularly get an updated binary of 'GeoLite Country' d
86
67
  You will then need to point to the GeoIP.dat file in your configuration.
87
68
 
88
69
  ```ruby
89
- Rack::RedisAnalytics.configure do |configuration|
70
+ RedisAnalytics.configure do |configuration|
90
71
  configuration.redis_connection = Redis.new(:host => 'localhost', :port => '6379')
91
72
  configuration.redis_namespace = 'mywebsite.org'
92
73
  configuration.geo_ip_data_path = '/path/to/GeoIP.dat'
@@ -97,55 +78,71 @@ end
97
78
 
98
79
  ### Tracking custom metrics
99
80
 
100
- You can define and track your own metrics by defining an instance method inside the `Metrics` module
81
+ You can define how to track custom metrics by creating an instance method inside the `RedisAnalytics::Metrics` module
82
+
83
+ ```ruby
84
+ module RedisAnalytics::Metrics
85
+
86
+ # methods to track custom metrics
87
+
88
+ end
89
+ ```
101
90
 
102
- All you need to do, is make sure the method name conforms to the following format:
91
+ RedisAnalytics only looks for method names which conform to the following format:
103
92
 
104
93
  `[abc]_[x]_per_[y]`
105
94
 
106
95
  where
107
96
 
108
97
  * `abc` is a metric name
109
- * `x` can be any one of `ratio` or `count` and defines how the metric is stored (`zset` or `string` respectively)
110
- * `y` can be any one of `hit` or `visit` and defines how will be tracked (once per hit or once per visit)
98
+ * `x` can be any one of `ratio` or `count` and defines the type of the metric
99
+ * `y` can be any one of `hit` or `visit` and defines how the metric will be tracked (once per hit or once per visit)
111
100
 
112
- The return value of the method should be `Fixnum` for `count` and `String` for `ratio`
101
+ The return value of the method is important and should be `Fixnum` for `count` and `String` for `ratio` failing which, your metric might not work!
113
102
 
114
- If the return value is an `error` or `nil` the metric won't be tracked
103
+ If the return value is an `error` or `nil` the metric won't be tracked at all
115
104
 
116
- You can access the `Rack::Request` object via `@rack_request` and the `Rack::Response` object via `@rack_response` in your method
105
+ You can access the `Rack::Request` object via `@rack_request` and the `Rack::Response` object via `@rack_response` in your methods
117
106
 
118
- You are free to define other methods that do not have the above format in the `Metrics` module as helper methods
107
+ You are free to define other methods that do not have the above format in the `Metrics` module as helper methods
119
108
 
120
109
  ```ruby
121
- module Rack::RedisAnalytics::Metrics
110
+ module RedisAnalytics::Metrics
122
111
 
123
- # whenever a product is sold, i want to track it per product_id
124
- def product_sales_ratio_per_hit
125
- if @request.path == '/product/sale'
126
- return @request.params['product_id']
112
+ # TRACKING RATIOS
113
+
114
+ # i want to track ratio of product views per product_id & user_id using query params
115
+ def user_product_views_ratio_per_hit
116
+ if @rack_request.path == '/product/info'
117
+ return "#{@rack_request.params['product_id']}_#{@rack_request.params['user_id']}"
127
118
  end
128
119
  end
129
120
 
130
- # whenever a product is viewed by a user, i want to track it per product & user
131
- def user_product_views_ratio_per_hit
132
- if @request.path == '/product/info'
133
- return "#{@request.params['product_id']}_#{@request.params['user_id']}"
121
+ # i want to track ratio of sold products by product_id using the URL `/products/:id/sale`
122
+ def product_sales_ratio_per_hit
123
+ if @rack_request.path =~ Regexp.new("\/product\/([0-9]+)\/sale")
124
+ return $1
134
125
  end
135
126
  end
136
127
 
137
- # how many times did a visitor reach the payment step
128
+ # TRACKING COUNTS
129
+
130
+ # i want to track how many times a visitor reached the payment step
138
131
  def payment_step_count_per_hit
139
- return 1 if @request.path == '/payment'
132
+ return 1 if @rack_request.path == '/payment'
140
133
  end
141
134
 
142
135
  end
143
136
  ```
144
137
 
138
+ ### Customizing the dashboard
139
+
140
+ Coming soon
141
+
145
142
  ### Using filters
146
143
 
147
144
  ```ruby
148
- Rack::RedisAnalytics.configure do |configuration|
145
+ RedisAnalytics.configure do |configuration|
149
146
 
150
147
  # simple string path filter
151
148
  configuration.add_path_filter('/robots.txt')
@@ -166,15 +163,8 @@ Rack::RedisAnalytics.configure do |configuration|
166
163
  end
167
164
  ```
168
165
 
169
- ## How does it work?
170
-
171
- ![Screenshot](https://github.com/saturnine/redis_analytics/raw/master/wsd.png)
172
-
173
166
  ## License
174
167
 
175
- Since redis_analytics is licensed under MIT, you can use redis_analytics, provided you leave the attribution as is, in code as well as on the dashboard pages
176
-
177
- Copyright (c) 2012-2013 Schubert Cardozo. See [LICENSE!](LICENSE) for further details.
178
-
179
-
168
+ Since redis_analytics is licensed under MIT, you can use redis_analytics for free, provided you leave the attribution as is, in code as well as on the dashboard pages
180
169
 
170
+ Copyright (c) 2012-2014 Schubert Cardozo. See [MIT-LICENSE!](MIT-LICENSE) for further details.
data/TODO.md CHANGED
@@ -1,5 +1,6 @@
1
1
  ## TODO
2
2
 
3
+ * traffic sources (split up and bugfixes)
3
4
  * cleanup and refactor analytics.rb
4
5
  * cleanup and refactor dashboard.rb
5
6
  * dashboard to have custom date selectors
@@ -0,0 +1,50 @@
1
+ module RedisAnalytics
2
+ class ApiController < ApplicationController
3
+
4
+ def visits
5
+ to_date_time = Date.parse(params[:to_date_time]).to_time rescue Time.now
6
+ unit = params[:unit] || 'day'
7
+ aggregate = (params[:aggregate] == 'yes')
8
+ units = (params[:unit_count] || 1).to_i
9
+ p = params[:metrics].split(',')
10
+ from_date_time = to_date_time - units.send(unit)
11
+ results = []
12
+
13
+ p.each_with_index do |q, j|
14
+ result = self.send("#{unit}ly_#{q}", from_date_time, :to_date => to_date_time, :aggregate => aggregate)
15
+ if result.is_a?(Array) # time range data (non-aggregate)
16
+ result.each_with_index do |r, i|
17
+ results[i] ||= {}
18
+ date_value = r[0][0..2]
19
+ time_value = r[0][3..-1]
20
+ date_time_value = []
21
+ date_time_value << date_value.join('-')
22
+ date_time_value << time_value.join(':') if time_value
23
+ # results[i]['raw'] = date_time_value.join(' ').strip
24
+ results[i]['unix'] = Time.mktime(*r[0].map(&:to_i)).to_i
25
+ strf = case unit
26
+ when 'minute'
27
+ '%H%Mhrs'
28
+ when 'hour'
29
+ '%a %H00hrs'
30
+ when 'day'
31
+ '%a'
32
+ when 'month'
33
+ '%b'
34
+ when 'year'
35
+ '%Y'
36
+ end
37
+ results[i]['raw'] = Time.at(results[i]['unix']).strftime(strf)
38
+ results[i][q] = r[1]
39
+ end
40
+ elsif result.is_a?(Hash) or result.is_a?(Fixnum) # aggregate data
41
+ results[j] = {q => result}
42
+ end
43
+ end
44
+ render :json => results
45
+ rescue Exception => e
46
+ render :status => 500, :text => [e.message, e.backtrace]
47
+ end
48
+
49
+ end
50
+ end