Коллеги,
Получилось написать отправку пакетов из Oracle. И она даже работает, но при отправке пакета длиной больше 128 байт получаю ошибку заббикса о неверном формате.
Помогите найти формат сообщений от агента к серверу.
Или подскажите что у меня в коде не так:
Получилось написать отправку пакетов из 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;
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;
Comment