rubix 0.5.4 → 0.5.5

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.5.4
1
+ 0.5.5
@@ -47,6 +47,8 @@ module Rubix
47
47
  # @return [true, false]
48
48
  def self.connected?
49
49
  (!! connection)
50
+ rescue ConnectionError, AuthenticationError, RequestError
51
+ false
50
52
  end
51
53
 
52
54
  # Is Rubix presently connected and authorized with a Zabbix server?
@@ -1,6 +1,7 @@
1
1
  require 'uri'
2
2
  require 'cgi'
3
3
  require 'net/http'
4
+ require 'net/https'
4
5
  require 'json'
5
6
 
6
7
  require 'rubix/log'
@@ -127,6 +128,10 @@ module Rubix
127
128
  @uri = URI.parse(string)
128
129
  end
129
130
  @server = Net::HTTP.new(uri.host, uri.port)
131
+ if @uri.scheme == 'https'
132
+ @server.use_ssl = true
133
+ end
134
+ return @server
130
135
  end
131
136
 
132
137
  protected
@@ -180,7 +185,7 @@ module Rubix
180
185
  @request_id += 1
181
186
  begin
182
187
  raw_response = server.request(raw_api_request(raw_params))
183
- rescue NoMethodError, SocketError => e
188
+ rescue NoMethodError, Errno::ECONNREFUSED, SocketError => e
184
189
  raise RequestError.new("Could not connect to Zabbix server at #{host_with_port}")
185
190
  end
186
191
  raw_response
@@ -202,7 +207,7 @@ module Rubix
202
207
  # @request_id += 1
203
208
  begin
204
209
  raw_response = server.request(raw_web_request(verb, path, data))
205
- rescue NoMethodError, SocketError => e
210
+ rescue NoMethodError, Errno::ECONNREFUSED, SocketError => e
206
211
  raise RequestError.new("Could not connect to the Zabbix server at #{host_with_port}")
207
212
  end
208
213
  end
@@ -30,7 +30,7 @@ module Rubix
30
30
  #
31
31
  # Will attempt to read from
32
32
  #
33
- # - <tt>Settings[:log_level]</tt> if <tt>Settings</tt> is defined (see Configliere[http://github.com/infochimps/configliere])
33
+ # - <tt>Settings[:log_level]</tt> if <tt>Settings</tt> is defined (see Configliere[https://github.com/infochimps-labs/configliere])
34
34
  # - the <tt>RUBIX_LOG_LEVEL</tt> environment variable if defined
35
35
  #
36
36
  # The default is 'info'.
@@ -57,7 +57,7 @@ module Rubix
57
57
  #
58
58
  # Will attempt to read from
59
59
  #
60
- # - <tt>Settings[:log]</tt> if <tt>Settings</tt> is defined (see Configliere[http://github.com/infochimps/configliere])
60
+ # - <tt>Settings[:log]</tt> if <tt>Settings</tt> is defined (see Configliere[https://github.com/infochimps-labs/configliere])
61
61
  # - the <tt>RUBIX_LOG_PATH</tt> environment variable if defined
62
62
  #
63
63
  # Defaults to writing <tt>stdout</tt>.
@@ -10,7 +10,7 @@ module Rubix
10
10
  # server.
11
11
  BLANK_IP = '0.0.0.0'
12
12
 
13
- # The default port.
13
+ # The default port on the Host at which Zabbix agent is listening.
14
14
  DEFAULT_PORT = 10050
15
15
 
16
16
  # The numeric codes for the various status types.
@@ -23,7 +23,27 @@ module Rubix
23
23
  :proxy_active => 5,
24
24
  :proxy_passive => 6
25
25
  }
26
+
27
+ # The numeric codes for IPMI authentication algorithms.
28
+ zabbix_define :IPMI_AUTH, {
29
+ :default => -1,
30
+ :none => 0,
31
+ :md2 => 1,
32
+ :md5 => 2,
33
+ :straight => 4,
34
+ :oem => 5,
35
+ :rmcp_plus => 6
36
+ }
26
37
 
38
+ # The numeric codes for IPMI priviledge levels.
39
+ zabbix_define :IPMI_PRIVILEGE, {
40
+ :callback => 1,
41
+ :user => 2,
42
+ :operator => 3,
43
+ :admin => 4,
44
+ :oem => 5
45
+ }
46
+
27
47
  zabbix_attr :name
28
48
  zabbix_attr :ip
