fluent-plugin-watch-process 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -3,7 +3,7 @@ $:.push File.expand_path("../lib", __FILE__)
3
3
 
4
4
  Gem::Specification.new do |s|
5
5
  s.name = "fluent-plugin-watch-process"
6
- s.version = "0.0.2"
6
+ s.version = "0.0.3"
7
7
  s.authors = ["Kentaro Yoshida"]
8
8
  s.email = ["y.ken.studio@gmail.com"]
9
9
  s.homepage = "https://github.com/y-ken/fluent-plugin-watch-process"
@@ -17,4 +17,6 @@ Gem::Specification.new do |s|
17
17
  # specify any dependencies:
18
18
  s.add_development_dependency "rake"
19
19
  s.add_runtime_dependency "fluentd"
20
+ s.add_runtime_dependency "fluent-mixin-rewrite-tag-name"
21
+ s.add_runtime_dependency "fluent-mixin-type-converter"
20
22
  end
@@ -1,3 +1,6 @@
1
+ require 'fluent/mixin/rewrite_tag_name'
2
+ require 'fluent/mixin/type_converter'
3
+
1
4
  module Fluent
2
5
  class WatchProcessInput < Fluent::Input
3
6
  Plugin.register_input('watch_process', self)
@@ -5,33 +8,21 @@ module Fluent
5
8
  config_param :tag, :string
6
9
  config_param :command, :string, :default => nil
7
10
  config_param :keys, :string, :default => nil
8
- config_param :types, :string, :default => nil
9
11
  config_param :interval, :string, :default => '5s'
10
12
  config_param :lookup_user, :string, :default => nil
11
13
  config_param :hostname_command, :string, :default => 'hostname'
12
14
 
13
15
  DEFAULT_KEYS = %w(start_time user pid parent_pid cpu_time cpu_percent memory_percent mem_rss mem_size state proc_name command)
14
- DEFAULT_TYPES = %w(pid:integer parent_pid:integer cpu_percent:float memory_percent:float mem_rss:integer mem_size:integer)
15
-
16
- Converters = {
17
- 'string' => lambda { |v| v.to_s },
18
- 'integer' => lambda { |v| v.to_i },
19
- 'float' => lambda { |v| v.to_f },
20
- 'bool' => lambda { |v|
21
- case v.downcase
22
- when 'true', 'yes', '1'
23
- true
24
- else
25
- false
26
- end
27
- },
28
- 'time' => lambda { |v, time_parser|
29
- time_parser.parse(v)
30
- },
31
- 'array' => lambda { |v, delimiter|
32
- v.to_s.split(delimiter)
33
- }
34
- }
16
+ DEFAULT_TYPES = "pid:integer,parent_pid:integer,cpu_percent:float,memory_percent:float,mem_rss:integer,mem_size:integer"
17
+
18
+ include Fluent::HandleTagNameMixin
19
+
20
+ include Fluent::Mixin::RewriteTagName
21
+ config_set_default :enable_placeholder_upcase, true
22
+ config_set_default :enable_placeholder_hostname, true
23
+
24
+ include Fluent::Mixin::TypeConverter
25
+ config_param :types, :string, :default => DEFAULT_TYPES
35
26
 
36
27
  def initialize
37
28
  super
@@ -43,11 +34,8 @@ module Fluent
43
34
 
44
35
  @command = @command || get_ps_command
45
36
  @keys = @keys.nil? ? DEFAULT_KEYS : @keys.to_s.gsub(' ', '').split(',')
46
- @types = @types || DEFAULT_TYPES
47
- @types_map = Hash[types.map{|v| v.split(':')}]
48
37
  @lookup_user = @lookup_user.gsub(' ', '').split(',') unless @lookup_user.nil?
49
38
  @interval = Config.time_value(@interval)
50
- @hostname = `#{@hostname_command}`.chomp
51
39
  $log.info "watch_process: polling start. :tag=>#{@tag} :lookup_user=>#{@lookup_user} :interval=>#{@interval} :command=>#{@command}"
52
40
  end
53
41
 
@@ -65,22 +53,18 @@ module Fluent
65
53
  io.gets
66
54
  while result = io.gets
67
55
  keys_size = @keys.size
68
- if result =~ /(?<lstart>(^\w+ \w+ \d+ \d\d:\d\d:\d\d \d+))/
56
+ if result =~ /(?<lstart>(^\w+\s+\w+\s+\d+\s+\d\d:\d\d:\d\d \d+))/
69
57
  lstart = Time.parse($~[:lstart])
70
- values = result.sub($~[:lstart], '')
58
+ result = result.sub($~[:lstart], '')
71
59
  keys_size -= 1
72
60
  end
73
- values = values.chomp.strip.split(/\s+/, keys_size)
74
- data = Hash[
75
- @keys.zip([lstart.to_s, values].reject(&:empty?).flatten).map do |k,v|
76
- v = Converters[@types_map[k]].call(v) if @types_map.include?(k)
77
- [k,v]
78
- end
79
- ]
61
+ values = [lstart.to_s, result.chomp.strip.split(/\s+/, keys_size)]
62
+ data = Hash[@keys.zip(values.reject(&:empty?).flatten)]
80
63
  data['elapsed_time'] = (Time.now - Time.parse(data['start_time'])).to_i if data['start_time']
81
64
  next unless @lookup_user.nil? || @lookup_user.include?(data['user'])
82
- tag = @tag.gsub(/(\${[a-z]+}|__[A-Z]+__)/, get_placeholder)
83
- Engine.emit(tag, Engine.now, data)
65
+ emit_tag = tag.dup
66
+ filter_record(emit_tag, Engine.now, data)
67
+ Engine.emit(emit_tag, Engine.now, data)
84
68
  end
85
69
  io.close
86
70
  sleep @interval
@@ -115,12 +99,5 @@ module Fluent
115
99
  OS.unix? and not OS.mac?
116
100
  end
117
101
  end
118
-
119
- def get_placeholder
120
- return {
121
- '__HOSTNAME__' => @hostname,
122
- '${hostname}' => @hostname,
123
- }
124
- end
125
102
  end
126
103
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluent-plugin-watch-process
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-01-17 00:00:00.000000000 Z
12
+ date: 2014-01-21 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
@@ -43,6 +43,38 @@ dependencies:
43
43
  - - ! '>='
44
44
  - !ruby/object:Gem::Version
45
45
  version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: fluent-mixin-rewrite-tag-name
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: fluent-mixin-type-converter
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ type: :runtime
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
46
78
  description:
47
79
  email:
48
80
  - y.ken.studio@gmail.com