From 3d6d085bc38da945ff10d636a845f330caf2ecf7 Mon Sep 17 00:00:00 2001 From: Florian Forster Date: Tue, 24 Jun 2008 14:48:23 +0200 Subject: [PATCH] src/rrd_client.[ch]: Impelemt `rrdc_flush'. --- src/rrd_client.c | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/rrd_client.h | 2 ++ 2 files changed, 64 insertions(+) diff --git a/src/rrd_client.c b/src/rrd_client.c index ef39d48..eace81c 100644 --- a/src/rrd_client.c +++ b/src/rrd_client.c @@ -405,6 +405,68 @@ int rrdc_update (const char *filename, int values_num, /* {{{ */ return (status); } /* }}} int rrd_update_daemon */ +int rrdc_flush (const char *filename) /* {{{ */ +{ + char buffer[4096]; + char *buffer_ptr; + size_t buffer_free; + size_t buffer_size; + int status; + + if (filename == NULL) + return (-1); + + memset (buffer, 0, sizeof (buffer)); + buffer_ptr = &buffer[0]; + buffer_free = sizeof (buffer); + + status = buffer_add_string ("flush", &buffer_ptr, &buffer_free); + if (status != 0) + return (ENOBUFS); + + status = buffer_add_string (filename, &buffer_ptr, &buffer_free); + if (status != 0) + return (ENOBUFS); + + assert (buffer_free < sizeof (buffer)); + buffer_size = sizeof (buffer) - buffer_free; + assert (buffer[buffer_size - 1] == ' '); + buffer[buffer_size - 1] = '\n'; + + pthread_mutex_lock (&lock); + + if (sd < 0) + { + pthread_mutex_unlock (&lock); + return (ENOTCONN); + } + + status = swrite (buffer, buffer_size); + if (status != 0) + { + pthread_mutex_unlock (&lock); + return (status); + } + + status = sread (buffer, sizeof (buffer)); + if (status < 0) + { + status = errno; + pthread_mutex_unlock (&lock); + return (status); + } + else if (status == 0) + { + pthread_mutex_unlock (&lock); + return (ENODATA); + } + + pthread_mutex_unlock (&lock); + + status = atoi (buffer); + return (status); +} /* }}} int rrdc_flush */ + /* * vim: set sw=2 sts=2 ts=8 et fdm=marker : */ diff --git a/src/rrd_client.h b/src/rrd_client.h index 0585023..aa80e59 100644 --- a/src/rrd_client.h +++ b/src/rrd_client.h @@ -31,4 +31,6 @@ int rrdc_disconnect (void); int rrdc_update (const char *filename, int values_num, const char * const *values); +int rrdc_flush (const char *filename); + #endif /* __RRD_CLIENT_H */ -- 2.11.0