fluent-plugin-presto_query 0.0.1
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/.document +3 -0
- data/.gitignore +9 -0
- data/.travis.yml +16 -0
- data/.yardopts +1 -0
- data/Gemfile +7 -0
- data/README.md +63 -0
- data/Rakefile +11 -0
- data/exsample/exsample.conf +26 -0
- data/fluent-plugin-presto_query.gemspec +27 -0
- data/lib/fluent/plugin/in_presto_query.rb +76 -0
- data/test/helper.rb +18 -0
- data/test/plugin/test_in_presto_query.rb +29 -0
- metadata +184 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 4315ee92212f8e536132e50f6c73f62cd76be266
|
4
|
+
data.tar.gz: a6a0e85c5d4ac8a0823d20267ff37e290fd63877
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: f499a3f008b00e6d5e03b6162147f2ec038ae7d14a2508fa6b624cc90a03ea764a0e87c230b55ad9780aebb77c422bba8f27e9808a922ebc56a9d6dc7ef6ed48
|
7
|
+
data.tar.gz: cec161c298de23c396a28f71a8452593dbb0d7669f8e9ebad809a230f61e38167961ac6568224ff6f865d4a09e40800a13573a08603d11135213a0cf24950d9d
|
data/.document
ADDED
data/.gitignore
ADDED
data/.travis.yml
ADDED
data/.yardopts
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--markup markdown --title "fluent-plugin-presto_query Documentation" --protected
|
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,63 @@
|
|
1
|
+
# fluent-plugin-presto_query [](http://travis-ci.org/toyama0919/fluent-plugin-presto_query)
|
2
|
+
|
3
|
+
Query to [Presto](https://prestodb.io/) plugin for fluentd
|
4
|
+
|
5
|
+
## Examples
|
6
|
+
```
|
7
|
+
<source>
|
8
|
+
type presto_query
|
9
|
+
tag presto_query.exsample
|
10
|
+
host presto-cordinator
|
11
|
+
catalog store
|
12
|
+
schema public
|
13
|
+
interval 10s
|
14
|
+
sql select user_id, count(*) as cnt from db01.schema.conversion where user_id is not null group by user_id having count(*) > 1000
|
15
|
+
cron 0 * * * * # You can query at a given time, with cron syntax.
|
16
|
+
</source>
|
17
|
+
|
18
|
+
<match presto_query.exsample>
|
19
|
+
type stdout
|
20
|
+
</match>
|
21
|
+
```
|
22
|
+
|
23
|
+
#### output
|
24
|
+
```
|
25
|
+
2015-05-12 16:01:02 +0900 presto_query.exsample: {"user_id":1000,"cnt":3906}
|
26
|
+
2015-05-12 16:01:02 +0900 presto_query.exsample: {"user_id":2000,"cnt":1348}
|
27
|
+
2015-05-12 16:01:02 +0900 presto_query.exsample: {"user_id":3000,"cnt":1167}
|
28
|
+
2015-05-12 16:01:02 +0900 presto_query.exsample: {"user_id":4000,"cnt":1503}
|
29
|
+
2015-05-12 16:01:02 +0900 presto_query.exsample: {"user_id":5000,"cnt":1689}
|
30
|
+
2015-05-12 16:01:02 +0900 presto_query.exsample: {"user_id":6000,"cnt":1199}
|
31
|
+
2015-05-12 16:01:02 +0900 presto_query.exsample: {"user_id":7000,"cnt":1182}
|
32
|
+
2015-05-12 16:01:02 +0900 presto_query.exsample: {"user_id":8000,"cnt":1079}
|
33
|
+
2015-05-12 16:01:02 +0900 presto_query.exsample: {"user_id":9000,"cnt":2455}
|
34
|
+
...
|
35
|
+
```
|
36
|
+
|
37
|
+
## parameter
|
38
|
+
#TODO
|
39
|
+
|
40
|
+
## Installation
|
41
|
+
```
|
42
|
+
fluent-gem install fluent-plugin-presto_query
|
43
|
+
```
|
44
|
+
|
45
|
+
## Contributing
|
46
|
+
|
47
|
+
1. Fork it
|
48
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
49
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
50
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
51
|
+
5. Create new [Pull Request](../../pull/new/master)
|
52
|
+
|
53
|
+
## Information
|
54
|
+
|
55
|
+
* [Homepage](https://github.com/toyama0919/fluent-plugin-presto_query)
|
56
|
+
* [Issues](https://github.com/toyama0919/fluent-plugin-presto_query/issues)
|
57
|
+
* [Documentation](http://rubydoc.info/gems/fluent-plugin-presto_query/frames)
|
58
|
+
* [Email](mailto:toyama0919@gmail.com)
|
59
|
+
|
60
|
+
## Copyright
|
61
|
+
|
62
|
+
Copyright (c) 2015 Hiroshi Toyama
|
63
|
+
|
data/Rakefile
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
|
2
|
+
<source>
|
3
|
+
type presto_query
|
4
|
+
tag presto_query.exsample
|
5
|
+
host presto-cordinator
|
6
|
+
catalog store
|
7
|
+
schema public
|
8
|
+
sql select user_id, count(*) as cnt from pageview where user_id is not null group by user_id having count(*) > 1000
|
9
|
+
cron * * * * *
|
10
|
+
</source>
|
11
|
+
|
12
|
+
<source>
|
13
|
+
type presto_query
|
14
|
+
tag presto_query.exsample
|
15
|
+
host presto-cordinator
|
16
|
+
catalog store
|
17
|
+
schema public
|
18
|
+
interval 10s
|
19
|
+
sql select user_id, count(*) as cnt from db01.schema.conversion where user_id is not null group by user_id having count(*) > 1000
|
20
|
+
cron 0 * * * *
|
21
|
+
</source>
|
22
|
+
|
23
|
+
<match presto_query.exsample>
|
24
|
+
type stdout
|
25
|
+
</match>
|
26
|
+
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
Gem::Specification.new do |gem|
|
4
|
+
gem.name = "fluent-plugin-presto_query"
|
5
|
+
gem.version = "0.0.1"
|
6
|
+
gem.summary = %q{PrestoQuery plugin for fluentd}
|
7
|
+
gem.description = %q{PrestoQuery plugin for fluentd}
|
8
|
+
gem.license = "MIT"
|
9
|
+
gem.authors = ["Hiroshi Toyama"]
|
10
|
+
gem.email = "toyama0919@gmail.com"
|
11
|
+
gem.homepage = "https://github.com/toyama0919/fluent-plugin-presto_query"
|
12
|
+
|
13
|
+
gem.files = `git ls-files`.split($/)
|
14
|
+
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
15
|
+
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
16
|
+
gem.require_paths = ['lib']
|
17
|
+
|
18
|
+
gem.add_runtime_dependency "presto-client"
|
19
|
+
gem.add_runtime_dependency "parse-cron"
|
20
|
+
gem.add_development_dependency 'bundler', '~> 1.7.2'
|
21
|
+
gem.add_development_dependency 'fluentd', '~> 0.10.53'
|
22
|
+
gem.add_development_dependency 'pry', '~> 0.10.1'
|
23
|
+
gem.add_development_dependency 'rake', '~> 10.3.2'
|
24
|
+
gem.add_development_dependency 'rubocop', '~> 0.24.1'
|
25
|
+
gem.add_development_dependency 'rubygems-tasks', '~> 0.2'
|
26
|
+
gem.add_development_dependency 'yard', '~> 0.8'
|
27
|
+
end
|
@@ -0,0 +1,76 @@
|
|
1
|
+
module Fluent
|
2
|
+
class PrestoQueryInput < Fluent::Input
|
3
|
+
Plugin.register_input 'presto_query', self
|
4
|
+
|
5
|
+
config_param :tag, :string
|
6
|
+
config_param :sql, :string
|
7
|
+
config_param :host, :string
|
8
|
+
config_param :port, :integer, default: 8080
|
9
|
+
config_param :user, :string, default: 'fluentd'
|
10
|
+
config_param :schema, :string, default: 'default'
|
11
|
+
config_param :catalog, :string, default: 'native'
|
12
|
+
config_param :interval, :time, default: '30m' # not use.
|
13
|
+
config_param :cron, :string, default: '0 0 * * *'
|
14
|
+
|
15
|
+
def configure(conf)
|
16
|
+
require 'presto-client'
|
17
|
+
require 'parse-cron'
|
18
|
+
super
|
19
|
+
end
|
20
|
+
|
21
|
+
def start
|
22
|
+
@cron_parser = CronParser.new(@cron)
|
23
|
+
@client = Presto::Client.new(
|
24
|
+
server: "#{@host}:#{@port}",
|
25
|
+
catalog: @catalog,
|
26
|
+
user: @user,
|
27
|
+
schema: @schema
|
28
|
+
)
|
29
|
+
@thread = Thread.new(&method(:run))
|
30
|
+
end
|
31
|
+
|
32
|
+
def shutdown
|
33
|
+
Thread.kill(@thread)
|
34
|
+
end
|
35
|
+
|
36
|
+
def run
|
37
|
+
loop do
|
38
|
+
secs = @cron_parser.next(Time.now) - Time.now
|
39
|
+
log.info "next query at #{@cron_parser.next(Time.now)}. Sleep #{secs}seconds."
|
40
|
+
sleep secs
|
41
|
+
Thread.new(&method(:emit_presto_query))
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def emit_presto_query
|
46
|
+
begin
|
47
|
+
log.info "sql [#{@sql}]"
|
48
|
+
records = exec_query(@sql)
|
49
|
+
records.each do |record|
|
50
|
+
Fluent::Engine.emit @tag, Fluent::Engine.now, record
|
51
|
+
end
|
52
|
+
rescue => e
|
53
|
+
log.error e
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
private
|
58
|
+
def exec_query(query)
|
59
|
+
return if query.nil? || query.empty?
|
60
|
+
@client.query(query) do |q|
|
61
|
+
columns = q.columns.map {|column|
|
62
|
+
column.name
|
63
|
+
}
|
64
|
+
|
65
|
+
results = []
|
66
|
+
q.each_row {|row|
|
67
|
+
results << columns.each_with_index.inject({}) {|result, (column_name, i)|
|
68
|
+
result[column_name] = row[i]
|
69
|
+
result
|
70
|
+
}
|
71
|
+
}
|
72
|
+
return results
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
data/test/helper.rb
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'bundler'
|
3
|
+
begin
|
4
|
+
Bundler.setup(:default, :development)
|
5
|
+
rescue Bundler::BundlerError => e
|
6
|
+
$stderr.puts e.message
|
7
|
+
$stderr.puts "Run `bundle install` to install missing gems"
|
8
|
+
exit e.status_code
|
9
|
+
end
|
10
|
+
require 'test/unit'
|
11
|
+
|
12
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
13
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
14
|
+
require 'fluent/test'
|
15
|
+
require 'fluent/plugin/in_presto_query'
|
16
|
+
|
17
|
+
class Test::Unit::TestCase
|
18
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
class PrestoQueryInputTest < Test::Unit::TestCase
|
4
|
+
def setup
|
5
|
+
Fluent::Test.setup
|
6
|
+
end
|
7
|
+
|
8
|
+
def create_driver(conf)
|
9
|
+
Fluent::Test::InputTestDriver.new(Fluent::PrestoQueryInput).configure(conf)
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_configure_full
|
13
|
+
d = create_driver %q{
|
14
|
+
tag test
|
15
|
+
interval 10m
|
16
|
+
sql "select * from hoge"
|
17
|
+
host presto-cordinator
|
18
|
+
}
|
19
|
+
|
20
|
+
assert_equal 'test', d.instance.tag
|
21
|
+
assert_equal 10 * 60, d.instance.interval
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_configure_error_when_config_is_empty
|
25
|
+
assert_raise(Fluent::ConfigError) do
|
26
|
+
create_driver ''
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
metadata
ADDED
@@ -0,0 +1,184 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: fluent-plugin-presto_query
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Hiroshi Toyama
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-05-13 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: presto-client
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: parse-cron
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: bundler
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 1.7.2
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 1.7.2
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: fluentd
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 0.10.53
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 0.10.53
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: pry
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 0.10.1
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 0.10.1
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rake
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: 10.3.2
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: 10.3.2
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: rubocop
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: 0.24.1
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: 0.24.1
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: rubygems-tasks
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - "~>"
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0.2'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - "~>"
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0.2'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: yard
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - "~>"
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0.8'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - "~>"
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0.8'
|
139
|
+
description: PrestoQuery plugin for fluentd
|
140
|
+
email: toyama0919@gmail.com
|
141
|
+
executables: []
|
142
|
+
extensions: []
|
143
|
+
extra_rdoc_files: []
|
144
|
+
files:
|
145
|
+
- ".document"
|
146
|
+
- ".gitignore"
|
147
|
+
- ".travis.yml"
|
148
|
+
- ".yardopts"
|
149
|
+
- Gemfile
|
150
|
+
- README.md
|
151
|
+
- Rakefile
|
152
|
+
- exsample/exsample.conf
|
153
|
+
- fluent-plugin-presto_query.gemspec
|
154
|
+
- lib/fluent/plugin/in_presto_query.rb
|
155
|
+
- test/helper.rb
|
156
|
+
- test/plugin/test_in_presto_query.rb
|
157
|
+
homepage: https://github.com/toyama0919/fluent-plugin-presto_query
|
158
|
+
licenses:
|
159
|
+
- MIT
|
160
|
+
metadata: {}
|
161
|
+
post_install_message:
|
162
|
+
rdoc_options: []
|
163
|
+
require_paths:
|
164
|
+
- lib
|
165
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
166
|
+
requirements:
|
167
|
+
- - ">="
|
168
|
+
- !ruby/object:Gem::Version
|
169
|
+
version: '0'
|
170
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
171
|
+
requirements:
|
172
|
+
- - ">="
|
173
|
+
- !ruby/object:Gem::Version
|
174
|
+
version: '0'
|
175
|
+
requirements: []
|
176
|
+
rubyforge_project:
|
177
|
+
rubygems_version: 2.4.2
|
178
|
+
signing_key:
|
179
|
+
specification_version: 4
|
180
|
+
summary: PrestoQuery plugin for fluentd
|
181
|
+
test_files:
|
182
|
+
- test/helper.rb
|
183
|
+
- test/plugin/test_in_presto_query.rb
|
184
|
+
has_rdoc:
|