class XymonClient::Service

Manage a Service, can contains multiple items to monitor

Constants

DEFAULT_DETAILS_TEMPLATE

Attributes

enabled[RW]
items[R]
lifetime[RW]
name[R]
status[R]

Public Class Methods

new(servers, config) click to toggle source
Calls superclass method XymonClient::Client::new
# File lib/xymonclient/service.rb, line 22
def initialize(servers, config)
  super(servers)
  @items = {}
  @current_state = 'purple'
  update_config(config)
end

Public Instance Methods

ack(duration, message) click to toggle source
Calls superclass method XymonClient::Client#ack
# File lib/xymonclient/service.rb, line 91
def ack(duration, message)
  super(@host, @name, duration, message)
end
board(fields = []) click to toggle source
Calls superclass method XymonClient::Client#board
# File lib/xymonclient/service.rb, line 87
def board(fields = [])
  super(@host, @name, fields)
end
disable(duration, message) click to toggle source
Calls superclass method XymonClient::Client#disable
# File lib/xymonclient/service.rb, line 83
def disable(duration, message)
  super(@host, @name, duration, message)
end
enable() click to toggle source
Calls superclass method XymonClient::Client#enable
# File lib/xymonclient/service.rb, line 79
def enable
  super(@host, @name)
end
update_config(config) click to toggle source
# File lib/xymonclient/service.rb, line 29
def update_config(config)
  raise InvalidService if config.fetch('name', '') == ''
  raise InvalidService if config.fetch('host', '') == ''
  @name = config['name']
  @host = config['host']
  @details_template = config.fetch(
    'details_template',
    DEFAULT_DETAILS_TEMPLATE
  )
  @lifetime = config.fetch('lifetime', '30m')
  @enabled = config.fetch('enabled', true)
  if config.fetch('items', {}).empty?
    @items = {}
  else
    _update_items_config(config['items'])
  end
  @purple_item_status = config.fetch('purple_item_status', 'red')
end
update_item(name, value, attrs = {}) click to toggle source
# File lib/xymonclient/service.rb, line 48
def update_item(name, value, attrs = {})
  raise InvalidServiceItem unless @items.include?(name)
  @items[name].value = value
  @items[name].attributes.merge!(attrs)
end

Private Instance Methods

_create_serviceitem(config) click to toggle source
# File lib/xymonclient/service.rb, line 113
def _create_serviceitem(config)
  case config.fetch('type', '')
  when 'gauge'
    ServiceItemGauge.new(config)
  when 'string'
    ServiceItemString.new(config)
  else
    ServiceItem.new(config)
  end
end
_details() click to toggle source
# File lib/xymonclient/service.rb, line 97
def _details
  context = {
    'name' => @name,
    'host' => @host,
    'status' => @current_state,
    'items' => {},
    'enabled' => @enabled,
    'lifetime' => @lifetime,
    'timestamp' => @timestamp
  }
  context['items'] = @items.map { |_name, item| item.context }
  ERB.new(@details_template).result(
    XymonClient::ERBContext.new(context).context
  )
end
_update_items_config(items) click to toggle source
# File lib/xymonclient/service.rb, line 124
def _update_items_config(items)
  # cleanup old items and update old items
  @items.keep_if { |key, _value| items.key?(key) }
  @items.each do |item_name, item_value|
    item_value.update_config(items[item_name])
  end
  # add new items
  items.each do |item_name, item_config|
    @items[item_name] = _create_serviceitem(item_config) \
      unless @items.keys.include?(item_name)
  end
end