Giter Club home page Giter Club logo

zabbixapi's Introduction

#Ruby Zabbix Api Module

Simple and lightweight ruby module for work with zabbix api

Build Status

#####Now worked with zabbix

  • 1.8.2 (api version 1.2) /zabbixapi 0.6.x
  • 1.8.9 (api version 1.3) /zabbixapi 0.6.x
  • 2.0.x (api version 1.4 -> 2.0.10) /zabbixapi 2.0.x

Version policy

Zabbixapi has next version policy:

  • for zabbix 1.8.9 and below you should use zabbixapi 0.6.x
  • for zabbix 2.0.x you should use zabbixapi 2.0.y
  • for zabbix 2.2.x you should use zabbixapi 2.2.y (coming soon)

The PATCH (third digit) version of zabbixapi should not correspond to PATCH version of zabbix, for example zabbixapi-2.0.x should works with all version of zabbix 2.0.y

We support only two last versions of zabbix (2.0 and 2.2), so you should consider zabbixapi 0.6.x depricated.

Installation

gem install zabbixapi

Getting Started

Connect

require "zabbixapi"

zbx = ZabbixApi.connect(
  :url => 'http://localhost/zabbix/api_jsonrpc.php',
  :user => 'Admin',
  :password => 'zabbix'
)
# use basic_auth
zbx = ZabbixApi.connect(
  :url => 'http://localhost/zabbix/api_jsonrpc.php',
  :user => 'Admin',
  :password => 'zabbix',
  :http_password => 'foo',
  :http_user => 'bar'
)

Create Hostgroup

zbx.hostgroups.create(:name => "hostgroup")

Create Template

zbx.templates.create(
  :host => "template",
  :groups => [:groupid => zbx.hostgroups.get_id(:name => "hostgroup")]
)

Create Application

zbx.applications.create(
  :name => application,
  :hostid => zbx.templates.get_id(:host => "template")
)

Create Item

zbx.items.create(
  :description => "item",
  :key_ => "proc.num[aaa]",
  :hostid => zbx.templates.get_id(:host => "template"),
  :applications => [zbx.applications.get_id(:name => "application")]
)
# or use (lib merge json):
zbx.items.create_or_update(
  :description => "item",
  :key_ => "proc.num[aaa]",
  :type => 6,
  :hostid => zbx.templates.get_id(:host => "template"),
  :applications => [zbx.applications.get_id(:name => "application")]
)

Update Item

zbx.items.update(
  :itemid => zbx.items.get_id(:description => "item"),
  :status => 0
)
#You can check item:
puts zbx.items.get_full_data(:description => "item")

Create host

zbx.hosts.create(
  :host => host.fqdn,
  :interfaces => [
    {
      :type => 1,
      :main => 1,
      :ip => '10.0.0.1',
      :dns => 'server.example.org',
      :port => 10050,
      :useip => 0
    }
  ],
  :groups => [ :groupid => zbx.hostgroups.get_id(:name => "hostgroup") ]
)

#or use:
zbx.hosts.create_or_update(
  :host => host.fqdn,
  :interfaces => [
    {
      :type => 1,
      :main => 1,
      :ip => '10.0.0.1',
      :dns => 'server.example.org',
      :port => 10050,
      :useip => 0
    }
  ],
  :groups => [ :groupid => zbx.hostgroups.get_id(:name => "hostgroup") ]
)

Update host

zbx.hosts.update(
  :hostid => zbx.hosts.get_id(:host => "hostname"),
  :status => 0
)
#You can check host:
puts zbx.hosts.get_full_data(:host => "hostname")
zbx.hosts.delete zbx.hosts.get_id(:host => "hostname")

Create graph

gitems = {
  :itemid => zbx.items.get_id(:description => "item"),
  :calc_fnc => "2",
  :type => "0",
  :periods_cnt => "5"
}

zbx.graphs.create(
  :gitems => [gitems],
  :show_triggers => "0",
  :name => "graph",
  :width => "900",
  :height => "200"
)

Update graph

zbx.graphs.update(
  :graphid => zbx.graphs.get_id( :name => "graph"),
  :ymax_type => 1
)
#Also you can use:
gitems = {
  :itemid => zbx.items.get_id(:description => item),
  :calc_fnc => "3",
  :type => "0",
  :periods_cnt => "5"
}
zbx.graphs.create_or_update(
  :gitems => [gitems],
  :show_triggers => "1",
  :name => graph,
  :width => "900",
  :height => "200"
)

Get ids by host

