Ad Widget

Collapse

Генерация TCP пакетов из Oracle PL/SQL

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • TSprinter
    Junior Member
    • Jun 2015
    • 1

    #1

    Генерация TCP пакетов из Oracle PL/SQL

    Коллеги,

    Получилось написать отправку пакетов из Oracle. И она даже работает, но при отправке пакета длиной больше 128 байт получаю ошибку заббикса о неверном формате.
    Помогите найти формат сообщений от агента к серверу.
    Или подскажите что у меня в коде не так:

    FUNCTION Send( aParam VarChar2,
    aValue VarChar2,
    aHost VarChar2 Default 'file-transfer.process' ) RETURN Integer IS
    fData VarChar2(1000);
    fResult VarChar2(1000);
    fLen Integer;
    Begin
    if not pConnection_Opened Then
    If OpenConn <> 1 Then
    RAISE_APPLICATION_ERROR (-20001, 'Zabbix connection error');
    end if;
    end if;
    fData := '{' || Chr(10) || '"request":"sender data",' || Chr(10) || '"data":[' || Chr(10) || '{' || Chr(10) || '"host":"' || aHost || '",' || Chr(10) || '"key":"' || aParam || '",' || Chr(10) || '"value":"' || aValue || '"}' || Chr(10) || ']}' || Chr(10) || Chr(13);
    fLen := Length(fData)-1;
    If fLen > 126 Then
    fData := 'ZBXD' || Chr(1) || Chr(126) || Chr(fLen - 126) || Chr(0) || Chr(0) || Chr(0) || Chr(0) || Chr(0) || Chr(0) || fData;
    Else
    fData := 'ZBXD' || Chr(1) || Chr(fLen) || Chr(0) || Chr(0) || Chr(0) || Chr(0) || Chr(0) || Chr(0) || Chr(0) || fData;
    End If;
    Begin
    fLen := utl_tcp.write_text(pConn, fData);
    EXCEPTION
    WHEN utl_tcp.network_error OR utl_tcp.transfer_timeout THEN
    RAISE_APPLICATION_ERROR (-20002, 'Zabbix port write error');
    END;
    begin
    fLen := utl_tcp.read_text(pConn, fResult, 1024);
    EXCEPTION
    WHEN utl_tcp.network_error OR utl_tcp.transfer_timeout THEN
    RAISE_APPLICATION_ERROR (-20003, 'Zabbix port read error');
    END;
    If fResult like 'ZBXD%' Then
    return 1;
    else
    return 0;
    end if;
    exception
    when others then
    return -1;
    END Send;
  • Jimson
    Senior Member
    • Jan 2008
    • 1327

    #2
    Note: As of Zabbix 2.0.8 and 2.1.7, header is optional. If the header is included, message length is ignored, as long as it is not 0.
    Join the friendly and open Zabbix community on our forums and social media platforms.


    Думаю можно опустить заголовок, если не поможет, то ищите ошибку в JSON, возможно вы там пропустили какую-нибудь кавычку или скобку. А еще все пробельные символы, кроме тех что внутри кавычек, опциональны, можно их все выкинуть и код менее ужасен будет и сообщение меньше.

    Comment

    Working...