zabbix-ruby-client 0.0.15 → 0.0.16

Sign up to get free protection for your applications and to get access to all the features.
Files changed (47) hide show
  1. checksums.yaml +4 -4
  2. data/.coveralls.yml +1 -0
  3. data/.travis.yml +4 -0
  4. data/CHANGELOG.md +7 -0
  5. data/README.md +5 -0
  6. data/lib/zabbix-ruby-client.rb +3 -71
  7. data/lib/zabbix-ruby-client/cli.rb +20 -4
  8. data/lib/zabbix-ruby-client/data.rb +5 -3
  9. data/lib/zabbix-ruby-client/logger.rb +34 -8
  10. data/lib/zabbix-ruby-client/plugins.rb +12 -7
  11. data/lib/zabbix-ruby-client/plugins/apache.rb +1 -1
  12. data/lib/zabbix-ruby-client/plugins/apt.rb +4 -2
  13. data/lib/zabbix-ruby-client/plugins/cpu.rb +3 -3
  14. data/lib/zabbix-ruby-client/plugins/disk.rb +3 -2
  15. data/lib/zabbix-ruby-client/plugins/load.rb +3 -2
  16. data/lib/zabbix-ruby-client/plugins/memory.rb +4 -2
  17. data/lib/zabbix-ruby-client/plugins/mysql.rb +4 -2
  18. data/lib/zabbix-ruby-client/plugins/network.rb +4 -2
  19. data/lib/zabbix-ruby-client/plugins/nginx.rb +2 -1
  20. data/lib/zabbix-ruby-client/plugins/redis.rb +3 -2
  21. data/lib/zabbix-ruby-client/plugins/sysinfo.rb +4 -2
  22. data/lib/zabbix-ruby-client/plugins/who.rb +4 -2
  23. data/lib/zabbix-ruby-client/runner.rb +58 -0
  24. data/lib/zabbix-ruby-client/store.rb +1 -1
  25. data/lib/zabbix-ruby-client/version.rb +2 -2
  26. data/spec/files/config.yml +1 -10
  27. data/spec/files/data/.gitkeep +0 -0
  28. data/spec/files/logs/.gitkeep +0 -0
  29. data/spec/files/plugins/sample.rb +11 -0
  30. data/spec/files/{plugins → system}/apache_status +0 -0
  31. data/spec/files/{plugins → system}/iostat_disk +0 -0
  32. data/spec/files/{plugins → system}/mpstat +0 -0
  33. data/spec/files/{plugins → system}/netstat +0 -0
  34. data/spec/files/{plugins → system}/vmstat +0 -0
  35. data/spec/files/task.yml +2 -0
  36. data/spec/lib/logger_spec.rb +26 -5
  37. data/spec/lib/plugins/apache_spec.rb +1 -1
  38. data/spec/lib/plugins/cpu_spec.rb +2 -3
  39. data/spec/lib/plugins/disk_spec.rb +1 -1
  40. data/spec/lib/plugins/memory_spec.rb +1 -1
  41. data/spec/lib/plugins/network_spec.rb +1 -1
  42. data/spec/lib/plugins_spec.rb +36 -5
  43. data/spec/lib/runner_spec.rb +37 -0
  44. data/spec/spec_helper.rb +3 -0
  45. data/zabbix-ruby-client.gemspec +1 -0
  46. metadata +39 -14
  47. data/spec/lib/zabbix-ruby-client_spec.rb +0 -16
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1ee64f86d9fde1c3c037e228c7b1210063de95a4
4
- data.tar.gz: cb9818f7a8a2a52c2b86be6210eae24c9d454908
3
+ metadata.gz: 9d21a9e419424ce57875b93ca1a3762d2b91ced6
4
+ data.tar.gz: 3a9009d18b91bcb35314d9c252f74758764fb8b4
5
5
  SHA512:
6
- metadata.gz: 37097420a266843b8c5d3beb7747debcbf197117d62b3f5a0a15fec8ffe34d14f2820ccddebfb9f9ab2fe9335e231ec51fd9c920f11ac0d03d08543f4f31040e
7
- data.tar.gz: 29485fb483e432aeb8458dc083f6e4ef1eee11c071e488b6ca554568802d693486c588945c95530c975d5468b5d7c15c6701bfad070b372d449cc3134b852925
6
+ metadata.gz: db3e39aafa5b8fd659a403759e96802a4020481a375a5fd6ce22d53ecb494a1e33ec2a9eb25dd564c904e22f8dbf4029fd07e46421db690ff75abb8d794d168f
7
+ data.tar.gz: 1d179f9c66d731f9b17b24554b4c5f37ff4a4b9df4bfa8d3dcde688de331a8c97fcda3da9ca79775e18b76683bbafc7fdfc91c0d7daa14af22f2da4fb226cf44
data/.coveralls.yml ADDED
@@ -0,0 +1 @@
1
+ repo_token: Oej1FGJWwMJdJPP5si37KoXFU3EcLQH9v
data/.travis.yml ADDED
@@ -0,0 +1,4 @@
1
+ language: ruby
2
+ cache: bundler
3
+ rvm:
4
+ - 2.0.0
data/CHANGELOG.md CHANGED
@@ -1,6 +1,13 @@
1
1
  Zabbbix Ruby Client Changelog
