norikra-listener-zabbix 0.1.0-java → 0.2.0-java

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
2
  SHA1:
3
- metadata.gz: f47be0dc85dec9168497adf51387c08b1df0d3df
4
- data.tar.gz: 2cfc3a771ccd21884c17097ef68df031a14e1c86
3
+ metadata.gz: ce069602d743378669cdad2f175e8a97e5549330
4
+ data.tar.gz: 45693b0371c948ff8a1f72f1a09a6ea3863f01e9
5
5
  SHA512:
6
- metadata.gz: 5b147d6e44ef9409f43a15449e383738cde2c8b56788d38b4d80722245b05f91104f76e827140445870f6509a6776a1576dfb961cc2621a22a4a09d9b45e558d
7
- data.tar.gz: f66cb17dca4fde3e9fb5c60dd2f79b2ddcb26a146d806daf0015db7d20256574c19973a7cc5fec58d2ad1657077016c0108ffd46462e6dfd8515ea30454b6393
6
+ metadata.gz: 7b01185ce11b57ecd936a4754da4253303adf33f19384e8344dd4070788e5526715ad3f61980a50c54bc51ed51b831b8f8902564f51277587ca8f1751d06f776
7
+ data.tar.gz: cca8426ff06e52f18a6ac90f21e9e1bc5fdb49cb458019bfcd2e12e0b27080dfcb7551bccf70beda60b1b590194192a17980236a252211dd67dae6381da30985
data/.gitignore CHANGED
@@ -1,4 +1,5 @@
1
1
  /.bundle/
2
2
  /Gemfile.lock
3
3
  /vendor
4
+ /pkg
4
5
  /norikra.log
data/README.md CHANGED
@@ -1,7 +1,72 @@
1
- # norikra-listener-zabbix
1
+ # Norikra::Listener::Zabbix
2
2
 
