trueandco_analytics 0.3.0 → 0.4.0

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 (49) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +3 -6
  3. data/app/assets/javascripts/analitics_in_point.js +28 -0
  4. data/app/assets/javascripts/analitics_script.js +165 -0
  5. data/app/assets/javascripts/trueandco_analytics.js +2 -169
  6. data/app/views/trueandco_analytics/{receiver → site/receiver}/pull_user_statistic.erb +0 -0
  7. data/config/routes.rb +1 -1
  8. data/db/migrate/20170802133950_create_metric_users.rb +1 -1
  9. data/exe/trueandco_analytics +1 -10
  10. data/lib/generators/trueandco_analytics/templates/trueandco_analytics.rb +3 -3
  11. data/lib/trueandco_analytics.rb +44 -26
  12. data/lib/trueandco_analytics/{locales → common/locales}/en.yml +0 -0
  13. data/{app/models/trueandco_analytics → lib/trueandco_analytics/common/models}/application_record.rb +0 -0
  14. data/{app/models/trueandco_analytics → lib/trueandco_analytics/common/models}/metric_user.rb +0 -0
  15. data/{app/models/trueandco_analytics → lib/trueandco_analytics/common/models}/metric_user_session.rb +0 -0
  16. data/lib/trueandco_analytics/common/models/metric_user_visit.rb +8 -0
  17. data/lib/trueandco_analytics/{modules → common/modules}/info.rb +0 -0
  18. data/lib/trueandco_analytics/{reports → common/reports}/application_report.rb +0 -0
  19. data/lib/trueandco_analytics/{reports → common/reports}/details_report.rb +0 -0
  20. data/lib/trueandco_analytics/{reports → common/reports}/page_buy_in_date_range_report.rb +0 -0
  21. data/lib/trueandco_analytics/{services → common/services}/logger.rb +0 -0
  22. data/lib/trueandco_analytics/{services → common/services}/redis_connect.rb +0 -0
  23. data/lib/trueandco_analytics/{services → common/services}/reports.rb +1 -6
  24. data/lib/trueandco_analytics/{services → common/services}/workers.rb +0 -0
  25. data/lib/trueandco_analytics/config/params.rb +7 -7
  26. data/lib/trueandco_analytics/{cli → console/cli}/common.rb +0 -0
  27. data/lib/trueandco_analytics/{cli → console/cli}/report.rb +0 -0
  28. data/lib/trueandco_analytics/console/commands/report_c/generate.rb +29 -0
  29. data/lib/{extension_string.rb → trueandco_analytics/console/extension_string.rb} +0 -0
  30. data/lib/trueandco_analytics/engine.rb +2 -6
  31. data/{app/commands/trueandco_analytics → lib/trueandco_analytics/site/commands}/arr_jsons_to_arr_hash.rb +1 -1
  32. data/lib/trueandco_analytics/site/commands/metric_c/add_list.rb +63 -0
  33. data/lib/trueandco_analytics/site/commands/session_c/create.rb +63 -0
  34. data/lib/trueandco_analytics/site/commands/session_c/put_data.rb +49 -0
  35. data/lib/trueandco_analytics/site/commands/user_c/create_or_update_user_if_exist.rb +39 -0
  36. data/{app/controllers/trueandco_analytics → lib/trueandco_analytics/site/controllers}/application_controller.rb +2 -2
  37. data/{app/controllers/trueandco_analytics → lib/trueandco_analytics/site/controllers}/reciver_controller.rb +5 -7
  38. data/lib/trueandco_analytics/site/helpers/trueandco_analytics_helper.rb +18 -0
  39. data/lib/trueandco_analytics/site/workers/user_session_metric_worker.rb +20 -0
  40. data/lib/trueandco_analytics/version.rb +1 -1
  41. metadata +31 -29
  42. data/app/commands/trueandco_analytics/metric_c/add_list.rb +0 -65
  43. data/app/commands/trueandco_analytics/report_c/generate.rb +0 -31
  44. data/app/commands/trueandco_analytics/session_c/create.rb +0 -65
  45. data/app/commands/trueandco_analytics/session_c/put_data.rb +0 -46
  46. data/app/commands/trueandco_analytics/user_c/create_or_update_user_if_exist.rb +0 -41
  47. data/app/models/trueandco_analytics/metric_user_visit.rb +0 -8
  48. data/app/workers/trueandco_analytics/user_session_metric_worker.rb +0 -21
  49. data/lib/trueandco_analytics/helpers/trueandco_analytics_helper.rb +0 -35
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2eddcffa3c6a13247a6f2ea46e5cde544fd73fbc
4
- data.tar.gz: ef377598828ff1be656935568fab8d2c1d2a0311
3
+ metadata.gz: 1241ce35d2d3abe849c6b93ab9ae68c6abfbfe10
4
+ data.tar.gz: e407cff3d27269307768b9014d717e94e9d7977d
5
5
  SHA512:
