fluent-plugin-zabbix 0.2.3 → 0.3.1

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
- SHA1:
3
- metadata.gz: 1e840411e29db42fc60e77d0b56235e8012bb9e6
4
- data.tar.gz: 1ed7a4df13454605e0c1a9dd00003353db7d5aac
2
+ SHA256:
3
+ metadata.gz: 97c7b621772f409af613b565d2b734e55786b00618297de55a53ece1949caf9e
4
+ data.tar.gz: a1e9d865a2bade7536f5c4ba886706640616f3a794066a267bf75971d4da1b38
5
5
  SHA512:
6
- metadata.gz: 27c58fc74df1d1d0ba806ec89586588eb63d236bf4c35edf638986f4e06aa8d305005e5845800206a090b9a53dc8a6d246f0b770b85fd92543931b3130f20bd8
7
- data.tar.gz: 1a18cfb1ba839c90ec7908fe820f564ddfb75ec20fcfa5c517e16c855417a5b1e93e5b479e008bf8b3649ac079779521ea49556d61390ebd61870c6943e62777
6
+ metadata.gz: 36a71a4ea7e3b9f3188d976f301b7fbde974d5ccd7580a234332f7f8b0d93cb8848d52b5700cb7bb786539a869daedf617f5b1e4e8f18601cf814b8dea063cfd
7
+ data.tar.gz: 598ac514f14971ae29a3e7f3d548806dcf7af2649bf8b341fb944a5647b4ead579be81cefd997aaa53c2e706da14e3a9cab57076b3cec45f3684aeebdf3cfd87
@@ -0,0 +1,8 @@
1
+ version: 2
2
+ updates:
3
+ - package-ecosystem: bundler
4
+ directory: "/"
5
+ schedule:
6
+ interval: daily
7
+ time: "20:00"
8
+ open-pull-requests-limit: 10
@@ -0,0 +1,23 @@
1
+ name: test
2
+ on: [push]
3
+ jobs:
4
+ build:
5
+ runs-on: ubuntu-latest
6
+ strategy:
7
+ matrix:
8
+ ruby: ["2.7", "3.0", "3.1", "3.2"]
9
+ name: test on Ruby ${{ matrix.ruby }}
10
+ steps:
11
+ - uses: actions/checkout@v4
12
+ - uses: actions/setup-go@v5
13
+ with:
14
+ go-version: "1.21"
15
+ - uses: ruby/setup-ruby@v1
16
+ with:
17
+ ruby-version: ${{ matrix.ruby }}
18
+ bundler-cache: true
19
+ - run: bundle install
20
+ - run: |
21
+ bundle exec rake test
22
+ env:
23
+ LIVE_TEST: 1
data/.travis.yml CHANGED
@@ -3,6 +3,7 @@ rvm:
3
3
  - 2.1
4
4
  - 2.2
5
5
  - 2.3
6
+ - 2.4.0
6
7
  gemfile:
7
8
  - Gemfile
8
9
  before_install:
