class Salus::ZabbixCli

Constants

ZABBIX_CACHE_FILE

Public Instance Methods

bulk(group=nil) click to toggle source
# File lib/salus/cli/zabbix.rb, line 76
def bulk(group=nil)
  Salus.logger.level = options[:debug] ? Logger::DEBUG : Logger::WARN
  load_files(get_files(options))

  cache_file = options.fetch(:cache,
    Salus.var(:zabbix_cache_file,
      File.join(Dir.pwd, ZABBIX_CACHE_FILE)))
  cache  = load_cache(cache_file)

  re = group.nil? ? // : /^#{Regexp.escape(group)}\./
  keys = cache.keys.grep(re)
  if !keys.empty? && (keys.reduce(true) { |x, v| x &= !expired?(cache[v], options) })
    result = {}
    keys.each do |key|
      name = key.sub(re, '')
      name = name.gsub(/\.\[/, '[')

      parts = name.split(/\./)
      node  = result
      parts[0...-1].each do |part|
        node[part] = {} unless node.key?(part)
        node = node[part]
      end
      node[parts.last] = cache[key][:value]
    end
    STDOUT.puts result.to_json
    return
  end

  state_file = get_state_file(options)
  load_state(state_file)

  Salus.renders.clear
  Salus.render(ZabbixBulkRenderer.new(group: group))
  render = ZabbixCacheRenderer.new
  Salus.render(render)
  Salus.tick
  cache  = render.data

  save_state(state_file)
  save_cache(cache_file, cache)
end
discover(name) click to toggle source
# File lib/salus/cli/zabbix.rb, line 28
def discover(name)
  Salus.logger.level = options[:debug] ? Logger::DEBUG : Logger::WARN
  load_files(get_files(options))
  puts Salus.discovery(name)
end
parameter(name) click to toggle source
# File lib/salus/cli/zabbix.rb, line 40
def parameter(name)
  Salus.logger.level = options[:debug] ? Logger::DEBUG : Logger::WARN
  load_files(get_files(options))

  cache_file = options.fetch(:cache,
    Salus.vars.fetch(:zabbix_cache_file,
      File.join(Dir.pwd, ZABBIX_CACHE_FILE)))
  cache  = load_cache(cache_file)

  if (cache.key?(name) && !expired?(cache[name], options))
    STDOUT.puts cache[name][:value] unless cache[name][:value].nil?
    return
  end

  state_file = get_state_file(options)
  load_state(state_file)

  render = ZabbixCacheRenderer.new
  Salus.renders.clear
  Salus.render(render)
  Salus.tick
  cache  = render.data

  if (cache.key?(name))
    STDOUT.puts cache[name][:value] unless cache[name][:value].nil?
  end

  save_state(state_file)
  save_cache(cache_file, cache)
  raise "Unknown parameter #{name}" unless cache.key?(name)
end

Private Instance Methods

expired?(metric, options={}) click to toggle source
# File lib/salus/cli/zabbix.rb, line 120
def expired?(metric, options={})
  return true if metric.nil?
  ttl = options.fetch(:cache_ttl, metric[:cache_ttl])
  ttl ||= 0
  (Time.now.to_f > metric[:timestamp] + ttl)
end
load_cache(file) click to toggle source
# File lib/salus/cli/zabbix.rb, line 127
def load_cache(file)
  return {} unless file
  begin
    if File.exists?(file)
      YAML.load(read_file(file))
    else
      {}
    end
  rescue Exception => e
    log ERROR, "Failed to load state #{file}: " + e.message
    {}
  end
end
save_cache(file, data) click to toggle source
# File lib/salus/cli/zabbix.rb, line 141
def save_cache(file, data)
  return unless file
  begin
    write_file(file, data.to_yaml)
  rescue Exception => e
    log ERROR, "Failed to save state #{file}: " + e.message
  end
end