summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app-benchmarks/ioping/files/ioping-1.1-netdata.patch141
-rw-r--r--app-benchmarks/ioping/ioping-1.1.ebuild7
-rw-r--r--app-benchmarks/ioping/metadata.xml3
3 files changed, 150 insertions, 1 deletions
diff --git a/app-benchmarks/ioping/files/ioping-1.1-netdata.patch b/app-benchmarks/ioping/files/ioping-1.1-netdata.patch
new file mode 100644
index 000000000000..b93a77e36bbf
--- /dev/null
+++ b/app-benchmarks/ioping/files/ioping-1.1-netdata.patch
@@ -0,0 +1,141 @@
+From 43d15a5f7b4e3f03cb3ae2b4efca9442834e2a98 Mon Sep 17 00:00:00 2001
+From: Vladimir Kobal <vlad@prokk.net>
+Date: Thu, 28 Mar 2019 20:36:20 +0200
+Subject: [PATCH 1/1] Add support for netdata
+
+---
+ ioping.1 | 5 ++++-
+ ioping.c | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++--
+ 2 files changed, 54 insertions(+), 3 deletions(-)
+
+diff --git a/ioping.1 b/ioping.1
+index 9c66997..534fc61 100644
+--- a/ioping.1
++++ b/ioping.1
+@@ -3,7 +3,7 @@
+ ioping \- simple disk I/O latency monitoring tool
+ .SH SYNOPSYS
+ .SY ioping
+-.OP \-ABCDLRWGYykq
++.OP \-ABCDLRWGYykqN
+ .OP \-c count
+ .OP \-i interval
+ .OP \-l speed
+@@ -107,6 +107,9 @@ Keep and reuse temporary working file "ioping.tmp" (only for directory target).
+ .B \-q
+ Suppress periodical human-readable output.
+ .TP
++.B \-N
++Use output format compatible with netdata.
++.TP
+ .B \-h
+ Display help message and exit.
+ .TP
+diff --git a/ioping.c b/ioping.c
+index 1742d96..41790c4 100644
+--- a/ioping.c
++++ b/ioping.c
+@@ -327,6 +327,7 @@ void usage(void)
+ " -y use data sync I/O (O_DSYNC)\n"
+ " -k keep and reuse temporary file (ioping.tmp)\n"
+ " -q suppress human-readable output\n"
++ " -N use output format compatible with netdata\n"
+ " -h display this message and exit\n"
+ " -v display version and exit\n"
+ "\n"
+@@ -487,6 +488,7 @@ int fd;
+ void *buf;
+
+ int quiet = 0;
++int netdata_output = 0;
+ int batch_mode = 0;
+ int direct = 0;
+ int cached = 0;
+@@ -531,7 +533,7 @@ void parse_options(int argc, char **argv)
+ exit(1);
+ }
+
+- while ((opt = getopt(argc, argv, "hvkALRDCWGYBqyi:t:T:w:s:S:c:o:p:P:l:")) != -1) {
++ while ((opt = getopt(argc, argv, "hvkALRDCWGYBNqyi:t:T:w:s:S:c:o:p:P:l:")) != -1) {
+ switch (opt) {
+ case 'h':
+ usage();
+@@ -608,6 +610,9 @@ void parse_options(int argc, char **argv)
+ case 'q':
+ quiet = 1;
+ break;
++ case 'N':
++ netdata_output = 1;
++ break;
+ case 'B':
+ quiet = 1;
+ batch_mode = 1;
+@@ -629,6 +634,19 @@ void parse_options(int argc, char **argv)
+ if (optind < argc-1)
+ errx(1, "more than one destination specified");
+ path = argv[optind];
++
++ if (netdata_output) {
++ if (stop_at_request || custom_deadline || period_request || period_time || custom_deadline || write_read_test)
++ errx(1, "-c, -w, -p, -P, -R, and -G options are incompatible with netdata output (-N)");
++
++ if (interval < NSEC_PER_SEC) {
++ interval = NSEC_PER_SEC;
++ warnx("the minimal interval for netdata is 1 second");
++ } else {
++ interval = roundl(interval / NSEC_PER_SEC) * NSEC_PER_SEC;
++ warnx("round interval to %lld seconds", interval / NSEC_PER_SEC);
++ }
++ }
+ }
+
+ #ifdef __linux__
+@@ -1152,6 +1170,34 @@ static void dump_statistics(struct statistics *s) {
+ (unsigned long)s->load_time);
+ }
+
++void print_netdata(ssize_t ret_size, long long time_now, long long this_time) {
++ static int sent_chart = 0;
++ static long long time_prev = 0;
++
++ fflush(stdout);
++
++ if (!sent_chart) {
++ printf("CHART 'ioping.%s_", path);
++ print_size(ret_size);
++ printf("_%s_latency' '' '%s Latency for %s' microseconds '%s' ioping.latency line 110030 %lld '' ioping.plugin\n"
++ , write_test ? "write" : "read"
++ , write_test ? "Write" : "Read"
++ , path
++ , path
++ , interval / NSEC_PER_SEC);
++ printf("DIMENSION latency '' absolute 1 1000\n");
++ sent_chart = 1;
++ }
++
++ printf("BEGIN 'ioping.%s_", path);
++ print_size(ret_size);
++ printf("_%s_latency' %lld\n", write_test ? "write" : "read", time_prev ? (time_now - time_prev) / 1000 : 0);
++ time_prev = time_now;
++
++ printf("SET latency %lld\n", this_time);
++ printf("END\n");
++}
++
+ int main (int argc, char **argv)
+ {
+ ssize_t ret_size;
+@@ -1391,7 +1437,9 @@ skip_preparation:
+ add_statistics(&part, this_time);
+ }
+
+- if (!quiet) {
++ if (netdata_output) {
++ print_netdata(ret_size, time_now, this_time);
++ } else if (!quiet) {
+ print_size(ret_size);
+ printf(" %s %s (%s %s", write_test ? ">>>" : "<<<",
+ path, fstype, device);
+--
+2.23.0
+
diff --git a/app-benchmarks/ioping/ioping-1.1.ebuild b/app-benchmarks/ioping/ioping-1.1.ebuild
index 2add66860714..a5dbab3ab635 100644
--- a/app-benchmarks/ioping/ioping-1.1.ebuild
+++ b/app-benchmarks/ioping/ioping-1.1.ebuild
@@ -12,7 +12,12 @@ SRC_URI="https://github.com/koct9i/${PN}/archive/v${PV}.tar.gz -> ${P}.tar.gz"
SLOT="0"
LICENSE="GPL-3"
KEYWORDS="~amd64 ~x86 ~amd64-linux ~x86-linux"
-IUSE=""
+IUSE="netdata"
+
+src_prepare() {
+ use netdata && eapply "${FILESDIR}/${P}-netdata.patch"
+ eapply_user
+}
src_configure() {
tc-export CC
diff --git a/app-benchmarks/ioping/metadata.xml b/app-benchmarks/ioping/metadata.xml
index 24e9747fb52f..f1fd644784b8 100644
--- a/app-benchmarks/ioping/metadata.xml
+++ b/app-benchmarks/ioping/metadata.xml
@@ -12,4 +12,7 @@
<remote-id type="google-code">ioping</remote-id>
<remote-id type="github">koct9i/ioping</remote-id>
</upstream>
+ <use>
+ <flag name="netdata">Add support for netdata</flag>
+ </use>
</pkgmetadata>