fluent-plugin-dstat 0.2.3 → 0.2.4

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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: fc4761593955b9c9bd4cb5bd1488446829ee8e23
4
+ data.tar.gz: 6082e8de5344ea01c541dd452466c670452625f5
5
+ SHA512:
6
+ metadata.gz: 1b83eefbe45c89710d3da6cdb8d96eacc247b784f61d620d0b769d8bf365501c6b9e3c295e7dd2c58f52f96035e29ca2a695f708282b9f4e6dc628440ebd258c
7
+ data.tar.gz: 83be387534ec99e441d59994d10f5bec21d894205f46d3bbd67119a3ab1368c56950be540f85d5c2a3ab83d80c0917d9bfa26527706d7dc32f908861a55adca6
data/README.md CHANGED
@@ -1,6 +1,4 @@
1
- Dstat plugin for Fluent
2
-
3
- Description goes here.
1
+ Dstat plugin for [Fluentd](http://fluentd.org)
4
2
 
5
3
  ## What's Dstat?
6
4
 
@@ -19,7 +17,13 @@ This plugin use Dstat, so you need to install Dstat before using this plugin.
19
17
  </source>
20
18
  ```
21
19
 
22
- * option:option for dstat command(default: -fcdnm)
20
+ #### Parameters
21
+
22
+ * option
23
+ * option for dstat command (default: -fcdnm)
24
+
25
+ * tag
26
+ * supported ${hostname} placeholder powered by [Fluent::Mixin::RewriteTagName](https://github.com/y-ken/fluent-mixin-rewrite-tag-name)
23
27
 
24
28
  ## Output Format
25
29
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.3
1
+ 0.2.4
@@ -2,14 +2,16 @@
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
3
  # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
+ # stub: fluent-plugin-dstat 0.2.4 ruby lib
5
6
 
6
7
  Gem::Specification.new do |s|
7
8
  s.name = "fluent-plugin-dstat"
8
- s.version = "0.2.3"
9
+ s.version = "0.2.4"
9
10
 
10
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
+ s.require_paths = ["lib"]
11
13
  s.authors = ["Shunsuke Mikami"]
12
- s.date = "2012-12-15"
14
+ s.date = "2014-02-09"
13
15
  s.email = "shun0102@gmail.com"
14
16
  s.extra_rdoc_files = [
15
17
  "LICENSE.txt",
@@ -29,12 +31,11 @@ Gem::Specification.new do |s|
29
31
  "test/plugin/test_in_dstat.rb"
30
32
  ]
31
33
  s.homepage = "http://github.com/shun0102/fluent-plugin-dstat"
32
- s.require_paths = ["lib"]
33
- s.rubygems_version = "1.8.23"
34
+ s.rubygems_version = "2.2.0"
34
35
  s.summary = "Dstat Input plugin for Fluent event collector"
35
36
 
36
37
  if s.respond_to? :specification_version then
37
- s.specification_version = 3
38
+ s.specification_version = 4
38
39
 
39
40
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
40
41
  s.add_runtime_dependency(%q<fluentd>, ["~> 0.10.7"])
@@ -1,176 +1,183 @@
1
+ require 'fluent/mixin/rewrite_tag_name'
2
+
1
3
  module Fluent
4
+ class DstatInput < Input
2
5
 
3
- class DstatInput < Input
6
+ Plugin.register_input('dstat', self)
4
7
 
5
- Plugin.register_input('dstat', self)
8
+ def initialize
9
+ super
6
10
 
7
- def initialize
8
- super
9
- require 'csv'
10
- @line_number = 0
11
- @first_keys = []
12
- @second_keys = []
13
- @data_array = []
14
- @max_lines = 100
15
- @last_time = Time.now
16
- end
11
+ require 'csv'
12
+ @line_number = 0
13
+ @first_keys = []
14
+ @second_keys = []
15
+ @data_array = []
16
+ @max_lines = 100
17
+ @last_time = Time.now
18
+ end
17
19
 
18
- config_param :tag, :string
19
- config_param :option, :string, :default => "-fcdnm"
20
- config_param :delay, :integer, :default => 1
21
- config_param :tmp_file, :string, :default => "/tmp/dstat.csv"
22
- config_param :hostname_command, :string, :default => "hostname"
20
+ config_param :tag, :string
21
+ config_param :dstat_path, :string, :default => "dstat"
22
+ config_param :option, :string, :default => "-fcdnm"
23
+ config_param :delay, :integer, :default => 1
24
+ config_param :tmp_file, :string, :default => "/tmp/dstat.csv"
25
+ config_param :hostname_command, :string, :default => "hostname"
23
26
 
24
- def configure(conf)
25
- super
26
- @command = "dstat #{@option} --output #{@tmp_file} #{@delay}"
27
- @hostname = `#{@hostname_command}`.chomp!
28
- end
27
+ include Fluent::Mixin::RewriteTagName
29
28
 
30
- def check_dstat
31
- restart if (Time.now - @last_time) > @delay*3
32
- end
29
+ def configure(conf)
30
+ super
33
31
 
34
- def start
35
- touch_or_truncate(@tmp_file)
36
- @io = IO.popen(@command, "r")
37
- @pid = @io.pid
38
-
39
- @loop = Coolio::Loop.new
40
- @dw = DstatCSVWatcher.new(@tmp_file, &method(:receive_lines))
41
- @dw.attach(@loop)
42
- @tw = TimerWatcher.new(1, true, &method(:check_dstat))
43
- @tw.attach(@loop)
44
- @thread = Thread.new(&method(:run))
45
- end
32
+ @command = "#{@dstat_path} #{@option} --output #{@tmp_file} #{@delay}"
33
+ @hostname = `#{@hostname_command}`.chomp!
34
+ end
46
35
 
47
- def shutdown
48
- Process.kill(:TERM, @pid)
49
- @dw.detach
50
- @tw.detach
51
- @loop.stop
52
- @thread.join
53
- File.delete(@tmp_file)
54
- end
36
+ def check_dstat
37
+ restart if (Time.now - @last_time) > @delay*3
38
+ end
55
39
 
56
- def run
57
- begin
58
- @loop.run
59
- rescue
60
- $log.error "unexpected error", :error=>$!.to_s
61
- $log.error_backtrace
40
+ def start
41
+ touch_or_truncate(@tmp_file)
42
+ @io = IO.popen(@command, "r")
43
+ @pid = @io.pid
44
+
45
+ @loop = Coolio::Loop.new
46
+ @dw = DstatCSVWatcher.new(@tmp_file, &method(:receive_lines))
47
+ @dw.attach(@loop)
48
+ @tw = TimerWatcher.new(1, true, &method(:check_dstat))
49
+ @tw.attach(@loop)
50
+ @thread = Thread.new(&method(:run))
62
51
  end
63
- end
64
52
 
65
- def restart
66
- Process.detach(@pid)
67
- Process.kill(:TERM, @pid)
68
- @dw.detach
69
- @tw.detach
70
- @line_number = 0
71
- touch_or_truncate(@tmp_file)
72
-
73
- @io = IO.popen(@command, "r")
74
- @pid = @io.pid
75
- @dw = DstatCSVWatcher.new(@tmp_file, &method(:receive_lines))
76
- @dw.attach(@loop)
77
- @tw = TimerWatcher.new(1, true, &method(:check_dstat))
78
- @tw.attach(@loop)
79
- end
53
+ def shutdown
54
+ Process.kill(:TERM, @pid)
55
+ @dw.detach
56
+ @tw.detach
57
+ @loop.stop
58
+ @thread.join
59
+ File.delete(@tmp_file)
60
+ end
80
61
 
81
- def touch_or_truncate(file)
82
- if File.exist?(file)
83
- File.truncate(file, 0)
84
- else
85
- `touch #{file}`
62
+ def run
63
+ begin
64
+ @loop.run
65
+ rescue
66
+ $log.error "unexpected error", :error=>$!.to_s
67
+ $log.error_backtrace
68
+ end
86
69
  end
87
- end
88
70
 
89
- def receive_lines(lines)
90
- lines.each do |line|
91
- next if line == ""
92
- case @line_number
93
- when 0..1
94
- when 2
95
- line.delete!("\"")
96
- @first_keys = CSV.parse_line(line)
97
- pre_key = ""
98
- @first_keys.each_with_index do |key, index|
99
- if key.nil? || key == ""
100
- @first_keys[index] = pre_key
71
+ def restart
72
+ Process.detach(@pid)
73
+ Process.kill(:TERM, @pid)
74
+ @dw.detach
75
+ @tw.detach
76
+ @line_number = 0
77
+ touch_or_truncate(@tmp_file)
78
+
79
+ @io = IO.popen(@command, "r")
80
+ @pid = @io.pid
81
+ @dw = DstatCSVWatcher.new(@tmp_file, &method(:receive_lines))
82
+ @dw.attach(@loop)
83
+ @tw = TimerWatcher.new(1, true, &method(:check_dstat))
84
+ @tw.attach(@loop)
85
+ end
86
+
87
+ def touch_or_truncate(file)
88
+ if File.exist?(file)
89
+ File.truncate(file, 0)
90
+ else
91
+ `touch #{file}`
92
+ end
93
+ end
94
+
95
+ def receive_lines(lines)
96
+ lines.each do |line|
97
+ next if line == ""
98
+ case @line_number
99
+ when 0..1
100
+ when 2
101
+ line.delete!("\"")
102
+ @first_keys = CSV.parse_line(line)
103
+ pre_key = ""
104
+ @first_keys.each_with_index do |key, index|
105
+ if key.nil? || key == ""
106
+ @first_keys[index] = pre_key
107
+ end
108
+ pre_key = @first_keys[index]
101
109
  end
102
- pre_key = @first_keys[index]
103
- end
104
- when 3
105
- line.delete!("\"")
106
- @second_keys = line.split(',')
107
- @first_keys.each_with_index do |key, index|
108
- @data_array[index] = {}
109
- @data_array[index][:first] = key
110
- @data_array[index][:second] = @second_keys[index]
110
+ when 3
111
+ line.delete!("\"")
112
+ @second_keys = line.split(',')
113
+ @first_keys.each_with_index do |key, index|
114
+ @data_array[index] = {}
115
+ @data_array[index][:first] = key
116
+ @data_array[index][:second] = @second_keys[index]
117
+ end
118
+ else
119
+ values = line.split(',')
120
+ data = Hash.new { |hash,key| hash[key] = Hash.new {} }
121
+ values.each_with_index do |v, index|
122
+ data[@first_keys[index]][@second_keys[index]] = v
123
+ end
124
+ record = {
125
+ 'hostname' => @hostname,
126
+ 'dstat' => data
127
+ }
128
+ emit_tag = @tag.dup
129
+ filter_record(emit_tag, Engine.now, record)
130
+ Engine.emit(emit_tag, Engine.now, record)
111
131
  end
112
- else
113
- values = line.split(',')
114
- data = Hash.new { |hash,key| hash[key] = Hash.new {} }
115
- values.each_with_index do |v, index|
116
- data[@first_keys[index]][@second_keys[index]] = v
132
+
133
+ if (@line_number % @max_lines) == (@max_lines - 1)
134
+ @dw.detach
135
+ File.truncate(@tmp_file, 0)
136
+ @dw = DstatCSVWatcher.new(@tmp_file, &method(:receive_lines))
137
+ @dw.attach(@loop)
117
138
  end
118
- record = {
119
- 'hostname' => @hostname,
120
- 'dstat' => data
121
- }
122
- Engine.emit(@tag, Engine.now, record)
123
- end
124
139
 
125
- if (@line_number % @max_lines) == (@max_lines - 1)
126
- @dw.detach
127
- File.truncate(@tmp_file, 0)
128
- @dw = DstatCSVWatcher.new(@tmp_file, &method(:receive_lines))
129
- @dw.attach(@loop)
140
+ @line_number += 1
141
+ @last_time = Time.now
130
142
  end
131
143
 
132
- @line_number += 1
133
- @last_time = Time.now
134
144
  end
135
145
 
136
- end
146
+ class DstatCSVWatcher < Cool.io::StatWatcher
147
+ INTERVAL = 0.500
148
+ attr_accessor :previous, :cur
137
149
 
138
- class DstatCSVWatcher < Cool.io::StatWatcher
139
- INTERVAL = 0.500
140
- attr_accessor :previous, :cur
150
+ def initialize(path, &receive_lines)
151
+ super path, INTERVAL
152
+ @path = path
153
+ @io = File.open(path)
154
+ @pos = 0
155
+ @receive_lines = receive_lines
156
+ end
141
157
 
142
- def initialize(path, &receive_lines)
143
- super path, INTERVAL
144
- @path = path
145
- @io = File.open(path)
146
- @pos = 0
147
- @receive_lines = receive_lines
158
+ def on_change(prev, cur)
159
+ buffer = @io.read(cur.size - @pos)
160
+ @pos = cur.size
161
+ lines = []
162
+ while line = buffer.slice!(/.*?\n/m)
163
+ lines << line.chomp
164
+ end
165
+ @receive_lines.call(lines)
166
+ end
148
167
  end
149
168
 
150
- def on_change(prev, cur)
151
- buffer = @io.read(cur.size - @pos)
152
- @pos = cur.size
153
- lines = []
154
- while line = buffer.slice!(/.*?\n/m)
155
- lines << line.chomp
169
+ class TimerWatcher < Coolio::TimerWatcher
170
+ def initialize(interval, repeat, &check_dstat)
171
+ @check_dstat = check_dstat
172
+ super(interval, repeat)
156
173
  end
157
- @receive_lines.call(lines)
158
- end
159
- end
160
- class TimerWatcher < Coolio::TimerWatcher
161
- def initialize(interval, repeat, &check_dstat)
162
- @check_dstat = check_dstat
163
- super(interval, repeat)
164
- end
165
174
 
166
- def on_timer
167
- @check_dstat.call
168
- rescue
169
- $log.error $!.to_s
170
- $log.error_backtrace
175
+ def on_timer
176
+ @check_dstat.call
177
+ rescue
178
+ $log.error $!.to_s
179
+ $log.error_backtrace
180
+ end
171
181
  end
172
182
  end
173
183
  end
174
-
175
-
176
- end
metadata CHANGED
@@ -1,94 +1,83 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluent-plugin-dstat
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.3
5
- prerelease:
4
+ version: 0.2.4
6
5
  platform: ruby
7
6
  authors:
8
7
  - Shunsuke Mikami
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2012-12-15 00:00:00.000000000 Z
11
+ date: 2014-02-09 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: fluentd
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ~>
17
+ - - "~>"
20
18
  - !ruby/object:Gem::Version
21
19
  version: 0.10.7
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ~>
24
+ - - "~>"
28
25
  - !ruby/object:Gem::Version
29
26
  version: 0.10.7
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: rdoc
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ! '>='
31
+ - - ">="
36
32
  - !ruby/object:Gem::Version
37
33
  version: '0'
38
34
  type: :runtime
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
- - - ! '>='
38
+ - - ">="
44
39
  - !ruby/object:Gem::Version
45
40
  version: '0'
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: shoulda
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
- - - ! '>='
45
+ - - ">="
52
46
  - !ruby/object:Gem::Version
53
47
  version: '0'
54
48
  type: :development
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
- - - ! '>='
52
+ - - ">="
60
53
  - !ruby/object:Gem::Version
61
54
  version: '0'
62
55
  - !ruby/object:Gem::Dependency
63
56
  name: bundler
64
57
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
58
  requirements:
67
- - - ~>
59
+ - - "~>"
68
60
  - !ruby/object:Gem::Version
69
61
  version: '1.0'
70
62
  type: :development
71
63
  prerelease: false
72
64
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
65
  requirements:
75
- - - ~>
66
+ - - "~>"
76
67
  - !ruby/object:Gem::Version
77
68
  version: '1.0'
78
69
  - !ruby/object:Gem::Dependency
79
70
  name: jeweler
80
71
  requirement: !ruby/object:Gem::Requirement
81
- none: false
82
72
  requirements:
83
- - - ~>
73
+ - - "~>"
84
74
  - !ruby/object:Gem::Version
85
75
  version: 1.6.4
86
76
  type: :development
87
77
  prerelease: false
88
78
  version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
79
  requirements:
91
- - - ~>
80
+ - - "~>"
92
81
  - !ruby/object:Gem::Version
93
82
  version: 1.6.4
94
83
  description:
@@ -99,7 +88,7 @@ extra_rdoc_files:
99
88
  - LICENSE.txt
100
89
  - README.md
101
90
  files:
102
- - .document
91
+ - ".document"
103
92
  - AUTHORS
104
93
  - Gemfile
105
94
  - LICENSE.txt
@@ -112,29 +101,25 @@ files:
112
101
  - test/plugin/test_in_dstat.rb
113
102
  homepage: http://github.com/shun0102/fluent-plugin-dstat
114
103
  licenses: []
104
+ metadata: {}
115
105
  post_install_message:
116
106
  rdoc_options: []
117
107
  require_paths:
118
108
  - lib
119
109
  required_ruby_version: !ruby/object:Gem::Requirement
120
- none: false
121
110
  requirements:
122
- - - ! '>='
111
+ - - ">="
123
112
  - !ruby/object:Gem::Version
124
113
  version: '0'
125
- segments:
126
- - 0
127
- hash: 2096726281248138972
128
114
  required_rubygems_version: !ruby/object:Gem::Requirement
129
- none: false
130
115
  requirements:
131
- - - ! '>='
116
+ - - ">="
132
117
  - !ruby/object:Gem::Version
133
118
  version: '0'
134
119
  requirements: []
135
120
  rubyforge_project:
136
- rubygems_version: 1.8.23
121
+ rubygems_version: 2.2.0
137
122
  signing_key:
138
- specification_version: 3
123
+ specification_version: 4
139
124
  summary: Dstat Input plugin for Fluent event collector
140
125
  test_files: []