fluent-plugin-elb-log 0.2.8 → 0.3.0

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 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