Sha256: c6ffb2f90e8485010101f1eb0d21a786f8993776be8b060233ad2e9dfb8be768

Contents?: true

Size: 1.56 KB

Versions: 2

Compression:

Stored size: 1.56 KB

Contents

require 'json'
require 'net/http'

class ZabbixApi
  class Client

    def id
      Random.rand(100000)
    end

    def api_version
      @version ||= api_request(:method => "apiinfo.version", :params => {})
    end

    def auth
      api_request(
        :method => 'user.authenticate', 
        :params => {
          :user      => @options[:user],
          :password  => @options[:password],
        }
      )
    end

    def initialize(options = {})
      @options = options
      @auth_hash = auth
    end

    def message_json(body)
      message = {
        :method  => body[:method],
        :params  => body[:params],
        :auth    => @auth_hash,
        :id      => id,
        :jsonrpc => '2.0'
      }
      JSON.generate(message)
    end

    def http_request(body)
      uri = URI.parse(@options[:url])
      http = Net::HTTP.new(uri.host, uri.port)
      request = Net::HTTP::Post.new(uri.request_uri)
      request.add_field('Content-Type', 'application/json-rpc')
      request.body = body
      response = http.request(request)
      raise "HTTP Error: #{response.code} on #{@options[:url]}" unless response.code == "200"
      puts "[DEBUG] Get answer: #{response.body}" if @options[:debug]
      response.body
    end

    def _request(body)
      puts "[DEBUG] Send request: #{body}" if @options[:debug]
      result = JSON.parse(http_request(body))
      raise "Server answer API error: #{result['error'].inspect} on request: #{body}" if result['error']
      result['result']
    end

    def api_request(body)
      _request message_json(body)
    end

  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
zabbixapi-0.4.2 lib/zabbixapi/client.rb
zabbixapi-0.4.1 lib/zabbixapi/client.rb