logstash-input-google-analytics-daily 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 1acf86c6fbba654cc2b169ba1a37b37a5e3c7287f95dd31b0b0cdea4eb5b278c
4
+ data.tar.gz: 967c8c040e7e02a1e7293817e24837a71fdad9530ca629a168f6a0810cc1250e
5
+ SHA512:
6
+ metadata.gz: 8ef569d8ed0f2cec8365c6ff7acbc98aaeba8662159d611962db63eb3ef5b6661991cb8c09923106635385384e76f49f30995f9c166a664e4770f56f413b4650
7
+ data.tar.gz: d3b9e1e1bcad5ad20b7bf57f7152c395a2dca7eafea0fc12ad2bf667262383f4d8a56d22f9a613948a5b9980f59be1fdbf10a4727b734f72c2ed2bb220dd5b89
@@ -0,0 +1,2 @@
1
+ ## 1.0.0
2
+ - Initial Release
@@ -0,0 +1,2 @@
1
+ # logstash-input-google-analytics-daily
2
+ Use this input to query data from Google Analytics into Logstash
data/Gemfile ADDED
@@ -0,0 +1,8 @@
1
+ source 'https://rubygems.org'
2
+ gemspec
3
+
4
+ # Needed this for testing, as Logstash dependency management is currently broken
5
+ #
6
+ # logstash_path = ENV["LOGSTASH_PATH"] || "C:/logstash-7.6.1"
7
+ # gem 'logstash-core', :path => "#{logstash_path}/logstash-core"
8
+ # gem 'logstash-core-plugin-api', :path => "#{logstash_path}/logstash-core-plugin-api"
data/LICENSE ADDED
@@ -0,0 +1,13 @@
1
+ Copyright (c) 2012–2015 Elasticsearch <http://www.elastic.co>
2
+
3
+ Licensed under the Apache License, Version 2.0 (the "License");
4
+ you may not use this file except in compliance with the License.
5
+ You may obtain a copy of the License at
6
+
7
+ http://www.apache.org/licenses/LICENSE-2.0
8
+
9
+ Unless required by applicable law or agreed to in writing, software
10
+ distributed under the License is distributed on an "AS IS" BASIS,
11
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ See the License for the specific language governing permissions and
13
+ limitations under the License.
@@ -0,0 +1,5 @@
1
+ Elasticsearch
2
+ Copyright 2012-2015 Elasticsearch
3
+
4
+ This product includes software developed by The Apache Software
5
+ Foundation (http://www.apache.org/).
@@ -0,0 +1,89 @@
1
+ # Logstash Plugin
2
+
3
+ Logstash plugin to pull daily reports from the Google Analytics v3 Core Reporting API.
4
+
5
+ Forked from https://github.com/russorat/logstash-input-googleanalytics.git.
6
+
7
+ ## Documentation
8
+
9
+ Documentation automatically generated by Logstash at
10
+
11
+ ## Developing
12
+
13
+ ### 1. Plugin Development and Testing
14
+
15
+ #### Code
16
+ - To get started, you'll need JRuby with the Bundler gem installed (`jruby -S gem install bundler`).
17
+
18
+ - Install dependencies
19
+
20
+ ```sh
21
+ jruby -S bundle install
22
+ ```
23
+
24
+ #### Test
25
+
26
+ - Run tests
27
+
28
+ ```sh
29
+ jruby -S bundle exec rspec
30
+ ```
31
+
32
+ ### Running your plugin locally in Logstash
33
+
34
+ #### Linking the gem
35
+
36
+ - Edit Logstash's `Gemfile` and add the local plugin path, for example:
37
+
38
+ ```ruby
39
+ gem "logstash-input-google-analytics-daily", :path => "/your/local/logstash-input-googleanalytics"
40
+ ```
41
+
42
+ - Install the plugin
43
+ ```sh
44
+ bin/plugin install --no-verify
45
+ ```
46
+ - Run Logstash with your plugin
47
+ Example logstash.conf:
48
+
49
+ ```
50
+ input {
51
+ google_analytics_daily {
52
+ view_id => "ga:62549480"
53
+ metrics => ["ga:users","ga:sessions"]
54
+ key_file_path => "C:/logstash-7.6.1/keyfile.json"
55
+ dates => ['yesterday', '2020-04-05']
56
+ dimensions => ['ga:browser', 'ga:city']
57
+ }
58
+ }
59
+
60
+ output {
61
+ stdout {
62
+ codec => rubydebug
63
+ }
64
+ }
65
+ ```
66
+
67
+ ```sh
68
+ bin/logstash -f logstash.conf
69
+ ```
70
+
71
+ NOTE: Any modifications to the plugin code will not show up until you restart Logstash.
72
+
73
+ #### 2.2 Run in an installed Logstash
74
+
75
+ Logstash by editing its `Gemfile` and pointing the `:path` to your local plugin development directory or you can build the gem and install it using:
76
+
77
+ - Build your plugin gem
78
+ ```sh
79
+ jruby -S gem build logstash-input-google-analytics-daily.gemspec
80
+ ```
81
+ - Install the plugin from the Logstash home
82
+ ```sh
83
+ bin/plugin install install Projects/logstash-input-google-analytics-daily/logstash-input-google-analytics-daily-1.0.0.gem
84
+ ```
85
+ - Start Logstash with your pipeline config:
86
+
87
+ ```sh
88
+ bin/logstash -f logstash.conf
89
+ ```
@@ -0,0 +1,243 @@
1
+ # encoding: utf-8
2
+ require "logstash/inputs/base"
3
+ require "logstash/namespace"
4
+ require "stud/interval"
5
+ require 'google/apis/analytics_v3'
6
+ require 'googleauth'
7
+
8
+ # Pull daily reports from Google Analytics using the v3 Core Reporting API.
9
+ # This plugin will generate one Logstash event per date, with each event containing all the data for that date
10
+ # The plugin will try to maintain a single event per date and list of metrics
11
+
12
+ class LogStash::Inputs::GoogleAnalyticsDaily < LogStash::Inputs::Base
13
+ config_name "google_analytics_daily"
14
+
15
+ # If undefined, Logstash will complain, even if codec is unused.
16
+ default :codec, "plain"
17
+
18
+ # Most of these inputs are described in the Google Analytics API docs.
19
+ # https://developers.google.com/analytics/devguides/reporting/core/v3/reference#q_details
20
+ # Any changes from the format described above have been noted.
21
+
22
+ # Type for logstash filtering
23
+ config :type, :validate => :string, :default => 'google_analytics_daily'
24
+
25
+ # View (profile) id, in the format 'ga:XXXX'
26
+ # https://developers.google.com/analytics/devguides/reporting/core/v3/reference#ids
27
+ config :view_id, :validate => :string, :required => true
28
+
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']
32
+
33
+ # The aggregated statistics for user activity to your site, such as clicks or pageviews.
34
+ # Maximum of 10 metrics for any query
35
+ # https://developers.google.com/analytics/devguides/reporting/core/v3/reference#metrics
36
+ # For a full list of metrics, see the documentation
37
+ # https://developers.google.com/analytics/devguides/reporting/core/dimsmets
38
+ config :metrics, :validate => :string, :list => true, :required => true
39
+
40
+ # Breaks down metrics by common criteria; for example, by ga:browser or ga:city
41
+ # Maximum of 7 dimensions in any query
42
+ # https://developers.google.com/analytics/devguides/reporting/core/v3/reference#dimensions
43
+ # For a full list of dimensions, see the documentation
44
+ # https://developers.google.com/analytics/devguides/reporting/core/dimsmets
45
+ config :dimensions, :validate => :string, :list => true, :default => []
46
+
47
+ # Used to restrict the data returned from your request
48
+ # https://developers.google.com/analytics/devguides/reporting/core/v3/reference#filters
49
+ config :filters, :validate => :string, :default => nil
50
+
51
+ # A list of metrics and dimensions indicating the sorting order and sorting direction for the returned data
52
+ # https://developers.google.com/analytics/devguides/reporting/core/v3/reference#sort
53
+ config :sort, :validate => :string, :default => nil
54
+
55
+ # https://developers.google.com/analytics/devguides/reporting/core/v3/reference#segment
56
+ config :segment, :validate => :string, :default => nil
57
+
58
+ # Valid values are DEFAULT, FASTER, HIGHER_PRECISION
59
+ # https://developers.google.com/analytics/devguides/reporting/core/v3/reference#samplingLevel
60
+ config :sampling_level, :validate => :string, :default => nil
61
+
62
+ # https://developers.google.com/analytics/devguides/reporting/core/v3/reference#include-empty-rows
63
+ config :include_empty_rows, :validate => :boolean, :default => true
64
+
65
+ # These values need to be pulled from your Google Developers Console
66
+ # For more information, see the docs. Be sure to enable Google Analytics API
67
+ # access for your application.
68
+ # https://developers.google.com/identity/protocols/OAuth2ServiceAccount
69
+
70
+ # This should be the path to the public/private key as a standard P12 file
71
+ config :key_file_path, :validate => :string, :required => true
72
+
73
+ # This will store the query in the resulting logstash event
74
+ # https://developers.google.com/analytics/devguides/reporting/core/v3/reference#data_response
75
+ config :store_query, :validate => :boolean, :default => true
76
+
77
+ # This will store the profile information in the resulting logstash event
78
+ # https://developers.google.com/analytics/devguides/reporting/core/v3/reference#data_response
79
+ config :store_profile, :validate => :boolean, :default => true
80
+
81
+ # Interval to run the command. Value is in seconds. If no interval is given,
82
+ # this plugin only fetches data once.
83
+ config :interval, :validate => :number, :required => false, :default => 60 * 60 * 24 # Daily
84
+
85
+
86
+ public
87
+
88
+ def register
89
+ end
90
+
91
+ def run(queue)
92
+ # we abort the loop if stop? becomes true
93
+ while !stop?
94
+ start_time = Time.now
95
+
96
+ analytics = get_service
97
+
98
+ @dates.each do |date|
99
+ options = get_request_parameters(date)
100
+
101
+ results = analytics.get_ga_data(
102
+ options[:view_id],
103
+ options[:start_date],
104
+ options[:end_date],
105
+ options[:metrics],
106
+ dimensions: options[:dimensions],
107
+ filters: options[:filters],
108
+ include_empty_rows: options[:include_empty_rows],
109
+ sampling_level: options[:sampling_level],
110
+ segment: options[:segment],
111
+ sort: options[:sort],
112
+ )
113
+
114
+ query = results.query.to_h
115
+ profile_info = results.profile_info.to_h
116
+ column_headers = results.column_headers.map { |c| c.name }
117
+
118
+ event = LogStash::Event.new
119
+ decorate(event)
120
+ # Populate Logstash event fields
121
+ event.set('ga.contains_sampled_data', results.contains_sampled_data?)
122
+ event.set('ga.query', query) if @store_query
123
+ event.set('ga.profile_info', profile_info) if @store_profile
124
+
125
+ if date == 'today'
126
+ event.set('ga.date', Time.now.strftime("%F"))
127
+ elsif date == 'yesterday'
128
+ event.set('ga.date', Time.at(Time.now.to_i - 86400).strftime("%F"))
129
+ elsif date.include?('daysAgo')
130
+ days_ago = date.sub('daysAgo', '').to_i
131
+ event.set('ga.date', Time.at(Time.now.to_i - (days_ago * 86400)).strftime("%F"))
132
+ else
133
+ event.set('ga.date', date)
134
+ end
135
+
136
+ # Use date and metrics as ID to prevent duplicate entries in Elasticsearch
137
+ event.set('_id', event.get('ga.date') + options[:metrics])
138
+
139
+ rows = []
140
+
141
+ if results.rows && results.rows.first
142
+
143
+ # Example with dimensions, multiple metrics:
144
+ # rows: [[Chrome, Cape Town, 6, 8], [Chrome, Paris, 1, 5], [Safari, Paris, 1, 3]], column_headers: ['ga:browser', 'ga:city', 'ga:user', 'ga:sessions']
145
+ # Example with dimension, single metric:
146
+ # rows: [[Chrome, 6]], column_headers: ['ga:browser', 'ga:user']
147
+ # Example with no dimension, single metric:
148
+ # rows: [[6]], column_headers: ['ga:user']
149
+ # Dimensions always appear before values
150
+ results.rows.each do |row|
151
+ dimensions = []
152
+ metrics = []
153
+
154
+ column_headers.zip(row) do |header, value|
155
+ # Combine GA column headers with values from row
156
+ if is_num(value)
157
+ float_value = Float(value)
158
+ # Sometimes GA returns infinity. if so, the number is invalid
159
+ # so set it to zero.
160
+ value = (float_value == Float::INFINITY) ? 0.0 : float_value
161
+ end
162
+
163
+ entry = {
164
+ name: header,
165
+ value: value
166
+ }
167
+ if @metrics.include?(header)
168
+ metrics << entry
169
+ else
170
+ dimensions << entry
171
+ end
172
+
173
+ end
174
+
175
+ rows << {metrics: metrics, dimensions: dimensions}
176
+ end
177
+
178
+ end
179
+ event.set("ga.rows", rows)
180
+
181
+ queue << event
182
+ end
183
+
184
+ # If no interval was set, we're done
185
+ if @interval.nil?
186
+ break
187
+ else
188
+ # Otherwise we sleep till the next run
189
+ time_lapsed = Time.now - start_time
190
+ # Sleep for the remainder of the interval, or 0 if the duration ran
191
+ # longer than the interval.
192
+ time_to_sleep_for = [0, @interval - time_lapsed].max
193
+ if time_to_sleep_for == 0
194
+ @logger.warn(
195
+ "Execution ran longer than the interval. Skipping sleep.",
196
+ :duration => time_lapsed,
197
+ :interval => @interval
198
+ )
199
+ else
200
+ Stud.stoppable_sleep(time_to_sleep_for) { stop? }
201
+ end
202
+ end
203
+ end # loop
204
+ end
205
+
206
+ private
207
+
208
+ def get_request_parameters(date)
209
+ options = {
210
+ :view_id => @view_id,
211
+ :start_date => date,
212
+ :end_date => date,
213
+ :metrics => @metrics.sort.join(','),
214
+ :output => 'json',
215
+ }
216
+ options.merge!({:dimensions => @dimensions.join(',')}) if (@dimensions and @dimensions.size?)
217
+ options.merge!({:filters => @filters}) if @filters
218
+ options.merge!({:sort => @sort}) if @sort
219
+ options.merge!({:segment => @segment}) if @segment
220
+ options.merge!({:sampling_level => @sampling_level}) if @sampling_level
221
+ options.merge!({:include_empty_rows => @include_empty_rows}) if !@include_empty_rows.nil?
222
+ return options
223
+ end
224
+
225
+ def get_service
226
+ scope = 'https://www.googleapis.com/auth/analytics.readonly'
227
+ authorizer = Google::Auth::ServiceAccountCredentials.make_creds(
228
+ json_key_io: File.open(@key_file_path),
229
+ scope: scope
230
+ )
231
+
232
+ analytics = Google::Apis::AnalyticsV3::AnalyticsService.new
233
+ analytics.authorization = authorizer
234
+ return analytics
235
+ end
236
+
237
+ private
238
+
239
+ def is_num(a)
240
+ return (Float(a) and true) rescue false
241
+ end
242
+ end # class LogStash::Inputs::GoogleAnalytics
243
+
@@ -0,0 +1,28 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = 'logstash-input-google-analytics-daily'
3
+ s.version = '0.1.0'
4
+ s.licenses = ['Apache License (2.0)']
5
+ s.summary = "Logstash plugin to pull daily reports from the Google Analytics v3 Core Reporting API."
6
+ s.description = "This gem is a logstash plugin required to be installed on top of the Logstash core pipeline using $LS_HOME/bin/plugin install logstash-input-google-analytics-daily."
7
+ s.authors = ["Shalvah"]
8
+ s.email = 'hello@shalvah.me'
9
+ s.homepage = "http://www.elastic.co/guide/en/logstash/current/index.html"
10
+ s.require_paths = ["lib"]
11
+
12
+ # Files
13
+ s.files = Dir['lib/**/*','spec/**/*','vendor/**/*','*.gemspec','*.md','CONTRIBUTORS','Gemfile','LICENSE','NOTICE.TXT']
14
+ # Tests
15
+ s.test_files = s.files.grep(%r{^(test|spec|features)/})
16
+
17
+ # Special flag to let us know this is actually a logstash plugin
18
+ s.metadata = { "logstash_plugin" => "true", "logstash_group" => "input" }
19
+
20
+ # Gem dependencies
21
+ s.add_runtime_dependency "logstash-core-plugin-api", ">= 2.0.0", "< 3.0.0"
22
+ s.add_runtime_dependency 'stud', '>= 0.0.22'
23
+ s.add_runtime_dependency 'google-api-client', "0.37"
24
+ s.add_runtime_dependency 'googleauth'
25
+ s.add_development_dependency 'vcr'
26
+ s.add_development_dependency 'webmock'
27
+ s.add_development_dependency 'json'
28
+ end
@@ -0,0 +1,47 @@
1
+ # Tests currently nto in use
2
+ #
3
+ # # encoding: utf-8
4
+ # require "logstash/inputs/google_analytics_daily"
5
+ # require "vcr"
6
+ # require "json"
7
+ #
8
+ # ENV['SSL_CERT_FILE'] = "/Users/rsavage/Downloads/cacert.pem"
9
+ #
10
+ # VCR.configure do |config|
11
+ # config.cassette_library_dir = File.join(File.dirname(__FILE__), '..', 'fixtures', 'vcr_cassettes')
12
+ # config.hook_into :webmock
13
+ # end
14
+ #
15
+ # RSpec.describe LogStash::Inputs::GoogleAnalyticsDaily do
16
+ # describe "inputs/google_analytics_daily" do
17
+ # context "get users overview" do
18
+ # let(:options) do
19
+ # {
20
+ # "view_id" => "ga:213576060",
21
+ # "metrics" => ["ga:users","ga:sessions"],
22
+ # "key_file_path" => "C:/logstash-7.6.1/keyfile.json",
23
+ # "dates" => ['yesterday', '2020-04-05'],
24
+ # 'dimensions' => ['ga:browser'],
25
+ # "interval" => nil,
26
+ #
27
+ # }
28
+ # end
29
+ # let(:input) { LogStash::Inputs::GoogleAnalyticsDaily.new(options) }
30
+ # let(:expected_fields_result) { ["ga_pageviews"] }
31
+ # let(:queue) { [] }
32
+ # subject { input }
33
+ # it "loads pageviews" do
34
+ # #VCR.use_cassette("get_audience_overview") do
35
+ # subject.register
36
+ # subject.run(queue)
37
+ # expect(queue.length).to eq(1)
38
+ # e = queue.pop
39
+ # expected_fields_result.each do |f|
40
+ # expect(e.to_hash).to include(f)
41
+ # end
42
+ # #end
43
+ # end
44
+ # end
45
+ # end
46
+ #
47
+ # end
metadata ADDED
@@ -0,0 +1,160 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: logstash-input-google-analytics-daily
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Shalvah
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2020-04-08 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - ">="
17
+ - !ruby/object:Gem::Version
18
+ version: 2.0.0
19
+ - - "<"
20
+ - !ruby/object:Gem::Version
21
+ version: 3.0.0
22
+ name: logstash-core-plugin-api
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ version: 2.0.0
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: 3.0.0
33
+ - !ruby/object:Gem::Dependency
34
+ requirement: !ruby/object:Gem::Requirement
35
+ requirements:
36
+ - - ">="
37
+ - !ruby/object:Gem::Version
38
+ version: 0.0.22
39
+ name: stud
40
+ type: :runtime
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: 0.0.22
47
+ - !ruby/object:Gem::Dependency
48
+ requirement: !ruby/object:Gem::Requirement
49
+ requirements:
50
+ - - '='
51
+ - !ruby/object:Gem::Version
52
+ version: '0.37'
53
+ name: google-api-client
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - '='
59
+ - !ruby/object:Gem::Version
60
+ version: '0.37'
61
+ - !ruby/object:Gem::Dependency
62
+ requirement: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ - - ">="
65
+ - !ruby/object:Gem::Version
66
+ version: '0'
67
+ name: googleauth
68
+ type: :runtime
69
+ prerelease: false
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: '0'
75
+ - !ruby/object:Gem::Dependency
76
+ requirement: !ruby/object:Gem::Requirement
77
+ requirements:
78
+ - - ">="
79
+ - !ruby/object:Gem::Version
80
+ version: '0'
81
+ name: vcr
82
+ type: :development
83
+ prerelease: false
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
89
+ - !ruby/object:Gem::Dependency
90
+ requirement: !ruby/object:Gem::Requirement
91
+ requirements:
92
+ - - ">="
93
+ - !ruby/object:Gem::Version
94
+ version: '0'
95
+ name: webmock
96
+ type: :development
97
+ prerelease: false
98
+ version_requirements: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ version: '0'
103
+ - !ruby/object:Gem::Dependency
104
+ requirement: !ruby/object:Gem::Requirement
105
+ requirements:
106
+ - - ">="
107
+ - !ruby/object:Gem::Version
108
+ version: '0'
109
+ name: json
110
+ type: :development
111
+ prerelease: false
112
+ version_requirements: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - ">="
115
+ - !ruby/object:Gem::Version
116
+ version: '0'
117
+ description: This gem is a logstash plugin required to be installed on top of the
118
+ Logstash core pipeline using $LS_HOME/bin/plugin install logstash-input-google-analytics-daily.
119
+ email: hello@shalvah.me
120
+ executables: []
121
+ extensions: []
122
+ extra_rdoc_files: []
123
+ files:
124
+ - CHANGELOG.md
125
+ - DEVELOPER.md
126
+ - Gemfile
127
+ - LICENSE
128
+ - NOTICE.TXT
129
+ - README.md
130
+ - lib/logstash/inputs/google_analytics_daily.rb
131
+ - logstash-input-google-analytics-daily.gemspec
132
+ - spec/inputs/google_analytics_daily_spec.rb
133
+ homepage: http://www.elastic.co/guide/en/logstash/current/index.html
134
+ licenses:
135
+ - Apache License (2.0)
136
+ metadata:
137
+ logstash_plugin: 'true'
138
+ logstash_group: input
139
+ post_install_message:
140
+ rdoc_options: []
141
+ require_paths:
142
+ - lib
143
+ required_ruby_version: !ruby/object:Gem::Requirement
144
+ requirements:
145
+ - - ">="
146
+ - !ruby/object:Gem::Version
147
+ version: '0'
148
+ required_rubygems_version: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ requirements: []
154
+ rubygems_version: 3.0.6
155
+ signing_key:
156
+ specification_version: 4
157
+ summary: Logstash plugin to pull daily reports from the Google Analytics v3 Core Reporting
158
+ API.
159
+ test_files:
160
+ - spec/inputs/google_analytics_daily_spec.rb