fluent-plugin-elb-log 0.2.8 → 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
  SHA1:
3
- metadata.gz: d4964547c8f6c81ddc8be0aee95bc942420cd824
4
- data.tar.gz: 30fb414dc08343f64ee4c671aab0e5246fb8ba55
3
+ metadata.gz: 9e2cdd52d7bb6925077930b4af585a251b7adefc
4
+ data.tar.gz: 64429389036f8c97f4a502dad80cfebce71aaa83
5
5
  SHA512:
6
- metadata.gz: 26bb99092bb3b2d5bd403f1e840cfe0f33ac75355e26dd02794300383f7ed0b29e86bd3bd66953d33fca842ddbf661b00290815af6f9b4f1c6b79b609c6bca53
7
- data.tar.gz: 3d4c476adb92920fa4c51a1f7d109fbe5fe8138b9a05b6b5d8c939f5ea7d9ac6e2899656b769e861008636a5f886396f5462271af878bbab56db46b2c96438b6
6
+ metadata.gz: 05735444de0f2eceaaa76a417cd146971bc90ac614626dbaab1d4881b85651c06ab24aabad039fa9c90047f96e53e9dc406ba12c47743522d8f6947e34dce660
7
+ data.tar.gz: 8592521b71b5bb4df3311ea87f833627e129e7582ccb5cb8360a5bab67140e4efc284a35d273b767ec088db432aebea1505ba2b76efa2e1871027e989181e2a9
@@ -1,9 +1,10 @@
1
1
  lang: ruby
2
2
 
3
3
  rvm:
4
- - 1.9.3
5
- - 2.0.0
6
- - 2.1.*
4
+ - 2.1
5
+ - 2.2
6
+ - 2.3.3
7
+ - 2.4.1
7
8
  branches:
8
9
  only:
9
10
  - master
data/README.md CHANGED
@@ -3,6 +3,15 @@
3
3
  ## Overview
4
4
  - Amazon Web Services ELB log input plubin for fluentd
5
5
 
6
+ ## Requirements
7
+
8
+ ## Requirements
9
+
10
+ | fluent-plugin-elb-log | fluentd | ruby |
11
+ |-----------------------|------------|--------|
12
+ | >= 0.3.0 | >= v0.14.0 | >= 2.1 |
13
+ | < 0.3.0 | >= v0.12.0 | >= 1.9 |
14
+
6
15
  ## Installation
7
16
 
8
17
  $ fluentd-gem fluent-plugin-elb-log
data/Rakefile CHANGED
@@ -5,6 +5,7 @@ Rake::TestTask.new(:test) do |test|
5
5
  test.libs << 'lib' << 'test'
6
6
  test.pattern = 'test/**/*.rb'
7
7
  test.verbose = true
8
+ test.warning = false
8
9
  end
9
10
 
10
11
  desc 'Run tests for all'
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
 
5
5
  Gem::Specification.new do |spec|
6
6
  spec.name = "fluent-plugin-elb-log"
7
- spec.version = "0.2.8"
7
+ spec.version = "0.3.0"
8
8
  spec.authors = ["shinsaka"]
9
9
  spec.email = ["shinx1265@gmail.com"]
10
10
  spec.summary = "Amazon ELB log input plugin"
@@ -17,8 +17,11 @@ Gem::Specification.new do |spec|
17
17
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
18
18
  spec.require_paths = ["lib"]
19
19
 
20
- spec.add_dependency "fluentd", "~> 0"
20
+ spec.add_dependency "fluentd", ">= 0.14.0", "< 2"
21
21
  spec.add_dependency "aws-sdk", "~> 2"
22
22
 
23
23
  spec.add_development_dependency "bundler", "~> 1.7"
24
+ spec.add_development_dependency "rake"
25
+ spec.add_development_dependency "test-unit", ">= 3.1.0"
26
+ spec.add_development_dependency "webmock"
24
27
  end
@@ -1,38 +1,30 @@
1
+ require 'time'
2
+ require 'aws-sdk'
1
3
  require 'fluent/input'
2
4
 
3
- class Fluent::Elb_LogInput < Fluent::Input
5
+ class Fluent::Plugin::Elb_LogInput < Fluent::Plugin::Input
4
6
  Fluent::Plugin.register_input('elb_log', self)
5
7
 
