package module
v0.2.0 Latest Latest

This package is not in the latest version of its module.

Go to latest
Published: Sep 2, 2014 License: BSD-2-Clause Imports: 8 Imported by: 3



This Go package provides access to Zabbix API.

Install it: go get

You have to run tests before using this package – Zabbix API doesn't match documentation in few details, which are changing in patch releases. Tests are not expected to be destructive, but you are advised to run them against not-production instance or at least make a backup.

export TEST_ZABBIX_URL=http://host/api_jsonrpc.php
go test -v

TEST_ZABBIX_URL may contain HTTP basic auth username and password: http://username:password@host/api_jsonrpc.php. Also, in some setups URL should be like http://host/zabbix/api_jsonrpc.php.

Documentation is available on Also, Rafael Fernandes dos Santos wrote a great article about using and extending this package.

License: Simplified BSD License (see LICENSE).



Package zabbix provides access to Zabbix API.

Before using it make sure you run tests as described in README:




View Source
const (
	Available   AvailableType = 1
	Unavailable AvailableType = 2

	Monitored   StatusType = 0
	Unmonitored StatusType = 1
View Source
const (
	ZabbixAgent       ItemType = 0
	SNMPv1Agent       ItemType = 1
	ZabbixTrapper     ItemType = 2
	SimpleCheck       ItemType = 3
	SNMPv2Agent       ItemType = 4
	ZabbixInternal    ItemType = 5
	SNMPv3Agent       ItemType = 6
	ZabbixAgentActive ItemType = 7
	ZabbixAggregate   ItemType = 8
	WebItem           ItemType = 9
	ExternalCheck     ItemType = 10
	DatabaseMonitor   ItemType = 11
	IPMIAgent         ItemType = 12
	SSHAgent          ItemType = 13
	TELNETAgent       ItemType = 14
	Calculated        ItemType = 15
	JMXAgent          ItemType = 16

	Float     ValueType = 0
	Character ValueType = 1
	Log       ValueType = 2
	Unsigned  ValueType = 3
	Text      ValueType = 4

	Decimal     DataType = 0
	Octal       DataType = 1
	Hexadecimal DataType = 2
	Boolean     DataType = 3

	AsIs  DeltaType = 0
	Speed DeltaType = 1
	Delta DeltaType = 2


This section is empty.


This section is empty.


type API

type API struct {
	Auth   string      // auth token, filled by Login()
	Logger *log.Logger // request/response logger, nil by default
	// contains filtered or unexported fields

func NewAPI

func NewAPI(url string) (api *API)

Creates new API access object. Typical URL is http://host/api_jsonrpc.php or http://host/zabbix/api_jsonrpc.php. It also may contain HTTP basic auth username and password like http://username:password@host/api_jsonrpc.php.

func (*API) ApplicationGetByHostIdAndName

func (api *API) ApplicationGetByHostIdAndName(hostId, name string) (res *Application, err error)

Gets application by host Id and name only if there is exactly 1 matching application.

func (*API) ApplicationGetById

func (api *API) ApplicationGetById(id string) (res *Application, err error)

Gets application by Id only if there is exactly 1 matching application.

func (*API) ApplicationsCreate

func (api *API) ApplicationsCreate(apps Applications) (err error)

Wrapper for application.create:

func (*API) ApplicationsDelete

func (api *API) ApplicationsDelete(apps Applications) (err error)

Wrapper for application.delete: Cleans ApplicationId in all apps elements if call succeed.

func (*API) ApplicationsDeleteByIds

func (api *API) ApplicationsDeleteByIds(ids []string) (err error)

Wrapper for application.delete:

func (*API) ApplicationsGet

func (api *API) ApplicationsGet(params Params) (res Applications, err error)

Wrapper for application.get:

func (*API) Call

func (api *API) Call(method string, params interface{}) (response Response, err error)

Calls specified API method. Uses api.Auth if not empty. err is something network or marshaling related. Caller should inspect response.Error to get API error.

api := NewAPI("http://host/api_jsonrpc.php")
api.Login("user", "password")
res, _ := api.Call("item.get", Params{"itemids": "23970", "output": "extend"})

func (*API) CallWithError

func (api *API) CallWithError(method string, params interface{}) (response Response, err error)

Uses Call() and then sets err to response.Error if former is nil and latter is not.

func (*API) HostGetByHost

func (api *API) HostGetByHost(host string) (res *Host, err error)

Gets host by Host only if there is exactly 1 matching host.

func (*API) HostGetById

func (api *API) HostGetById(id string) (res *Host, err error)

Gets host by Id only if there is exactly 1 matching host.

func (*API) HostGroupGetById

func (api *API) HostGroupGetById(id string) (res *HostGroup, err error)

Gets host group by Id only if there is exactly 1 matching host group.

func (*API) HostGroupsCreate

func (api *API) HostGroupsCreate(hostGroups HostGroups) (err error)

Wrapper for hostgroup.create:

func (*API) HostGroupsDelete

func (api *API) HostGroupsDelete(hostGroups HostGroups) (err error)

Wrapper for hostgroup.delete: Cleans GroupId in all hostGroups elements if call succeed.

func (*API) HostGroupsDeleteByIds

func (api *API) HostGroupsDeleteByIds(ids []string) (err error)

Wrapper for hostgroup.delete:

func (*API) HostGroupsGet

func (api *API) HostGroupsGet(params Params) (res HostGroups, err error)

Wrapper for hostgroup.get:

func (*API) HostsCreate

func (api *API) HostsCreate(hosts Hosts) (err error)

Wrapper for host.create:

func (*API) HostsDelete

func (api *API) HostsDelete(hosts Hosts) (err error)

Wrapper for host.delete: Cleans HostId in all hosts elements if call succeed.

func (*API) HostsDeleteByIds

func (api *API) HostsDeleteByIds(ids []string) (err error)

Wrapper for host.delete:

func (*API) HostsGet

func (api *API) HostsGet(params Params) (res Hosts, err error)

Wrapper for host.get:

func (*API) HostsGetByHostGroupIds

func (api *API) HostsGetByHostGroupIds(ids []string) (res Hosts, err error)

Gets hosts by host group Ids.

func (*API) HostsGetByHostGroups

func (api *API) HostsGetByHostGroups(hostGroups HostGroups) (res Hosts, err error)

Gets hosts by host groups.

func (*API) ItemsCreate

func (api *API) ItemsCreate(items Items) (err error)

Wrapper for item.create:

func (*API) ItemsDelete

func (api *API) ItemsDelete(items Items) (err error)

Wrapper for item.delete: Cleans ItemId in all items elements if call succeed.

func (*API) ItemsDeleteByIds

func (api *API) ItemsDeleteByIds(ids []string) (err error)

Wrapper for item.delete:

func (*API) ItemsGet

func (api *API) ItemsGet(params Params) (res Items, err error)

Wrapper for item.get

func (*API) ItemsGetByApplicationId

func (api *API) ItemsGetByApplicationId(id string) (res Items, err error)

Gets items by application Id.

func (*API) Login

func (api *API) Login(user, password string) (auth string, err error)

Calls "user.authenticate" API method and fills api.Auth field.

func (*API) SetClient added in v0.2.0

func (api *API) SetClient(c *http.Client)

Allows one to use specific http.Client, for example with InsecureSkipVerify transport.

func (*API) Version

func (api *API) Version() (v string, err error)

Calls "APIInfo.version" API method

type Application

type Application struct {
	ApplicationId string `json:"applicationid,omitempty"`
	HostId        string `json:"hostid"`
	Name          string `json:"name"`
	TemplateId    string `json:"templateid,omitempty"`

type Applications

type Applications []Application

type AvailableType

type AvailableType int

type DataType

type DataType int

type DeltaType

type DeltaType int

type Error

type Error struct {
	Code    int    `json:"code"`
	Message string `json:"message"`
	Data    string `json:"data"`

func (*Error) Error

func (e *Error) Error() string

type ExpectedMore

type ExpectedMore struct {
	Expected int
	Got      int

func (*ExpectedMore) Error

func (e *ExpectedMore) Error() string

type ExpectedOneResult

type ExpectedOneResult int

func (*ExpectedOneResult) Error

func (e *ExpectedOneResult) Error() string

type Host

type Host struct {
	HostId    string        `json:"hostid,omitempty"`
	Host      string        `json:"host"`
	Available AvailableType `json:"available"`
	Error     string        `json:"error"`
	Name      string        `json:"name"`
	Status    StatusType    `json:"status"`

	// Fields below used only when creating hosts
	GroupIds   HostGroupIds   `json:"groups,omitempty"`
	Interfaces HostInterfaces `json:"interfaces,omitempty"`

type HostGroup

type HostGroup struct {
	GroupId  string       `json:"groupid,omitempty"`
	Name     string       `json:"name"`
	Internal InternalType `json:"internal"`

type HostGroupId

type HostGroupId struct {
	GroupId string `json:"groupid"`

type HostGroupIds

type HostGroupIds []HostGroupId

type HostGroups

type HostGroups []HostGroup

type HostInterface

type HostInterface struct {
	DNS   string        `json:"dns"`
	IP    string        `json:"ip"`
	Main  int           `json:"main"`
	Port  string        `json:"port"`
	Type  InterfaceType `json:"type"`
	UseIP int           `json:"useip"`

type HostInterfaces

type HostInterfaces []HostInterface

type Hosts

type Hosts []Host

type InterfaceType

type InterfaceType int
const (
	Agent InterfaceType = 1
	SNMP  InterfaceType = 2
	IPMI  InterfaceType = 3
	JMX   InterfaceType = 4

type InternalType

type InternalType int
const (
	NotInternal InternalType = 0
	Internal    InternalType = 1

type Item

type Item struct {
	ItemId      string    `json:"itemid,omitempty"`
	Delay       int       `json:"delay"`
	HostId      string    `json:"hostid"`
	InterfaceId string    `json:"interfaceid,omitempty"`
	Key         string    `json:"key_"`
	Name        string    `json:"name"`
	Type        ItemType  `json:"type"`
	ValueType   ValueType `json:"value_type"`
	DataType    DataType  `json:"data_type"`
	Delta       DeltaType `json:"delta"`
	Description string    `json:"description"`
	Error       string    `json:"error"`
	History     int       `json:"history,omitempty"`
	Trends      int       `json:"trends,omitempty"`

	// Fields below used only when creating applications
	ApplicationIds []string `json:"applications,omitempty"`

type ItemType

type ItemType int

type Items

type Items []Item

func (Items) ByKey

func (items Items) ByKey() (res map[string]Item)

Converts slice to map by key. Panics if there are duplicate keys.

type Params

type Params map[string]interface{}

type Response

type Response struct {
	Jsonrpc string      `json:"jsonrpc"`
	Error   *Error      `json:"error"`
	Result  interface{} `json:"result"`
	Id      int32       `json:"id"`

type StatusType

type StatusType int

type ValueType

type ValueType int

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL