void sink_manager_heartbeat(ip_t ip, uint8_t *buf) { sink_t *sink = get_sink(ip); if (sink != NULL) { sink->last_heartbeat = util_time_now(); } else { sink_t new_sink; if (sink_initialize(&new_sink, ip, buf) != RET_OK) { return; } new_sink.last_heartbeat = util_time_now(); add_sink(new_sink); } purge_dead_sinks(); }
void sink_manager_print_sinks() { uint64_t now = util_time_now(); if (list.nbr_sinks > 0) { log_info("Alive sinks:"); } for (int i = 0; i < list.nbr_sinks; i++) { log_infof(" %s - last heartbeast %lus ago", inet_ntoa(list.sinks[i].ip), (now - list.sinks[i].last_heartbeat) / 1000); } }
static void purge_dead_sinks() { uint64_t now = util_time_now(); uint8_t purged_sinks = 0; for (int i = 0; i < list.nbr_sinks; i++) { if (now - list.sinks[i].last_heartbeat > (SINK_MANAGER_SINK_TIMEOUT * 1000)) { if (purged_sinks == 0) { log_info("Purge sinks:"); } log_infof(" %s - timed out. Uncontacted for %lus", inet_ntoa(list.sinks[i].ip), (now - list.sinks[i].last_heartbeat) / 1000); remove_sink(i); purged_sinks++; } } }
double util_time_uptime() { return util_time_now() - _time_start; }
if (itf == kvs.end()) { ok = false; snprintf(info, 1024, "'%s' not found", key); break; } key = va_arg(list, const char*); } va_end(list); return ok; // 都存在 } double util_time_now() { struct timeval tv; #ifdef WIN32 ost::gettimeofday(&tv, 0); #else gettimeofday(&tv, 0); #endif return tv.tv_sec + tv.tv_usec/1000000.0; } static double _time_start = util_time_now(); double util_time_uptime() { return util_time_now() - _time_start; }