8
+ helpers :timer
9
+
6
10
  LOGFILE_REGEXP = /^((?<prefix>.+?)\/|)AWSLogs\/(?<account_id>[0-9]{12})\/elasticloadbalancing\/(?<region>.+?)\/(?<logfile_date>[0-9]{4}\/[0-9]{2}\/[0-9]{2})\/[0-9]{12}_elasticloadbalancing_.+?_(?<logfile_elb_name>[^_]+)_(?<elb_timestamp>[0-9]{8}T[0-9]{4}Z)_(?<elb_ip_address>.+?)_(?<logfile_hash>.+)\.log$/
7
11
  ACCESSLOG_REGEXP = /^(?<time>\d{4}-\d{2}-\d{2}T\d{2}\:\d{2}\:\d{2}\.\d{6}Z) (?<elb>.+?) (?<client>[^ ]+)\:(?<client_port>.+?) (?<backend>.+?)(\:(?<backend_port>.+?))? (?<request_processing_time>.+?) (?<backend_processing_time>.+?) (?<response_processing_time>.+?) (?<elb_status_code>.+?) (?<backend_status_code>.+?) (?<received_bytes>.+?) (?<sent_bytes>.+?) \"(?<request_method>.+?) (?<request_uri>.+?) (?<request_protocol>.+?)\"( \"(?<user_agent>.*?)\" (?<ssl_cipher>.+?) (?<ssl_protocol>.+)(| (?<option3>.*)))?/
8
12
 
9
- # To support log_level option implemented by Fluentd v0.10.43
10
- unless method_defined?(:log)
11
- define_method("log") { $log }
12
- end
13
-
14
- # Define `router` method to support v0.10.57 or earlier
15
- unless method_defined?(:router)
16
- define_method("router") { Fluent::Engine }
17
- end
18
-
19
- config_param :access_key_id, :string, :default => nil, :secret => true
20
- config_param :secret_access_key, :string, :default => nil, :secret => true
21
- config_param :region, :string, :default => nil
22
- config_param :s3_bucketname, :string, :default => nil
23
- config_param :s3_prefix, :string, :default => nil
24
- config_param :tag, :string, :default => 'elb.access'
25
- config_param :timestamp_file, :string, :default => nil
26
- config_param :refresh_interval, :integer, :default => 300
27
- config_param :buf_file, :string, :default => './fluentd_elb_log_buf_file'
28
- config_param :http_proxy, :string, :default => nil
29
- config_param :start_time, :string, :default => nil
13
+ config_param :access_key_id, :string, default: nil, secret: true
14
+ config_param :secret_access_key, :string, default: nil, secret: true
15
+ config_param :region, :string
16
+ config_param :s3_bucketname, :string, default: nil
17
+ config_param :s3_prefix, :string, default: nil
18
+ config_param :tag, :string, default: 'elb.access'
19
+ config_param :timestamp_file, :string, default: nil
20
+ config_param :refresh_interval, :integer, default: 300
21
+ config_param :buf_file, :string, default: './fluentd_elb_log_buf_file'
22
+ config_param :http_proxy, :string, default: nil
23
+ config_param :start_time, :string, default: nil
30
24
 
31
25
  def configure(conf)
32
26
  super
33
- require 'aws-sdk'
34
27
 
35
- raise Fluent::ConfigError.new("region is required") unless @region
36
28
  if !has_iam_role?
37
29
  raise Fluent::ConfigError.new("access_key_id is required") if @access_key_id.nil?
38
30
  raise Fluent::ConfigError.new("secret_access_key is required") if @secret_access_key.nil?
@@ -50,16 +42,7 @@ class Fluent::Elb_LogInput < Fluent::Input
50
42
 
51
43
  raise StandardError.new("s3 bucket not found #{@s3_bucketname}") unless s3bucket_is_ok()
52
44
 
53
- @loop = Coolio::Loop.new
54
- timer_trigger = TimerWatcher.new(@refresh_interval, true, &method(:input))
55
- timer_trigger.attach(@loop)
56
- @thread = Thread.new(&method(:run))
57
- end
58
-
59
- def shutdown
60
- super
61
- @loop.stop
62
- @thread.join
45
+ timer_execute(:in_elb_log, @refresh_interval, &method(:input))
63
46
  end
64
47
 
65
48
  private
@@ -74,7 +57,6 @@ class Fluent::Elb_LogInput < Fluent::Input
74
57
  end
75
58
 
76
59
  def get_timestamp_file
77
- require 'time'
78
60
  begin
79
61
  # get timestamp last proc
80
62
  start_time = @start_time ? Time.parse(@start_time).utc : Time.at(0)
