From 3c19ece1649ccc3b11f729dd4c93918df40275f3 Mon Sep 17 00:00:00 2001 From: Hamish Coleman Date: Fri, 17 Feb 2017 13:02:47 +0800 Subject: [PATCH] Allow adding a new host after noping has started --- src/oping.c | 47 ++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 46 insertions(+), 1 deletion(-) diff --git a/src/oping.c b/src/oping.c index b4999c5..d0e9f33 100644 --- a/src/oping.c +++ b/src/oping.c @@ -293,7 +293,7 @@ static void clean_history (ping_context_t *ctx) /* {{{ */ memcpy (ctx->history_by_value, ctx->history_by_time, sizeof (ctx->history_by_time)); - /* Remove impossible values */ + /* Remove impossible values caused by adding a new host */ for (i = 0; i < ctx->history_size; i++) if (ctx->history_by_value[i]<0) ctx->history_by_value[i]=NAN; @@ -402,6 +402,7 @@ static int ping_initialize_contexts (pingobj_t *ping) /* {{{ */ { pingobj_iter_t *iter; int index; + size_t history_size = 0; if (ping == NULL) return (EINVAL); @@ -414,9 +415,25 @@ static int ping_initialize_contexts (pingobj_t *ping) /* {{{ */ ping_context_t *context; size_t buffer_size; + context = ping_iterator_get_context(iter); + + /* if this is a previously existing host, do not recreate it */ + if (context != NULL) { + history_size = context->history_size; + context->index = index++; + continue; + } + context = context_create (); context->index = index; + /* start new hosts at the same graph point as old hosts */ + context->history_size = history_size; + context->history_index = history_size; + for (int i = 0; ihistory_by_time[i] = -1; + } + buffer_size = sizeof (context->host); ping_iterator_get_info (iter, PING_INFO_HOSTNAME, context->host, &buffer_size); @@ -1335,6 +1352,34 @@ static int check_resize (pingobj_t *ping) /* {{{ */ else if (opt_show_graph > 0) opt_show_graph++; } + else if (key == 'a') + { + char host[80]; + + wprintw(main_win, "New Host: "); + echo(); + wgetnstr(main_win, host, sizeof(host)); + noecho(); + + if (ping_host_add(ping, host) < 0) + { + const char *errmsg = ping_get_error (ping); + + wprintw (main_win, "Adding host `%s' failed: %s\n", host, errmsg); + } + else + { + int box_height = (opt_show_graph == 0) ? 4 : 5; + + /* make sure old data is still visible */ + for (int i = 0; i