6
- metadata.gz: 1654ffbb2a22a87e2e5930cd0978284971e9ebbaf8b6bf69f45c151fdf0a12bd2a8d94f46fa87adefad7c4587deefabb249482d2b920559d0ae99bfd94888c97
7
- data.tar.gz: 3e0a6bb73989e4f76d6e9bf02ebbda08e1372b537d71a72df9ac6bced523e8d81ba3313fb54c1b7a38003dc5ca7c3784b8881beaf142c02ebfbd82503bfabb5c
6
+ metadata.gz: 4b64cab1b28523f03e4fa8cdf9bdbbc9d8251c14a49b901611ca6b60b99220e8c424c8630697447eb1ecd88da3eed97aaaafa87968b8af7f6b54afeb63575652
7
+ data.tar.gz: 402681d71bfbef8c7fb13050a2145a68fb2e6f28e519d65bfde32f12f5fd6b54a5cc06182c7eec339c00e1e726099219d929d733b56fb465a0262bd424ac19ae
data/README.md CHANGED
@@ -68,10 +68,7 @@ Many systems analysts do not provide data about the specific user. This gem allo
68
68
  ```ruby
69
69
  bundle exec sidekiq --queue=user_metric
70
70
  ```
71
- Need set in app
72
- ```ruby
73
- config.eager_load = true
74
- ```
71
+
75
72
  The application must have a route `root`
76
73
 
77
74
  For use of the console mode. it is necessary to specify the current database.
@@ -124,8 +121,8 @@ Many systems analysts do not provide data about the specific user. This gem allo
124
121
  * Specify the method available in the ApplicationController to the receiving user object. Containing id, email.
125
122
  `config.user_method = 'current_user'`
126
123
 
127
- * Specify css the selector class for the button purchase
128
- `config.buy_selector_class = 'buy'`
124
+ * Specify css the selector for the button purchase
125
+ `config.buy_selector = '.buy'`
129
126
 
130
127
  * Specify the database where redis will store the statistics for the session user
