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.
- checksums.yaml +7 -0
- data/Gemfile.lock +159 -40
- data/{LICENSE → MIT-LICENSE} +0 -0
- data/README.md +54 -64
- data/TODO.md +1 -0
- data/app/controllers/redis_analytics/api_controller.rb +50 -0
- data/app/controllers/redis_analytics/application_controller.rb +4 -0
- data/app/controllers/redis_analytics/visits_controller.rb +9 -0
- data/app/helpers/redis_analytics/application_helper.rb +4 -0
- data/app/helpers/redis_analytics/visits_helper.rb +74 -0
- data/app/views/layouts/redis_analytics/application.html.erb +17 -0
- data/app/views/redis_analytics/application/_footer.html.erb +3 -0
- data/{lib/redis_analytics/dashboard/views/footer.erb → app/views/redis_analytics/application/_footer.html.erb~} +0 -0
- data/{lib/redis_analytics/dashboard/views/header.erb → app/views/redis_analytics/application/_header.html.erb} +1 -1
- data/{lib/redis_analytics/dashboard/views/widgets/bounce_rate.erb → app/views/redis_analytics/visits/_bounce_rate.html.erb} +1 -1
- data/{lib/redis_analytics/dashboard/views/widgets/browsers_donut.erb → app/views/redis_analytics/visits/_browsers_donut.html.erb} +1 -1
- data/{lib/redis_analytics/dashboard/views/widgets/first_visits.erb → app/views/redis_analytics/visits/_first_visits.html.erb} +1 -1
- data/{lib/redis_analytics/dashboard/views/widgets/page_depth.erb → app/views/redis_analytics/visits/_page_depth.html.erb} +1 -1
- data/{lib/redis_analytics/dashboard/views/widgets/referers_donut.erb → app/views/redis_analytics/visits/_referers_donut.html.erb} +0 -0
- data/{lib/redis_analytics/dashboard/views/widgets/total_page_views.erb → app/views/redis_analytics/visits/_total_page_views.html.erb} +1 -1
- data/{lib/redis_analytics/dashboard/views/widgets/total_visits.erb → app/views/redis_analytics/visits/_total_visits.html.erb} +1 -1
- data/app/views/redis_analytics/visits/_unique_visits_line.html.erb +26 -0
- data/{lib/redis_analytics/dashboard/views/widgets/unique_visits_line.erb → app/views/redis_analytics/visits/_unique_visits_line.html.erb~} +1 -1
- data/app/views/redis_analytics/visits/_visit_duration.html.erb +3 -0
- data/{lib/redis_analytics/dashboard/views/widgets/visit_spark.erb → app/views/redis_analytics/visits/_visit_spark.html.erb} +1 -1
- data/{lib/redis_analytics/dashboard/views/widgets/visitor_recency_slices.erb → app/views/redis_analytics/visits/_visitor_recency_slices.html.erb} +1 -1
- data/{lib/redis_analytics/dashboard/views/widgets/visits_area.erb → app/views/redis_analytics/visits/_visits_area.html.erb} +2 -2
- data/{lib/redis_analytics/dashboard/views/widgets/visits_donut.erb → app/views/redis_analytics/visits/_visits_donut.html.erb} +0 -0
- data/{lib/redis_analytics/dashboard/views/visits_js.erb → app/views/redis_analytics/visits/_visits_js.html.erb} +13 -10
- data/{lib/redis_analytics/dashboard/views/widgets/world_map.erb → app/views/redis_analytics/visits/_world_map.html.erb} +1 -1
- data/app/views/redis_analytics/visits/index.html.erb +69 -0
- data/{lib/redis_analytics/dashboard/views/visits.erb → app/views/redis_analytics/visits/index.html.erb~} +0 -0
- data/bin/GeoIP.dat +0 -0
- data/config.ru +2 -2
- data/config/routes.rb +5 -0
- data/coverage/assets/0.8.0/application.css +799 -0
- data/coverage/assets/0.8.0/application.js +1559 -0
- data/coverage/assets/0.8.0/colorbox/border.png +0 -0
- data/coverage/assets/0.8.0/colorbox/controls.png +0 -0
- data/coverage/assets/0.8.0/colorbox/loading.gif +0 -0
- data/coverage/assets/0.8.0/colorbox/loading_background.png +0 -0
- data/coverage/assets/0.8.0/favicon_green.png +0 -0
- data/coverage/assets/0.8.0/favicon_red.png +0 -0
- data/coverage/assets/0.8.0/favicon_yellow.png +0 -0
- data/coverage/assets/0.8.0/loading.gif +0 -0
- data/coverage/assets/0.8.0/magnify.png +0 -0
- data/coverage/assets/0.8.0/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
- data/coverage/assets/0.8.0/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
- data/coverage/assets/0.8.0/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
- data/coverage/assets/0.8.0/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
- data/coverage/assets/0.8.0/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
- data/coverage/assets/0.8.0/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
- data/coverage/assets/0.8.0/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
- data/coverage/assets/0.8.0/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
- data/coverage/assets/0.8.0/smoothness/images/ui-icons_222222_256x240.png +0 -0
- data/coverage/assets/0.8.0/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
- data/coverage/assets/0.8.0/smoothness/images/ui-icons_454545_256x240.png +0 -0
- data/coverage/assets/0.8.0/smoothness/images/ui-icons_888888_256x240.png +0 -0
- data/coverage/assets/0.8.0/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
- data/coverage/index.html +3484 -0
- data/lib/redis_analytics.rb +5 -12
- data/lib/redis_analytics/configuration.rb +2 -3
- data/lib/redis_analytics/engine.rb +18 -0
- data/lib/redis_analytics/filter.rb +1 -2
- data/lib/redis_analytics/helpers.rb +1 -2
- data/lib/redis_analytics/metrics.rb +1 -2
- data/lib/redis_analytics/time_ext.rb +0 -76
- data/lib/redis_analytics/tracker.rb +35 -24
- data/lib/redis_analytics/version.rb +2 -3
- data/lib/redis_analytics/visit.rb +4 -5
- data/lib/tasks/redis_analytics_tasks.rake +4 -0
- data/redis_analytics.gemspec +20 -20
- data/script/rails +8 -0
- data/spec/lib/redis_analytics/analytics_spec.rb +0 -59
- data/spec/lib/redis_analytics/configuration_spec.rb +19 -19
- data/spec/lib/redis_analytics/{dashboard_spec.rb → engine_spec.rb} +2 -8
- data/spec/lib/redis_analytics/filter_spec.rb +4 -4
- data/spec/lib/redis_analytics/tracker_spec.rb +45 -6
- data/spec/spec_helper.rb +2 -2
- data/test/dummy/README.rdoc +261 -0
- data/test/dummy/Rakefile +7 -0
- data/test/dummy/app/assets/javascripts/application.js +15 -0
- data/test/dummy/app/assets/stylesheets/application.css +13 -0
- data/test/dummy/app/controllers/application_controller.rb +3 -0
- data/test/dummy/app/helpers/application_helper.rb +2 -0
- data/test/dummy/app/views/layouts/application.html.erb +14 -0
- data/test/dummy/config.ru +4 -0
- data/test/dummy/config/application.rb +67 -0
- data/test/dummy/config/boot.rb +10 -0
- data/test/dummy/config/database.yml +25 -0
- data/test/dummy/config/environment.rb +5 -0
- data/test/dummy/config/environments/development.rb +37 -0
- data/test/dummy/config/environments/production.rb +67 -0
- data/test/dummy/config/environments/test.rb +37 -0
- data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/test/dummy/config/initializers/inflections.rb +15 -0
- data/test/dummy/config/initializers/mime_types.rb +5 -0
- data/test/dummy/config/initializers/secret_token.rb +7 -0
- data/test/dummy/config/initializers/session_store.rb +8 -0
- data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/test/dummy/config/locales/en.yml +5 -0
- data/test/dummy/config/routes.rb +4 -0
- data/test/dummy/db/development.sqlite3 +0 -0
- data/test/dummy/db/production.sqlite3 +0 -0
- data/test/dummy/log/development.log +1605 -0
- data/test/dummy/log/production.log +882 -0
- data/test/dummy/public/404.html +26 -0
- data/test/dummy/public/422.html +26 -0
- data/test/dummy/public/500.html +25 -0
- data/test/dummy/public/assets/application-ac39e235d42f60499cd65a4b78076ba3.css +14 -0
- data/test/dummy/public/assets/application-ac39e235d42f60499cd65a4b78076ba3.css.gz +0 -0
- data/test/dummy/public/assets/application-c900658d554ff9f314a2e1b97cd68997.js +10752 -0
- data/test/dummy/public/assets/application-c900658d554ff9f314a2e1b97cd68997.js.gz +0 -0
- data/test/dummy/public/assets/manifest-5bcba723c313582b1d428fc3bf592b29.json +1 -0
- data/test/dummy/public/favicon.ico +0 -0
- data/test/dummy/script/rails +6 -0
- data/test/dummy/tmp/cache/assets/C86/E20/sprockets%2F04d6293b6d7c30b20475e886dc634936 +0 -0
- data/test/dummy/tmp/cache/assets/C88/400/sprockets%2F1bb834b9f3b720193591960cf7f31497 +0 -0
- data/test/dummy/tmp/cache/assets/C8D/800/sprockets%2Fb484d3480591b77bf84376f1f41a6457 +0 -0
- data/test/dummy/tmp/cache/assets/C97/230/sprockets%2Ff8c56a6d1d5685424871464fc480f956 +0 -0
- data/test/dummy/tmp/cache/assets/C98/560/sprockets%2Ff14a2366122e6017b965b32290b8abb0 +0 -0
- data/test/dummy/tmp/cache/assets/CAE/7D0/sprockets%2F1f0b25ca08195d3582e4fe04396e9270 +0 -0
- data/test/dummy/tmp/cache/assets/CB9/550/sprockets%2F0505a9fb5602a3fae429f389832747d8 +0 -0
- data/test/dummy/tmp/cache/assets/CBA/030/sprockets%2F510aa1c63fe533f77a197367b79f2919 +0 -0
- data/test/dummy/tmp/cache/assets/CBC/630/sprockets%2F8fca8928788707a4ba625519ab402d58 +0 -0
- data/test/dummy/tmp/cache/assets/CC6/EE0/sprockets%2Fb6d3cc91f7b3559f985a978176b44324 +0 -0
- data/test/dummy/tmp/cache/assets/CC9/9C0/sprockets%2F84294e9b30cf387e6d8a35f82616a796 +0 -0
- data/test/dummy/tmp/cache/assets/CDA/880/sprockets%2F6b1913c56c962748122caf34704afdb5 +0 -0
- data/test/dummy/tmp/cache/assets/CDD/BF0/sprockets%2F1f5080b606781094922ecaccd9d508f2 +0 -0
- data/test/dummy/tmp/cache/assets/CF0/BB0/sprockets%2F48cd49adc4f96c8324c46c45641b6865 +0 -0
- data/test/dummy/tmp/cache/assets/CFE/380/sprockets%2F8e8d04799794da144a9907a9f82e0cf8 +0 -0
- data/test/dummy/tmp/cache/assets/D06/470/sprockets%2F2e9124aa82b45552ba5a8307f4f16a8e +0 -0
- data/test/dummy/tmp/cache/assets/D06/B80/sprockets%2Fb658eb46471a1b356c0e13962f1a52ee +0 -0
- data/test/dummy/tmp/cache/assets/D07/520/sprockets%2F0176f74cb205f694569fa21a53b2fa0e +0 -0
- data/test/dummy/tmp/cache/assets/D0A/3C0/sprockets%2F8fd1601c6d442f22a88d0e43bb87117f +0 -0
- data/test/dummy/tmp/cache/assets/D10/130/sprockets%2F7af0bd97720d268b9835405c8bae2d06 +0 -0
- data/test/dummy/tmp/cache/assets/D15/450/sprockets%2Fae3344670b608424cdc864eca5496fb9 +0 -0
- data/test/dummy/tmp/cache/assets/D16/7F0/sprockets%2F73d738bf9b779ad016ed62131d85cc16 +0 -0
- data/test/dummy/tmp/cache/assets/D16/A30/sprockets%2F23659e6e2161bb90c6f382ecbef73906 +0 -0
- data/test/dummy/tmp/cache/assets/D2B/060/sprockets%2Fd5891eb52eb6329a928461796e9ddfe5 +0 -0
- data/test/dummy/tmp/cache/assets/D32/810/sprockets%2F640ab72cec151bc94248b091f6b763bb +0 -0
- data/test/dummy/tmp/cache/assets/D37/C50/sprockets%2F00afdaa74ea16690227f771ae0879e1c +0 -0
- data/test/dummy/tmp/cache/assets/D39/A80/sprockets%2Ff850350eb319d86a5e0c02c2279cffa5 +0 -0
- data/test/dummy/tmp/cache/assets/D3F/170/sprockets%2F3b7a50f2bb29ad782e0352fc784d582f +0 -0
- data/test/dummy/tmp/cache/assets/D54/280/sprockets%2F8e51b269010978fe78fa369f6dfa1bf6 +0 -0
- data/test/dummy/tmp/cache/assets/D5C/120/sprockets%2F6b74e64b0422b8c574caba3a1746acd2 +0 -0
- data/test/dummy/tmp/cache/assets/D5D/E00/sprockets%2Fee3d10401f2a2d4a84f4fe56181fe1c1 +0 -0
- data/test/dummy/tmp/cache/assets/D68/310/sprockets%2Fa6108a4fca3b4012f99dcf46e24f5f60 +0 -0
- data/test/dummy/tmp/cache/assets/D6C/8C0/sprockets%2F06e1e915faab12cbf879a6b15b9136e7 +0 -0
- data/test/dummy/tmp/cache/assets/D70/310/sprockets%2Fab142f83166b2fc048379c9dfddd355a +0 -0
- data/test/dummy/tmp/cache/assets/D74/9F0/sprockets%2F59ed8bd7c6ca0dbe0f1921ee14667375 +0 -0
- data/test/dummy/tmp/cache/assets/D76/270/sprockets%2F006a046ae88edf3f8c84dc30ef8056d8 +0 -0
- data/test/dummy/tmp/cache/assets/D82/590/sprockets%2Fa6f6f970aa669d95690af983eb2b6a5c +0 -0
- data/test/dummy/tmp/cache/assets/D8D/440/sprockets%2F486b3eff5dce57385a599ef92be18c65 +0 -0
- data/test/dummy/tmp/cache/assets/D93/FF0/sprockets%2Fd06dd1928f37e37a29edb4dbaeb20403 +0 -0
- data/test/dummy/tmp/cache/assets/D99/350/sprockets%2F31bdb7fc1c62c06d71678d04fd0db9b8 +0 -0
- data/test/dummy/tmp/cache/assets/D9C/070/sprockets%2F9be5d5a71da06ce64d0ed17b3937e15d +0 -0
- data/test/dummy/tmp/cache/assets/D9E/5B0/sprockets%2Fd3f2f56488b7ac4890a2ad0bfef7c322 +0 -0
- data/test/dummy/tmp/cache/assets/DA4/020/sprockets%2F0fc75dd594e2c890f93a6dcd7332aaa8 +0 -0
- data/test/dummy/tmp/cache/assets/DA4/6B0/sprockets%2F17a2e22cd7356ee86da5d99f0a08bbf7 +0 -0
- data/test/dummy/tmp/cache/assets/DA5/470/sprockets%2Fa49ebde3ec35e12d52892e188a5cfd90 +0 -0
- data/test/dummy/tmp/cache/assets/DA6/D90/sprockets%2Fe3d875d9f2fb7341ae0e31f64c90e6bf +0 -0
- data/test/dummy/tmp/cache/assets/DA7/CA0/sprockets%2F0a03bffc91afd8872e8986daf8a2309b +0 -0
- data/test/dummy/tmp/cache/assets/DAD/FC0/sprockets%2F9b6809cd65f83a6bfaee80543f9e0ab7 +0 -0
- data/test/dummy/tmp/cache/assets/DC4/410/sprockets%2F7c23fbd015fe022d7eed035b4ff3a59c +0 -0
- data/test/dummy/tmp/cache/assets/DCB/CA0/sprockets%2F940121ecc7ae38abf79cc78efadf2212 +0 -0
- data/test/dummy/tmp/cache/assets/DCC/C10/sprockets%2F7cb37eb6b6ca3028ffd5c5420d8d7fc1 +0 -0
- data/test/dummy/tmp/cache/assets/DCD/4E0/sprockets%2Fcff1de305ed821d80d98f4cafa27414d +0 -0
- data/test/dummy/tmp/cache/assets/E07/1E0/sprockets%2Fd79ac6cbbaf490e5a3f09ab8288d3c9e +0 -0
- data/test/dummy/tmp/cache/assets/E39/680/sprockets%2F1e91e9837edc18aeeaf8df3c82f2af0e +0 -0
- data/test/dummy/tmp/cache/assets/E56/670/sprockets%2Fbd0e4d12cea996e0d2eebaa879a17eca +0 -0
- data/test/dummy/tmp/cache/assets/E57/150/sprockets%2Fdfa6edddd9357edcafaf06c20d21e561 +0 -0
- data/test/dummy/tmp/cache/assets/E5B/2B0/sprockets%2Ffebbeb2ea0bcd485bf5b9bd6190b9f44 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/006eb7cc017cf18c3ea32cab97f0cc3c +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/00afdaa74ea16690227f771ae0879e1c +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/0125613fec11977628d50d4198ef25f3 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/04d6293b6d7c30b20475e886dc634936 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/0c6b5095a86cd9aa4d15f4258a08f315 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/17a2e22cd7356ee86da5d99f0a08bbf7 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/192691b9e0bedebfde12633bb3629d0b +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/1e91e9837edc18aeeaf8df3c82f2af0e +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/1f0b25ca08195d3582e4fe04396e9270 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/23659e6e2161bb90c6f382ecbef73906 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/23b9bf2d5f9b45144a2803844eaa826e +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/243cc575289b3170af701574d19d6353 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/24abc0717cf109a24278323c0d6756a0 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/2b6cc5f28a12c36cd4095832a5107969 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/326592f095651b767387e7c1d2b01dfe +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/3bb822a002a8951f71e53f450090799b +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/3f91dad02acd15d7437b62ddca53c58b +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/486b3eff5dce57385a599ef92be18c65 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/48cd49adc4f96c8324c46c45641b6865 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/4b5d99d538ae32ad329cb37e413dbacc +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/4e89e9cec1b5e275bfeb078a9abfef44 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/510aa1c63fe533f77a197367b79f2919 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/5cf60638cb580f41112a5a83eb3b72ef +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/5dfbbe7f012f6cb7c29b1298cd9ff406 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/640ab72cec151bc94248b091f6b763bb +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/6760a9b2947edeec5433ca0ff9d7a295 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/6b74e64b0422b8c574caba3a1746acd2 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/6c2f18f7338d56feecce32780357521c +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/6f292799ddb92a69f64c5a60c921a2d6 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/731ed4a2128ad4c7240bb520611c8404 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/73d738bf9b779ad016ed62131d85cc16 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/7477fb841e65b8c9c48c40c13935a851 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/77412054774bd02630c93c1e8ac6b26a +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/7751914469530dae0646d92467e9d72e +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/794a40bf52fa0deda8b4e5efa8ac523a +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/7af0bd97720d268b9835405c8bae2d06 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/82ecc84179ce77914906a81d29b483cf +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/8d62150b658b3a8b6fed7e8951f52392 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/8e51b269010978fe78fa369f6dfa1bf6 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/8e8d04799794da144a9907a9f82e0cf8 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/8ea331810c31cbe1ba34b91a02f769e7 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/8fd1601c6d442f22a88d0e43bb87117f +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/953bc37b1ee0915247dba29773960202 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/978f6f32b21b72d3e89b0c0f6f3a4a83 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/994386d11af17e88b6d107b83f41f8b5 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/9b077a68a557a208cf34297edadebdd2 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/9b54afa4ef026f4c288feeec49f2f526 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/9b6809cd65f83a6bfaee80543f9e0ab7 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/9be5d5a71da06ce64d0ed17b3937e15d +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/a29d0dc527ff5ce1252ccf6370514620 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/a49ebde3ec35e12d52892e188a5cfd90 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/a6108a4fca3b4012f99dcf46e24f5f60 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/aad6778bf60f6f1919628606c92cfd6f +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/ab142f83166b2fc048379c9dfddd355a +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/ae3344670b608424cdc864eca5496fb9 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/b01583a39abd5ce0a3d2b2967c6f75bd +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/b2780e7c581a2f0cb1d61346c6d1c1cd +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/b3f0354298e8a43af381a6e42a03f0bc +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/b52b477f01cb65c5e1c6a91f6f0be20c +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/b6fbc3e4c5191de2cc58174a3eeb7cfc +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/bb39143b57041f96c48b71e92f7e09f2 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/be0b9e741941205338510e296868aab2 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/c9e69990b1552b575b271aaabbfc4eb5 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/c9eeea792acbd377e29de43d6b491291 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/cb67795d1180b371b5b749662b9adefb +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/cfdf466647e83eb93e0d6630e4b51a25 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/cff1de305ed821d80d98f4cafa27414d +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/d5891eb52eb6329a928461796e9ddfe5 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/d7491740e7757fe2ec57fd6d25461e5c +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/d80f54242a6e7f4399481b7357d439a4 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/df16db3bfcc56fafc73b853b7999be1f +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/dfa6edddd9357edcafaf06c20d21e561 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/e3d875d9f2fb7341ae0e31f64c90e6bf +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/e7bd439b274a2155050b47e5a64ea72d +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/ee3d10401f2a2d4a84f4fe56181fe1c1 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/f14a2366122e6017b965b32290b8abb0 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/f9a412f49281cc7e6512f0787f7ba05f +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/febbeb2ea0bcd485bf5b9bd6190b9f44 +0 -0
- data/test/dummy/tmp/cache/assets/production/sprockets/00afdaa74ea16690227f771ae0879e1c +0 -0
- data/test/dummy/tmp/cache/assets/production/sprockets/13fe41fee1fe35b49d145bcc06610705 +0 -0
- data/test/dummy/tmp/cache/assets/production/sprockets/2f5173deea6c795b8fdde723bb4b63af +0 -0
- data/test/dummy/tmp/cache/assets/production/sprockets/357970feca3ac29060c1e3861e2c0953 +0 -0
- data/test/dummy/tmp/cache/assets/production/sprockets/73d738bf9b779ad016ed62131d85cc16 +0 -0
- data/test/dummy/tmp/cache/assets/production/sprockets/cffd775d018f68ce5dba1ee0d951a994 +0 -0
- data/test/dummy/tmp/cache/assets/production/sprockets/d771ace226fc8215a3572e0aa35bb0d6 +0 -0
- data/test/dummy/tmp/cache/assets/production/sprockets/dfa6edddd9357edcafaf06c20d21e561 +0 -0
- data/test/dummy/tmp/cache/assets/production/sprockets/f7cbd26ba1d28d48de824f0e94586655 +0 -0
- data/test/dummy/tmp/cache/assets/production/sprockets/febbeb2ea0bcd485bf5b9bd6190b9f44 +0 -0
- data/test/integration/navigation_test.rb +10 -0
- data/test/redis_analytics_test.rb +7 -0
- data/test/test_helper.rb +15 -0
- data/{lib/redis_analytics/dashboard/public/javascripts/vendor/bootstrap → vendor/assets/javascripts/redis_analytics}/bootstrap.min.js +0 -0
- data/vendor/assets/javascripts/redis_analytics/engine.js +15 -0
- data/{lib/redis_analytics/dashboard/public/javascripts/vendor → vendor/assets/javascripts/redis_analytics}/jquery-jvectormap-1.2.2.min.js +0 -0
- data/{lib/redis_analytics/dashboard/public/javascripts/vendor → vendor/assets/javascripts/redis_analytics}/jquery-jvectormap-world-mill-en.js +0 -0
- data/{lib/redis_analytics/dashboard/public/javascripts/vendor → vendor/assets/javascripts/redis_analytics}/morris.min.js +0 -0
- data/{lib/redis_analytics/dashboard/public/javascripts/vendor → vendor/assets/javascripts/redis_analytics}/raphael-min.js +0 -0
- data/{lib/redis_analytics/dashboard/public/css → vendor/assets/stylesheets/redis_analytics}/bootstrap-responsive.min.css +0 -0
- data/{lib/redis_analytics/dashboard/public/css → vendor/assets/stylesheets/redis_analytics}/bootstrap.min.css +0 -0
- data/vendor/assets/stylesheets/redis_analytics/engine.css +12 -0
- data/{lib/redis_analytics/dashboard/public/css → vendor/assets/stylesheets/redis_analytics}/jquery-jvectormap-1.2.2.css +0 -0
- data/{lib/redis_analytics/dashboard/public/css → vendor/assets/stylesheets/redis_analytics}/morris.css +0 -0
- metadata +307 -122
- data/bin/redis_analytics_dashboard +0 -17
- data/lib/redis_analytics/analytics.rb +0 -45
- data/lib/redis_analytics/api.rb +0 -60
- data/lib/redis_analytics/dashboard.rb +0 -53
- data/lib/redis_analytics/dashboard/public/img/favicon.ico +0 -0
- data/lib/redis_analytics/dashboard/public/img/glyphicons-halflings-white.png +0 -0
- data/lib/redis_analytics/dashboard/public/img/glyphicons-halflings.png +0 -0
- data/lib/redis_analytics/dashboard/public/javascripts/vendor/jquery-1.9.1.min.js +0 -5
- data/lib/redis_analytics/dashboard/views/activity.erb +0 -7
- data/lib/redis_analytics/dashboard/views/dialogs/unique_visits.erb +0 -41
- data/lib/redis_analytics/dashboard/views/dialogs/visits.erb +0 -40
- data/lib/redis_analytics/dashboard/views/layout.erb +0 -16
- data/lib/redis_analytics/dashboard/views/widgets/visit_duration.erb +0 -3
- data/lib/redis_analytics/railtie.rb +0 -13
- data/wsd.png +0 -0
checksums.yaml
ADDED
@@ -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
|
data/Gemfile.lock
CHANGED
@@ -1,57 +1,176 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
redis_analytics (0.
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
json
|
9
|
-
|
10
|
-
redis
|
11
|
-
|
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
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
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.
|
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
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
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
|
-
|
54
|
-
|
55
|
-
|
168
|
+
coveralls
|
169
|
+
fakeredis
|
170
|
+
guard-rspec
|
171
|
+
mocha
|
172
|
+
rack-test
|
173
|
+
rake
|
56
174
|
redis_analytics!
|
57
|
-
rspec
|
175
|
+
rspec
|
176
|
+
simplecov
|
data/{LICENSE → MIT-LICENSE}
RENAMED
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
|
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
|
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
|
-
###
|
17
|
+
### Cool! So how do I install it?
|
18
18
|
|
19
|
-
|
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
|
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
|
39
|
-
|
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
|
-
|
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
|
-
|
67
|
-
|
45
|
+
Rails.application.routes.draw do
|
46
|
+
mount RedisAnalytics::Dashboard::Engine => "/dashboard"
|
68
47
|
end
|
69
48
|
```
|
70
49
|
|
71
|
-
|
50
|
+
and navigate to `/dashboard` in your app
|
72
51
|
|
73
|
-
|
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
|
-
|
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
|
-
|
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
|
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
|
-
|
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
|
110
|
-
* `y` can be any one of `hit` or `visit` and defines how will be tracked
|
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
|
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
|
110
|
+
module RedisAnalytics::Metrics
|
122
111
|
|
123
|
-
#
|
124
|
-
|
125
|
-
|
126
|
-
|
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
|
-
#
|
131
|
-
def
|
132
|
-
if @
|
133
|
-
return
|
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
|
-
#
|
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 @
|
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
|
-
|
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
@@ -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
|