logstash-input-google-analytics-daily 0.2.1 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 65e1356004d4e415992c64aa350b9e8f9a32b9cc2caa16ffe8a5cc008e443ce8
4
- data.tar.gz: 7f4b32c19012b211a713fe35f0df59a0fad1661dcc90b1c68d8b0bd229afdcbc
3
+ metadata.gz: 4be2dcf54047afbe18aee1ceac9f2992b8044a1b88cb5d8be5a5fa40ea978ed5
4
+ data.tar.gz: d5355c716a8c5ee2bfa3b8dd6f5694c8a8151f58f8f6d16fab184b5c09cb3ba6
5
5
  SHA512:
6
- metadata.gz: 5d79a8193223ef48ccd7c2666a7b23e8bb3237dc71b74e9f4fe5fbaab56a07f30ad3a7292ef82a4bc5cdc51faf20aa8525bb7d3a6ea84a39a4af1adcc9452cc9
7
- data.tar.gz: e4bc122fceb88d8c852cc15043f6ca6bb709099a2b4dcc448749215348f668e37f93ace08d4fd42dee092b55dabb9f1f3794f77fe94fd68962e2ffd26239688b
6
+ metadata.gz: 2b6c4ee7ee1f40e13980d2b0f7b551dbcddc46afd4ed3f234077dedcfbc32bb8819a65db1afdf272811bee25b9869612f690b69616df5e5e0116a33497c2971c
7
+ data.tar.gz: d10be71488dbb1a07c49da9f0b7cf33530bc27b8b228339201e53e29dd4b8afa21486afc313e4633aa8c8f24022ed889886f4fac06045b1de7038d0fff4124f6
data/README.md CHANGED
@@ -6,7 +6,7 @@ Forked from https://github.com/russorat/logstash-input-googleanalytics.git.
6
6
 
7
7
  ## Documentation
8
8
 