131
128
  ```ruby
@@ -0,0 +1,28 @@
1
+ function analitics_in_point(statistics_url, app_token, selector, time_survey) {
2
+ function push_data_info() {
3
+ userLog.init({
4
+ clickCount: true,
5
+ clickDetails: true,
6
+ actionItem: {
7
+ processOnAction: !isEmpty(selector),
8
+ selector: selector,
9
+ event: 'click'
10
+ },
11
+ processTime: time_survey,
12
+ processData: function (results) {
13
+ var xhr = new XMLHttpRequest();
14
+ xhr.open('POST', statistics_url, true);
15
+ xhr.setRequestHeader('X-CSRF-Token', app_token);
16
+ xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
17
+ var data = "user_metric=" + JSON.stringify(results);
18
+ xhr.send(data);
19
+ },
20
+ });
21
+ }
22
+
23
+ function isEmpty(str) {
24
+ return (!str || 0 === str.length);
25
+ }
26
+
27
+ push_data_info();
28
+ }
@@ -0,0 +1,165 @@
1
+ var userLog = (function(){
2
+ //
3
+ // Private variables
4
+ //
5
+ var defaults = {
6
+
7
+ // Available functionality
8
+ clickCount: true,
9
+ clickDetails: true,
10
+
11
+ // Action Item
12
+ actionItem: {
13
+ processOnAction: false,
14
+ selector: '',
15
+ event: ''
16
+ },
17
+ processTime: 15,
18
+ processData: function(results){
19
+ },
20
+ },
21
+ // End results, what is shown to the site
22
+ results = {
23
+ userReferrer: '',
24
+ time: {
25
+ totalTime: 0,
26
+ timeOnPage: 0,
27
+ timestamp: 0
28
+ },
29
+ clicks: {
30
+ clickCount:0,
31
+ clickDetails: []
32
+ },
33
+
34
+ },
35
+ support = !!document.querySelector && !!document.addEventListener,
36
+ settings;
37
+
38
+ // Helper Functions
39
+ var helperActions = {
40
+
41
+ userReferrer: function (){
42
+ result = document.referrer;
43
+ results.userReferrer = 10;
44
+ },
45
+
46
+ /**
47
+ * Detect the X,Y coordinates of the mouse movement
48
+ * @private
49
+ */
50
+ mouseMovement: function(){
51
+ document.addEventListener('mousemove', function(){
52
+ results.mouseMovements.push({
53
+ timestamp: Date.now(),
54
+ x: event.pageX,
55
+ y: event.pageY
56
+ });
57
+ });
58
+ },
59
+ }
60
+
61
+ /**
62
+ * Merge defaults with options
63
+ * @private
64
+ * @param {Object} default settings
65
+ * @param {Object} user options
66
+ * @returns {Object} merged object
67
+ */
68
+ function getSettings(defaults, options){
69
+ var option;
70
+ for(option in options){
71
+ if(options.hasOwnProperty(option)){
72
+ defaults[option] = options[option];
73
+ }
74
+ }
75
+ return defaults;
76
+ }
77
+
78
+ /**
79
+ * Initialize the event listeners
80
+ * @public
81
+ * @param {Object} user options
82
+ */
83
+ function init(options){
84
+ if(!support) return;
85
+
86
+ // Extend default options
87
+ if (options && typeof options === "object") {
88
+ settings = getSettings(defaults, options);
89
+ }
90
+
91
+ document.addEventListener('DOMContentLoaded', function() {
92
+
93
+ // Countdown Timer
94
+ window.setInterval(function(){
95
+ if(document['visibilityState'] === 'visible'){
96
+ results.time.timeOnPage++;
97
+ }
98
+ results.time.totalTime++;
99
+ // Check if we need to process results
100
+ if(settings.processTime > 0 && results.time.totalTime % settings.processTime === 0){
101
+ processResults();
102
+ }
103
+ },1000);
104
+ results.time.timestamp = (function() {
105
+ return Math.round((+new Date())/1000);
106
+ })();
107
+
108
+ // Click registration, increment click counter and save click time+position
109
+ if(settings.clickCount || settings.clickDetails){
110
+ document.addEventListener('mouseup', function(){
111
+ if(settings.clickCount){
112
+ results.clicks.clickCount++;
113
+ }
114
+ if(settings.clickDetails){
115
+ results.clicks.clickDetails.push({
116
+ timestamp: Date.now(),
117
+ node: event.target.outerHTML,
118
+ x: event.pageX,
119
+ y: event.pageY
120
+ });
121
+ }
122
+ });
123
+ }
124
+
125
+ // Mouse movements
126
+ if(settings.mouseMovement){
127
+ helperActions.mouseMovement();
128
+ }
129
+
130
+ // referral
131
+ if(settings.userReferrer){
132
+ helperActions.userReferrer();
133
+ }
134
+
135
+ // Event Listener to porcess
136
+ if(settings.actionItem.processOnAction){
137
+ var node = document.querySelector(settings.actionItem.selector);
138
+ if(!!!node) throw new Error('Selector was not found.');
139
+ node.addEventListener(settings.actionItem.event, function(){
140
+ return processResults();
141
+ })
142
+ }
143
+ });
144
+ }
145
+
146
+ /**
147
+ * Calls provided function with results as parameter
148
+ * @public
149
+ */
150
+ function processResults(){
151
+ if(settings.hasOwnProperty('processData')){
152
+ var result = settings.processData.call(undefined, results);
153
+ results.clicks.clickDetails = []
154
+ return result;
155
+ }
156
+ return false;
157
+ }
158
+
159
+
160
+ // Module pattern, only expose necessary methods
161
+ return {
162
+ init: init,
163
+ processResults: processResults,
164
+ };
165
+ })();
@@ -1,170 +1,3 @@
1
- var userLog = (function(){
2
- //
3
- // Private variables
4
- //
5
- var defaults = {
1
+ //= require analitics_script
2
+ //= require analitics_in_point
6
3
 
7
- // Available functionality
8
- clickCount: true,
9
- clickDetails: true,
10
-
11
- // Action Item
12
- actionItem: {
13
- processOnAction: false,
14
- selector: '',
15
- event: ''
16
- },
17
- processTime: 15,
18
- processData: function(results, statistics_url){
19
- console.log(results);
20
- },
21
- },
22
- // End results, what is shown to the user
23
- results = {
24
- userReferrer: '',
25
- time: {
26
- totalTime: 0,
27
- timeOnPage: 0,
28
- timestamp: 0
29
- },
30
- clicks: {
31
- clickCount:0,
32
- clickDetails: []
33
- },
34
-
35
- },
36
- support = !!document.querySelector && !!document.addEventListener,
37
- data_receiver = '',
38
- app_token = '',
39
- settings;
40
-
41
- // Helper Functions
42
- var helperActions = {
43
-
44
- userReferrer: function (){
45
- result = document.referrer;
46
- results.userReferrer = 10;
47
- },
48
-
49
- /**
50
- * Detect the X,Y coordinates of the mouse movement
51
- * @private
52
- */
53
- mouseMovement: function(){
54
- document.addEventListener('mousemove', function(){
55
- results.mouseMovements.push({
56
- timestamp: Date.now(),
57
- x: event.pageX,
58
- y: event.pageY
59
- });
60
- });
61
- },
62
- }
63
-
64
- /**
65
- * Merge defaults with options
66
- * @private
67
- * @param {Object} default settings
68
- * @param {Object} user options
69
- * @returns {Object} merged object
70
- */
71
- function getSettings(defaults, options){
72
- var option;
73
- for(option in options){
74
- if(options.hasOwnProperty(option)){
75
- defaults[option] = options[option];
76
- }
77
- }
78
- return defaults;
79
- }
80
-
81
- /**
82
- * Initialize the event listeners
83
- * @public
84
- * @param {Object} user options
85
- */
86
- function init(statistics_url, token, options){
87
- if(!support) return;
88
- data_receiver = statistics_url;
89
- app_token = token;
90
-
91
- // Extend default options
92
- if (options && typeof options === "object") {
93
- settings = getSettings(defaults, options);
94
- }
95
-
96
- document.addEventListener('DOMContentLoaded', function() {
97
-
98
- // Countdown Timer
99
- window.setInterval(function(){
100
- if(document['visibilityState'] === 'visible'){
101
- results.time.timeOnPage++;
102
- }
103
- results.time.totalTime++;
104
- // Check if we need to process results
105
- if(settings.processTime > 0 && results.time.totalTime % settings.processTime === 0){
106
- processResults();
107
- }
108
- },1000);
109
- results.time.timestamp = (function() {
110
- return Math.round((+new Date())/1000);
111
- })();
112
-
113
- // Click registration, increment click counter and save click time+position
114
- if(settings.clickCount || settings.clickDetails){
115
- document.addEventListener('mouseup', function(){
116
- if(settings.clickCount){
117
- results.clicks.clickCount++;
118
- }
119
- if(settings.clickDetails){
120
- results.clicks.clickDetails.push({
121
- timestamp: Date.now(),
122
- node: event.target.outerHTML,
123
- x: event.pageX,
124
- y: event.pageY
125
- });
126
- }
127
- });
128
- }
129
-
130
- // Mouse movements
131
- if(settings.mouseMovement){
132
- helperActions.mouseMovement();
133
- }
134
-
135
- // referral
136
- if(settings.userReferrer){
137
- helperActions.userReferrer();
138
- }
139
-
140
- // Event Listener to porcess
141
- if(settings.actionItem.processOnAction){
142
- var node = document.querySelector(settings.actionItem.selector);
143
- if(!!!node) throw new Error('Selector was not found.');
144
- node.addEventListener(settings.actionItem.event, function(){
145
- return processResults();
146
- })
147
- }
148
- });
149
- }
150
-
151
- /**
152
- * Calls provided function with results as parameter
153
- * @public
154
- */
155
- function processResults(){
156
- if(settings.hasOwnProperty('processData')){
157
- var result = settings.processData.call(undefined, results, data_receiver, app_token);
158
- results.clicks.clickDetails = []
159
- return result;
160
- }
161
- return false;
162
- }
163
-
164
-
165
- // Module pattern, only expose necessary methods
166
- return {
167
- init: init,
168
- processResults: processResults,
169
- };
170
- })();
data/config/routes.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  TrueandcoAnalytics::Engine.routes.draw do
2
- post 'receiver/pull_user_statistic'
2
+ post 'receiver/pull_user_statistic', to: 'site/receiver#pull_user_statistic'
3
3
  end
@@ -7,7 +7,7 @@ class CreateMetricUsers < ActiveRecord::Migration.try(:send, '[]', '5.1')
7
7
  t.timestamp :last_active_datetime, null: false
8
8
  end
9
9
 
10
- add_column :metric_users, :hash_id, 'integer unsigned', null: false
10
+ add_column :metric_users, :hash_id, 'integer unsigned', null: false, unique: true
11
11
 
12
12
  add_index(:metric_users, :user_id)
13
13
  add_index(:metric_users, :hash_id)
@@ -6,20 +6,11 @@ require 'bundler/setup'
6
6
  require 'i18n'
7
7
  require 'optparse'
8
8
  require 'fileutils'
9
- require 'trueandco_analytics'
10
- require 'trueandco_analytics/cli/common'
11
- require 'trueandco_analytics/cli/report'
12
- require "#{ENGINE_ROOT}/app/commands/trueandco_analytics/report_c/generate"
13
9
  require 'active_record'
14
10
  require 'mysql2'
11
+ require 'trueandco_analytics'
15
12
  require "#{CURRENT_PATH}config/initializers/trueandco_analytics"
16
13
 
17
- models_dir = "#{ENGINE_ROOT}/app/models/trueandco_analytics/"
18
- require "#{models_dir}application_record.rb"
19
- Dir["#{models_dir}/*.rb"].each do |f|
20
- require f
21
- end
22
-
23
14
  connect_db = TrueandcoAnalytics::Config::Params.connect_db
24
15
  1.times do
25
16
  break if connect_db.nil?
@@ -2,13 +2,13 @@ TrueandcoAnalytics.setup do |config|
2
2
  # Time survey Analytics seconds
3
3
  config.time_survey = 15
4
4
 
5
- # Specify the method available in the ApplicationController to the receiving user object. Containing id, email.
5
+ # Specify the method available in the ApplicationController to the receiving site object. Containing id, email.
6
6
  #config.user_method = 'current_user'
7
7
 
8
8
  # Specify css the selector class for the button purchase
9
- config.buy_selector_class = 'buy'
9
+ config.buy_selector = '.buy'
10
10
 
11
- # Specify the database where redis will store the statistics for the session user
11
+ # Specify the database where redis will store the statistics for the session site
12
12
  config.connect_redis = {
13
13
  #url: "redis://your_host:6379",
14
14
  #redis_password: '',