29
49
  zabbix_attr :port
@@ -32,6 +52,13 @@ module Rubix
32
52
  zabbix_attr :status
33
53
  zabbix_attr :use_ip, :default => true
34
54
  zabbix_attr :monitored, :default => true
55
+ zabbix_attr :use_ipmi, :default => false
56
+ zabbix_attr :ipmi_port, :default => 623
57
+ zabbix_attr :ipmi_username
58
+ zabbix_attr :ipmi_password
59
+ zabbix_attr :ipmi_ip
60
+ zabbix_attr :ipmi_authtype
61
+ zabbix_attr :ipmi_privilege, :default => :user
35
62
 
36
63
  def initialize properties={}
37
64
  super(properties)
@@ -56,6 +83,11 @@ module Rubix
56
83
  @monitored = true
57
84
  end
58
85
 
86
+ def use_ipmi
87
+ return @use_ipmi if (!@use_ipmi.nil?)
88
+ @use_ipmi = false
89
+ end
90
+
59
91
  #
60
92
  # == Associations ==
61
93
  #
@@ -70,6 +102,11 @@ module Rubix
70
102
 
71
103
  def validate
72
104
  raise ValidationError.new("A host must have at least one host group.") if host_group_ids.nil? || host_group_ids.empty?
105
+ raise ValidationError.new("A host must have a valid ip address if use_ip is set.") if use_ip && ip == self.class::BLANK_IP
106
+ raise ValidationError.new("A host must have an ip address if use_ip is set.") if use_ip && (ip.nil? || ip.empty?)
107
+ raise ValidationError.new("A host must have a dns name if use_ip is false.") if !use_ip && dns.nil?
108
+ raise ValidationError.new("A host must have a ipmi_privilege defined as one of: " + self.class::IPMI_PRIVILEGE_CODES.keys.to_s) if use_ipmi && self.class::IPMI_PRIVILEGE_CODES[ipmi_privilege].nil?
109
+ raise ValidationError.new("A host must have a ipmi_authtype defined as one of: " + self.class::IPMI_AUTH_CODES.keys.to_s) if use_ipmi && self.class::IPMI_AUTH_CODES[ipmi_authtype].nil?
73
110
  true
74
111
  end
75
112
 
@@ -85,21 +122,26 @@ module Rubix
85
122
  :macros => user_macro_params
86
123
  }.tap do |hp|
87
124
  hp[:profile] = profile if profile
125
+ hp[:profile].delete("hostid") if hp[:profile] && hp[:profile]["hostid"]
88
126
  hp[:status] = (monitored ? 0 : 1) unless monitored.nil?
89
127
 
90
- case
91
- when use_ip == true && (!ip.nil?) && (!ip.empty?)
92
- hp[:useip] = 1
93
- hp[:ip] = ip
94
- hp[:port] = port || self.class::DEFAULT_PORT
95
- when (!dns.nil?) && (!dns.empty?)
96
- hp[:useip] = 0
97
- hp[:dns] = dns
98
- hp[:port] = port || self.class::DEFAULT_PORT
99
- else
100
- hp[:ip] = self.class::BLANK_IP
101
- hp[:useip] = 1
102
- end
128
+ # Check to see if use_ip is set, otherwise we will use dns
129
+ hp[:useip] = (use_ip == true ? 1 : 0)
130
+
131
+ # if we have an IP then use it, otherwise use 0.0.0.0, same goes for the port
132
+ hp[:ip] = ip || self.class::BLANK_IP
133
+ hp[:port] = port || self.class::DEFAULT_PORT
134
+
135
+ # Always allow for a DNS record to exist even if we dont use it to monitor.
136
+ hp[:dns] = dns if dns
137
+
138
+ hp[:useipmi] = (use_ipmi == true ? 1 : 0)
139
+ hp[:ipmi_port] = ipmi_port if ipmi_port
140
+ hp[:ipmi_username] = ipmi_username if ipmi_username
141
+ hp[:ipmi_password] = ipmi_password if ipmi_password
142
+ hp[:ipmi_ip] = ipmi_ip if ipmi_ip
143
+ hp[:ipmi_authtype] = self.class::IPMI_AUTH_CODES[ipmi_authtype] if ipmi_authtype
144
+ hp[:ipmi_privilege] = self.class::IPMI_PRIVILEGE_CODES[ipmi_privilege] if ipmi_privilege
103
145
  end
104
146
  end
105
147
 
