/****************************************************************************** * * * Function: send_proxyconfig * * * * Purpose: send configuration tables to the proxy * * * * Parameters: * * * * Return value: SUCCEED - processed successfully * * FAIL - an error occurred * * * * Author: Aleksander Vladishev * * * * Comments: * * * ******************************************************************************/ int send_proxyconfig(zbx_sock_t *sock, struct zbx_json_parse *jp) { zbx_uint64_t proxy_hostid; struct zbx_json j; int res = FAIL; zabbix_log(LOG_LEVEL_DEBUG, "In send_proxyconfig()"); if (FAIL == get_proxy_id(jp, &proxy_hostid)) goto exit; update_proxy_lastaccess(proxy_hostid); zbx_json_init(&j, 512*1024); if (SUCCEED == (res = get_proxyconfig_data(proxy_hostid, &j))) { zabbix_log(LOG_LEVEL_WARNING, "Sending configuration data to proxy. Datalen %d", (int)j.buffer_size); zabbix_log(LOG_LEVEL_DEBUG, "%s", j.buffer); if (FAIL == (res = zbx_tcp_send(sock, j.buffer))) zabbix_log(LOG_LEVEL_WARNING, "Error while sending configuration. %s", zbx_tcp_strerror()); } zbx_json_free(&j); exit: return res; }
/****************************************************************************** * * * Function: process_proxy_values * * * * Purpose: process values sent by proxy servers * * * * Parameters: * * * * Return value: SUCCEED - processed successfully * * FAIL - an error occured * * * * Author: Aleksander Vladishev * * * * Comments: * * * ******************************************************************************/ static int process_proxy_values(zbx_sock_t *sock, struct zbx_json_parse *jp) { zbx_uint64_t proxy_hostid; zabbix_log(LOG_LEVEL_DEBUG, "In process_proxy_values()"); if (FAIL == get_proxy_id(jp, &proxy_hostid)) return FAIL; update_proxy_lastaccess(proxy_hostid); return process_new_values(sock, jp, proxy_hostid); }
/****************************************************************************** * * * Function: process_proxy_heartbeat * * * * Purpose: process heartbeat sent by proxy servers * * * * Parameters: * * * * Return value: SUCCEED - processed successfully * * FAIL - an error occured * * * * Author: Aleksander Vladishev * * * * Comments: * * * ******************************************************************************/ static int process_proxy_heartbeat(zbx_sock_t *sock, struct zbx_json_parse *jp) { zbx_uint64_t proxy_hostid; zabbix_log(LOG_LEVEL_DEBUG, "In process_proxy_heartbeat()"); if (FAIL == get_proxy_id(jp, &proxy_hostid)) return FAIL; update_proxy_lastaccess(proxy_hostid); if (send_result(sock, SUCCEED, NULL) != SUCCEED) { zabbix_log( LOG_LEVEL_WARNING, "Error sending result back"); zabbix_syslog("Trapper: error sending result back"); } return SUCCEED; }
/****************************************************************************** * * * Function: recv_proxy_heartbeat * * * * Purpose: process heartbeat sent by proxy servers * * * * Parameters: * * * * Return value: SUCCEED - processed successfully * * FAIL - an error occurred * * * * Author: Alexander Vladishev * * * * Comments: * * * ******************************************************************************/ static void recv_proxy_heartbeat(zbx_sock_t *sock, struct zbx_json_parse *jp) { const char *__function_name = "recv_proxy_heartbeat"; zbx_uint64_t proxy_hostid; char host[HOST_HOST_LEN_MAX], error[256]; zabbix_log(LOG_LEVEL_DEBUG, "In %s()", __function_name); if (FAIL == get_proxy_id(jp, &proxy_hostid, host, error, sizeof(error))) { zabbix_log(LOG_LEVEL_WARNING, "Heartbeat from active proxy on [%s] failed: %s", get_ip_by_socket(sock), error); return; } update_proxy_lastaccess(proxy_hostid); zbx_send_response(sock, SUCCEED, NULL, CONFIG_TIMEOUT); zabbix_log(LOG_LEVEL_DEBUG, "End of %s()", __function_name); }
/****************************************************************************** * * * Function: send_proxyconfig * * * * Purpose: send configuration tables to the proxy from server * * (for active proxies) * * * * Parameters: * * * * Return value: * * * * Author: Alexander Vladishev * * * * Comments: * * * ******************************************************************************/ void send_proxyconfig(zbx_sock_t *sock, struct zbx_json_parse *jp) { const char *__function_name = "send_proxyconfig"; zbx_uint64_t proxy_hostid; char host[HOST_HOST_LEN_MAX], error[256]; struct zbx_json j; zabbix_log(LOG_LEVEL_DEBUG, "In %s()", __function_name); if (FAIL == get_proxy_id(jp, &proxy_hostid, host, error, sizeof(error))) { zabbix_log(LOG_LEVEL_WARNING, "Proxy config request from active proxy on [%s] failed: %s", get_ip_by_socket(sock), error); return; } update_proxy_lastaccess(proxy_hostid); zbx_json_init(&j, ZBX_JSON_STAT_BUF_LEN); get_proxyconfig_data(proxy_hostid, &j); zabbix_log(LOG_LEVEL_WARNING, "Sending configuration data to proxy '%s'. Datalen " ZBX_FS_SIZE_T, host, (zbx_fs_size_t)j.buffer_size); zabbix_log(LOG_LEVEL_DEBUG, "%s", j.buffer); alarm(CONFIG_TIMEOUT); if (FAIL == zbx_tcp_send(sock, j.buffer)) zabbix_log(LOG_LEVEL_WARNING, "Error while sending configuration. %s", zbx_tcp_strerror()); alarm(0); zbx_json_free(&j); zabbix_log(LOG_LEVEL_DEBUG, "End of %s()", __function_name); }
/****************************************************************************** * * * Function: recv_discovery_data * * * * Purpose: * * * * Parameters: * * * * Return value: * * * * Author: Alexander Vladishev * * * * Comments: * * * ******************************************************************************/ void recv_discovery_data(zbx_sock_t *sock, struct zbx_json_parse *jp) { const char *__function_name = "recv_discovery_data"; int ret; zbx_uint64_t proxy_hostid; char host[HOST_HOST_LEN_MAX], error[256]; zabbix_log(LOG_LEVEL_DEBUG, "In %s()", __function_name); if (FAIL == (ret = get_proxy_id(jp, &proxy_hostid, host, error, sizeof(error)))) { zabbix_log(LOG_LEVEL_WARNING, "Discovery data from active proxy on [%s] failed: %s", get_ip_by_socket(sock), error); goto exit; } process_dhis_data(jp); exit: zbx_send_response(sock, ret, NULL, CONFIG_TIMEOUT); zabbix_log(LOG_LEVEL_DEBUG, "End of %s():%s", __function_name, zbx_result_string(ret)); }
/****************************************************************************** * * * Function: recv_proxyhistory * * * * Purpose: process values sent by proxy servers * * * * Parameters: * * * * Return value: * * * * Author: Alexander Vladishev * * * * Comments: * * * ******************************************************************************/ static void recv_proxyhistory(zbx_sock_t *sock, struct zbx_json_parse *jp) { const char *__function_name = "recv_proxyhistory"; zbx_uint64_t proxy_hostid; char host[HOST_HOST_LEN_MAX], info[128], error[256]; int ret; zabbix_log(LOG_LEVEL_DEBUG, "In %s()", __function_name); if (FAIL == (ret = get_proxy_id(jp, &proxy_hostid, host, error, sizeof(error)))) { zabbix_log(LOG_LEVEL_WARNING, "History data from active proxy on [%s] failed: %s", get_ip_by_socket(sock), error); goto exit; } update_proxy_lastaccess(proxy_hostid); ret = process_hist_data(sock, jp, proxy_hostid, info, sizeof(info)); exit: zbx_send_response(sock, ret, info, CONFIG_TIMEOUT); zabbix_log(LOG_LEVEL_DEBUG, "End of %s()", __function_name); }