org.altlinux.jabbix
Class JabbixProtocol

java.lang.Object
  extended by org.altlinux.jabbix.JabbixProtocol

public class JabbixProtocol
extends Object

Константы и функции для протокола Zabbix-агента.

Базовый протокол Zabbix для связи между агентом и сервером представляет собой разновидность простого бинарного протокола и используется для передачи произвольных порций данных между Zabbix-совместимым агентом (например основанной на Jabbix-программой) и Zabbix-сервером.

Каждая такая передача называется сообщением. Каждое сообщение имеет следующую форму (структуру):

 |   4 Байта   | 1 Байт |    8 Байтов     |        ДЛИНА Байтов       |
    ЗАГОЛОВОК    ВЕРСИЯ        ДЛИНА             ДАННЫЕ СООБЩЕНИЯ

Поле ЗАГОЛОВОК это 4-байтовая последовательность 4 символов ASCII, в настоящее время определённая как ZBXD. Следующее поле ВЕРСИЯ шириной в один байт определяет версию протокола. В настоящее время поддерживаемая версия протокола равняется 1 (т.е. 01h).

Следующее 8-байтовое поле ДЛИНА содержит 64-битное целое число (младший байт первым) определяющее длину следующей за ним части ДАННЫЕ СООБЩЕНИЯ. Все числовые данные также представляются в виде с младшим байтом в начале.

Для целей совместимости и для того, чтобы упростить программы-агенты, используется и другой протокол, основанный на разделителях. В этом протоколе сообщения не имеют предустановленной структуры. Вместо этого, один из символов-разделителей используется для обозначения конца каждого сообщения. Поскольку перевод строки (0Ah) также входит в набор разделителей, простые текстовые сообщения могут быть переданы как есть.

Основное использование передачи простых текстовых сообщений посредством неструктурированного протокола ведётся при взаимодействии Zabbix-сервера с пассивным агентом: сервер отправляет имя метрикри пассивному агенту как простой текст, без всякого заголовка. Однако агент не ограничен в ответе протым текстом и может использовать структурированную версию протокола если это удобно.

Кроме того, неструктурированные ответы могут отправляться сервером Zabbix в некоторых случаях.

See Also:
AgentServer

Field Summary
static int AGENT_PORT
          Номер порта агента по умолчанию (10050).
static String HEADER
          Четырёхбуквенный заголовок протокола.
static String SEPARATORS
          Набор разделителей сообщений.
static int SERVER_PORT
          Порт Zabbix-сервера по умолчанию (10051).
static String VERSION
          Версия протокола (один байт).
 
Constructor Summary
JabbixProtocol()
           
 
Method Summary
static JabbixReader getReader(InputStream in)
          Возвращает объект, инкапсулирующий процесс чтения из указанного канала.
static JabbixWriter getWriter(OutputStream out)
          Возвращает объект, инкапсулирующий процесс записи в указанный канал.
static boolean isSeparator(char c)
          Определяет, является ли указанный символ разделителем сообщений.
static String removeSeparators(String str)
          Возвращает указанную строку, из которой были удалены все символы-разделители.
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

HEADER

public static String HEADER
Четырёхбуквенный заголовок протокола.

Для указания на Zabbix используется последовательность ZBXD.


VERSION

public static String VERSION
Версия протокола (один байт).

В настоящее время поддерживается протокол версии 1 (01h).


SEPARATORS

public static String SEPARATORS
Набор разделителей сообщений.

В том случае, если длина сообщения не указана явно в заголовке, конец сообщения определяется посредством символа разделителя. Данная строка содержит последовательность символов этой категории.

В настоящее время символами-разделителями являются:


AGENT_PORT

public static int AGENT_PORT
Номер порта агента по умолчанию (10050).


SERVER_PORT

public static int SERVER_PORT
Порт Zabbix-сервера по умолчанию (10051).

Constructor Detail

JabbixProtocol

public JabbixProtocol()
Method Detail

getReader

public static JabbixReader getReader(InputStream in)
Возвращает объект, инкапсулирующий процесс чтения из указанного канала.

Parameters:
in - входной канал для чтения
Returns:
объект, инкапсулирующий процесс чтения из канала

getWriter

public static JabbixWriter getWriter(OutputStream out)
Возвращает объект, инкапсулирующий процесс записи в указанный канал.

Parameters:
out - выходной канал для записи
Returns:
объект, инкапсулирующий процесс записи в канал

isSeparator

public static boolean isSeparator(char c)
Определяет, является ли указанный символ разделителем сообщений.

Parameters:
c - символ для проверки
Returns:
истина, если символ является разделителем, иначе ложь
See Also:
JabbixProtocol.SEPARATORS

removeSeparators

public static String removeSeparators(String str)
Возвращает указанную строку, из которой были удалены все символы-разделители.

Parameters:
str - строка
Returns:
указанная строка, из которой были удалены все символы-разделители