/****************************************************************************** * * * Function: main_dbconfig_loop * * * * Purpose: periodically synchronises database data with memory cache * * * * Parameters: * * * * Return value: * * * * Author: Alexander Vladishev * * * * Comments: never returns * * * ******************************************************************************/ ZBX_THREAD_ENTRY(dbconfig_thread, args) { double sec = 0.0; process_type = ((zbx_thread_args_t *)args)->process_type; server_num = ((zbx_thread_args_t *)args)->server_num; process_num = ((zbx_thread_args_t *)args)->process_num; zabbix_log(LOG_LEVEL_INFORMATION, "%s #%d started [%s #%d]", get_program_type_string(program_type), server_num, get_process_type_string(process_type), process_num); zbx_setproctitle("%s [waiting %d sec for processes]", get_process_type_string(process_type), CONFIG_CONFSYNCER_FREQUENCY); zbx_set_sigusr_handler(zbx_dbconfig_sigusr_handler); /* the initial configuration sync is done by server before worker processes are forked */ zbx_sleep_loop(CONFIG_CONFSYNCER_FREQUENCY); zbx_setproctitle("%s [connecting to the database]", get_process_type_string(process_type)); DBconnect(ZBX_DB_CONNECT_NORMAL); for (;;) { zbx_handle_log(); zbx_setproctitle("%s [synced configuration in " ZBX_FS_DBL " sec, syncing configuration]", get_process_type_string(process_type), sec); sec = zbx_time(); DCsync_configuration(); DCupdate_hosts_availability(); sec = zbx_time() - sec; zbx_setproctitle("%s [synced configuration in " ZBX_FS_DBL " sec, idle %d sec]", get_process_type_string(process_type), sec, CONFIG_CONFSYNCER_FREQUENCY); zbx_sleep_loop(CONFIG_CONFSYNCER_FREQUENCY); } }
ZBX_THREAD_ENTRY(housekeeper_thread, args) { int records, start, sleeptime; double sec, time_slept; char sleeptext[25]; process_type = ((zbx_thread_args_t *)args)->process_type; server_num = ((zbx_thread_args_t *)args)->server_num; process_num = ((zbx_thread_args_t *)args)->process_num; zabbix_log(LOG_LEVEL_INFORMATION, "%s #%d started [%s #%d]", get_daemon_type_string(daemon_type), server_num, get_process_type_string(process_type), process_num); if (0 == CONFIG_HOUSEKEEPING_FREQUENCY) { zbx_setproctitle("%s [waiting for user command]", get_process_type_string(process_type)); zbx_snprintf(sleeptext, sizeof(sleeptext), "waiting for user command"); } else { sleeptime = HOUSEKEEPER_STARTUP_DELAY * SEC_PER_MIN; zbx_setproctitle("%s [startup idle for %d minutes]", get_process_type_string(process_type), HOUSEKEEPER_STARTUP_DELAY); zbx_snprintf(sleeptext, sizeof(sleeptext), "idle for %d hour(s)", CONFIG_HOUSEKEEPING_FREQUENCY); } zbx_set_sigusr_handler(zbx_housekeeper_sigusr_handler); for (;;) { sec = zbx_time(); if (0 == CONFIG_HOUSEKEEPING_FREQUENCY) zbx_sleep_forever(); else zbx_sleep_loop(sleeptime); time_slept = zbx_time() - sec; hk_period = get_housekeeper_period(time_slept); start = time(NULL); zabbix_log(LOG_LEVEL_WARNING, "executing housekeeper"); zbx_setproctitle("%s [connecting to the database]", get_process_type_string(process_type)); DBconnect(ZBX_DB_CONNECT_NORMAL); zbx_setproctitle("%s [removing old history]", get_process_type_string(process_type)); sec = zbx_time(); records = housekeeping_history(start); sec = zbx_time() - sec; DBclose(); zabbix_log(LOG_LEVEL_WARNING, "%s [deleted %d records in " ZBX_FS_DBL " sec, %s]", get_process_type_string(process_type), records, sec, sleeptext); zbx_setproctitle("%s [deleted %d records in " ZBX_FS_DBL " sec, %s]", get_process_type_string(process_type), records, sec, sleeptext); if (0 != CONFIG_HOUSEKEEPING_FREQUENCY) sleeptime = CONFIG_HOUSEKEEPING_FREQUENCY * SEC_PER_HOUR; } }