Class: Rubix::Model
- Inherits:
-
Object
- Object
- Rubix::Model
- Extended by:
- Logs
- Includes:
- Logs
- Defined in:
- lib/rubix/models/model.rb
Overview
A base class for all Zabbix models to subclass.
It might be worth using ActiveModel – but maybe not. The goal is to keep dependencies low while still retaining expressiveness.
Direct Known Subclasses
Application, Host, HostGroup, Item, Template, TimeSeries, Trigger, UserMacro
Instance Attribute Summary collapse
-
#id ⇒ Fixnum?
The ID of this model.
-
#properties ⇒ Hash
] the properties this model was initialized with.
Class Method Summary collapse
-
.all(options = {}) ⇒ Array<Rubix::Model>
List all objects of this resource’s type.
-
.all_params(options = {}) ⇒ Hash
Parameters to list all the objects of this resource’s type.
-
.all_request(options = {}) ⇒ Rubix::Response
Send a request to list all objects of this resource’s type.
-
.each(options = {}, &block) ⇒ Array<Rubix::Model>
Execute block once for each element of the result set.
-
.find(options = {}) ⇒ Rubix::Model?
Find a resource using the given
options
or returnnil
if none is found. -
.find_or_create(options = {}) ⇒ Rubix::Model, false
Find a resource using the given
options
or create one if none can be found. -
.find_params(options = {}) ⇒ Hash
Parameters for finding a specific resource.
-
.find_request(options = {}) ⇒ Rubix::Response
Send a find request for a specific resource.
-
.get_params ⇒ Hash
Parameters for ‘get’-type requests for this resource’s type.
-
.id_field ⇒ String
This is the name of the id field returned in Zabbix responses –
hostid
,groupid
,hostmacroid
, &c. - .list(ids) ⇒ Object
-
.request(method, params) ⇒ Rubix::Response
Send a request to the Zabbix API.
-
.resource_name ⇒ String
This is the name of the resource as used inside Rubix – Host, HostGroup, UserMacro, &c.
-
.web_request(verb, path, data = {}) ⇒ Object
Send a web request to the Zabbix web application.
-
.zabbix_name ⇒ String
This is the name of the resource as used by Zabbix – host, hostgroup, usermacro, &c.
Instance Method Summary collapse
-
#before_destroy ⇒ true, false
A hook that will be run before this resource is destroyed.
-
#before_update ⇒ true, false
A hook that will be run before this resource is updated.
-
#create ⇒ true, false
Create this resource.
-
#create_params ⇒ Hash
Parameters for creating a new resource of this type.
-
#create_request ⇒ Rubix::Response
Send a request to create this resource.
-
#destroy ⇒ true, false
Destroy this resource.
-
#destroy_params ⇒ Array<Fixnum>
Parameters for destroying this resource.
-
#destroy_request ⇒ Rubix::Response
Send a request to destroy this resource.
-
#id_field ⇒ String
This is the name of the id field returned in Zabbix responses –
hostid
,groupid
,hostmacroid
, &c. -
#initialize(properties = {}) ⇒ Model
constructor
Create a new model instance.
-
#new_record? ⇒ true, false
Is this a new record? We can tell because the ID must be blank.
-
#request(method, params) ⇒ Rubix::Response
Send a request to the Zabbix API.
-
#resource_name ⇒ String
This is the name of this resource instance, using this object’s ‘name’ property if possible.
-
#save ⇒ true, false
Save this record.
-
#update ⇒ true, false
Update this resource.
-
#update_params ⇒ Hash
Parameters for updating a resource of this type.
-
#update_request ⇒ Rubix::Response
Send a request to update this resource.
-
#validate ⇒ true, false
Validate this record.
Methods included from Logs
debug, error, fatal, info, warn
Constructor Details
#initialize(properties = {}) ⇒ Model
Create a new model instance. This may represent a new or existing Zabbix resource.
71 72 73 74 |
# File 'lib/rubix/models/model.rb', line 71 def initialize properties={} @properties = properties @id = properties[:id] end |
Instance Attribute Details
#id ⇒ Fixnum?
Returns the ID of this model.
13 14 15 |
# File 'lib/rubix/models/model.rb', line 13 def id @id end |
#properties ⇒ Hash
Returns ] the properties this model was initialized with.
10 11 12 |
# File 'lib/rubix/models/model.rb', line 10 def properties @properties end |
Class Method Details
.all(options = {}) ⇒ Array<Rubix::Model>
List all objects of this resource’s type.
294 295 296 297 298 299 300 301 302 |
# File 'lib/rubix/models/model.rb', line 294 def self.all ={} response = all_request() if response.has_data? response.result.map { |obj_data| build(obj_data) } else error("Error listing all Zabbix #{resource_name}s: #{response.}") unless response.success? [] end end |
.all_params(options = {}) ⇒ Hash
Parameters to list all the objects of this resource’s type.
278 279 280 |
# File 'lib/rubix/models/model.rb', line 278 def self.all_params ={} get_params.merge() end |
.all_request(options = {}) ⇒ Rubix::Response
Send a request to list all objects of this resource’s type.
286 287 288 |
# File 'lib/rubix/models/model.rb', line 286 def self.all_request ={} request("#{zabbix_name}.get", all_params()) end |
.each(options = {}, &block) ⇒ Array<Rubix::Model>
Execute block once for each element of the result set.
308 309 310 |
# File 'lib/rubix/models/model.rb', line 308 def self.each ={}, &block all().each(&block) end |
.find(options = {}) ⇒ Rubix::Model?
Find a resource using the given options
or return nil
if none is found.
337 338 339 340 341 342 343 344 345 346 347 348 |
# File 'lib/rubix/models/model.rb', line 337 def self.find ={} response = find_request() case when response.has_data? build(response.result.first) when response.success? # a successful but empty response means it wasn't found else error("Error finding Zabbix #{resource_name} using #{.inspect}: #{response.}") nil end end |
.find_or_create(options = {}) ⇒ Rubix::Model, false
Find a resource using the given options
or create one if none can be found. Will return false
if the object cannot be found and cannot be created.
356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 |
# File 'lib/rubix/models/model.rb', line 356 def self.find_or_create ={} response = find_request() case when response.has_data? build(response.result.first) when response.success? # doesn't exist obj = new() if obj.save obj else false end else error("Error creating Zabbix #{resource_name} using #{.inspect}: #{response.}") false end end |
.find_params(options = {}) ⇒ Hash
Parameters for finding a specific resource.
320 321 322 |
# File 'lib/rubix/models/model.rb', line 320 def self.find_params ={} get_params.merge() end |
.find_request(options = {}) ⇒ Rubix::Response
Send a find request for a specific resource.
328 329 330 |
# File 'lib/rubix/models/model.rb', line 328 def self.find_request ={} request("#{zabbix_name}.get", find_params()) end |
.get_params ⇒ Hash
Parameters for ‘get’-type requests for this resource’s type.
270 271 272 |
# File 'lib/rubix/models/model.rb', line 270 def self.get_params { :output => :extend } end |
.id_field ⇒ String
This is the name of the id field returned in Zabbix responses – hostid
, groupid
, hostmacroid
, &c.
50 51 52 |
# File 'lib/rubix/models/model.rb', line 50 def self.id_field "#{zabbix_name}id" end |
.list(ids) ⇒ Object
375 376 377 378 379 380 381 382 383 384 385 386 387 388 |
# File 'lib/rubix/models/model.rb', line 375 def self.list ids return [] if ids.nil? || ids.empty? response = request("#{zabbix_name}.get", get_params.merge((id_field + 's') => ids)) case when response.has_data? response.result.map do |obj| build(obj) end when response.success? [] else error("Error listing Zabbix #{resource_name}s: #{response.}") end end |
.request(method, params) ⇒ Rubix::Response
Send a request to the Zabbix API. This is just a convenience method for Rubix::Connection#request
.
92 93 94 |
# File 'lib/rubix/models/model.rb', line 92 def self.request method, params Rubix.connection && Rubix.connection.request(method, params) end |
.resource_name ⇒ String
This is the name of the resource as used inside Rubix – Host, HostGroup, UserMacro, &c.
26 27 28 |
# File 'lib/rubix/models/model.rb', line 26 def self.resource_name self.to_s.split('::').last end |
.web_request(verb, path, data = {}) ⇒ Object
Send a web request to the Zabbix web application. This is just a convenience method for Rubix::Connection#web_request
.
102 103 104 |
# File 'lib/rubix/models/model.rb', line 102 def self.web_request verb, path, data={} Rubix.connection && Rubix.connection.web_request(verb, path, data) end |
.zabbix_name ⇒ String
This is the name of the resource as used by Zabbix – host, hostgroup, usermacro, &c.
42 43 44 |
# File 'lib/rubix/models/model.rb', line 42 def self.zabbix_name resource_name.downcase end |
Instance Method Details
#before_destroy ⇒ true, false
A hook that will be run before this resource is destroyed.
Override this in a subclass to implement any desired before-destroy functionality. Must return true
or false
.
259 260 261 |
# File 'lib/rubix/models/model.rb', line 259 def before_destroy true end |
#before_update ⇒ true, false
A hook that will be run before this resource is updated.
Override this in a subclass to implement any desired before-update functionality. Must return true
or false
.
211 212 213 |
# File 'lib/rubix/models/model.rb', line 211 def before_update true end |
#create ⇒ true, false
Create this resource.
153 154 155 156 157 158 159 160 161 162 163 164 |
# File 'lib/rubix/models/model.rb', line 153 def create return false unless validate response = create_request if response.has_data? @id = response.result[id_field + 's'].first.to_i info("Created Zabbix #{resource_name}") true else error("Error creating Zabbix #{resource_name}: #{response.}") return false end end |
#create_params ⇒ Hash
Parameters for creating a new resource of this type.
139 140 141 |
# File 'lib/rubix/models/model.rb', line 139 def create_params {} end |
#create_request ⇒ Rubix::Response
Send a request to create this resource.
146 147 148 |
# File 'lib/rubix/models/model.rb', line 146 def create_request request("#{self.class.zabbix_name}.create", create_params) end |
#destroy ⇒ true, false
Destroy this resource.
236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 |
# File 'lib/rubix/models/model.rb', line 236 def destroy return true if new_record? return false unless before_destroy response = destroy_request case when response.has_data? && response.result.values.first.first.to_i == id info("Destroyed Zabbix #{resource_name}") true when response.zabbix_error? && response. =~ /does not exist/i # was never there true else error("Could not destroy Zabbix #{resource_name}: #{response.}") false end end |
#destroy_params ⇒ Array<Fixnum>
Parameters for destroying this resource.
222 223 224 |
# File 'lib/rubix/models/model.rb', line 222 def destroy_params [id] end |
#destroy_request ⇒ Rubix::Response
Send a request to destroy this resource.
229 230 231 |
# File 'lib/rubix/models/model.rb', line 229 def destroy_request request("#{self.class.zabbix_name}.delete", destroy_params) end |
#id_field ⇒ String
This is the name of the id field returned in Zabbix responses – hostid
, groupid
, hostmacroid
, &c.
58 59 60 |
# File 'lib/rubix/models/model.rb', line 58 def id_field self.class.id_field end |
#new_record? ⇒ true, false
Is this a new record? We can tell because the ID must be blank.
109 110 111 |
# File 'lib/rubix/models/model.rb', line 109 def new_record? @id.nil? end |
#request(method, params) ⇒ Rubix::Response
Send a request to the Zabbix API. This is just a convenience method for Rubix::Connection#request
.
82 83 84 |
# File 'lib/rubix/models/model.rb', line 82 def request method, params self.class.request(method, params) end |
#resource_name ⇒ String
This is the name of this resource instance, using this object’s ‘name’ property if possible.
34 35 36 |
# File 'lib/rubix/models/model.rb', line 34 def resource_name "#{self.class.resource_name} #{respond_to?(:name) ? self.name : self.id}" end |
#save ⇒ true, false
Save this record.
Will create new records and update old ones.
118 119 120 |
# File 'lib/rubix/models/model.rb', line 118 def save new_record? ? create : update end |
#update ⇒ true, false
Update this resource.
187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 |
# File 'lib/rubix/models/model.rb', line 187 def update return false unless validate return create if new_record? return false unless before_update response = update_request case when response.has_data? && response.result.values.first.map(&:to_i).include?(id) info("Updated Zabbix #{resource_name}") true when response.has_data? error("No error, but failed to update Zabbix #{resource_name}") false else error("Error updating Zabbix #{resource_name}: #{response.}") false end end |
#update_params ⇒ Hash
Parameters for updating a resource of this type.
173 174 175 |
# File 'lib/rubix/models/model.rb', line 173 def update_params create_params.merge({id_field => id}) end |
#update_request ⇒ Rubix::Response
Send a request to update this resource.
180 181 182 |
# File 'lib/rubix/models/model.rb', line 180 def update_request request("#{self.class.zabbix_name}.update", update_params) end |
#validate ⇒ true, false
Validate this record.
Override this method in a subclass and have it raise a Rubix::ValidationError
if validation fails.
128 129 130 |
# File 'lib/rubix/models/model.rb', line 128 def validate true end |