/****************************************************************************** * * * Function: process_check * * * * Purpose: check if service is available and update database * * * * Parameters: service - service info * * * * Return value: * * * * Author: Eugene Grigorjev * * * * Comments: * * * ******************************************************************************/ static void process_check(DB_DRULE *drule, DB_DCHECK *dcheck, DB_DHOST *dhost, int *host_status, char *ip) { const char *__function_name = "process_check"; int port, first, last, now; char *curr_range, *next_range, *last_port; int status; char value[DSERVICE_VALUE_LEN_MAX]; zabbix_log(LOG_LEVEL_DEBUG, "In %s()", __function_name); for (curr_range = dcheck->ports; curr_range; curr_range = next_range) { /* split by ',' */ if (NULL != (next_range = strchr(curr_range, ','))) *next_range = '\0'; if (NULL != (last_port = strchr(curr_range, '-'))) { /* split by '-' */ *last_port = '\0'; first = atoi(curr_range); last = atoi(last_port + 1); *last_port = '-'; } else first = last = atoi(curr_range); if (NULL != next_range) { *next_range = ','; next_range++; } for (port = first; port <= last; port++) { zabbix_log(LOG_LEVEL_DEBUG, "%s() port:%d", __function_name, port); status = (SUCCEED == discover_service(dcheck, ip, port, value)) ? DOBJECT_STATUS_UP : DOBJECT_STATUS_DOWN; /* Update host status */ if (*host_status == -1 || status == DOBJECT_STATUS_UP) *host_status = status; now = time(NULL); DBbegin(); if (0 != (daemon_type & ZBX_DAEMON_TYPE_SERVER)) { discovery_update_service(drule, dcheck, dhost, ip, port, status, value, now); } else if (0 != (daemon_type & ZBX_DAEMON_TYPE_PROXY)) { proxy_update_service(drule, dcheck, ip, port, status, value, now); } DBcommit(); } } zabbix_log(LOG_LEVEL_DEBUG, "End of %s()", __function_name); }
/****************************************************************************** * * * Function: process_check * * * * Purpose: check if service is available and update database * * * * Parameters: service - service info * * * * Author: Eugene Grigorjev * * * ******************************************************************************/ static void process_check(DB_DRULE *drule, DB_DCHECK *dcheck, DB_DHOST *dhost, int *host_status, char *ip, const char *dns) { const char *__function_name = "process_check"; int port, first, last, now; char *start, *comma, *last_port; int status; char value[DSERVICE_VALUE_LEN_MAX]; zabbix_log(LOG_LEVEL_DEBUG, "In %s()", __function_name); for (start = dcheck->ports; '\0' != *start;) { if (NULL != (comma = strchr(start, ','))) *comma = '\0'; if (NULL != (last_port = strchr(start, '-'))) { *last_port = '\0'; first = atoi(start); last = atoi(last_port + 1); *last_port = '-'; } else first = last = atoi(start); for (port = first; port <= last; port++) { zabbix_log(LOG_LEVEL_DEBUG, "%s() port:%d", __function_name, port); status = (SUCCEED == discover_service(dcheck, ip, port, value)) ? DOBJECT_STATUS_UP : DOBJECT_STATUS_DOWN; /* update host status */ if (-1 == *host_status || DOBJECT_STATUS_UP == status) *host_status = status; now = time(NULL); DBbegin(); if (0 != (daemon_type & ZBX_DAEMON_TYPE_SERVER)) discovery_update_service(drule, dcheck, dhost, ip, dns, port, status, value, now); else if (0 != (daemon_type & ZBX_DAEMON_TYPE_PROXY)) proxy_update_service(drule, dcheck, ip, dns, port, status, value, now); DBcommit(); } if (NULL != comma) { *comma = ','; start = comma + 1; } else break; } zabbix_log(LOG_LEVEL_DEBUG, "End of %s()", __function_name); }