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. -
.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.
-
.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.
284 285 286 287 288 289 290 291 292 |
# File 'lib/rubix/models/model.rb', line 284 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.
268 269 270 |
# File 'lib/rubix/models/model.rb', line 268 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.
276 277 278 |
# File 'lib/rubix/models/model.rb', line 276 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.
298 299 300 |
# File 'lib/rubix/models/model.rb', line 298 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.
327 328 329 330 331 332 333 334 335 336 337 338 |
# File 'lib/rubix/models/model.rb', line 327 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.
346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 |
# File 'lib/rubix/models/model.rb', line 346 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.
310 311 312 |
# File 'lib/rubix/models/model.rb', line 310 def self.find_params ={} get_params.merge() end |
.find_request(options = {}) ⇒ Rubix::Response
Send a find request for a specific resource.
318 319 320 |
# File 'lib/rubix/models/model.rb', line 318 def self.find_request ={} request("#{zabbix_name}.get", find_params()) end |
.get_params ⇒ Hash
Parameters for ‘get’-type requests for this resource’s type.
260 261 262 |
# File 'lib/rubix/models/model.rb', line 260 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 |
.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 |
.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
.
249 250 251 |
# File 'lib/rubix/models/model.rb', line 249 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
.
201 202 203 |
# File 'lib/rubix/models/model.rb', line 201 def before_update true end |
#create ⇒ true, false
Create this resource.
143 144 145 146 147 148 149 150 151 152 153 154 |
# File 'lib/rubix/models/model.rb', line 143 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.
129 130 131 |
# File 'lib/rubix/models/model.rb', line 129 def create_params {} end |
#create_request ⇒ Rubix::Response
Send a request to create this resource.
136 137 138 |
# File 'lib/rubix/models/model.rb', line 136 def create_request request("#{self.class.zabbix_name}.create", create_params) end |
#destroy ⇒ true, false
Destroy this resource.
226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 |
# File 'lib/rubix/models/model.rb', line 226 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.
212 213 214 |
# File 'lib/rubix/models/model.rb', line 212 def destroy_params [id] end |
#destroy_request ⇒ Rubix::Response
Send a request to destroy this resource.
219 220 221 |
# File 'lib/rubix/models/model.rb', line 219 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.
99 100 101 |
# File 'lib/rubix/models/model.rb', line 99 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.
108 109 110 |
# File 'lib/rubix/models/model.rb', line 108 def save new_record? ? create : update end |
#update ⇒ true, false
Update this resource.
177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 |
# File 'lib/rubix/models/model.rb', line 177 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.
163 164 165 |
# File 'lib/rubix/models/model.rb', line 163 def update_params create_params.merge({id_field => id}) end |
#update_request ⇒ Rubix::Response
Send a request to update this resource.
170 171 172 |
# File 'lib/rubix/models/model.rb', line 170 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.
118 119 120 |
# File 'lib/rubix/models/model.rb', line 118 def validate true end |