data/README.md CHANGED
@@ -67,6 +67,8 @@ v0.0.7~ includes [Fluent::Mixin::ConfigPlaceholders](https://github.com/tagomori
67
67
  </match>
68
68
  ```
69
69
 
70
+ `host` parameter is set by default to Ruby's `Socket.gethostname` if not specified.
71
+
70
72
  # TODO
71
73
 
72
74
  - patches welcome!
data/Rakefile CHANGED
@@ -9,4 +9,4 @@ Rake::TestTask.new(:test) do |test|
9
9
  test.verbose = true
10
10
  end
11
11
 
12
- task :default => :test
12
+ task default: :test
@@ -14,12 +14,12 @@ Gem::Specification.new do |gem|
14
14
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
15
15
  gem.name = "fluent-plugin-zabbix"
16
16
  gem.require_paths = ["lib"]
17
- gem.version = "0.2.3"
17
+ gem.version = "0.3.1"
18
18
 
19
- gem.add_runtime_dependency "fluentd", [">= 0.10", "< 2"]
19
+ gem.add_runtime_dependency "fluentd", [">= 0.14.8", "< 2"]
20
20
  gem.add_runtime_dependency "yajl-ruby", "~> 1.0"
21
21
  gem.add_runtime_dependency "fluent-mixin-config-placeholders", "~> 0.3"
22
22
  gem.add_development_dependency "rake", ">= 0.9.2"
23
- gem.add_development_dependency "glint", "= 0.0.2"
23
+ gem.add_development_dependency "glint", "= 0.1.0"
24
24
  gem.add_development_dependency "test-unit", ">= 3.1.0"
25
25
  end
@@ -1,40 +1,28 @@
1
+ require 'socket'
2
+ require 'yajl'
3
+ require 'fluent/plugin/output'
1
4
  require 'fluent/mixin/config_placeholders'
2
5
 
3
- class Fluent::ZabbixOutput < Fluent::Output
6
+ class Fluent::Plugin::ZabbixOutput < Fluent::Plugin::Output
4
7
  Fluent::Plugin.register_output('zabbix', self)
5
8
 
6
9
  ZBXD = "ZBXD\x01"
7
10
  ZBX_PROTO_VALUE_SENDER_DATA = 'sender data'
8
11
 
9
- def initialize
10
- super
11
- require 'socket'
12
- require 'yajl'
13
- end
14
-
15
12
  config_param :zabbix_server, :string
16
- config_param :port, :integer, :default => 10051
17
- config_param :host, :string, :default => Socket.gethostname
18
- config_param :host_key, :string, :default => nil
19
- config_param :name_keys, :string, :default => nil
20
- config_param :name_key_pattern, :string, :default => nil
21
- config_param :add_key_prefix, :string, :default => nil
22
- config_param :prefix_key, :string, :default => nil
13
+ config_param :port, :integer, default: 10051
14
+ config_param :host, :string, default: Socket.gethostname
15
+ config_param :host_key, :string, default: nil
16
+ config_param :name_keys, :string, default: nil
17
+ config_param :name_key_pattern, :string, default: nil
18
+ config_param :add_key_prefix, :string, default: nil
19
+ config_param :prefix_key, :string, default: nil
23
20
 
24
21
  include Fluent::Mixin::ConfigPlaceholders
25
22
 
26
- # Define `log` method for v0.10.42 or earlier
27
- unless method_defined?(:log)
28
- define_method("log") { $log }
29
- end
30
-
31
23
  def configure(conf)
32
24
  super
33
25
 
34
- if @zabbix_server.nil?
35
- raise Fluent::ConfigError, "missing zabbix_server"
36
- end
37
-
38
26
  if @name_keys.nil? and @name_key_pattern.nil?
39
27
  raise Fluent::ConfigError, "missing both of name_keys and name_key_pattern"
40
28
  end
@@ -49,12 +37,8 @@ class Fluent::ZabbixOutput < Fluent::Output
49
37
  end
50
38
  end
51
39
 
52
- def start
53
- super
54
- end
55
-
56
- def shutdown
57
- super
40
+ def multi_workers_ready?
41
+ true
58
42
  end
59
43
 
60
44
  def bulk_send(time, bulk)
@@ -76,17 +60,17 @@ class Fluent::ZabbixOutput < Fluent::Output
76
60
  end
77
61
  end
78
62
 
79
- def emit(tag, es, chain)
63
+ def process(tag, es)
80
64
  if @name_keys
81
65
  es.each {|time,record|
82
66
  host = gen_host(record)
83
67
  bulk = []
84
68
  @name_keys.each {|key|
85
69
  if record[key]
86
- bulk.push({ :key => format_key(tag, key, record),
87
- :value => format_value(record[key]),
88
- :host => host,
89
- :time => time.to_i,
70
+ bulk.push({ key: format_key(tag, key, record),
71
+ value: format_value(record[key]),
72
+ host: host,
73
+ clock: time.to_i,
90
74
  })
91
75
  end
92
76
  }
@@ -98,17 +82,16 @@ class Fluent::ZabbixOutput < Fluent::Output
98
82
  bulk = []
99
83
  record.keys.each {|key|
100
84
  if @name_key_pattern.match(key) && record[key]
101
- bulk.push({ :key => format_key(tag, key, record),
102
- :value => format_value(record[key]),
103
- :host => host,
104
- :time => time.to_i,
85
+ bulk.push({ key: format_key(tag, key, record),
86
+ value: format_value(record[key]),
87
+ host: host,
88
+ clock: time.to_i,
105
89
  })
106
90
  end
107
91
  }
108
92
  bulk_send(time, bulk) if bulk.size > 0
109
93
  }
110
94
  end
111
- chain.next
112
95
  end
113
96
 
114
97
  def gen_host(record)
@@ -155,9 +138,9 @@ class Fluent::ZabbixOutput < Fluent::Output
155
138
 
156
139
  def send_to_zabbix(sock, time, bulk)
157
140
  req = Yajl::Encoder.encode({
158
- :request => ZBX_PROTO_VALUE_SENDER_DATA,
159
- :clock => time.to_i,
160
- :data => bulk,
141
+ request: ZBX_PROTO_VALUE_SENDER_DATA,
142
+ clock: time.to_i,
143
+ data: bulk,
161
144
  })
162
145
  sock.write(ZBXD + [ req.size ].pack('q') + req)
163
146
  sock.flush
data/mockserver/go.mod ADDED
@@ -0,0 +1,5 @@
1
+ module github.com/fujiwara/fluent-plugin-zabbix/mockserver
2
+
3
+ go 1.18
4
+
5
+ require github.com/fujiwara/go-zabbix-get v0.1.0
data/mockserver/go.sum ADDED
@@ -0,0 +1,2 @@
1
+ github.com/fujiwara/go-zabbix-get v0.1.0 h1:Aufw3MvWksIc9wCTbHipikkBFX8PD220IrnE9LC7eO8=
2
+ github.com/fujiwara/go-zabbix-get v0.1.0/go.mod h1:1C6hUoBE4tOGZFGqHhhIj3NBfU8BJ+/YDDRGjLQhSdA=
@@ -31,10 +31,11 @@ func main() {
31
31
  func handler(req zabbix.TrapperRequest) (res zabbix.TrapperResponse, err error) {
32
32
  for _, d := range req.Data {
33
33
  line := fmt.Sprintf(
34
- "host:%s\tkey:%s\tvalue:%s\n",
34
+ "host:%s\tkey:%s\tvalue:%s\tclock:%d\n",
35
35
  d.Host,
36
36
  d.Key,
37
37
  d.Value,
38
+ d.Clock,
38
39
  )
39
40
  Output.Write([]byte(line))
40
41
  }
@@ -1,9 +1,10 @@
1
1
  require 'helper'
2
+ require 'fluent/test/driver/output'
2
3
 
3
4
  if ENV['LIVE_TEST']
4
5
  require "glint"
5
6
  require "tmpdir"
6
- system "go", "build", "test/mockserver.go"
7
+ system "sh -c 'cd mockserver && go build mockserver.go'"
7
8
  end
8
9
 
9
10
  class ZabbixOutputTest < Test::Unit::TestCase
@@ -11,8 +12,8 @@ class ZabbixOutputTest < Test::Unit::TestCase
11
12
  Fluent::Test.setup
12
13
  if ENV['LIVE_TEST']
13
14
  $dir = Dir.mktmpdir
14
- $server = Glint::Server.new(10051, { :timeout => 3 }) do |port|
15
- exec "./mockserver", $dir.to_s + "/trapper.log"
15
+ $server = Glint::Server.new(10051, { timeout: 3 }) do |port|
16
+ exec "./mockserver/mockserver", $dir.to_s + "/trapper.log"
16
17
  end
17
18
  $server.start
18
19
  end
@@ -25,29 +26,31 @@ class ZabbixOutputTest < Test::Unit::TestCase
25
26
  name_keys foo, bar, baz, f1, f2
26
27
  ]
27
28
 
28
- def create_driver(conf = CONFIG, tag='test')
29
- Fluent::Test::OutputTestDriver.new(Fluent::ZabbixOutput, tag).configure(conf)
29
+ def create_driver(conf = CONFIG)
30
+ Fluent::Test::Driver::Output.new(Fluent::Plugin::ZabbixOutput).configure(conf)
30
31
  end
31
32
 
32
33
  def test_write
33
34
  d = create_driver
35
+ now = Time.now.to_i
34
36
  if ENV['LIVE_TEST']
35
- d.emit({"foo" => "test value of foo"})
36
- d.emit({"bar" => "test value of bar"})
37
- d.emit({"baz" => 123.4567 })
38
- d.emit({"foo" => "yyy", "zabbix_host" => "alternative-hostname"})
39
- d.emit({"f1" => 0.000001})
40
- d.emit({"f2" => 0.01})
41
- d.run
42
- sleep 1
37
+ d.run() do
38
+ d.feed('test', now, {"foo" => "test value of foo"})
39
+ d.feed('test', now, {"bar" => "test value of bar"})
40
+ d.feed('test', now, {"baz" => 123.4567 })
41
+ d.feed('test', now, {"foo" => "yyy", "zabbix_host" => "alternative-hostname"})
42
+ d.feed('test', now, {"f1" => 0.000001})
43
+ d.feed('test', now, {"f2" => 0.01})
44
+ sleep 1
45
+ end
43
46
  $server.stop
44
47
  assert_equal open($dir + "/trapper.log").read, <<END
45
- host:test_host key:test.foo value:test value of foo
46
- host:test_host key:test.bar value:test value of bar
47
- host:test_host key:test.baz value:123.4567
48
- host:test_host key:test.foo value:yyy
49
- host:test_host key:test.f1 value:0.0
50
- host:test_host key:test.f2 value:0.01
48
+ host:test_host key:test.foo value:test value of foo clock:#{now}
49
+ host:test_host key:test.bar value:test value of bar clock:#{now}
50
+ host:test_host key:test.baz value:123.4567 clock:#{now}
51
+ host:test_host key:test.foo value:yyy clock:#{now}
52
+ host:test_host key:test.f1 value:0.0 clock:#{now}
53
+ host:test_host key:test.f2 value:0.01 clock:#{now}
51
54
  END
52
55
  end
53
56
  end
@@ -60,8 +63,8 @@ END
60
63
  name_keys foo, bar, baz
61
64
  ]
62
65
 
63
- def create_driver_host_key(conf = CONFIG_HOST_KEY, tag='test')
64
- Fluent::Test::OutputTestDriver.new(Fluent::ZabbixOutput, tag).configure(conf)
66
+ def create_driver_host_key(conf = CONFIG_HOST_KEY)
67
+ Fluent::Test::Driver::Output.new(Fluent::Plugin::ZabbixOutput).configure(conf)
65
68
  end
66
69
 
67
70
  CONFIG_PREFIX_KEY = %[
@@ -71,36 +74,40 @@ END
71
74
  name_keys foo, bar, baz
72
75
  ]
73
76
 
74
- def create_driver_prefix_key(conf = CONFIG_PREFIX_KEY, tag='test')
75
- Fluent::Test::OutputTestDriver.new(Fluent::ZabbixOutput, tag).configure(conf)
77
+ def create_driver_prefix_key(conf = CONFIG_PREFIX_KEY)
78
+ Fluent::Test::Driver::Output.new(Fluent::Plugin::ZabbixOutput).configure(conf)
76
79
  end
77
80
 
78
81
  def test_write_host_key
79
82
  d = create_driver_host_key
83
+ now = Time.now.to_i
80
84
  if ENV['LIVE_TEST']
81
- d.emit({"foo" => "AAA" })
82
- d.emit({"foo" => "BBB", "host" => "alternative-hostname"})
83
- d.run
84
- sleep 1
85
+ d.run() do
86
+ d.feed('test', now, {"foo" => "AAA" })
87
+ d.feed('test', now, {"foo" => "BBB", "host" => "alternative-hostname"})
88
+ sleep 1
89
+ end
85
90
  $server.stop
86
91
  assert_equal open($dir + "/trapper.log").read, <<END
87
- host:test_host key:test.foo value:AAA
88
- host:alternative-hostname key:test.foo value:BBB
92
+ host:test_host key:test.foo value:AAA clock:#{now}
93
+ host:alternative-hostname key:test.foo value:BBB clock:#{now}
89
94
  END
90
95
  end
91
96
  end
92
97
 
93
98
  def test_write_prefix_key
94
99
  d = create_driver_prefix_key
100
+ now = Time.now.to_i
95
101
  if ENV['LIVE_TEST']
96
- d.emit({"foo" => "AAA"})
97
- d.emit({"foo" => "BBB", "prefix" => "p"})
98
- d.run
99
- sleep 1
102
+ d.run() do
103
+ d.feed('test', now, {"foo" => "AAA"})
104
+ d.feed('test', now, {"foo" => "BBB", "prefix" => "p"})
105
+ sleep 1
106
+ end
100
107
  $server.stop
101
108
  assert_equal open($dir + "/trapper.log").read, <<END
102
- host:test_host key:foo value:AAA
103
- host:test_host key:p.foo value:BBB
109
+ host:test_host key:foo value:AAA clock:#{now}
110
+ host:test_host key:p.foo value:BBB clock:#{now}
104
111
  END
105
112
  end
106
113
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluent-plugin-zabbix
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.3
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - FUJIWARA Shunichiro
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-08-30 00:00:00.000000000 Z
11
+ date: 2023-12-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: fluentd
@@ -16,7 +16,7 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '0.10'
19
+ version: 0.14.8
20
20
  - - "<"
21
21
  - !ruby/object:Gem::Version
22
22
  version: '2'
@@ -26,7 +26,7 @@ dependencies:
26
26
  requirements:
27
27
  - - ">="
28
28
  - !ruby/object:Gem::Version
29
- version: '0.10'
29
+ version: 0.14.8
30
30
  - - "<"
31
31
  - !ruby/object:Gem::Version
32
32
  version: '2'
@@ -78,14 +78,14 @@ dependencies:
78
78
  requirements:
79
79
  - - '='
80
80
  - !ruby/object:Gem::Version
81
- version: 0.0.2
81
+ version: 0.1.0
82
82
  type: :development
83
83
  prerelease: false
84
84
  version_requirements: !ruby/object:Gem::Requirement
85
85
  requirements:
86
86
  - - '='
87
87
  - !ruby/object:Gem::Version
88
- version: 0.0.2
88
+ version: 0.1.0
89
89
  - !ruby/object:Gem::Dependency
90
90
  name: test-unit
91
91
  requirement: !ruby/object:Gem::Requirement
@@ -107,17 +107,20 @@ executables: []
107
107
  extensions: []
108
108
  extra_rdoc_files: []
109
109
  files:
110
+ - ".github/dependabot.yml"
111
+ - ".github/workflows/test.yml"
110
112
  - ".gitignore"
111
113
  - ".travis.yml"
112
114
  - Gemfile
113
- - Gemfile.fluentd.lt.0.10.43
114
115
  - LICENSE
115
116
  - README.md
116
117
  - Rakefile
117
118
  - fluent-plugin-zabbix.gemspec
118
119
  - lib/fluent/plugin/out_zabbix.rb
120
+ - mockserver/go.mod
121
+ - mockserver/go.sum
122
+ - mockserver/mockserver.go
119
123
  - test/helper.rb
120
- - test/mockserver.go
121
124
  - test/plugin/test_out_zabbix.rb
122
125
  homepage: https://github.com/fujiwara/fluent-plugin-zabbix
123
126
  licenses:
@@ -138,12 +141,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
138
141
  - !ruby/object:Gem::Version
139
142
  version: '0'
140
143
  requirements: []
141
- rubyforge_project:
142
- rubygems_version: 2.6.11
144
+ rubygems_version: 3.4.10
143
145
  signing_key:
144
146
  specification_version: 4
145
147
  summary: Output data plugin to Zabbix (like zabbix_sender)
146
148
  test_files:
147
149
  - test/helper.rb
148
- - test/mockserver.go
149
150
  - test/plugin/test_out_zabbix.rb
@@ -1,5 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- # Specify your gem's dependencies in fluent-plugin-zabbix.gemspec
4
- gem 'fluentd', '= 0.10.42'
5
- gemspec