author | Florian Forster <ff@octo.it> | |
Tue, 9 May 2017 06:19:57 +0000 (08:19 +0200) | ||
committer | Florian Forster <ff@octo.it> | |
Tue, 9 May 2017 06:19:57 +0000 (08:19 +0200) |
.travis.yml | [new file with mode: 0644] | patch | blob |
bindings/perl/Oping.xs | patch | blob | history | |
configure.ac | patch | blob | history | |
src/liboping.c | patch | blob | history | |
src/mans/liboping.pod | patch | blob | history | |
src/mans/oping.pod | patch | blob | history | |
src/mans/ping_iterator_count.pod | [new file with mode: 0644] | patch | blob |
src/oping.c | patch | blob | history | |
src/oping.h | patch | blob | history |
diff --git a/.travis.yml b/.travis.yml
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,11 @@
+dist: trusty
+sudo: false
+
+language: c
+compiler:
+ - clang
+ - gcc
+script:
+ - autoreconf -fi
+ - ./configure
+ - make all
diff --git a/bindings/perl/Oping.xs b/bindings/perl/Oping.xs
index c88e3dca981710649212fac8a21ff97ad68c92bd..5d8fa40992cf07292eb83a8dfbaaacef75d21e2b 100644 (file)
--- a/bindings/perl/Oping.xs
+++ b/bindings/perl/Oping.xs
OUTPUT:
RETVAL
+int
+_ping_iterator_count (obj)
+ pingobj_t *obj
+ CODE:
+ RETVAL = ping_iterator_count (obj);
+ OUTPUT:
+ RETVAL
+
double
_ping_iterator_get_latency (iter)
pingobj_iter_t *iter
diff --git a/configure.ac b/configure.ac
index 60138fc5cd0e4f9582c3da00f5e4508908b3f5ca..872e89ea923dad82c9c1d3de4959186e0e82599b 100644 (file)
--- a/configure.ac
+++ b/configure.ac
AC_SUBST(LIBOPING_PATCH)
# ABI version
-LIBOPING_CURRENT=2
-LIBOPING_REVISION=11
-LIBOPING_AGE=2
+LIBOPING_CURRENT=3
+LIBOPING_REVISION=0
+LIBOPING_AGE=3
AC_SUBST(LIBOPING_CURRENT)
AC_SUBST(LIBOPING_REVISION)
AC_SUBST(LIBOPING_AGE)
LT_INIT([dlopen])
# pkg-config interface
-PKG_INSTALLDIR
+# PKG_INSTALLDIR is only available for pkg-config >= 0.27
+m4_ifdef([PKG_INSTALLDIR], [PKG_INSTALLDIR], [])
AC_ARG_WITH(pkgconfigdir,
AC_HELP_STRING([--with-pkgconfigdir], [Use the specified pkgconfig dir (default is libdir/pkgconfig)]),
diff --git a/src/liboping.c b/src/liboping.c
index f4cf614ca0704258a63bf79f32261d88e21e5f06..b6c80f2f479e875a63d26a7d47ca6f685e854a93 100644 (file)
--- a/src/liboping.c
+++ b/src/liboping.c
return ((pingobj_iter_t *) iter->next);
}
+int ping_iterator_count (pingobj_t *obj)
+{
+ if (obj == NULL)
+ return 0;
+
+ int count = 0;
+ pingobj_iter_t *iter = obj->head;
+ while (iter) {
+ count++;
+ iter = iter->next;
+ }
+ return count;
+}
+
int ping_iterator_get_info (pingobj_iter_t *iter, int info,
void *buffer, size_t *buffer_len)
{
diff --git a/src/mans/liboping.pod b/src/mans/liboping.pod
index c36a89c0e256122ccd2fe37b763a5e640605a2bf..7eb987efc9c2966fb44c7e4bfdfdcf304c32243c 100644 (file)
--- a/src/mans/liboping.pod
+++ b/src/mans/liboping.pod
L<ping_host_add(3)>,
L<ping_send(3)>,
L<ping_get_error(3)>,
+L<ping_iterator_count(3)>,
L<ping_iterator_get(3)>,
L<ping_iterator_get_info(3)>,
L<ping_iterator_get_context(3)>
diff --git a/src/mans/oping.pod b/src/mans/oping.pod
index f1e08071d1119311caf0f791507475e3bddb272e..b73d2b8084a482546ee8e07f153b89d40e32f2b0 100644 (file)
--- a/src/mans/oping.pod
+++ b/src/mans/oping.pod
printed in yellow. RTTs above that are considered to be "unusual" and are
printed in red.
+=head1 INTERACTIVE KEYBOARD CONTROLS
+
+When running I<noping>, the type of graph being displayed can be
+changed by using the B<g> key. A new host can be added at any time
+with the B<a> key.
+
=head1 SEE ALSO
L<ping(8)>, L<http://fping.org/>, L<liboping(3)>
diff --git a/src/mans/ping_iterator_count.pod b/src/mans/ping_iterator_count.pod
--- /dev/null
@@ -0,0 +1,33 @@
+=head1 NAME
+
+ping_iterator_count - Count the number of hosts in a liboping object
+
+=head1 SYNOPSIS
+
+ #include <oping.h>
+
+ int ping_iterator_count (pingobj_t *obj);
+
+=head1 DESCRIPTION
+
+This functions is used to count the number of hosts currently associated
+with a liboping object.
+
+=head1 RETURN VALUE
+
+The B<ping_iterator_count> returns an integer number or zero if no host is
+associated with I<obj>.
+
+=head1 SEE ALSO
+
+L<ping_host_add(3)>,
+L<ping_iterator_get(3)>,
+L<ping_iterator_next(3)>,
+L<liboping(3)>
+
+=head1 AUTHOR
+
+liboping is written by Florian "octo" Forster E<lt>ff at octo.itE<gt>.
+Its homepage can be found at L<http://noping.cc/>.
+
+Copyright (c) 2005-2016 by Florian "octo" Forster.
diff --git a/src/oping.c b/src/oping.c
index 528c90d1e25930077472719056ed6a8112ab3ad3..0b5c44e223d6ac902d963f0e6dbe18fe0dcef815 100644 (file)
--- a/src/oping.c
+++ b/src/oping.c
memcpy (ctx->history_by_value, ctx->history_by_time,
sizeof (ctx->history_by_time));
+ /* 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;
+
/* Sort all RTTs. */
qsort (ctx->history_by_value, ctx->history_size, sizeof
(ctx->history_by_value[0]), compare_double);
{
pingobj_iter_t *iter;
int index;
+ size_t history_size = 0;
if (ping == NULL)
return (EINVAL);
{
ping_context_t *context;
size_t buffer_size;
+ int i;
+
+ 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 (i = 0; i < history_size; i++)
+ context->history_by_time[i] = -1;
+
buffer_size = sizeof (context->host);
ping_iterator_get_info (iter, PING_INFO_HOSTNAME, context->host, &buffer_size);
} /* }}} int update_graph_boxplot */
static int update_graph_prettyping (ping_context_t *ctx, /* {{{ */
- double latency, unsigned int sequence)
+ double latency)
{
size_t x;
size_t x_max;
index = (history_offset + x) % ctx->history_size;
latency = ctx->history_by_time[index];
+ if (latency < 0) {
+ continue;
+ }
+
if (latency >= 0.0)
{
double ratio;
@@ -1218,12 +1245,6 @@ static int update_stats_from_context (ping_context_t *ctx, pingobj_iter_t *iter)
ping_iterator_get_info (iter, PING_INFO_LATENCY,
&latency, &buffer_len);
- unsigned int sequence = 0;
- buffer_len = sizeof (sequence);
- ping_iterator_get_info (iter, PING_INFO_SEQUENCE,
- &sequence, &buffer_len);
-
-
if ((ctx == NULL) || (ctx->window == NULL))
return (EINVAL);
@@ -1259,7 +1280,7 @@ static int update_stats_from_context (ping_context_t *ctx, pingobj_iter_t *iter)
}
if (opt_show_graph == 1)
- update_graph_prettyping (ctx, latency, sequence);
+ update_graph_prettyping (ctx, latency);
else if (opt_show_graph == 2)
update_graph_histogram (ctx);
else if (opt_show_graph == 3)
if (context->window != NULL)
{
+ werase (context->window);
+ wrefresh (context->window);
delwin (context->window);
context->window = NULL;
}
else if (opt_show_graph > 0)
opt_show_graph++;
}
+ else if (key == 'a')
+ {
+ char host[NI_MAXHOST];
+
+ 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
+ {
+ /* FIXME - scroll main_win correctly so that old
+ * data is still visible */
+ need_resize = 1;
+ host_num = ping_iterator_count(ping);
+ ping_initialize_contexts(ping);
+ }
+ }
}
if (need_resize)
diff --git a/src/oping.h b/src/oping.h
index 1970ef273f40e634c689cf8cfacf7b654c31d55c..50d11fbb08870077d0ee21004480af6aa2a55809 100644 (file)
--- a/src/oping.h
+++ b/src/oping.h
pingobj_iter_t *ping_iterator_get (pingobj_t *obj);
pingobj_iter_t *ping_iterator_next (pingobj_iter_t *iter);
+int ping_iterator_count (pingobj_t *obj);
#define PING_INFO_HOSTNAME 1
#define PING_INFO_ADDRESS 2