//------------------------------------------------------------------------------ // Main Entry Point Definition int main(int argc, char** argv) { // TODO: CLI args? (void)argc; (void)argv; return discover_service(); }
/****************************************************************************** * * * 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); }
/****************************************************************************** * * * Function: process_check * * * * Purpose: check if service is avaiable and update database * * * * Parameters: service - service info * * * * Return value: * * * * Author: Eugene Grigorjev * * * * Comments: * * * ******************************************************************************/ static void process_check(DB_DRULE *rule, DB_DCHECK *check, char *ip) { int port, first, last; char *curr_range = NULL, *next_range = NULL, *last_port = NULL; assert(rule); assert(check); assert(ip); zabbix_log(LOG_LEVEL_DEBUG, "In process_check(ip:%s, ports:%s, type:%d)", ip, check->ports, check->type); for ( curr_range = check->ports; curr_range; curr_range = next_range ) { /* split by ',' */ if ( (next_range = strchr(curr_range, ',')) ) { *next_range = '\0'; } if ( (last_port = strchr(curr_range, '-')) ) { /* split by '-' */ *last_port = '\0'; first = atoi(curr_range); last = atoi(last_port); *last_port = '-'; } else { first = last = atoi(curr_range); } if ( next_range ) { *next_range = ','; next_range++; } for ( port = first; port <= last; port++) { check->status = discover_service(check,ip,port); update_service(rule, check, ip, port); } } zabbix_log(LOG_LEVEL_DEBUG, "End process_check()"); }