redis_analytics 0.6.0 → 0.7.1

Sign up to get free protection for your applications and to get access to all the features.
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