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 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
@@ -0,0 +1,3 @@
1
+ -
2
+ ChangeLog.md
3
+ LICENSE.txt
data/.gitignore ADDED
@@ -0,0 +1,9 @@
1
+ Gemfile.lock
2
+ doc/
3
+ tmp/
4
+ pkg/
5
+ **/*.gem
6
+ .yardoc/
7
+ .bundle/
8
+ vendor/bundle/
9
+ .tags
data/.travis.yml ADDED
@@ -0,0 +1,16 @@
1
+ language: ruby
2
+
3
+ rvm:
4
+ - 1.9.3
5
+ - 2.0.0
6
+ - 2.1
7
+ - ruby-head
8
+
9
+ os:
10
+ - linux
11
+ - osx
12
+
13
+ gemfile:
14
+ - Gemfile
15
+
16
+ script: 'bundle exec rake test'
data/.yardopts ADDED
@@ -0,0 +1 @@
1
+ --markup markdown --title "fluent-plugin-presto_query Documentation" --protected
data/Gemfile ADDED
@@ -0,0 +1,7 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
4
+
5
+ group :development do
6
+ gem 'kramdown'
7
+ end
data/README.md ADDED
@@ -0,0 +1,63 @@
1
+ # fluent-plugin-presto_query [![Build Status](https://secure.travis-ci.org/toyama0919/fluent-plugin-presto_query.png?branch=master)](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,11 @@
1
+ require 'bundler/gem_tasks'
2
+ require 'rake/testtask'
3
+
4
+ Rake::TestTask.new(:test) do |test|
5
+ test.libs << 'lib' << 'test'
6
+ test.pattern = 'test/**/test_*.rb'
7
+ test.verbose = true
8
+ end
9
+
10
+ task :default => :test
11
+
@@ -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: