Class: ZabbixRubyClient

Inherits:
Object
  • Object
show all
Defined in:
lib/zabbix-ruby-client/plugins/cpu.rb,
lib/zabbix-ruby-client.rb,
lib/zabbix-ruby-client/cli.rb,
lib/zabbix-ruby-client/logger.rb,
lib/zabbix-ruby-client/plugins.rb,
lib/zabbix-ruby-client/version.rb,
lib/zabbix-ruby-client/plugins/apt.rb,
lib/zabbix-ruby-client/plugins/who.rb,
lib/zabbix-ruby-client/plugins/disk.rb,
lib/zabbix-ruby-client/plugins/load.rb,
lib/zabbix-ruby-client/plugins/mysql.rb,
lib/zabbix-ruby-client/plugins/nginx.rb,
lib/zabbix-ruby-client/plugins/redis.rb,
lib/zabbix-ruby-client/plugins/apache.rb,
lib/zabbix-ruby-client/plugins/memory.rb,
lib/zabbix-ruby-client/plugins/network.rb,
lib/zabbix-ruby-client/plugins/sysinfo.rb

Overview

this is a simple version for standalone redis server

Defined Under Namespace

Modules: Logger, Plugins Classes: Cli

Instance Method Summary collapse

Constructor Details

#initialize(config_file, task_file) ⇒ ZabbixRubyClient

Returns a new instance of ZabbixRubyClient.



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/zabbix-ruby-client.rb', line 8

def initialize(config_file,task_file)
  begin
    @config ||= YAML::load_file(config_file)
    if File.exists? task_file
      @tasks ||= YAML::load_file(task_file)
    else
      @tasks = @config["plugins"]
    end
  rescue Exception => e
    puts "Configuration file cannot be read"
    puts e.message
    return
  end
  @logsdir = makedir(@config['logsdir'],'logs')
  @datadir = makedir(@config['datadir'],'data')
  @plugindirs = [ File.expand_path("../zabbix-ruby-client/plugins", __FILE__) ]
  if @config["plugindirs"]
    @plugindirs = @plugindirs + @config["plugindirs"]
  end
  @discover = {}
  @data = []
  Plugins.load_dirs @plugindirs
  logger.debug @config.inspect
end

Instance Method Details

#collectObject



62
63
64
65
66
# File 'lib/zabbix-ruby-client.rb', line 62

def collect
  @tasks.each do |plugin|
    run_plugin(plugin['name'], plugin['args'])
  end
end

#datafileObject



33
34
35
36
37
38
39
40
41
42
43
# File 'lib/zabbix-ruby-client.rb', line 33

def datafile
  now = Time.now
  @datafile ||= if @config['keepdata']
    unless Dir.exists? File.join(@datadir,Time.now.strftime("%Y-%m-%d")) 
      FileUtils.mkdir File.join(@datadir,Time.now.strftime("%Y-%m-%d")) 
    end
    File.join(@datadir,Time.now.strftime("%Y-%m-%d"),"data_"+Time.now.strftime("%H%M%S"))
  else
    File.join(@datadir,"data")
  end
end

#merge_discoverObject



83
84
85
86
87
88
89
# File 'lib/zabbix-ruby-client.rb', line 83

def merge_discover
  time = Time.now.to_i
  @data = @discover.reduce([]) do |a,(k,v)|
    a << "#{@config['host']} #{k} #{time} { \"data\": [ #{v.join(', ')} ] }"
    a
  end + @data
end

#run_plugin(plugin, args = nil) ⇒ Object



45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/zabbix-ruby-client.rb', line 45

def run_plugin(plugin, args = nil)
  Plugins.load(plugin) || logger.error( "Plugin #{plugin} not found.")
  if Plugins.loaded[plugin]
    begin
      @data = @data + Plugins.loaded[plugin].send(:collect, @config['host'], *args)
      if Plugins.loaded[plugin].respond_to?(:discover)
        key, value = Plugins.loaded[plugin].send(:discover, *args)
        @discover[key] ||= []
        @discover[key] << [ value ]
      end
    rescue Exception => e
      logger.fatal "Oops"
      logger.fatal e.message
    end
  end
end

#showObject



68
69
70
71
72
73
# File 'lib/zabbix-ruby-client.rb', line 68

def show
  merge_discover
  @data.each do |line|
    puts line
  end
end

#storeObject



75
76
77
78
79
80
81
# File 'lib/zabbix-ruby-client.rb', line 75

def store
  File.open(datafile, "w") do |f|
    @data.each do |d|
      f.puts d
    end
  end
end

#uploadObject



91
92
93
94
95
96
97
98
99
100
# File 'lib/zabbix-ruby-client.rb', line 91

def upload
  merge_discover
  store
  begin
    res = `#{@config['zabbix']['sender']} -z #{@config['zabbix']['host']} -T -i #{datafile}`
  rescue Exception => e
    logger.error "Sending failed."
    logger.error e.message
  end
end