@@ -104,7 +86,7 @@ class Fluent::Elb_LogInput < Fluent::Input
104
86
  def s3_client
105
87
  begin
106
88
  options = {
107
- :region => @region,
89
+ region: @region,
108
90
  }
109
91
  if @access_key_id && @secret_access_key
110
92
  options[:access_key_id] = @access_key_id
@@ -273,20 +255,4 @@ class Fluent::Elb_LogInput < Fluent::Input
273
255
  log.warn "error occurred: #{e.message}"
274
256
  end
275
257
  end
276
-
277
- def run
278
- @loop.run
279
- end
280
-
281
- class TimerWatcher < Coolio::TimerWatcher
282
- def initialize(interval, repeat, &callback)
283
- @callback = callback
284
- on_timer # first call
285
- super(interval, repeat)
286
- end
287
-
288
- def on_timer
289
- @callback.call
290
- end
291
- end
292
258
  end
@@ -1,19 +1,15 @@
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
1
+ require 'bundler/setup'
10
2
  require 'test/unit'
11
3
  require 'webmock/test_unit'
12
4
 
13
- $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
14
- $LOAD_PATH.unshift(File.dirname(__FILE__))
5
+ $LOAD_PATH.unshift(File.join(__dir__, '..', 'lib'))
6
+ $LOAD_PATH.unshift(__dir__)
15
7
  require 'fluent/test'
8
+ require 'fluent/test/helpers'
9
+ require 'fluent/test/driver/input'
16
10
  require 'fluent/plugin/in_elb_log'
17
11
 
18
12
  class Test::Unit::TestCase
13
+ include Fluent::Test::Helpers
14
+ extend Fluent::Test::Helpers
19
15
  end
@@ -7,13 +7,14 @@ class Elb_LogInputTest < Test::Unit::TestCase
7
7
  end
8
8
 
9
9
  DEFAULT_CONFIG = {
10
- :access_key_id => 'dummy_access_key_id',
11
- :secret_access_key => 'dummy_secret_access_key',
12
- :s3_endpoint => 's3-ap-northeast-1.amazonaws.com',
13
- :s3_bucketname => 'bummy_bucket',
14
- :s3_prefix => 'test',
15
- :timestamp_file => 'elb_last_at.dat',
16
- :refresh_interval => 300
10
+ access_key_id: 'dummy_access_key_id',
11
+ secret_access_key: 'dummy_secret_access_key',
12
+ s3_endpoint: 's3-ap-northeast-1.amazonaws.com',
13
+ s3_bucketname: 'bummy_bucket',
14
+ s3_prefix: 'test',
15
+ region: 'ap-northeast-1',
16
+ timestamp_file: 'elb_last_at.dat',
17
+ refresh_interval: 300
17
18
  }
18
19
 
19
20
  def parse_config(conf = {})
@@ -21,36 +22,49 @@ class Elb_LogInputTest < Test::Unit::TestCase
21
22
  end
22
23
 
23
24
  def create_driver(conf = DEFAULT_CONFIG)
24
- Fluent::Test::InputTestDriver.new(Fluent::Elb_LogInput).configure(parse_config conf)
25
+ Fluent::Test::Driver::Input.new(Fluent::Plugin::Elb_LogInput).configure(parse_config conf)
25
26
  end
26
27
 
27
- def iam_info
28
- stub_request(:get, "http://169.254.169.254/latest/meta-data/iam/info")
28
+ def iam_info_url
29
+ "http://169.254.169.254/latest/meta-data/iam/security-credentials/"
29
30
  end
30
31
 
31
32
  def use_iam_role
32
- iam_info.to_return(:status => [200, 'OK'])
33
+ stub_request(:get, iam_info_url)
34
+ .to_return(status: [200, 'OK'], body: "hostname")
35
+ stub_request(:get, "#{iam_info_url}hostname")
36
+ .to_return(status: [200, 'OK'],
37
+ body: {
38
+ "AccessKeyId" => "dummy",
39
+ "SecretAccessKey" => "secret",
40
+ "Token" => "token"
41
+ }.to_json)
42
+ end
43
+
44
+ def iam_info_timeout
45
+ stub_request(:get, iam_info_url).to_timeout
33
46
  end
34
47
 
35
48
  def not_use_iam_role
36
- iam_info.to_return(:status => [404, 'Not Found'])
49
+ stub_request(:get, iam_info_url)
50
+ .to_return(status: [404, 'Not Found'])
37
51
  end
38
52
 
39
53
  def test_confiture_default
40
54
  use_iam_role