2
2
  -----------------------------
3
3
 
4
+ ### v0.0.16 - 2013-10-31
5
+
6
+ * _if you have custom plugins_ the class ZabbixRubyClient is now a module just for namespacing, update your code!
7
+ * fix the logger
8
+ * refactoring and more tests
9
+ * adding travis and coverall to stimulate testing, also added gemnasium
10
+
4
11
  ### v0.0.15 - 2013-10-23
5
12
 
6
13
  * prototype of a way to keep data when sending fails and sending it again at next iteration
data/README.md CHANGED
@@ -2,8 +2,13 @@ Zabbix Ruby Client
2
2
  ====================
3
3
 
4
4
  [![Gem Version](https://badge.fury.io/rb/zabbix-ruby-client.png)](http://rubygems.org/gems/zabbix-ruby-client)
5
+ [![Build Status](https://travis-ci.org/eduvo/zabbix-ruby-client.png?branch=master)](https://travis-ci.org/eduvo/zabbix-ruby-client)
6
+ [![Coverage Status](https://coveralls.io/repos/eduvo/zabbix-ruby-client/badge.png)](https://coveralls.io/r/eduvo/zabbix-ruby-client)
7
+ [![Dependency Status](https://gemnasium.com/eduvo/zabbix-ruby-client.png)](https://gemnasium.com/eduvo/zabbix-ruby-client)
5
8
  [![Code Climate](https://codeclimate.com/github/eduvo/zabbix-ruby-client.png)](https://codeclimate.com/github/eduvo/zabbix-ruby-client)
6
9
 
10
+ ----
11
+
7
12
  This tool is designed to make easy to install zabbix reporter on monitored servers using zabbix-sender rather than zabbix-agent. It targets on monitoring mainly linux servers and is built on a plugin system so that you can decide what is going to be reported.
8
13
 
9
14
  The development is still in progress but it produces results and works in my case. Use at your own risk and read the code first. It is developed under ruby 2 but should work on 1.9.3 as well.
@@ -3,79 +3,11 @@ require "zabbix-ruby-client/logger"
3
3
  require "zabbix-ruby-client/plugins"
4
4
  require "zabbix-ruby-client/store"
5
5
  require "zabbix-ruby-client/data"
6
+ require "zabbix-ruby-client/runner"
6
7
  require "yaml"
7
8
 
8
- class ZabbixRubyClient
9
+ module ZabbixRubyClient
9
10
 
10
- def initialize(config_file, task_file)
11
- begin
12
- @config ||= YAML::load_file(config_file)
13
- if File.exists? task_file
14
- @tasks ||= YAML::load_file(task_file)
15
- else
16
- @tasks = @config["plugins"]
17
- end
18
- rescue Exception => e
19
- puts "Configuration file cannot be read"
20
- puts e.message
21
- return
22
- end
23
-
24
- @store = Store.new(
25
- @config['datadir'],
26
- @config['zabbix']['host'],
27
- File.basename(task_file,'.yml'),
28
- @config['keepdata']
29
- )
30
-
31
- @data = Data.new(@config['host'])
32
-
33
- @config["server"] = File.basename(config_file,'.yml')
34
- @logsdir = makedir(@config['logsdir'],'logs')
35
- @plugindirs = [ File.expand_path("../zabbix-ruby-client/plugins", __FILE__) ]
36
- if @config["plugindirs"]
37
- @plugindirs = @plugindirs + @config["plugindirs"]
38
- end
39
- Plugins.load_dirs @plugindirs
40
- logger.debug @config.inspect
41
- end
42
-
43
- def collect
44
- @tasks.each do |plugin|
45
- @data.run_plugin(plugin['name'], plugin['args'])
46
- end
47
- end
48
-
49
- def show
50
- @data.merge.each do |line|
51
- puts line
52
- end
53
- end
54
-
55
- def upload
56
- file = @store.record(@data.merge)
57
- begin
58
- res = `#{@config['zabbix']['sender']} -z #{@config['zabbix']['host']} -p #{@config['zabbix']['port']} -T -i #{file}`
59
- if $?.to_i != 0
60
- @store.keepdata(file)
61
- end
62
- rescue Exception => e
63
- @store.keepdata(file)
64
- logger.error "Sending failed."
65
- logger.error e.message
66
- end
67
- end
68
-
69
- def logger
70
- @logger ||= Logger.get_logger(@logsdir, @config["loglevel"])
71
- end
72
-
73
- private
74
-
75
- def makedir(configdir, defaultdir)
76
- dir = configdir || defaultdir
77
- FileUtils.mkdir dir unless Dir.exists? dir
78
- dir
79
- end
11
+ PLUGINDIR = File.expand_path("../zabbix-ruby-client/plugins", __FILE__)
80
12
 
81
13
  end
@@ -1,7 +1,7 @@
1
1
  require "thor"
2
- require "zabbix-ruby-client"
2
+ require "zabbix-ruby-client/runner"
3
3
 
4
- class ZabbixRubyClient
4
+ module ZabbixRubyClient
5
5
 
6
6
  class Cli < Thor
7
7
  include Thor::Actions
@@ -35,14 +35,30 @@ class ZabbixRubyClient
35
35
  say "No Gemfile found", :red
36
36
  abort
37
37
  end
38
- zrc = ZabbixRubyClient.new(options[:configfile],options[:taskfile])
38
+ config = YAML::load_file(options[:configfile])
39
+ if File.exists? options[:taskfile]
40
+ tasks = YAML::load_file(options[:taskfile])
41
+ else
42
+ tasks = config['plugins']
43
+ end
44
+ config['server'] = File.basename(options[:configfile],'.yml')
45
+ config['taskfile'] = File.basename(options[:taskfile],'.yml')
46
+ zrc = ZabbixRubyClient::Runner.new(config, tasks)
39
47
  zrc.collect
40
48
  zrc.show
41
49
  end
42
50
 
43
51
  desc "upload", "Collects and sends data to the zabbix server"
44
52
  def upload
45
- zrc = ZabbixRubyClient.new(options[:configfile],options[:taskfile])
53
+ config = YAML::load_file(options[:configfile])
54
+ if File.exists? options[:taskfile]
55
+ tasks = YAML::load_file(options[:taskfile])
56
+ else
57
+ tasks = config['plugins']
58
+ end
59
+ config['server'] = File.basename(options[:configfile],'.yml')
60
+ config['taskfile'] = File.basename(options[:taskfile],'.yml')
61
+ zrc = ZabbixRubyClient::Runner.new(config, tasks)
46
62
  zrc.collect
47
63
  zrc.upload
48
64
  end
@@ -1,4 +1,6 @@
1
- class ZabbixRubyClient
1
+ require "zabbix-ruby-client/logger"
2
+
3
+ module ZabbixRubyClient
2
4
  class Data
3
5
 
4
6
  def initialize(host)
@@ -18,8 +20,8 @@ class ZabbixRubyClient
18
20
  @discover[key] << [ value ]
19
21
  end
20
22
  rescue Exception => e
21
- logger.fatal "Oops"
22
- logger.fatal e.message
23
+ Log.fatal "Oops"
24
+ Log.fatal e.message
23
25
  end
24
26
  end
25
27
  end
@@ -1,16 +1,42 @@
1
1
  require "logger"
2
2
 
3
- class ZabbixRubyClient
4
- module Logger
3
+ module ZabbixRubyClient
4
+ module Log
5
5
  extend self
6
6
 
7
- def get_logger(dir, level)
8
- logger = ::Logger.new(File.join(dir,"zrc.log"))
9
- logger.level = get_level_constant(level)
10
- logger.formatter = proc do |severity, datetime, progname, msg|
7
+ def set_logger(logfile, level="info")
8
+ if logfile.is_a?(String) && !Dir.exists?(File.dirname(logfile))
9
+ FileUtils.mkdir_p(File.dirname(logfile))
10
+ end
11
+ @logger = ::Logger.new(logfile)
12
+ @logger.level = get_level_constant(level)
13
+ @logger.formatter = proc do |severity, datetime, progname, msg|
11
14
  "[#{datetime.utc}] #{severity}: #{msg}\n"
12
15
  end
13
- logger
16
+ end
17
+
18
+ def logger
19
+ @logger ||= ::Logger.new(STDOUT)
20
+ end
21
+
22
+ def debug(msg)
23
+ logger.debug(msg)
24
+ end
25
+
26
+ def info(msg)
27
+ logger.info(msg)
28
+ end
29
+
30
+ def warn(msg)
31
+ logger.warn(msg)
32
+ end
33
+
34
+ def error(msg)
35
+ logger.error(msg)
36
+ end
37
+
38
+ def fatal(msg)
39
+ logger.fatal(msg)
14
40
  end
15
41
 
16
42
  def get_level_constant(level)
@@ -26,4 +52,4 @@ class ZabbixRubyClient
26
52
  end
27
53
 
28
54
  end
29
- end
55
+ end
@@ -1,8 +1,8 @@
1
- class ZabbixRubyClient
1
+ module ZabbixRubyClient
2
2
  module Plugins
3
3
  extend self
4
4
 
5
- def load_dirs(dirs)
5
+ def scan_dirs(dirs)
6
6
  @available = {}
7
7
  @loaded = {}
8
8
  dirs.each do |d|
@@ -14,14 +14,14 @@ class ZabbixRubyClient
14
14
  end
15
15
  end
16
16
 
17
- def register(plugin, klass)
18
- @loaded[plugin] = klass
19
- end
20
-
21
17
  def loaded
22
18
  @loaded ||= {}
23
19
  end
24
20
 
21
+ def register(plugin, klass)
22
+ @loaded[plugin] = klass
23
+ end
24
+
25
25
  def load(plugin)
26
26
  if @loaded[plugin]
27
27
  true
@@ -34,5 +34,10 @@ class ZabbixRubyClient
34
34
  end
35
35
  end
36
36
 
37
+ def reset
38
+ @loaded = {}
39
+ @available = {}
40
+ end
41
+
37
42
  end
38
- end
43
+ end
@@ -1,6 +1,6 @@
1
1
  require "open-uri"
2
2
 
3
- class ZabbixRubyClient
3
+ module ZabbixRubyClient
4
4
  module Plugins
5
5
  module Apache
6
6
  extend self
@@ -1,4 +1,6 @@
1
- class ZabbixRubyClient
1
+ require "zabbix-ruby-client/logger"
2
+
3
+ module ZabbixRubyClient
2
4
  module Plugins
3
5
  module Apt
4
6
  extend self
@@ -9,7 +11,7 @@ class ZabbixRubyClient
9
11
  if $?.to_i == 0
10
12
  security, pending = aptcheck.split(/;/).map(&:to_i)
11
13
  else
12
- logger.warn "Are you running on ubuntu ?"
14
+ Log.warn "Are you running on ubuntu ?"
13
15
  return []
14
16
  end
15
17
  time = Time.now.to_i
@@ -1,20 +1,20 @@
1
1
  # for more info check
2
2
  # http://www.linuxhowtos.org/System/procstat.htm
3
3
  # http://juliano.info/en/Blog:Memory_Leak/Understanding_the_Linux_load_average
4
+ require "zabbix-ruby-client/logger"
4
5
 
5
- class ZabbixRubyClient
6
+ module ZabbixRubyClient
6
7
  module Plugins
7
8
  module Cpu
8
9
  extend self
9
10
 
10
11
  def collect(*args)
11
12
  host = args[0]
12
- #cpuinfo = `mpstat | grep " all "`
13
13
  cpuinfo = `cat /proc/stat | grep "^cpu"`
14
14
  if $?.to_i == 0
15
15
  _, user, nice, sys, idle, wait, irq, soft, guest, steal = cpuinfo.split(/\s+/).map(&:to_i)
16
16
  else
17
- logger.warn "Oh you don't have a /proc ?"
17
+ Log.warn "Oh you don't have a /proc ?"
18
18
  return []
19
19
  end
20
20
  used = user + nice + sys
@@ -1,8 +1,9 @@
1
1
  # some doc on
2
2
  # http://www.xaprb.com/blog/2010/01/09/how-linux-iostat-computes-its-results/
3
3
  # http://www.mjmwired.net/kernel/Documentation/iostats.txt
4
+ require "zabbix-ruby-client/logger"
4
5
 
5
- class ZabbixRubyClient
6
+ module ZabbixRubyClient
6
7
  module Plugins
7
8
  module Disk
8
9
  extend self
@@ -15,7 +16,7 @@ class ZabbixRubyClient
15
16
  if $?.to_i == 0
16
17
  _, size, used, available, percent_used, mount = diskspace.split(/\s+/)
17
18
  else
18
- logger.error "df is not working... ouchie."
19
+ Log.error "df is not working... ouchie."
19
20
  return []
20
21
  end
21
22
  time = Time.now.to_i
@@ -1,7 +1,8 @@
1
1
  # for more info check
2
2
  # http://juliano.info/en/Blog:Memory_Leak/Understanding_the_Linux_load_average
3
+ require "zabbix-ruby-client/logger"
3
4
 
4
- class ZabbixRubyClient
5
+ module ZabbixRubyClient
5
6
  module Plugins
6
7
  module Load
7
8
  extend self
@@ -13,7 +14,7 @@ class ZabbixRubyClient
13
14
  if $?.to_i == 0
14
15
  one, five, fifteen, procs_t = cpuinfo.split(/\s+/)
15
16
  else
16
- logger.warn "Oh you don't have a /proc ?"
17
+ Log.warn "Oh you don't have a /proc ?"
17
18
  return []
18
19
  end
19
20
 
@@ -1,4 +1,6 @@
1
- class ZabbixRubyClient
1
+ require "zabbix-ruby-client/logger"
2
+
3
+ module ZabbixRubyClient
2
4
  module Plugins
3
5
  module Memory
4
6
  extend self
@@ -9,7 +11,7 @@ class ZabbixRubyClient
9
11
  if $?.to_i == 0
10
12
  info = splitinfo(meminfo)
11
13
  else
12
- logger.warn "Please install sysstat."
14
+ Log.warn "Please install sysstat."
13
15
  return []
14
16
  end
15
17
 
@@ -1,4 +1,6 @@
1
- class ZabbixRubyClient
1
+ require "zabbix-ruby-client/logger"
2
+
3
+ module ZabbixRubyClient
2
4
  module Plugins
3
5
  module Mysql
4
6
  extend self
@@ -10,7 +12,7 @@ class ZabbixRubyClient
10
12
  if $?.to_i == 0
11
13
  status = get_status(mysqlstatus)
12
14
  else
13
- self.logger.warn "The connection failed."
15
+ Log.warn "The connection failed."
14
16
  return []
15
17
  end
16
18
 
@@ -1,4 +1,6 @@
1
- class ZabbixRubyClient
1
+ require "zabbix-ruby-client/logger"
2
+
3
+ module ZabbixRubyClient
2
4
  module Plugins
3
5
  module Network
4
6
  extend self
@@ -10,7 +12,7 @@ class ZabbixRubyClient
10
12
  if $?.to_i == 0
11
13
  _, _, rx_ok, rx_packets, rx_err, rx_drop, _, _, _, _, tx_ok, tx_packets, tx_err, tx_drop, _, _, _, _ = netinfo.split(/\s+/)
12
14
  else
13
- logger.warn "Please install netstat."
15
+ Log.warn "proc not found."
14
16
  return []
15
17
  end
16
18
 
@@ -1,6 +1,7 @@
1
1
  # uses http://wiki.nginx.org/HttpStubStatusModule
2
+ require "zabbix-ruby-client/logger"
2
3
 
3
- class ZabbixRubyClient
4
+ module ZabbixRubyClient
4
5
  module Plugins
5
6
  module Nginx
6
7
  extend self
@@ -1,6 +1,7 @@
1
1
  # this is a simple version for standalone redis server
2
+ require "zabbix-ruby-client/logger"
2
3
 
3
- class ZabbixRubyClient
4
+ module ZabbixRubyClient
4
5
  module Plugins
5
6
  module Redis
6
7
  extend self
@@ -13,7 +14,7 @@ class ZabbixRubyClient
13
14
  if $?.to_i == 0
14
15
  info = get_info(redisinfo)
15
16
  else
16
- logger.warn "Redis connection failed."
17
+ Log.warn "Redis connection failed."
17
18
  return []
18
19
  end
19
20
 
@@ -1,4 +1,6 @@
1
- class ZabbixRubyClient
1
+ require "zabbix-ruby-client/logger"
2
+
3
+ module ZabbixRubyClient
2
4
  module Plugins
3
5
  module Sysinfo
4
6
  extend self
@@ -10,7 +12,7 @@ class ZabbixRubyClient
10
12
  arch, hostname, kernel, kernel_version, machine, proc,
11
13
  _, _, _, _, _, _, _, platform, os = uname.split(/ /)
12
14
  else
13
- logger.warn "Are you running on ubuntu ?"
15
+ Log.warn "Are you running on ubuntu ?"
14
16
  return []
15
17
  end
16
18
  time = Time.now.to_i
@@ -1,4 +1,6 @@
1
- class ZabbixRubyClient
1
+ require "zabbix-ruby-client/logger"
2
+
3
+ module ZabbixRubyClient
2
4
  module Plugins
3
5
  module Who
4
6
  extend self
@@ -7,7 +9,7 @@ class ZabbixRubyClient
7
9
  host = args[0]
8
10
  who = get_who
9
11
  if $?.to_i != 0
10
- logger.warn "Are you running on ubuntu ?"
12
+ Log.warn "Are you running on ubuntu ?"
11
13
  return []
12
14
  end
13
15
  time = Time.now.to_i
@@ -0,0 +1,58 @@
1
+ module ZabbixRubyClient
2
+
3
+ class Runner
4
+
5
+ def initialize(config, tasks)
6
+ @config = config
7
+ @tasks = tasks
8
+
9
+ @store = ZabbixRubyClient::Store.new(
10
+ @config['datadir'],
11
+ @config['zabbix']['host'],
12
+ @config['taskfile'],
13
+ @config['keepdata']
14
+ )
15
+
16
+ @data = ZabbixRubyClient::Data.new(@config['host'])
17
+ @logsdir = makedir(@config['logsdir'], 'logs')
18
+ ZabbixRubyClient::Plugins.scan_dirs([ PLUGINDIR ] + @config['plugindirs'])
19
+ ZabbixRubyClient::Log.set_logger(File.join(@logsdir, 'zrc.log'), 'info')
20
+ ZabbixRubyClient::Log.debug @config.inspect
21
+ end
22
+
23
+ def collect
24
+ @tasks.each do |plugin|
25
+ @data.run_plugin(plugin['name'], plugin['args'])
26
+ end
27
+ end
28
+
29
+ def show
30
+ @data.merge.each do |line|
31
+ puts line
32
+ end
33
+ end
34
+
35
+ def upload
36
+ file = @store.record(@data.merge)
37
+ begin
38
+ res = `#{@config['zabbix']['sender']} -z #{@config['zabbix']['host']} -p #{@config['zabbix']['port']} -T -i #{file}`
39
+ if $?.to_i != 0
40
+ @store.keepdata(file)
41
+ end
42
+ rescue Exception => e
43
+ @store.keepdata(file)
44
+ logger.error "Sending failed."
45
+ logger.error e.message
46
+ end
47
+ end
48
+
49
+ private
50
+
51
+ def makedir(configdir, defaultdir)
52
+ dir = configdir || defaultdir
53
+ FileUtils.mkdir dir unless Dir.exists? dir
54
+ dir
55
+ end
56
+
57
+ end
58
+ end
@@ -1,4 +1,4 @@
1
- class ZabbixRubyClient
1
+ module ZabbixRubyClient
2
2
  class Store
3
3
 
4
4
  def initialize(dir, server, task, keepdata=false)
@@ -1,3 +1,3 @@
1
- class ZabbixRubyClient
2
- VERSION ||= "0.0.15"
1
+ module ZabbixRubyClient
2
+ VERSION ||= "0.0.16"
3
3
  end
@@ -4,18 +4,9 @@ logsdir: logs
4
4
  loglevel: info
5
5
  datadir: data
6
6
  keepdata: no # or yes
7
- plugindirs:
7
+ plugindirs:
8
8
  - plugins
9
9
  zabbix:
10
10
  host: zabbix.example.com
11
11
  port: 10051
12
12
  sender: /usr/bin/zabbix_sender
13
- plugins:
14
- - name: memory
15
- - name: cpu
16
- - name: network
17
- args: eth0
18
- - name: disk
19
- args: sda1
20
- - name: network
21
- args: eth0
File without changes
File without changes
@@ -0,0 +1,11 @@
1
+ module Sample
2
+ extend self
3
+
4
+ def collect(*args)
5
+ return ["localhost sample[foo] 123456789 42"]
6
+ end
7
+
8
+ end
9
+
10
+ ZabbixRubyClient::Plugins.register('sample', Sample)
11
+
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -0,0 +1,2 @@
1
+ ---
2
+ - name: sample
@@ -3,10 +3,31 @@
3
3
  require 'spec_helper'
4
4
  require "zabbix-ruby-client/logger"
5
5
 
6
- describe ZabbixRubyClient::Logger do
6
+ describe ZabbixRubyClient::Log do
7
7
 
8
- pending "get_logger returns a valid Logger instance"
9
- pending "logged message are nicely formatted"
10
- pending "loglevel is properly interpreted from argument"
8
+ before :all do
9
+ @logfile = File.expand_path("../../files/logs/testlog", __FILE__)
10
+ end
11
11
 
12
- end
12
+ after :each do
13
+ File.unlink(@logfile) if File.exists?(@logfile)
14
+ end
15
+
16
+ it "set_logger prepares the logger" do
17
+ ZabbixRubyClient::Log.set_logger(@logfile, 'info')
18
+ expect(ZabbixRubyClient::Log.instance_variable_get(:@logger)).to be_instance_of Logger
19
+ expect(ZabbixRubyClient::Log.logger.level).to be Logger::INFO
20
+ end
21
+
22
+ it "logged message are nicely formatted" do
23
+ ZabbixRubyClient::Log.set_logger(@logfile, 'debug')
24
+ ZabbixRubyClient::Log.logger.debug("ha")
25
+ expect(File.read(@logfile)).to match /\] DEBUG: ha\n/
26
+ end
27
+
28
+ it "loglevel is properly interpreted from argument" do
29
+ ZabbixRubyClient::Log.set_logger(@logfile, 'debug')
30
+ expect(ZabbixRubyClient::Log.instance_variable_get(:@logger).level).to be Logger::DEBUG
31
+ end
32
+
33
+ end
@@ -2,7 +2,7 @@
2
2
 
3
3
  require 'spec_helper'
4
4
  require "zabbix-ruby-client/plugins"
5
- ZabbixRubyClient::Plugins.load_dirs ["zabbix-ruby-client/plugins"]
5
+ ZabbixRubyClient::Plugins.scan_dirs ["zabbix-ruby-client/plugins"]
6
6
  require "zabbix-ruby-client/plugins/apache"
7
7
 
8
8
  describe ZabbixRubyClient::Plugins::Apache do
@@ -2,11 +2,10 @@
2
2
 
3
3
  require 'spec_helper'
4
4
  require "zabbix-ruby-client/plugins"
5
- ZabbixRubyClient::Plugins.load_dirs ["zabbix-ruby-client/plugins"]
6
5
  require "zabbix-ruby-client/plugins/cpu"
7
6
 
8
7
  describe ZabbixRubyClient::Plugins::Cpu do
9
-
8
+
10
9
  pending "populate a hash with extracted data"
11
10
 
12
- end
11
+ end
@@ -2,7 +2,7 @@
2
2
 
3
3
  require 'spec_helper'
4
4
  require "zabbix-ruby-client/plugins"
5
- ZabbixRubyClient::Plugins.load_dirs ["zabbix-ruby-client/plugins"]
5
+ ZabbixRubyClient::Plugins.scan_dirs ["zabbix-ruby-client/plugins"]
6
6
  require "zabbix-ruby-client/plugins/disk"
7
7
 
8
8
  describe ZabbixRubyClient::Plugins::Disk do
@@ -2,7 +2,7 @@
2
2
 
3
3
  require 'spec_helper'
4
4
  require "zabbix-ruby-client/plugins"
5
- ZabbixRubyClient::Plugins.load_dirs ["zabbix-ruby-client/plugins"]
5
+ ZabbixRubyClient::Plugins.scan_dirs ["zabbix-ruby-client/plugins"]
6
6
  require "zabbix-ruby-client/plugins/memory"
7
7
 
8
8
  describe ZabbixRubyClient::Plugins::Memory do
@@ -2,7 +2,7 @@
2
2
 
3
3
  require 'spec_helper'
4
4
  require "zabbix-ruby-client/plugins"
5
- ZabbixRubyClient::Plugins.load_dirs ["zabbix-ruby-client/plugins"]
5
+ ZabbixRubyClient::Plugins.scan_dirs ["zabbix-ruby-client/plugins"]
6
6
  require "zabbix-ruby-client/plugins/network"
7
7
 
8
8
  describe ZabbixRubyClient::Plugins::Network do
@@ -4,9 +4,40 @@ require 'spec_helper'
4
4
  require "zabbix-ruby-client/plugins"
5
5
 
6
6
  describe ZabbixRubyClient::Plugins do
7
-
8
- pending "loading dirs works"
9
- pending "registering a new plugin loads it"
10
- pending "loading a plugin adds plugin in loaded list"
11
7
 
12
- end
8
+ before :all do
9
+ @plugindir = File.expand_path("../../files/plugins", __FILE__)
10
+ end
11
+
12
+ before :each do
13
+ ZabbixRubyClient::Plugins.scan_dirs([@plugindir])
14
+ end
15
+
16
+ after :each do
17
+ ZabbixRubyClient::Plugins.reset
18
+ end
19
+
20
+ it "loading dirs works" do
21
+ result = {"sample" => File.join(@plugindir, "sample.rb") }
22
+ expect(ZabbixRubyClient::Plugins.instance_variable_get(:@available)).to eq result
23
+ end
24
+
25
+ it "registering a new plugin loads it" do
26
+ ZabbixRubyClient::Plugins.register("sample",Object)
27
+ result = { "sample" => Object }
28
+ expect(ZabbixRubyClient::Plugins.instance_variable_get(:@loaded)).to eq result
29
+ end
30
+
31
+ it "loading a plugin adds plugin in loaded list" do
32
+ ZabbixRubyClient::Plugins.load("sample")
33
+ expect(Sample).to be_kind_of Module
34
+ end
35
+
36
+ it "do not load a plugin already loaded" do
37
+ ZabbixRubyClient::Plugins.load("sample")
38
+ ZabbixRubyClient::Plugins.load("sample")
39
+ result = { "sample" => Sample }
40
+ expect(ZabbixRubyClient::Plugins.instance_variable_get(:@loaded)).to eq result
41
+ end
42
+
43
+ end
@@ -0,0 +1,37 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+ require "zabbix-ruby-client"
5
+
6
+ describe ZabbixRubyClient::Runner do
7
+
8
+ before :each do
9
+ @basedir = File.expand_path("../../files", __FILE__)
10
+ Dir.chdir @basedir
11
+ config_file = File.join(@basedir, "config.yml")
12
+ @config = YAML::load_file(config_file)
13
+ task_file = File.join(@basedir, "task.yml")
14
+ @tasks = YAML::load_file(task_file)
15
+ end
16
+
17
+ after :each do
18
+ logfile = File.join("logs", "zrc.log")
19
+ File.unlink(logfile) if File.exists?(logfile)
20
+ end
21
+
22
+ it "initialize the client object" do
23
+ @zrc = ZabbixRubyClient::Runner.new(@config, @tasks)
24
+ expect(@zrc.instance_variable_get(:@config)['host']).to eq 'localhost'
25
+ end
26
+
27
+ it "creates dirs if needed" do
28
+ @zrc = ZabbixRubyClient::Runner.new(@config, @tasks)
29
+ expect(Dir.exists? "logs").to be_true
30
+ end
31
+
32
+ pending "loads list of plugins"
33
+ pending "initialize datafile according to config"
34
+ pending "stores data in datafile"
35
+ pending "issues the upload command according to config"
36
+
37
+ end
data/spec/spec_helper.rb CHANGED
@@ -2,6 +2,9 @@ $LOAD_PATH << File.expand_path('../../lib', __FILE__)
2
2
  require 'rubygems'
3
3
  require 'bundler'
4
4
 
5
+ require 'coveralls'
6
+ Coveralls.wear!
7
+
5
8
  RSpec.configure do |config|
6
9
  config.mock_with :rspec
7
10
  config.expect_with :rspec do |c|
@@ -23,4 +23,5 @@ Gem::Specification.new do |spec|
23
23
  spec.add_development_dependency "bundler", "~> 1.3"
24
24
  spec.add_development_dependency "rake"
25
25
  spec.add_development_dependency "rspec"
26
+ spec.add_development_dependency "coveralls"
26
27
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zabbix-ruby-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.15
4
+ version: 0.0.16
5
5
  platform: ruby
6
6
  authors:
7
7
  - mose
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-10-22 00:00:00.000000000 Z
11
+ date: 2013-10-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -66,6 +66,20 @@ dependencies:
66
66
  - - '>='
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: coveralls
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
69
83
  description: A zabbix alternative to zabbix-agent using zabbix-sender.
70
84
  email:
71
85
  - mose@mose.com
@@ -74,7 +88,9 @@ executables:
74
88
  extensions: []
75
89
  extra_rdoc_files: []
76
90
  files:
91
+ - .coveralls.yml
77
92
  - .gitignore
93
+ - .travis.yml
78
94
  - CHANGELOG.md
79
95
  - Gemfile
80
96
  - LICENSE.txt
@@ -98,14 +114,19 @@ files:
98
114
  - lib/zabbix-ruby-client/plugins/redis.rb
99
115
  - lib/zabbix-ruby-client/plugins/sysinfo.rb
100
116
  - lib/zabbix-ruby-client/plugins/who.rb
117
+ - lib/zabbix-ruby-client/runner.rb
101
118
  - lib/zabbix-ruby-client/store.rb
102
119
  - lib/zabbix-ruby-client/version.rb
103
120
  - spec/files/config.yml
104
- - spec/files/plugins/apache_status
105
- - spec/files/plugins/iostat_disk
106
- - spec/files/plugins/mpstat
107
- - spec/files/plugins/netstat
108
- - spec/files/plugins/vmstat
121
+ - spec/files/data/.gitkeep
122
+ - spec/files/logs/.gitkeep
123
+ - spec/files/plugins/sample.rb
124
+ - spec/files/system/apache_status
125
+ - spec/files/system/iostat_disk
126
+ - spec/files/system/mpstat
127
+ - spec/files/system/netstat
128
+ - spec/files/system/vmstat
129
+ - spec/files/task.yml
109
130
  - spec/lib/cli_spec.rb
110
131
  - spec/lib/data_spec.rb
111
132
  - spec/lib/logger_spec.rb
@@ -115,8 +136,8 @@ files:
115
136
  - spec/lib/plugins/memory_spec.rb
116
137
  - spec/lib/plugins/network_spec.rb
117
138
  - spec/lib/plugins_spec.rb
139
+ - spec/lib/runner_spec.rb
118
140
  - spec/lib/store_spec.rb
119
- - spec/lib/zabbix-ruby-client_spec.rb
120
141
  - spec/spec_helper.rb
121
142
  - templates/client/Gemfile
122
143
  - templates/client/config.yml
@@ -165,11 +186,15 @@ summary: This tool is intended to use zabbix sender to propagate monitoring data
165
186
  Zabbix server.
166
187
  test_files:
167
188
  - spec/files/config.yml
168
- - spec/files/plugins/apache_status
169
- - spec/files/plugins/iostat_disk
170
- - spec/files/plugins/mpstat
171
- - spec/files/plugins/netstat
172
- - spec/files/plugins/vmstat
189
+ - spec/files/data/.gitkeep
190
+ - spec/files/logs/.gitkeep
191
+ - spec/files/plugins/sample.rb
192
+ - spec/files/system/apache_status
193
+ - spec/files/system/iostat_disk
194
+ - spec/files/system/mpstat
195
+ - spec/files/system/netstat
196
+ - spec/files/system/vmstat
197
+ - spec/files/task.yml
173
198
  - spec/lib/cli_spec.rb
174
199
  - spec/lib/data_spec.rb
175
200
  - spec/lib/logger_spec.rb
@@ -179,6 +204,6 @@ test_files:
179
204
  - spec/lib/plugins/memory_spec.rb
180
205
  - spec/lib/plugins/network_spec.rb
181
206
  - spec/lib/plugins_spec.rb
207
+ - spec/lib/runner_spec.rb
182
208
  - spec/lib/store_spec.rb
183
- - spec/lib/zabbix-ruby-client_spec.rb
184
209
  - spec/spec_helper.rb
@@ -1,16 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require 'spec_helper'
4
- require "zabbix-ruby-client"
5
-
6
- describe ZabbixRubyClient do
7
-
8
- pending "initialize the client object"
9
- pending "creates dirs if needed"
10
- pending "loads list of plugins"
11
- pending "initialize datafile according to config"
12
- pending "stores data in datafile"
13
- pending "runs list of plugins according to config"
14
- pending "issues the upload command according to config"
15
-
16
- end