logstash-input-google-analytics-daily 0.1.2
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.
- checksums.yaml +7 -0
- data/CHANGELOG.md +2 -0
- data/DEVELOPER.md +2 -0
- data/Gemfile +8 -0
- data/LICENSE +13 -0
- data/NOTICE.TXT +5 -0
- data/README.md +89 -0
- data/lib/logstash/inputs/google_analytics_daily.rb +243 -0
- data/logstash-input-google-analytics-daily.gemspec +28 -0
- data/spec/inputs/google_analytics_daily_spec.rb +47 -0
- metadata +160 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 0cd3fb1f69b8620c9e7b271031208edbe87a94f47f3b04d336b324bc9f193918
|
4
|
+
data.tar.gz: 2340ae2ed93d7709247ff7fa373204a744cfe337d04d6ab1f737f2270f1bb4ad
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 9b5c034b1b129fcb22bc70ba910155594245caa2566c37d2d5898c1fef44e5a77d544f9d8210bea7824630c5f91d5a10372f1d8357d331433617565483929416
|
7
|
+
data.tar.gz: 0d495b66014baddb11a7817773644f204cc084a8639677c0a32f3bbbeb633d78e39b05a1bb150e0e348e0ce684005d66bc014d0126a7ed6601c20321510badf8
|
data/CHANGELOG.md
ADDED
data/DEVELOPER.md
ADDED
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.
|
data/NOTICE.TXT
ADDED
data/README.md
ADDED
@@ -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 can be seen in [the docs folder](https://github.com/DeimosCloud/logstash-input-google-analytics-daily/blob/master/docs/index.asciidoc).
|
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.2'
|
4
|
+
s.licenses = ['Apache License (2.0)']
|
5
|
+
s.summary = "Logstash plugin to pull daily reports from Google Analytics."
|
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."
|
7
|
+
s.authors = ["Shalvah"]
|
8
|
+
s.email = 'shalvah.adebayo@gmail.com'
|
9
|
+
s.homepage = "http://www.elastic.co/guide/en/logstash/current/plugins-inputs-google_analytics_daily.html.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', "~>0.11"
|
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.2
|
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.11'
|
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.11'
|
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: Logstash plugin to pull daily reports from the Google Analytics v3 Core
|
118
|
+
Reporting API. Install into Logstash using $LS_HOME/bin/logstash-plugin install
|
119
|
+
logstash-input-google-analytics-daily.
|
120
|
+
email: shalvah.adebayo@gmail.com
|
121
|
+
executables: []
|
122
|
+
extensions: []
|
123
|
+
extra_rdoc_files: []
|
124
|
+
files:
|
125
|
+
- CHANGELOG.md
|
126
|
+
- DEVELOPER.md
|
127
|
+
- Gemfile
|
128
|
+
- LICENSE
|
129
|
+
- NOTICE.TXT
|
130
|
+
- README.md
|
131
|
+
- lib/logstash/inputs/google_analytics_daily.rb
|
132
|
+
- logstash-input-google-analytics-daily.gemspec
|
133
|
+
- spec/inputs/google_analytics_daily_spec.rb
|
134
|
+
homepage: http://www.elastic.co/guide/en/logstash/current/plugins-inputs-google_analytics_daily.html.html
|
135
|
+
licenses:
|
136
|
+
- Apache License (2.0)
|
137
|
+
metadata:
|
138
|
+
logstash_plugin: 'true'
|
139
|
+
logstash_group: input
|
140
|
+
post_install_message:
|
141
|
+
rdoc_options: []
|
142
|
+
require_paths:
|
143
|
+
- lib
|
144
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
145
|
+
requirements:
|
146
|
+
- - ">="
|
147
|
+
- !ruby/object:Gem::Version
|
148
|
+
version: '0'
|
149
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
150
|
+
requirements:
|
151
|
+
- - ">="
|
152
|
+
- !ruby/object:Gem::Version
|
153
|
+
version: '0'
|
154
|
+
requirements: []
|
155
|
+
rubygems_version: 3.0.6
|
156
|
+
signing_key:
|
157
|
+
specification_version: 4
|
158
|
+
summary: Logstash plugin to pull daily reports from Google Analytics.
|
159
|
+
test_files:
|
160
|
+
- spec/inputs/google_analytics_daily_spec.rb
|