Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions Rakefile
Original file line number Diff line number Diff line change
@@ -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
4 changes: 3 additions & 1 deletion fluent-plugin-diskusage.gemspec
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,10 @@ 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"
spec.add_development_dependency "test-unit", "~> 3.2"
spec.add_development_dependency "test-unit-rr", "~> 1.0"
end
30 changes: 10 additions & 20 deletions lib/fluent/plugin/in_diskusage.rb
Original file line number Diff line number Diff line change
@@ -1,31 +1,23 @@
class Fluent::DiskUsage < Fluent::Input
require 'sys/filesystem'
require 'fluent/plugin/input'

class Fluent::Plugin::DiskUsage < Fluent::Plugin::Input
Fluent::Plugin.register_input('diskusage',self)

# Define `router` method to support v0.10.57 or earlier
unless method_defined?(:router)
define_method("router") { Fluent::Engine }
end

helpers :timer

config_param :tag, :string
config_param :mountpoint, :string
config_param :label, :string
config_param :refresh_interval, :integer, :default => 120

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
Expand All @@ -35,19 +27,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
63 changes: 63 additions & 0 deletions test/plugin/test_in_diskusage.rb
Original file line number Diff line number Diff line change
@@ -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