zbx.graphs.get_ids_by_host(:host => "hostname")
#You can filter graph name:
zbx.graphs.get_ids_by_host(:host => "hostname", filter => "CPU")

Delete graph

zbx.graphs.delete(zbx.graphs.get_id(:name => "graph"))

Get all templates linked with host

zbx.templates.get_ids_by_host( :hostids => [zbx.hosts.get_id(:host => "hostname")] )
#returned hash:
#{
#  "Templatename" => "10",
#  "Templatename" => "1021"
#}

Mass (Un)Link host with templates

zbx.templates.mass_add(
  :hosts_id => [zbx.hosts.get_id(:host => "hostname")],
  :templates_id => [111, 214]
)
zbx.templates.mass_remove(
  :hosts_id => [zbx.hosts.get_id(:host => "hostname")],
  :templates_id => [111, 214]
)

Create trigger

zbx.triggers.create(
  :description => "trigger",
  :expression => "{template:proc.num[aaa].last(0)}<1",
  :comments => "Bla-bla is faulty (disaster)",
  :priority => 5,
  :status     => 0,
  :templateid => 0,
  :type => 0
 )

Create user

zbx.users.create(
  :alias => "Test user",
  :name => "username",
  :surname => "usersername",
  :passwd => "password"
)

Update user

zbx.users.update(:userid => zbx.users.get_id(:name => "user"), :name => "user2")

Delete graph

zbx.graphs.delete(zbx.graphs.get_id(:name => "graph"))

Create screen for host

zbx.screens.get_or_create_for_host(
  :screen_name => "screen_name",
  :graphids => zbx.graphs.get_ids_by_host(:host => "hostname")
)

Delete screen

zbx.screens.delete(
  :screen_id => 1, # or screen_id => [1, 2]
)

or

zbx.screens.delete(
  :screen_name => "foo screen", # or screen_name => ["foo screen", "bar screen"]
)

Create UserGroup, add user and set permission

zbx.usergroups.get_or_create(:name => "Some user group")
zbx.usergroups.add_user(
  :usrgrpids => [zbx.usergroups.get_id(:name => "Some user group")],
  :userids => [zbx.users.get_id(:name => "Some user")]
)
# set write and read permissions for UserGroup on all hostgroups
zbx.usergroups.set_perm(
   :usrgrpid => zbx.usergroups.get_or_create(:name => "Some user group"),
   :hostgroupids => zbx.hostgroups.all.values, # kind_of Array
   :permission => 3 # 2- read (by default) and 3 - write and read
)

Create MediaType and add it to user

zbx.mediatypes.create_or_update(
  :description => "mediatype",
  :type => 0, # 0 - Email, 1 - External script, 2 - SMS, 3 - Jabber, 100 - EzTexting,
  :smtp_server => "127.0.0.1",
  :smtp_email => "[email protected]"
)
zbx.users.add_medias(
  :userids => [zbx.users.get_id(:name => "user")],
  :media => [
    {
      :mediatypeid => zbx.mediatypes.get_id(:description => "mediatype"),
      :sendto => "test@test",
      :active => 0,
      :period => "1-7,00:00-24:00", # 1-7 days and 00:00-24:00 hours
      :severity => "56"
    }
  ]
)

Create proxy (2.0 and later)

Active proxy

zbx.proxies.create(
  :host => "Proxy 1",
  :status => 5
)

Passive Proxy

zbx.proxies.create(
  :host => "Passive proxy",
  :status => 6,
  :interfaces => [
    :ip => "127.0.0.1",
    :dns => "",
    :useip => 1,
    :port => 10051
  ]
)

User and global macros

zbx.usermacros.create(
    :hostid => zbx.hosts.get_id( :host => "Zabbix server" ),
    :macro => "{$ZZZZ}",
    :value => 1.1.1.1
)

Custom queries

zbx.query(
  :method => "apiinfo.version",
  :params => {}
)

Dependencies

  • net/http
  • net/https
  • json

Contributing

  • Fork the project.
  • Make your feature addition or bug fix, write tests.
  • Commit, do not mess with rakefile, version.
  • Make a pull request.

Zabbix documentation

zabbixapi's People

Contributors

vadv avatar verm666 avatar evtuhovich avatar kenjiskywalker avatar yves-vogl avatar nsarno avatar ixpict avatar henrikjohansen avatar hairmare avatar scouratier avatar mattiasgeniar avatar webdestroya avatar bazilek avatar zwily avatar mechamogera avatar smartladka avatar

Watchers

James Cloos avatar Phillip Weston avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.