From: Florian Forster Date: Tue, 24 Jun 2008 12:48:23 +0000 (+0200) Subject: src/rrd_client.[ch]: Impelemt `rrdc_flush'. X-Git-Url: https://git.octo.it/?a=commitdiff_plain;ds=sidebyside;h=3d6d085bc38da945ff10d636a845f330caf2ecf7;p=rrdtool.git src/rrd_client.[ch]: Impelemt `rrdc_flush'. --- 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 */