3
3
  [![Build Status](https://travis-ci.org/tkuchiki/norikra-listener-zabbix.svg?branch=master)](https://travis-ci.org/tkuchiki/norikra-listener-zabbix)
4
4
  [![Coverage Status](https://coveralls.io/repos/github/tkuchiki/norikra-listener-zabbix/badge.svg?branch=master)](https://coveralls.io/github/tkuchiki/norikra-listener-zabbix?branch=master)
5
5
 
6
+ ## Description
7
+
6
8
  Norikra listener plugin to send performance data for Zabbix.
7
9
 
10
+ ## Installation
11
+
12
+ ```shell
13
+ gem install norikra-listener-zabbix
14
+ ```
15
+
16
+ ## Usage
17
+
18
+ Add your query with group `ZABBIX(zabbix_server[:port=10051],zabbix_host[,preifx_item_key])`.
19
+
20
+ ## Examples
21
+
22
+ ```sql
23
+ SELECT sum(foo) AS sum, avg(foo) AS avg FROM test_table.win:time_batch(1 min)
24
+ -- group ZABBIX(localhost, zabbix host, foo.bar)
25
+ ```
26
+
27
+ Send data `sum` and `avg` to item key `foo.bar.sum`, `foo.bar.avg`.
28
+
29
+ ```sql
30
+ SELECT sum(foo) AS `bar@foo@sum`, avg(foo) AS `bar@foo@avg` FROM test_table.win:time_batch(1 min)
31
+ -- group ZABBIX(localhost, zabbix host)
32
+ ```
33
+
34
+ Send data `sum` and `avg` to item key `bar.foo.sum`, `bar.foo.avg`.
35
+ Replace `@` with `.`.
36
+
37
+ >Identifiers cannot contain the "." (dot) character, i.e. "vol.price" is not a valid identifier for the rename syntax.
38
+
39
+ See: [5.3.4. Renaming event properties](http://www.espertech.com/esper/release-5.2.0/esper-reference/html/epl_clauses.html#epl-select-renaming)
40
+
41
+ ```sql
42
+ SELECT sum(foo) AS sum, avg(foo) AS avg FROM test_table.win:time_batch(1 min)
43
+ -- group ZABBIX([::1], zabbix host)
44
+ ```
45
+
46
+ IPv6 syntax `[IPADDR]:PORT`.
47
+
48
+ ### Zabbix Items
49
+
50
+ - Key: `foo.bar.avg`
51
+ - Type: `Zabbix trapper`
52
+ - Type of information: `Numeric (float)`
53
+
54
+ ## Test
55
+
56
+ ```shell
57
+ rake [LOGLEVEL=ERROR]
58
+ ```
59
+
60
+ ```shell
61
+ rake LOGLEVEL=DEBUG
62
+ ```
63
+
64
+ Set loglevel as `DEBUG`.
65
+
66
+ ## Misc
67
+
68
+ Many codes was copied from [fujiwara/fluent-plugin-zabbix](https://github.com/fujiwara/fluent-plugin-zabbix/blob/master/lib/fluent/plugin/out_zabbix.rb).
69
+
70
+ ## License
71
+
72
+ GPLv2
@@ -7,7 +7,7 @@ include Norikra::Log
7
7
  module Norikra
8
8
  module Listener
9
9
  class Zabbix < Norikra::Listener::Base
10
- attr_reader :zabbix_server, :host, :prefix_item_key, :port
10
+ attr_reader :zabbix_server, :zabbix_host, :prefix_item_key, :port
11
11
 
12
12
  def self.label
13
13
  "ZABBIX"
@@ -17,18 +17,42 @@ module Norikra
17
17
  args.split(",").map(&:strip)
18
18
  end
19
19
 
20
+ def self.split_host_port(address)
21
+ colon = address.count(":")
22
+
23
+ case
24
+ when colon == 0 # IPv4 or FQDN
25
+ host = address
26
+ port = 10051
27
+ when colon == 1 # IPv4 or FQDN
28
+ hosts = address.split(":")
29
+ len = hosts.size - 1
30
+ host = hosts[0, len].join(":")
31
+ port = hosts[len].to_i
32
+ when colon >= 2 # IPv6
33
+ begin
34
+ hosts = address.match(/\[(.+)\]:?(.+)?/)
35
+ host = hosts[1]
36
+ port = (hosts[2] || 10051).to_i
37
+ rescue
38
+ host = nil
39
+ port = nil
40
+ end
41
+ end
42
+
43
+ [host, port]
44
+ end
45
+
20
46
  def initialize(argument, query_name, query_group)
21
47
  super
22
48
  args = Zabbix::parse_argument(argument)
23
- @zabbix_server = args[0]
24
- @host = args[1]
49
+ @zabbix_server, @port = Zabbix::split_host_port(args[0])
50
+ @zabbix_host = args[1]
25
51
  @prefix_item_key = args[2]
26
- @port = args[3].nil? ? 10051 : args[3].to_i
27
52
 
28
53
  raise Norikra::ArgumentError, "zabbix_server is not specified" unless @zabbix_server
29
- raise Norikra::ArgumentError, "host is not specified" unless @host
30
- raise Norikra::ArgumentError, "prefix_item_key is not specified" unless @prefix_item_key
31
54
  raise Norikra::ArgumentError, "invalid port: #{@port}" if @port == 0
55
+ raise Norikra::ArgumentError, "zabbix_host is not specified" unless @zabbix_host
32
56
  end
33
57
 
34
58
  def process_async(events)
@@ -37,10 +61,10 @@ module Norikra
37
61
  events.each do |time, record|
38
62
  t = time if t.nil?
39
63
  record.each do |key, value|
40
- data.push({ host: @host, time: time.to_i, key: "#{@prefix_item_key}.#{key}", value: format_value(value) })
64
+ data.push({ host: @zabbix_host, time: time.to_i, key: format_key(key), value: format_value(value) })
41
65
  end
42
66
  end
43
- debug "send data #{@zabbix_sever}:#{@port} #{@host} #{data}"
67
+ debug "send data #{@zabbix_sever}:#{@port} #{@zabbix_host} #{data}"
44
68
  begin
45
69
  send(t, data)
46
70
  rescue => e
@@ -48,6 +72,14 @@ module Norikra
48
72
  end
49
73
  end
50
74
 
75
+ def format_key(key)
76
+ if @prefix_item_key.nil? || @prefix_item_key.empty?
77
+ key.gsub(/\$/, ".")
78
+ else
79
+ "#{@prefix_item_key}.#{key}"
80
+ end
81
+ end
82
+
51
83
  # https://github.com/fujiwara/fluent-plugin-zabbix/blob/master/lib/fluent/plugin/out_zabbix.rb
52
84
 
53
85
  def format_value(value)
@@ -5,12 +5,12 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
5
 
6
6
  Gem::Specification.new do |spec|
7
7
  spec.name = "norikra-listener-zabbix"
8
- spec.version = "0.1.0"
8
+ spec.version = "0.2.0"
9
9
  spec.authors = ["KUCHIKI Taku"]
10
10
  spec.email = ["kuchiki.taku@gmail.com"]
11
11
  spec.summary = %q{Norikra listener plugin to send performance data for Zabbix.}
12
12
  spec.description = %q{Norikra listener plugin to send performance data for Zabbix.}
13
- spec.homepage = "https://github.com/tkuchiki/norikra-lilstener-zabbix"
13
+ spec.homepage = "https://github.com/tkuchiki/norikra-listener-zabbix"
14
14
  spec.license = "GPLv2"
15
15
  spec.platform = "java"
16
16
 
@@ -35,21 +35,48 @@ class Norikra::Listener::ZabbixTest < Minitest::Test
35
35
  assert_equal Norikra::Listener::Zabbix.parse_argument(" localhost, zabbix-host , prefix "), args
36
36
  end
37
37
 
38
+ def test_split_host_port
39
+ assert_equal Norikra::Listener::Zabbix.split_host_port("localhost"), ["localhost", 10051]
40
+ assert_equal Norikra::Listener::Zabbix.split_host_port("localhost:60051"), ["localhost", 60051]
41
+ assert_equal Norikra::Listener::Zabbix.split_host_port("127.0.0.1"), ["127.0.0.1", 10051]
42
+ assert_equal Norikra::Listener::Zabbix.split_host_port("127.0.0.1:60051"), ["127.0.0.1", 60051]
43
+ assert_equal Norikra::Listener::Zabbix.split_host_port("[::1]"), ["::1", 10051]
44
+ assert_equal Norikra::Listener::Zabbix.split_host_port("[::1]:60051"), ["::1", 60051]
45
+ assert_equal Norikra::Listener::Zabbix.split_host_port("[2001:DB8:0:0:8:800:200C:417A]"), ["2001:DB8:0:0:8:800:200C:417A", 10051]
46
+ assert_equal Norikra::Listener::Zabbix.split_host_port("[2001:DB8:0:0:8:800:200C:417A]:60051"), ["2001:DB8:0:0:8:800:200C:417A", 60051]
47
+ assert_equal Norikra::Listener::Zabbix.split_host_port("::1"), [nil, nil]
48
+ assert_equal Norikra::Listener::Zabbix.split_host_port("::1:60051"), [nil, nil]
49
+ end
50
+
38
51
  def test_initialize
39
52
  args = ["localhost", "zabbix-host", "prefix"]
40
53
  listener = Norikra::Listener::Zabbix.new("localhost,zabbix-host,prefix", "query_name", "ZABBIX(localhost,zabbix-host,prefix)")
41
54
  assert_equal listener.zabbix_server, args[0]
42
- assert_equal listener.host, args[1]
55
+ assert_equal listener.zabbix_host, args[1]
43
56
  assert_equal listener.prefix_item_key, args[2]
44
57
  assert_equal listener.port, 10051
45
58
 
46
- listener = Norikra::Listener::Zabbix.new("localhost,zabbix-host,prefix,60051", "query_name", "ZABBIX(localhost,zabbix-host,prefix,60051)")
59
+ listener = Norikra::Listener::Zabbix.new("localhost:60051,zabbix-host,prefix", "query_name", "ZABBIX(localhost:60051,zabbix-host,prefix)")
47
60
  assert_equal listener.zabbix_server, args[0]
48
- assert_equal listener.host, args[1]
61
+ assert_equal listener.zabbix_host, args[1]
49
62
  assert_equal listener.prefix_item_key, args[2]
50
63
  assert_equal listener.port, 60051
51
64
  end
52
65
 
66
+ def test_format_key
67
+ listener = Norikra::Listener::Zabbix.new("localhost,zabbix-host,prefix", "query_name", "ZABBIX(localhost,zabbix-host,prefix)")
68
+ assert_equal "prefix.foo", listener.format_key("foo")
69
+
70
+ listener = Norikra::Listener::Zabbix.new("localhost,zabbix-host,prefix.foo", "query_name", "ZABBIX(localhost,zabbix-host,prefix)")
71
+ assert_equal "prefix.foo.bar", listener.format_key("bar")
72
+
73
+ listener = Norikra::Listener::Zabbix.new("localhost,zabbix-host", "query_name", "ZABBIX(localhost,zabbix-host,prefix)")
74
+ assert_equal "foobar", listener.format_key("foobar")
75
+
76
+ listener = Norikra::Listener::Zabbix.new("localhost,zabbix-host", "query_name", "ZABBIX(localhost,zabbix-host,prefix)")
77
+ assert_equal "foo.bar.baz", listener.format_key("foo$bar$baz")
78
+ end
79
+
53
80
  def test_format_value
54
81
  listener = Norikra::Listener::Zabbix.new("localhost,zabbix-host,prefix", "query_name", "ZABBIX(localhost,zabbix-host,prefix)")
55
82
  assert_equal "1.2345", listener.format_value(1.23454) # round off
@@ -70,7 +97,7 @@ class Norikra::Listener::ZabbixTest < Minitest::Test
70
97
  end
71
98
  t = do_tcpserver(response)
72
99
 
73
- listener = Norikra::Listener::Zabbix.new("localhost,zabbix-host,prefix,#{@port}", "query_name", "ZABBIX(localhost,zabbix-host,prefix,#{@port})")
100
+ listener = Norikra::Listener::Zabbix.new("localhost:#{@port},zabbix-host,prefix", "query_name", "ZABBIX(localhost:#{@port},zabbix-host,prefix)")
74
101
  epoch = Time.now.to_i
75
102
  data = [{ host: "zabbix-host", time: epoch, key: "prefix.val1", value: 1.2345 }]
76
103
  refute listener.send(epoch, data)
@@ -90,7 +117,11 @@ class Norikra::Listener::ZabbixTest < Minitest::Test
90
117
  end
91
118
  t = do_tcpserver(response)
92
119
 
93
- listener = Norikra::Listener::Zabbix.new("localhost,zabbix-host,prefix,#{@port}", "query_name", "ZABBIX(localhost,zabbix-host,prefix,#{@port})")
120
+ listener = Norikra::Listener::Zabbix.new("localhost:#{@port},zabbix-host,prefix", "query_name", "ZABBIX(localhost:#{@port},zabbix-host,prefix)")
121
+ assert listener.process_async([[1454556814, {"val1"=>0, "val2"=>1.2345,}]])
122
+
123
+ # IPv6
124
+ listener = Norikra::Listener::Zabbix.new("[::1]:#{@port},zabbix-host,prefix", "query_name", "ZABBIX([::1]:#{@port},zabbix-host,prefix)")
94
125
  assert listener.process_async([[1454556814, {"val1"=>0, "val2"=>1.2345,}]])
95
126
 
96
127
  t.exit
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: norikra-listener-zabbix
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: java
6
6
  authors:
7
7
  - KUCHIKI Taku
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-02-04 00:00:00.000000000 Z
11
+ date: 2016-02-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -112,7 +112,7 @@ files:
112
112
  - norikra-listener-zabbix.gemspec
113
113
  - test/norikra/listener/zabbix_test.rb
114
114
  - test/test_helper.rb
115
- homepage: https://github.com/tkuchiki/norikra-lilstener-zabbix
115
+ homepage: https://github.com/tkuchiki/norikra-listener-zabbix
116
116
  licenses:
117
117
  - GPLv2
118
118
  metadata: {}