41
- assert_nothing_raised { driver = create_driver }
55
+ assert_nothing_raised { create_driver }
42
56
 
43
57
  exception = assert_raise(Fluent::ConfigError) {
44
58
  conf = DEFAULT_CONFIG.clone
45
59
  conf.delete(:s3_bucketname)
46
- driver = create_driver(conf)
60
+ create_driver(conf)
47
61
  }
48
62
  assert_equal('s3_bucketname is required', exception.message)
49
63
 
50
64
  exception = assert_raise(Fluent::ConfigError) {
51
65
  conf = DEFAULT_CONFIG.clone
52
66
  conf.delete(:timestamp_file)
53
- driver = create_driver(conf)
67
+ create_driver(conf)
54
68
  }
55
69
  assert_equal('timestamp_file is required', exception.message)
56
70
  end
@@ -60,7 +74,7 @@ class Elb_LogInputTest < Test::Unit::TestCase
60
74
  conf = DEFAULT_CONFIG.clone
61
75
  conf.delete(:access_key_id)
62
76
  conf.delete(:secret_access_key)
63
- assert_nothing_raised { driver = create_driver(conf) }
77
+ assert_nothing_raised { create_driver(conf) }
64
78
  end
65
79
 
66
80
  def test_configure_in_EC2_without_IAM_role
@@ -68,33 +82,33 @@ class Elb_LogInputTest < Test::Unit::TestCase
68
82
  exception = assert_raise(Fluent::ConfigError) {
69
83
  conf = DEFAULT_CONFIG.clone
70
84
  conf.delete(:access_key_id)
71
- driver = create_driver(conf)
85
+ create_driver(conf)
72
86
  }
73
87
  assert_equal('access_key_id is required', exception.message)
74
88
 
75
89
  exception = assert_raise(Fluent::ConfigError) {
76
90
  conf = DEFAULT_CONFIG.clone
77
91
  conf.delete(:secret_access_key)
78
- driver = create_driver(conf)
92
+ create_driver(conf)
79
93
  }
80
94
  assert_equal('secret_access_key is required', exception.message)
81
95
  end
82
96
 
83
97
  def test_configure_outside_EC2
84
- iam_info.to_timeout
98
+ iam_info_timeout
85
99
 
86
- assert_nothing_raised { driver = create_driver }
100
+ assert_nothing_raised { create_driver }
87
101
  exception = assert_raise(Fluent::ConfigError) {
88
102
  conf = DEFAULT_CONFIG.clone
89
103
  conf.delete(:access_key_id)
90
- driver = create_driver(conf)
104
+ create_driver(conf)
91
105
  }
92
106
  assert_equal('access_key_id is required', exception.message)
93
107
 
94
108
  exception = assert_raise(Fluent::ConfigError) {
95
109
  conf = DEFAULT_CONFIG.clone
96
110
  conf.delete(:secret_access_key)
97
- driver = create_driver(conf)
111
+ create_driver(conf)
98
112
  }
99
113
  assert_equal('secret_access_key is required', exception.message)
100
114
  end
metadata CHANGED
@@ -1,29 +1,35 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluent-plugin-elb-log
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.8
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - shinsaka
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-01-18 00:00:00.000000000 Z
11
+ date: 2017-03-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: fluentd
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '0'
19
+ version: 0.14.0
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: '2'
20
23
  type: :runtime
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
23
26
  requirements:
24
- - - "~>"
27
+ - - ">="
25
28
  - !ruby/object:Gem::Version
26
- version: '0'
29
+ version: 0.14.0
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: '2'
27
33
  - !ruby/object:Gem::Dependency
28
34
  name: aws-sdk
29
35
  requirement: !ruby/object:Gem::Requirement
@@ -52,6 +58,48 @@ dependencies:
52
58
  - - "~>"
53
59
  - !ruby/object:Gem::Version
54
60
  version: '1.7'
61
+ - !ruby/object:Gem::Dependency
62
+ name: rake
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: '0'
68
+ type: :development
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
+ name: test-unit
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: 3.1.0
82
+ type: :development
83
+ prerelease: false
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: 3.1.0
89
+ - !ruby/object:Gem::Dependency
90
+ name: webmock
91
+ requirement: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - ">="
94
+ - !ruby/object:Gem::Version
95
+ version: '0'
96
+ type: :development
97
+ prerelease: false
98
+ version_requirements: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ version: '0'
55
103
  description: Amazon ELB log input plugin for fluentd
56
104
  email:
57
105
  - shinx1265@gmail.com