@@ -132,6 +174,7 @@ module Rubix
132
174
  end
133
175
 
134
176
  def self.build host
177
+ host['profile'].delete('hostid') if host.is_a?(Hash) && host['profile'].is_a?(Hash) && host['profile']['hostid']
135
178
  new({
136
179
  :id => host[id_field].to_i,
137
180
  :name => host['host'],
@@ -142,13 +185,20 @@ module Rubix
142
185
  :port => host['port'],
143
186
  :ip => host['ip'],
144
187
  :dns => host['dns'],
145
- :use_ip => (host['useip'].to_i == '1'),
188
+ :use_ip => (host['useip'].to_i == 1),
146
189
 
147
190
  # If the status is '1' then this is an unmonitored host.
148
191
  # Otherwise it's either '0' for monitored and ok or
149
192
  # something else for monitored and *not* ok.
150
193
  :monitored => (host['status'].to_i == 1 ? false : true),
151
- :status => self::STATUS_NAMES[host['status'].to_i]
194
+ :status => self::STATUS_NAMES[host['status'].to_i],
195
+ :use_ipmi => (host['useipmi'].to_i == 1),
196
+ :ipmi_port => host['ipmi_port'].to_i,
197
+ :ipmi_username => host['ipmi_username'],
198
+ :ipmi_password => host['ipmi_password'],
199
+ :ipmi_ip => host['ipmi_ip'],
200
+ :ipmi_authtype => self::IPMI_AUTH_NAMES[host['ipmi_authtype'].to_i],
201
+ :ipmi_privilege => self::IPMI_PRIVILEGE_NAMES[host['ipmi_privilege'].to_i]
152
202
  })
153
203
  end
154
204
 
@@ -5,7 +5,7 @@ describe "Applications" do
5
5
  before do
6
6
  integration_test
7
7
  @host_group = ensure_save(Rubix::HostGroup.new(:name => 'rubix_spec_host_group_1'))
8
- @host = ensure_save(Rubix::Host.new(:name => 'rubix_spec_host_1', :host_groups => [@host_group]))
8
+ @host = ensure_save(Rubix::Host.new(:name => 'rubix_spec_host_1', :host_groups => [@host_group], :ip => '123.123.123.123'))
9
9
  end
10
10
 
11
11
  after do
@@ -4,7 +4,7 @@ describe "Hosts" do
4
4
 
5
5
  before do
6
6
  integration_test
7
- @host_group_1 = ensure_save(Rubix::HostGroup.new(:name => 'rubix_spec_host_group_1'))
7
+ @host_group_1 = ensure_save(Rubix::HostGroup.new(:name => 'rubix_spec_host_group_1', :ip => '123.123.123.123'))
8
8
  end
9
9
 
10
10
  after do
@@ -26,10 +26,11 @@ describe "Hosts" do
26
26
  end
27
27
 
28
28
  it "can be created" do
29
- host = Rubix::Host.new(:name => 'rubix_spec_host_1', :host_groups => [@host_group_1])
29
+ host = Rubix::Host.new(:name => 'rubix_spec_host_1', :host_groups => [@host_group_1], :ip => '123.123.123.123')
30
30
  host.save.should be_true
31
31
  host.monitored.should be_true
32
32
  host.use_ip.should be_true
33
+ host.ip.should == '123.123.123.123'
33
34
  end
34
35
  end
35
36
 
@@ -5,8 +5,8 @@ describe "Items" do
5
5
  before do
6
6
  integration_test
7
7
  @host_group = ensure_save(Rubix::HostGroup.new(:name => 'rubix_spec_host_group_1'))
8
- @host_1 = ensure_save(Rubix::Host.new(:name => 'rubix_spec_host_1', :host_groups => [@host_group]))
9
- @host_2 = ensure_save(Rubix::Host.new(:name => 'rubix_spec_host_2', :host_groups => [@host_group]))
8
+ @host_1 = ensure_save(Rubix::Host.new(:name => 'rubix_spec_host_1', :host_groups => [@host_group], :ip => '123.123.123.123'))
9
+ @host_2 = ensure_save(Rubix::Host.new(:name => 'rubix_spec_host_2', :host_groups => [@host_group], :ip => '123.123.123.124'))
10
10
  @app_1 = ensure_save(Rubix::Application.new(:name => 'rubix_spec_app_1', :host_id => @host_1.id))
11
11
  @app_2 = ensure_save(Rubix::Application.new(:name => 'rubix_spec_app_1', :host_id => @host_2.id))
