From 838b3f3d7c64e1ebd97ad3291324a28e014d2993 Mon Sep 17 00:00:00 2001 From: Hiroshi Hatake Date: Mon, 29 May 2017 12:07:59 +0900 Subject: [PATCH 1/8] Add a missing fluent/input require --- lib/fluent/plugin/in_diskusage.rb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/fluent/plugin/in_diskusage.rb b/lib/fluent/plugin/in_diskusage.rb index 32fd7ca..8d8bd93 100644 --- a/lib/fluent/plugin/in_diskusage.rb +++ b/lib/fluent/plugin/in_diskusage.rb @@ -1,3 +1,5 @@ +require 'fluent/input' + class Fluent::DiskUsage < Fluent::Input Fluent::Plugin.register_input('diskusage',self) From 5a00d7cfeddd18de57cc89f03680deaf44293d9f Mon Sep 17 00:00:00 2001 From: Hiroshi Hatake Date: Mon, 29 May 2017 12:08:17 +0900 Subject: [PATCH 2/8] Add a missing super in #shutdown --- lib/fluent/plugin/in_diskusage.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/fluent/plugin/in_diskusage.rb b/lib/fluent/plugin/in_diskusage.rb index 8d8bd93..3aff232 100644 --- a/lib/fluent/plugin/in_diskusage.rb +++ b/lib/fluent/plugin/in_diskusage.rb @@ -50,6 +50,6 @@ def output def shutdown @watcher.terminate @watcher.join - + super end end From 4f1de8baa8c7c52821daf706b15b8bea7cd6d86e Mon Sep 17 00:00:00 2001 From: Hiroshi Hatake Date: Mon, 29 May 2017 13:51:13 +0900 Subject: [PATCH 3/8] Migrate to use v0.14 API --- lib/fluent/plugin/in_diskusage.rb | 25 +++++++++---------------- 1 file changed, 9 insertions(+), 16 deletions(-) diff --git a/lib/fluent/plugin/in_diskusage.rb b/lib/fluent/plugin/in_diskusage.rb index 3aff232..3f7d2f5 100644 --- a/lib/fluent/plugin/in_diskusage.rb +++ b/lib/fluent/plugin/in_diskusage.rb @@ -1,13 +1,16 @@ -require 'fluent/input' +require 'sys/filesystem' +require 'fluent/plugin/input' -class Fluent::DiskUsage < Fluent::Input +class Fluent::Plugin::DiskUsage < Fluent::Plugin::Input Fluent::Plugin.register_input('diskusage',self) + helpers :timer + # Define `router` method to support v0.10.57 or earlier unless method_defined?(:router) define_method("router") { Fluent::Engine } end - + config_param :tag, :string config_param :mountpoint, :string config_param :label, :string @@ -15,19 +18,11 @@ class Fluent::DiskUsage < Fluent::Input def configure(conf) super - require 'sys/filesystem' end def start super - @watcher = Thread.new(&method(:run)) - end - - def run - while true - output - sleep @refresh_interval - end + timer_execute(:in_diskusage_timer, @refresh_interval, &method(:output)) end def output @@ -37,19 +32,17 @@ def output used_bytes = total_bytes - free_bytes used_percent = 0 free_percent = 0 - if total_bytes.nonzero? + if total_bytes.nonzero? used_percent = used_bytes / total_bytes.to_f free_percent = free_bytes / total_bytes.to_f end record = {"label"=>@label,"total_bytes"=>total_bytes,"free_bytes"=>free_bytes,"used_bytes"=>used_bytes,"used_percent"=>used_percent,"free_percent"=>free_percent} - + time = Fluent::Engine.now router.emit(tag,time,record) end def shutdown - @watcher.terminate - @watcher.join super end end From 70ecf43610d8ea636e538793f18198f50cbe4cc0 Mon Sep 17 00:00:00 2001 From: Hiroshi Hatake Date: Mon, 29 May 2017 14:11:44 +0900 Subject: [PATCH 4/8] Depends on test-unit --- fluent-plugin-diskusage.gemspec | 2 ++ 1 file changed, 2 insertions(+) diff --git a/fluent-plugin-diskusage.gemspec b/fluent-plugin-diskusage.gemspec index c040b2e..029d467 100644 --- a/fluent-plugin-diskusage.gemspec +++ b/fluent-plugin-diskusage.gemspec @@ -20,4 +20,6 @@ Gem::Specification.new do |spec| spec.add_dependency "sys-filesystem", "~> 1.1.4" spec.add_development_dependency "bundler", "~> 1.10" spec.add_development_dependency "rake", "~> 10.0" + spec.add_development_dependency "test-unit", "~> 3.2" + spec.add_development_dependency "test-unit-rr", "~> 1.0" end From 50dae9ea0ed4b0d8f91af3e5ad8691459595d527 Mon Sep 17 00:00:00 2001 From: Hiroshi Hatake Date: Mon, 29 May 2017 14:12:03 +0900 Subject: [PATCH 5/8] Add unit testing preparations --- Rakefile | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Rakefile b/Rakefile index 2995527..62b270e 100644 --- a/Rakefile +++ b/Rakefile @@ -1 +1,9 @@ require "bundler/gem_tasks" +require 'rake/testtask' +Rake::TestTask.new(:test) do |test| + test.libs << 'lib' << 'test' + test.pattern = 'test/**/test_*.rb' + test.verbose = true +end + +task :default => :test From 25bfd326f6aa620065d5bc92d0df67e647cbbb4c Mon Sep 17 00:00:00 2001 From: Hiroshi Hatake Date: Mon, 29 May 2017 14:12:28 +0900 Subject: [PATCH 6/8] Add unit test cases --- test/plugin/test_in_diskusage.rb | 63 ++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 test/plugin/test_in_diskusage.rb diff --git a/test/plugin/test_in_diskusage.rb b/test/plugin/test_in_diskusage.rb new file mode 100644 index 0000000..6528e12 --- /dev/null +++ b/test/plugin/test_in_diskusage.rb @@ -0,0 +1,63 @@ +require 'test/unit' +require 'fluent/test' +require 'fluent/test/helpers' +require 'fluent/test/driver/input' +require 'fluent/plugin/in_diskusage' + +class DiskUsageTest < Test::Unit::TestCase + include Fluent::Test::Helpers + + def setup + Fluent::Test.setup + end + + CONFIG = %[ + tag raw.diskusage + mountpoint / + label rootfs + ] + + CONFIG_REFRESH_INTERVAL = %[ + tag raw.diskusage + mountpoint / + label rootfs + refresh_interval 5 + ] + + def create_driver(conf = CONFIG) + Fluent::Test::Driver::Input.new(Fluent::Plugin::DiskUsage).configure(conf) + end + + class ConfigureTest < self + def test_default + d = create_driver + assert_equal 'raw.diskusage', d.instance.tag + assert_equal '/', d.instance.mountpoint + assert_equal 'rootfs', d.instance.label + assert_equal 120, d.instance.refresh_interval + end + + def test_refresh_interval + d = create_driver(CONFIG_REFRESH_INTERVAL) + assert_equal 'raw.diskusage', d.instance.tag + assert_equal '/', d.instance.mountpoint + assert_equal 'rootfs', d.instance.label + assert_equal 5, d.instance.refresh_interval + end + end + + def test_emit + d = create_driver(CONFIG + %[refresh_interval 1]) + d.run(expect_emits: 1) + events = d.events + now = event_time + assert_equal "raw.diskusage", events[0][0] + assert_in_delta events[0][1].to_f, now.to_f, 0.5 + assert_equal "rootfs", events[0][2]["label"] + assert_true events[0][2].has_key?("total_bytes") + assert_true events[0][2].has_key?("free_bytes") + assert_true events[0][2].has_key?("used_bytes") + assert_true events[0][2].has_key?("used_percent") + assert_true events[0][2].has_key?("free_percent") + end +end From 25dcb9932c10463a8d209f74624b9c98a5613707 Mon Sep 17 00:00:00 2001 From: Hiroshi Hatake Date: Mon, 29 May 2017 14:15:13 +0900 Subject: [PATCH 7/8] Depends on Fluentd v0.14.15 or later --- fluent-plugin-diskusage.gemspec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fluent-plugin-diskusage.gemspec b/fluent-plugin-diskusage.gemspec index 029d467..8e46176 100644 --- a/fluent-plugin-diskusage.gemspec +++ b/fluent-plugin-diskusage.gemspec @@ -16,7 +16,7 @@ Gem::Specification.new do |spec| spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) } spec.require_paths = ["lib"] - spec.add_dependency "fluentd", [">= 0.10.30", "< 2"] + spec.add_dependency "fluentd", [">= 0.14.15", "< 2"] spec.add_dependency "sys-filesystem", "~> 1.1.4" spec.add_development_dependency "bundler", "~> 1.10" spec.add_development_dependency "rake", "~> 10.0" From 88b9abb50d9fa0f16effb7ce45fd91a455a28d5c Mon Sep 17 00:00:00 2001 From: Hiroshi Hatake Date: Mon, 29 May 2017 14:15:33 +0900 Subject: [PATCH 8/8] Remove needless ensuring backward compatibility code Because Fluentd v0.14 Input Plugin always has router. --- lib/fluent/plugin/in_diskusage.rb | 5 ----- 1 file changed, 5 deletions(-) diff --git a/lib/fluent/plugin/in_diskusage.rb b/lib/fluent/plugin/in_diskusage.rb index 3f7d2f5..f73d4f0 100644 --- a/lib/fluent/plugin/in_diskusage.rb +++ b/lib/fluent/plugin/in_diskusage.rb @@ -6,11 +6,6 @@ class Fluent::Plugin::DiskUsage < Fluent::Plugin::Input helpers :timer - # Define `router` method to support v0.10.57 or earlier - unless method_defined?(:router) - define_method("router") { Fluent::Engine } - end - config_param :tag, :string config_param :mountpoint, :string config_param :label, :string