9
- Documentation can be seen in [the docs folder](https://github.com/DeimosCloud/logstash-input-google-analytics-daily/blob/master/docs/index.asciidoc).
9
+ Documentation can be seen in [the docs folder](https://github.com/DeimosCloud/logstash-input-google-analytics-daily/blob/master/docs/index.asciidoc) (for now). Hopefully, this moves to logstash-plugins repo soon, so it can be rendered properly on elastic.co,
10
10
 
11
11
  ## Developing
12
12
 
@@ -4,6 +4,7 @@ require "logstash/namespace"
4
4
  require "stud/interval"
5
5
  require 'google/apis/analytics_v3'
6
6
  require 'googleauth'
7
+ require 'json'
7
8
 
8
9
  # Pull daily reports from Google Analytics using the v3 Core Reporting API.
9
10
  # This plugin will generate one Logstash event per date, with each event containing all the data for that date
@@ -26,9 +27,11 @@ class LogStash::Inputs::GoogleAnalyticsDaily < LogStash::Inputs::Base
26
27
  # https://developers.google.com/analytics/devguides/reporting/core/v3/reference#ids
27
28
  config :view_id, :validate => :string, :required => true
28
29
 
29
- # This plugin will only fetch reports for the specified dates
30
- # In the format YYYY-MM-DD, or relative by using today, yesterday, or the NdaysAgo pattern
31
- config :dates, :validate => :string, :list => true, :default => ['yesterday']
30
+ # This plugin will fetch daily reports for dates in the specified range
31
+ # In the format YYYY-MM-DD
32
+ config :start_date, :validate => :string, :required => true
33
+
34
+ config :end_date, :validate => :string, :required => true
32
35
 
33
36
  # The aggregated statistics for user activity to your site, such as clicks or pageviews.
34
37
  # Maximum of 10 metrics for any query
@@ -95,7 +98,10 @@ class LogStash::Inputs::GoogleAnalyticsDaily < LogStash::Inputs::Base
95
98
 
96
99
  analytics = get_service
97
100
 
101
+ @dates = (Date.parse(@start_date)..Date.parse(@end_date))
102
+
98
103
  @dates.each do |date|
104
+ date = date.to_s
99
105
  options = get_request_parameters(date)
100
106
 
101
107
  results = analytics.get_ga_data(
@@ -155,42 +161,39 @@ class LogStash::Inputs::GoogleAnalyticsDaily < LogStash::Inputs::Base
155
161
  query = results.query.to_h
156
162
  profile_info = results.profile_info.to_h
157
163
 
158
- # One event per metric
164
+ # Transform into proper format for one event per metric
159
165
  @metrics.each do |metric|
160
166
  rows_for_this_metric = rows.clone.map do |row|
161
- # Remove any rows that don't include this metric
162
- new_row = row.clone
167
+ new_row = {}
163
168
  new_row[:metric] = row[:metrics].find { |m| m[:name] == metric }
164
- new_row.delete(:metrics)
169
+ new_row[:dimensions] = row[:dimensions]
165
170
  new_row
166
171
  end
167
172
 
168
- event = LogStash::Event.new
169
- decorate(event)
170
- # Populate Logstash event fields
171
- event.set('ga.contains_sampled_data', results.contains_sampled_data?)
172
- event.set('ga.query', query) if @store_query
173
- # We need to convert the date fields here to string because sometimes it's a relative date, so will cause mapping issues
174
- event.set('ga.query.start_date', query["start_date"].to_s) if @store_query
175
- event.set('ga.query.end_date', query["end_date"].to_s) if @store_query
176
-
177
- event.set('ga.profile_info', profile_info) if @store_profile
178
-
179
- if date == 'today'
180
- event.set('ga.date', Time.now.strftime("%F"))
181
- elsif date == 'yesterday'
182
- event.set('ga.date', Time.at(Time.now.to_i - 86400).strftime("%F"))
183
- elsif date.include?('daysAgo')
184
- days_ago = date.sub('daysAgo', '').to_i
185
- event.set('ga.date', Time.at(Time.now.to_i - (days_ago * 86400)).strftime("%F"))
186
- else
173
+ rows_for_this_metric.each do |row|
174
+ event = LogStash::Event.new
175
+ decorate(event)
176
+ # Populate Logstash event fields
177
+ event.set('ga.contains_sampled_data', results.contains_sampled_data?)
178
+ event.set('ga.query', query.to_json) if @store_query
179
+ event.set('ga.profile_info', profile_info) if @store_profile
187
180
  event.set('ga.date', date)
188
- end
189
181
 
190
- event.set("ga.rows", rows_for_this_metric)
191
- # Use date and metrics as ID to prevent duplicate entries in Elasticsearch
192
- event.set('[@metadata][id]', event.get('ga.date') + metric)
193
- queue << event
182
+ event.set("ga.metric.name", metric)
183
+ event.set("ga.metric.value", row[:metric][:value])
184
+
185
+
186
+ # Remap dimensions into key: value
187
+ # Might lead to "mapping explosion", but otherwise aggregations are tough
188
+ joined_dimension_name = ''
189
+ row[:dimensions].each do |d|
190
+ dimension_name = d[:name].sub("ga:", '')
191
+ joined_dimension_name += dimension_name
192
+ event.set("ga.dimensions.#{dimension_name}", d[:value])
193
+ end
194
+
195
+ queue << event
196
+ end
194
197
  end
195
198
  end
196
199
  end
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'logstash-input-google-analytics-daily'
3
- s.version = '0.2.1'
3
+ s.version = '0.3.0'
4
4
  s.licenses = ['Apache License (2.0)']
5
5
  s.summary = "Logstash plugin to pull daily reports from Google Analytics."
6
6
  s.description = "Logstash plugin to pull daily reports from the Google Analytics v3 Core Reporting API. Install into Logstash using $LS_HOME/bin/logstash-plugin install logstash-input-google-analytics-daily."
@@ -22,7 +22,7 @@ Gem::Specification.new do |s|
22
22
  s.add_runtime_dependency 'stud', '>= 0.0.22'
23
23
  s.add_runtime_dependency 'google-api-client', "~> 0.37"
24
24
  s.add_runtime_dependency 'googleauth', ">= 0.10.0"
25
+ s.add_runtime_dependency 'json'
25
26
  s.add_development_dependency 'vcr'
26
27
  s.add_development_dependency 'webmock'
27
- s.add_development_dependency 'json'
28
28
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: logstash-input-google-analytics-daily
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Shalvah
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-04-09 00:00:00.000000000 Z
11
+ date: 2020-04-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  requirement: !ruby/object:Gem::Requirement
@@ -78,8 +78,8 @@ dependencies:
78
78
  - - ">="
79
79
  - !ruby/object:Gem::Version
80
80
  version: '0'
81
- name: vcr
82
- type: :development
81
+ name: json
82
+ type: :runtime
83
83
  prerelease: false
84
84
  version_requirements: !ruby/object:Gem::Requirement
85
85
  requirements:
@@ -92,7 +92,7 @@ dependencies:
92
92
  - - ">="
93
93
  - !ruby/object:Gem::Version
94
94
  version: '0'
95
- name: webmock
95
+ name: vcr
96
96
  type: :development
97
97
  prerelease: false
98
98
  version_requirements: !ruby/object:Gem::Requirement
@@ -106,7 +106,7 @@ dependencies:
106
106
  - - ">="
107
107
  - !ruby/object:Gem::Version
108
108
  version: '0'
109
- name: json
109
+ name: webmock
110
110
  type: :development
111
111
  prerelease: false
112
112
  version_requirements: !ruby/object:Gem::Requirement