Class: ZabbixRubyClient
- Inherits:
-
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
#collect ⇒ Object
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
|
#datafile ⇒ Object
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_discover ⇒ Object
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
|
#show ⇒ Object
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
|
#store ⇒ Object
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
|
#upload ⇒ Object
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
|