I wanted a Zabbix API wrapper so that I could copy and paste code from Zabbix's API docs instead of learning whatever quirks library maintainers decided to build into their implementation.
The result is zenvelope. The method and params portions of the JSON
requests are used in a transparent way that is meant to be readable and most
importantly, usable without having to read any new docs.
Installation
gem install zenvelope
or add to Gemfile:
gem 'zenvelope'
Example usage
To demonstrate, I'll follow the example workflow found here: https://www.zabbix.com/documentation/3.0/manual/api
Authentication
require 'zenvelope'
# Use your server's URL
z = Zenvelope.new('http://company.com/zabbix')
z.login(user: 'Admin', password: 'zabbix')Your auth token is stored in the class instance z for subsequent API requests.
Retrieving hosts
You only need to pass in the params section of the JSON. The id and auth are handled for you.
z.host.get(output: %w(hostid host), selectInterfaces: %w(interfaceid ip))
# => [{:hostid=>"10084", :host=>"Zabbix server", :interfaces=>[{:interfaceid=>"1", :ip=>"127.0.0.1"}]}]Creating a new item
z.item.create(
name: 'Free disk space on $1',
key_: 'vfs.fs.size[/home/joe/,free]',
hostid: '10084',
type: 0,
value_type: 3,
interfaceid: '1',
delay: 30
)
# => {:itemids=>["23660"]}Error handling
z.host.create(
host: 'Linux server',
interfaces: [
{
type: 1,
main: 1,
useip: 1,
ip: '192.168.3.1',
dns: '',
port: '10050'
}
]
)
# => {:jsonrpc=>"2.0", :error=>{:code=>-32602, :message=>"Invalid params.", :data=>"No groups for host \"Linux server\"."}, :id=>70719}TODO
- gracefully handling errors