/****************************************************************************** * * * Function: send_host_availability * * * * Purpose: send hosts availability data from proxy * * * ******************************************************************************/ void send_host_availability(zbx_socket_t *sock) { const char *__function_name = "send_host_availability"; struct zbx_json j; int ret = FAIL, ts; char *error = NULL; zabbix_log(LOG_LEVEL_DEBUG, "In %s()", __function_name); if (SUCCEED != check_access_passive_proxy(sock, ZBX_DO_NOT_SEND_RESPONSE, "host availability data request")) { /* do not send any reply to server in this case as the server expects host availability data */ goto out1; } zbx_json_init(&j, ZBX_JSON_STAT_BUF_LEN); /* if there are no host availability changes we still have to send empty data in response */ if (SUCCEED != get_host_availability_data(&j, &ts)) { zbx_json_addarray(&j, ZBX_PROTO_TAG_DATA); zbx_json_close(&j); } zabbix_log(LOG_LEVEL_DEBUG, "%s() [%s]", __function_name, j.buffer); if (SUCCEED != zbx_tcp_send_to(sock, j.buffer, CONFIG_TIMEOUT)) { error = zbx_strdup(error, zbx_socket_strerror()); goto out; } if (SUCCEED != zbx_recv_response(sock, CONFIG_TIMEOUT, &error)) goto out; zbx_set_availability_diff_ts(ts); ret = SUCCEED; out: if (SUCCEED != ret) { zabbix_log(LOG_LEVEL_WARNING, "cannot send host availability data to server at \"%s\": %s", sock->peer, error); } zbx_json_free(&j); zbx_free(error); out1: zabbix_log(LOG_LEVEL_DEBUG, "End of %s()", __function_name); }
/****************************************************************************** * * * Function: send_proxyhistory * * * * Purpose: send history data to a Zabbix server * * * ******************************************************************************/ static void send_proxyhistory(zbx_socket_t *sock, zbx_timespec_t *ts) { const char *__function_name = "send_proxyhistory"; struct zbx_json j; zbx_uint64_t lastid; int records, ret = FAIL; char *error = NULL; zabbix_log(LOG_LEVEL_DEBUG, "In %s()", __function_name); if (SUCCEED != check_access_passive_proxy(sock, ZBX_DO_NOT_SEND_RESPONSE, "history data request")) { /* do not send any reply to server in this case as the server expects history data */ goto out1; } zbx_json_init(&j, ZBX_JSON_STAT_BUF_LEN); zbx_json_addarray(&j, ZBX_PROTO_TAG_DATA); records = proxy_get_hist_data(&j, &lastid); zbx_json_close(&j); zbx_json_adduint64(&j, ZBX_PROTO_TAG_CLOCK, ts->sec); zbx_json_adduint64(&j, ZBX_PROTO_TAG_NS, ts->ns); if (SUCCEED != zbx_tcp_send_to(sock, j.buffer, CONFIG_TIMEOUT)) { error = zbx_strdup(error, zbx_socket_strerror()); goto out; } if (SUCCEED != zbx_recv_response(sock, CONFIG_TIMEOUT, &error)) goto out; if (0 != records) proxy_set_hist_lastid(lastid); ret = SUCCEED; out: if (SUCCEED != ret) zabbix_log(LOG_LEVEL_WARNING, "cannot send history data to server at \"%s\": %s", sock->peer, error); zbx_json_free(&j); zbx_free(error); out1: zabbix_log(LOG_LEVEL_DEBUG, "End of %s()", __function_name); }
/****************************************************************************** * * * Function: recv_proxyconfig * * * * Purpose: receive configuration tables from server (passive proxies) * * * * Author: Alexander Vladishev * * * ******************************************************************************/ void recv_proxyconfig(zbx_socket_t *sock, struct zbx_json_parse *jp) { struct zbx_json_parse jp_data; int ret; zabbix_log(LOG_LEVEL_DEBUG, "In %s()", __func__); if (SUCCEED != (ret = zbx_json_brackets_by_name(jp, ZBX_PROTO_TAG_DATA, &jp_data))) { zabbix_log(LOG_LEVEL_WARNING, "cannot parse proxy configuration data received from server at" " \"%s\": %s", sock->peer, zbx_json_strerror()); zbx_send_proxy_response(sock, ret, zbx_json_strerror(), CONFIG_TIMEOUT); goto out; } if (SUCCEED != check_access_passive_proxy(sock, ZBX_SEND_RESPONSE, "configuration update")) goto out; process_proxyconfig(&jp_data); zbx_send_proxy_response(sock, ret, NULL, CONFIG_TIMEOUT); out: zabbix_log(LOG_LEVEL_DEBUG, "End of %s()", __func__); }