12
12
  end
@@ -5,7 +5,7 @@ describe "TimeSeries" do
5
5
  before do
6
6
  integration_test
7
7
  @host_group = ensure_save(Rubix::HostGroup.new(:name => 'rubix_spec_host_group_1'))
8
- @host = ensure_save(Rubix::Host.new(:name => 'rubix_spec_host_1', :host_groups => [@host_group]))
8
+ @host = ensure_save(Rubix::Host.new(:name => 'rubix_spec_host_1', :host_groups => [@host_group], :ip => '123.123.123.123'))
9
9
  end
10
10
 
11
11
  after do
@@ -11,8 +11,8 @@ describe "Triggers" do
11
11
  @template_item_1 = ensure_save(Rubix::Item.new(:key => 'rubix.spec1', :description => 'rubix template item description 1', :host_id => @template_1.id, :value_type => :character))
12
12
  @template_item_2 = ensure_save(Rubix::Item.new(:key => 'rubix.spec2', :description => 'rubix template item description 2', :host_id => @template_2.id, :value_type => :character))
13
13
 
14
- @host_1 = ensure_save(Rubix::Host.new(:name => 'rubix_spec_host_1', :host_groups => [@host_group]))
15
- @host_2 = ensure_save(Rubix::Host.new(:name => 'rubix_spec_host_2', :host_groups => [@host_group]))
14
+ @host_1 = ensure_save(Rubix::Host.new(:name => 'rubix_spec_host_1', :host_groups => [@host_group], :ip => '123.123.123.123'))
15
+ @host_2 = ensure_save(Rubix::Host.new(:name => 'rubix_spec_host_2', :host_groups => [@host_group], :ip => '123.123.123.124'))
16
16
  @host_item_1 = ensure_save(Rubix::Item.new(:key => 'rubix.spec1', :description => 'rubix host item description 1', :host_id => @host_1.id, :value_type => :character))
17
17
  @host_item_2 = ensure_save(Rubix::Item.new(:key => 'rubix.spec2', :description => 'rubix host item description 2', :host_id => @host_2.id, :value_type => :character))
18
18
  end
@@ -5,7 +5,7 @@ describe "User Macros" do
5
5
  before do
6
6
  integration_test
7
7
  @host_group = ensure_save(Rubix::HostGroup.new(:name => 'rubix_spec_host_group_1'))
8
- @host = ensure_save(Rubix::Host.new(:name => 'rubix_spec_host_1', :host_groups => [@host_group]))
8
+ @host = ensure_save(Rubix::Host.new(:name => 'rubix_spec_host_1', :host_groups => [@host_group], :ip => '123.123.123.123'))
9
9
  end
10
10
 
11
11
  after do
@@ -162,6 +162,6 @@ module Rubix
162
162
  def data_path *args
163
163
  File.join(File.expand_path('../../data', __FILE__), *args)
164
164
  end
165
-
165
+
166
166
  end
167
167
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubix
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.4
4
+ version: 0.5.5
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-03-08 00:00:00.000000000Z
12
+ date: 2012-05-30 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
16
- requirement: &17098960 !ruby/object:Gem::Requirement
16
+ requirement: &17590460 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *17098960
24
+ version_requirements: *17590460
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: mysql2
27
- requirement: &17098520 !ruby/object:Gem::Requirement
27
+ requirement: &17589800 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *17098520
35
+ version_requirements: *17589800
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: json
38
- requirement: &17098000 !ruby/object:Gem::Requirement
38
+ requirement: &17589040 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - <=
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: 1.6.1
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *17098000
46
+ version_requirements: *17589040
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: configliere
49
- requirement: &17097460 !ruby/object:Gem::Requirement
49
+ requirement: &17588500 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: 0.4.8
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *17097460
57
+ version_requirements: *17588500
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: multipart-post
60
- requirement: &17097080 !ruby/object:Gem::Requirement
60
+ requirement: &17588120 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,7 +65,7 @@ dependencies:
65
65
  version: '0'
66
66
  type: :runtime
67
67
  prerelease: false
68
- version_requirements: *17097080
68
+ version_requirements: *17588120
69
69
  description: Rubix provides abstractions for connecting to Zabbix's API, an ORM for
70
70
  wrapping Zabbix resources, a set of scripts for writing data to Zabbix, and a collection
71
71
  of Monitor classes for building periodic monitors.