#include "zbxavailability.h"
#include "zbxipcservice.h"
ZBX_PTR_VECTOR_IMPL(proxy_hostdata_ptr, zbx_proxy_hostdata_t *)
ZBX_PTR_VECTOR_IMPL(host_active_avail_ptr, zbx_host_active_avail_t *)
void zbx_availability_send(zbx_uint32_t code, unsigned char *data, zbx_uint32_t size, zbx_ipc_message_t *response)
static zbx_ipc_socket_t socket;
if (FAIL == zbx_ipc_socket_open(&socket, ZBX_IPC_SERVICE_AVAILABILITY, SEC_PER_MIN, &error))
zabbix_log(LOG_LEVEL_CRIT, "cannot connect to availability manager service: %s", error);
if (FAIL == zbx_ipc_socket_write(&socket, code, data, size))
zabbix_log(LOG_LEVEL_CRIT, "cannot send data to availability manager service");
if (NULL != response && FAIL == zbx_ipc_socket_read(&socket, response))
zabbix_log(LOG_LEVEL_CRIT, "cannot receive data from service");
void zbx_availabilities_flush(const zbx_vector_availability_ptr_t *interface_availabilities)
unsigned char *data = NULL;
size_t data_alloc = 0, data_offset = 0;
for (i = 0; i < interface_availabilities->values_num; i++)
zbx_availability_serialize_interface(&data, &data_alloc, &data_offset,
interface_availabilities->values[i]);
zbx_availability_send(ZBX_IPC_AVAILABILITY_REQUEST, data, (zbx_uint32_t)data_offset, NULL);
void zbx_availability_serialize_json_hostdata(zbx_vector_proxy_hostdata_ptr_t *hostdata, struct zbx_json *j)
if (0 == hostdata->values_num)
zbx_json_addarray(j, ZBX_PROTO_TAG_PROXY_ACTIVE_AVAIL_DATA);
for (i = 0; i < hostdata->values_num; i++)
zbx_proxy_hostdata_t *hd = hostdata->values[i];
zbx_json_addobject(j, NULL);
zbx_json_adduint64(j, ZBX_PROTO_TAG_HOSTID, hd->hostid);
zbx_json_addint64(j, ZBX_PROTO_TAG_ACTIVE_STATUS, hd->status);