@cryptotaxi247 / netdata-1 / commits / d143559b8

properly supported nfsv4; added plugin to collect nfs client statistics; fixes #959

Costa Tsaousis (ktsaou) committed Sep 16, 2016 at 23:49 UTC d143559b84a32a3c97cafbe9b304cb02b5f77408
5 files changed +187 -81
src/Makefile.am
+1
@@ -52,6 +52,7 @@ netdata_SOURCES = \
52 proc_net_dev.c \
53 proc_net_ip_vs_stats.c \
54 proc_net_netstat.c \
55 + proc_net_rpc_nfs.c \
56 proc_net_rpc_nfsd.c \
57 proc_net_snmp.c \
58 proc_net_snmp6.c \
src/plugin_proc.c
+10
@@ -28,6 +28,7 @@ void *proc_main(void *ptr)
28 int vdo_proc_stat = !config_get_boolean("plugin:proc", "/proc/stat", 1);
29 int vdo_proc_meminfo = !config_get_boolean("plugin:proc", "/proc/meminfo", 1);
30 int vdo_proc_vmstat = !config_get_boolean("plugin:proc", "/proc/vmstat", 1);
31 + int vdo_proc_net_rpc_nfs = !config_get_boolean("plugin:proc", "/proc/net/rpc/nfs", 1);
32 int vdo_proc_net_rpc_nfsd = !config_get_boolean("plugin:proc", "/proc/net/rpc/nfsd", 1);
33 int vdo_proc_sys_kernel_random_entropy_avail = !config_get_boolean("plugin:proc", "/proc/sys/kernel/random/entropy_avail", 1);
34 int vdo_proc_interrupts = !config_get_boolean("plugin:proc", "/proc/interrupts", 1);
@@ -49,6 +50,7 @@ void *proc_main(void *ptr)
50 unsigned long long sutime_proc_stat = 0ULL;
51 unsigned long long sutime_proc_meminfo = 0ULL;
52 unsigned long long sutime_proc_vmstat = 0ULL;
53 + unsigned long long sutime_proc_net_rpc_nfs = 0ULL;
54 unsigned long long sutime_proc_net_rpc_nfsd = 0ULL;
55 unsigned long long sutime_proc_sys_kernel_random_entropy_avail = 0ULL;
56 unsigned long long sutime_proc_interrupts = 0ULL;
@@ -221,6 +223,14 @@ void *proc_main(void *ptr)
223 }
224 if(unlikely(netdata_exit)) break;
225
226 + if(!vdo_proc_net_rpc_nfs) {
227 + debug(D_PROCNETDEV_LOOP, "PROCNETDEV: calling do_proc_net_rpc_nfs().");
228 + sunow = time_usec();
229 + vdo_proc_net_rpc_nfs = do_proc_net_rpc_nfs(rrd_update_every, (sutime_proc_net_rpc_nfs > 0)?sunow - sutime_proc_net_rpc_nfs:0ULL);
230 + sutime_proc_net_rpc_nfs = sunow;
231 + }
232 + if(unlikely(netdata_exit)) break;
233 +
234 // END -- the job is done
235
236 // --------------------------------------------------------------------
src/plugin_proc.h
+1
@@ -13,6 +13,7 @@ extern int do_proc_net_ip_vs_stats(int update_every, unsigned long long dt);
13 extern int do_proc_stat(int update_every, unsigned long long dt);
14 extern int do_proc_meminfo(int update_every, unsigned long long dt);
15 extern int do_proc_vmstat(int update_every, unsigned long long dt);
16 +extern int do_proc_net_rpc_nfs(int update_every, unsigned long long dt);
17 extern int do_proc_net_rpc_nfsd(int update_every, unsigned long long dt);
18 extern int do_proc_sys_kernel_random_entropy_avail(int update_every, unsigned long long dt);
19 extern int do_proc_interrupts(int update_every, unsigned long long dt);
src/proc_net_rpc_nfsd.c
+168 -80
@@ -2,47 +2,135 @@
2
3 struct nfsd_procs {
4 char name[30];
5 - unsigned long long proc2;
6 - unsigned long long proc3;
7 - unsigned long long proc4;
8 - int present2;
9 - int present3;
10 - int present4;
5 + unsigned long long value;
6 + int present;
7 };
8
13 -struct nfsd_procs nfsd_proc_values[] = {
14 - { "null", 0ULL, 0ULL, 0ULL, 0, 0, 0 },
15 - { "getattr", 0ULL, 0ULL, 0ULL, 0, 0, 0 },
16 - { "setattr", 0ULL, 0ULL, 0ULL, 0, 0, 0 },
17 - { "lookup", 0ULL, 0ULL, 0ULL, 0, 0, 0 },
18 - { "access", 0ULL, 0ULL, 0ULL, 0, 0, 0 },
19 - { "readlink", 0ULL, 0ULL, 0ULL, 0, 0, 0 },
20 - { "read", 0ULL, 0ULL, 0ULL, 0, 0, 0 },
21 - { "write", 0ULL, 0ULL, 0ULL, 0, 0, 0 },
22 - { "create", 0ULL, 0ULL, 0ULL, 0, 0, 0 },
23 - { "mkdir", 0ULL, 0ULL, 0ULL, 0, 0, 0 },
24 - { "symlink", 0ULL, 0ULL, 0ULL, 0, 0, 0 },
25 - { "mknod", 0ULL, 0ULL, 0ULL, 0, 0, 0 },
26 - { "remove", 0ULL, 0ULL, 0ULL, 0, 0, 0 },
27 - { "rmdir", 0ULL, 0ULL, 0ULL, 0, 0, 0 },
28 - { "rename", 0ULL, 0ULL, 0ULL, 0, 0, 0 },
29 - { "link", 0ULL, 0ULL, 0ULL, 0, 0, 0 },
30 - { "readdir", 0ULL, 0ULL, 0ULL, 0, 0, 0 },
31 - { "readdirplus", 0ULL, 0ULL, 0ULL, 0, 0, 0 },
32 - { "fsstat", 0ULL, 0ULL, 0ULL, 0, 0, 0 },
33 - { "fsinfo", 0ULL, 0ULL, 0ULL, 0, 0, 0 },
34 - { "pathconf", 0ULL, 0ULL, 0ULL, 0, 0, 0 },
35 - { "commit", 0ULL, 0ULL, 0ULL, 0, 0, 0 },
36 - { "", 0ULL, 0ULL, 0ULL, 0, 0, 0 },
9 +struct nfsd_procs nfsd_proc2_values[] = {
10 + { "null", 0ULL, 0 },
11 + { "getattr", 0ULL, 0 },
12 + { "setattr", 0ULL, 0 },
13 + { "root", 0ULL, 0 },
14 + { "lookup", 0ULL, 0 },
15 + { "readlink", 0ULL, 0 },
16 + { "read", 0ULL, 0 },
17 + { "wrcache", 0ULL, 0 },
18 + { "write", 0ULL, 0 },
19 + { "create", 0ULL, 0 },
20 + { "remove", 0ULL, 0 },
21 + { "rename", 0ULL, 0 },
22 + { "link", 0ULL, 0 },
23 + { "symlink", 0ULL, 0 },
24 + { "mkdir", 0ULL, 0 },
25 + { "rmdir", 0ULL, 0 },
26 + { "readdir", 0ULL, 0 },
27 + { "fsstat", 0ULL, 0 },
28 +
29 + /* termination */
30 + { "", 0ULL, 0 }
31 };
32
39 -struct nfsd4_ops {
40 - char name[30];
41 - unsigned long long value;
42 - int present;
33 +struct nfsd_procs nfsd_proc3_values[] = {
34 + { "null", 0ULL, 0 },
35 + { "getattr", 0ULL, 0 },
36 + { "setattr", 0ULL, 0 },
37 + { "lookup", 0ULL, 0 },
38 + { "access", 0ULL, 0 },
39 + { "readlink", 0ULL, 0 },
40 + { "read", 0ULL, 0 },
41 + { "write", 0ULL, 0 },
42 + { "create", 0ULL, 0 },
43 + { "mkdir", 0ULL, 0 },
44 + { "symlink", 0ULL, 0 },
45 + { "mknod", 0ULL, 0 },
46 + { "remove", 0ULL, 0 },
47 + { "rmdir", 0ULL, 0 },
48 + { "rename", 0ULL, 0 },
49 + { "link", 0ULL, 0 },
50 + { "readdir", 0ULL, 0 },
51 + { "readdirplus", 0ULL, 0 },
52 + { "fsstat", 0ULL, 0 },
53 + { "fsinfo", 0ULL, 0 },
54 + { "pathconf", 0ULL, 0 },
55 + { "commit", 0ULL, 0 },
56 +
57 + /* termination */
58 + { "", 0ULL, 0 }
59 +};
60 +
61 +struct nfsd_procs nfsd_proc4_values[] = {
62 + { "null", 0ULL, 0 },
63 + { "read", 0ULL, 0 },
64 + { "write", 0ULL, 0 },
65 + { "commit", 0ULL, 0 },
66 + { "open", 0ULL, 0 },
67 + { "open_conf", 0ULL, 0 },
68 + { "open_noat", 0ULL, 0 },
69 + { "open_dgrd", 0ULL, 0 },
70 + { "close", 0ULL, 0 },
71 + { "setattr", 0ULL, 0 },
72 + { "fsinfo", 0ULL, 0 },
73 + { "renew", 0ULL, 0 },
74 + { "setclntid", 0ULL, 0 },
75 + { "confirm", 0ULL, 0 },
76 + { "lock", 0ULL, 0 },
77 + { "lockt", 0ULL, 0 },
78 + { "locku", 0ULL, 0 },
79 + { "access", 0ULL, 0 },
80 + { "getattr", 0ULL, 0 },
81 + { "lookup", 0ULL, 0 },
82 + { "lookup_root", 0ULL, 0 },
83 + { "remove", 0ULL, 0 },
84 + { "rename", 0ULL, 0 },
85 + { "link", 0ULL, 0 },
86 + { "symlink", 0ULL, 0 },
87 + { "create", 0ULL, 0 },
88 + { "pathconf", 0ULL, 0 },
89 + { "statfs", 0ULL, 0 },
90 + { "readlink", 0ULL, 0 },
91 + { "readdir", 0ULL, 0 },
92 + { "server_caps", 0ULL, 0 },
93 + { "delegreturn", 0ULL, 0 },
94 + { "getacl", 0ULL, 0 },
95 + { "setacl", 0ULL, 0 },
96 + { "fs_locations", 0ULL, 0 },
97 + { "rel_lkowner", 0ULL, 0 },
98 + { "secinfo", 0ULL, 0 },
99 + { "fsid_present", 0ULL, 0 },
100 +
101 + /* nfsv4.1 client ops */
102 + { "exchange_id", 0ULL, 0 },
103 + { "create_session", 0ULL, 0 },
104 + { "destroy_session", 0ULL, 0 },
105 + { "sequence", 0ULL, 0 },
106 + { "get_lease_time", 0ULL, 0 },
107 + { "reclaim_comp", 0ULL, 0 },
108 + { "layoutget", 0ULL, 0 },
109 + { "getdevinfo", 0ULL, 0 },
110 + { "layoutcommit", 0ULL, 0 },
111 + { "layoutreturn", 0ULL, 0 },
112 + { "secinfo_no", 0ULL, 0 },
113 + { "test_stateid", 0ULL, 0 },
114 + { "free_stateid", 0ULL, 0 },
115 + { "getdevicelist", 0ULL, 0 },
116 + { "bind_conn_to_ses", 0ULL, 0 },
117 + { "destroy_clientid", 0ULL, 0 },
118 +
119 + /* nfsv4.2 client ops */
120 + { "seek", 0ULL, 0 },
121 + { "allocate", 0ULL, 0 },
122 + { "deallocate", 0ULL, 0 },
123 + { "layoutstats", 0ULL, 0 },
124 + { "clone", 0ULL, 0 },
125 +
126 + /* termination */
127 + { "", 0ULL, 0 }
128 };
129
45 -struct nfsd4_ops nfsd4_ops_values[] = {
130 +struct nfsd_procs nfsd4_ops_values[] = {
131 + { "unused_op0", 0ULL, 0},
132 + { "unused_op1", 0ULL, 0},
133 + { "future_op2", 0ULL, 0},
134 { "access", 0ULL, 0},
135 { "close", 0ULL, 0},
136 { "commit", 0ULL, 0},
@@ -56,7 +144,7 @@ struct nfsd4_ops nfsd4_ops_values[] = {
144 { "lockt", 0ULL, 0},
145 { "locku", 0ULL, 0},
146 { "lookup", 0ULL, 0},
59 - { "lookupp", 0ULL, 0},
147 + { "lookup_root", 0ULL, 0},
148 { "nverify", 0ULL, 0},
149 { "open", 0ULL, 0},
150 { "openattr", 0ULL, 0},
@@ -107,7 +195,7 @@ struct nfsd4_ops nfsd4_ops_values[] = {
195 { "copy", 0ULL, 0},
196 { "copy_notify", 0ULL, 0},
197 { "deallocate", 0ULL, 0},
110 - { "io_advise", 0ULL, 0},
198 + { "ioadvise", 0ULL, 0},
199 { "layouterror", 0ULL, 0},
200 { "layoutstats", 0ULL, 0},
201 { "offload_cancel", 0ULL, 0},
@@ -174,13 +262,13 @@ int do_proc_net_rpc_nfsd(int update_every, unsigned long long dt) {
262 unsigned long long th_threads = 0, th_fullcnt = 0, th_hist10 = 0, th_hist20 = 0, th_hist30 = 0, th_hist40 = 0, th_hist50 = 0, th_hist60 = 0, th_hist70 = 0, th_hist80 = 0, th_hist90 = 0, th_hist100 = 0;
263 unsigned long long ra_size = 0, ra_hist10 = 0, ra_hist20 = 0, ra_hist30 = 0, ra_hist40 = 0, ra_hist50 = 0, ra_hist60 = 0, ra_hist70 = 0, ra_hist80 = 0, ra_hist90 = 0, ra_hist100 = 0, ra_none = 0;
264 unsigned long long net_count = 0, net_udp_count = 0, net_tcp_count = 0, net_tcp_connections = 0;
177 - unsigned long long rpc_count = 0, rpc_bad_format = 0, rpc_bad_auth = 0, rpc_bad_client = 0;
265 + unsigned long long rpc_calls = 0, rpc_bad_format = 0, rpc_bad_auth = 0, rpc_bad_client = 0;
266
267 for(l = 0; l < lines ;l++) {
268 words = procfile_linewords(ff, l);
269 if(!words) continue;
270
183 - type = procfile_lineword(ff, l, 0);
271 + type = procfile_lineword(ff, l, 0);
272
273 if(do_rc == 1 && strcmp(type, "rc") == 0) {
274 if(words < 4) {
@@ -306,12 +394,12 @@ int do_proc_net_rpc_nfsd(int update_every, unsigned long long dt) {
394 continue;
395 }
396
309 - rpc_count = strtoull(procfile_lineword(ff, l, 1), NULL, 10);
397 + rpc_calls = strtoull(procfile_lineword(ff, l, 1), NULL, 10);
398 rpc_bad_format = strtoull(procfile_lineword(ff, l, 2), NULL, 10);
399 rpc_bad_auth = strtoull(procfile_lineword(ff, l, 3), NULL, 10);
400 rpc_bad_client = strtoull(procfile_lineword(ff, l, 4), NULL, 10);
401
314 - unsigned long long sum = rpc_count + rpc_bad_format + rpc_bad_auth + rpc_bad_client;
402 + unsigned long long sum = rpc_calls + rpc_bad_format + rpc_bad_auth + rpc_bad_client;
403 if(sum == 0ULL) do_rpc = -1;
404 else do_rpc = 2;
405 }
@@ -321,10 +409,10 @@ int do_proc_net_rpc_nfsd(int update_every, unsigned long long dt) {
409
410 unsigned long long sum = 0;
411 unsigned int i, j;
324 - for(i = 0, j = 2; j < words && nfsd_proc_values[i].name[0] ; i++, j++) {
325 - nfsd_proc_values[i].proc2 = strtoull(procfile_lineword(ff, l, j), NULL, 10);
326 - nfsd_proc_values[i].present2 = 1;
327 - sum += nfsd_proc_values[i].proc2;
412 + for(i = 0, j = 2; j < words && nfsd_proc2_values[i].name[0] ; i++, j++) {
413 + nfsd_proc2_values[i].value = strtoull(procfile_lineword(ff, l, j), NULL, 10);
414 + nfsd_proc2_values[i].present = 1;
415 + sum += nfsd_proc2_values[i].value;
416 }
417
418 if(sum == 0ULL) {
@@ -342,10 +430,10 @@ int do_proc_net_rpc_nfsd(int update_every, unsigned long long dt) {
430
431 unsigned long long sum = 0;
432 unsigned int i, j;
345 - for(i = 0, j = 2; j < words && nfsd_proc_values[i].name[0] ; i++, j++) {
346 - nfsd_proc_values[i].proc3 = strtoull(procfile_lineword(ff, l, j), NULL, 10);
347 - nfsd_proc_values[i].present3 = 1;
348 - sum += nfsd_proc_values[i].proc3;
433 + for(i = 0, j = 2; j < words && nfsd_proc3_values[i].name[0] ; i++, j++) {
434 + nfsd_proc3_values[i].value = strtoull(procfile_lineword(ff, l, j), NULL, 10);
435 + nfsd_proc3_values[i].present = 1;
436 + sum += nfsd_proc3_values[i].value;
437 }
438
439 if(sum == 0ULL) {
@@ -363,10 +451,10 @@ int do_proc_net_rpc_nfsd(int update_every, unsigned long long dt) {
451
452 unsigned long long sum = 0;
453 unsigned int i, j;
366 - for(i = 0, j = 2; j < words && nfsd_proc_values[i].name[0] ; i++, j++) {
367 - nfsd_proc_values[i].proc4 = strtoull(procfile_lineword(ff, l, j), NULL, 10);
368 - nfsd_proc_values[i].present4 = 1;
369 - sum += nfsd_proc_values[i].proc4;
454 + for(i = 0, j = 2; j < words && nfsd_proc4_values[i].name[0] ; i++, j++) {
455 + nfsd_proc4_values[i].value = strtoull(procfile_lineword(ff, l, j), NULL, 10);
456 + nfsd_proc4_values[i].present = 1;
457 + sum += nfsd_proc4_values[i].value;
458 }
459
460 if(sum == 0ULL) {
@@ -408,7 +496,7 @@ int do_proc_net_rpc_nfsd(int update_every, unsigned long long dt) {
496 if(do_rc == 2) {
497 st = rrdset_find_bytype("nfsd", "readcache");
498 if(!st) {
411 - st = rrdset_create("nfsd", "readcache", NULL, "nfsd", NULL, "Read Cache", "reads/s", 5000, update_every, RRDSET_TYPE_STACKED);
499 + st = rrdset_create("nfsd", "readcache", NULL, "cache", NULL, "NFS Server Read Cache", "reads/s", 5000, update_every, RRDSET_TYPE_STACKED);
500
501 rrddim_add(st, "hits", NULL, 1, 1, RRDDIM_INCREMENTAL);
502 rrddim_add(st, "misses", NULL, 1, 1, RRDDIM_INCREMENTAL);
@@ -427,7 +515,7 @@ int do_proc_net_rpc_nfsd(int update_every, unsigned long long dt) {
515 if(do_fh == 2) {
516 st = rrdset_find_bytype("nfsd", "filehandles");
517 if(!st) {
430 - st = rrdset_create("nfsd", "filehandles", NULL, "nfsd", NULL, "File Handles", "handles/s", 5001, update_every, RRDSET_TYPE_LINE);
518 + st = rrdset_create("nfsd", "filehandles", NULL, "filehandles", NULL, "NFS Server File Handles", "handles/s", 5001, update_every, RRDSET_TYPE_LINE);
519 st->isdetail = 1;
520
521 rrddim_add(st, "stale", NULL, 1, 1, RRDDIM_ABSOLUTE);
@@ -451,7 +539,7 @@ int do_proc_net_rpc_nfsd(int update_every, unsigned long long dt) {
539 if(do_io == 2) {
540 st = rrdset_find_bytype("nfsd", "io");
541 if(!st) {
454 - st = rrdset_create("nfsd", "io", NULL, "nfsd", NULL, "I/O", "kilobytes/s", 5002, update_every, RRDSET_TYPE_AREA);
542 + st = rrdset_create("nfsd", "io", NULL, "io", NULL, "NFS Server I/O", "kilobytes/s", 5002, update_every, RRDSET_TYPE_AREA);
543
544 rrddim_add(st, "read", NULL, 1, 1000, RRDDIM_INCREMENTAL);
545 rrddim_add(st, "write", NULL, -1, 1000, RRDDIM_INCREMENTAL);
@@ -468,7 +556,7 @@ int do_proc_net_rpc_nfsd(int update_every, unsigned long long dt) {
556 if(do_th == 2) {
557 st = rrdset_find_bytype("nfsd", "threads");
558 if(!st) {
471 - st = rrdset_create("nfsd", "threads", NULL, "nfsd", NULL, "Threads", "threads", 5003, update_every, RRDSET_TYPE_LINE);
559 + st = rrdset_create("nfsd", "threads", NULL, "threads", NULL, "NFS Server Threads", "threads", 5003, update_every, RRDSET_TYPE_LINE);
560
561 rrddim_add(st, "threads", NULL, 1, 1, RRDDIM_ABSOLUTE);
562 }
@@ -479,7 +567,7 @@ int do_proc_net_rpc_nfsd(int update_every, unsigned long long dt) {
567
568 st = rrdset_find_bytype("nfsd", "threads_fullcnt");
569 if(!st) {
482 - st = rrdset_create("nfsd", "threads_fullcnt", NULL, "nfsd", NULL, "Threads Full Count", "ops/s", 5004, update_every, RRDSET_TYPE_LINE);
570 + st = rrdset_create("nfsd", "threads_fullcnt", NULL, "threads", NULL, "NFS Server Threads Full Count", "ops/s", 5004, update_every, RRDSET_TYPE_LINE);
571
572 rrddim_add(st, "full_count", NULL, 1, 1, RRDDIM_INCREMENTAL);
573 }
@@ -490,7 +578,7 @@ int do_proc_net_rpc_nfsd(int update_every, unsigned long long dt) {
578
579 st = rrdset_find_bytype("nfsd", "threads_histogram");
580 if(!st) {
493 - st = rrdset_create("nfsd", "threads_histogram", NULL, "nfsd", NULL, "Threads Usage Histogram", "percentage", 5005, update_every, RRDSET_TYPE_LINE);
581 + st = rrdset_create("nfsd", "threads_histogram", NULL, "threads", NULL, "NFS Server Threads Usage Histogram", "percentage", 5005, update_every, RRDSET_TYPE_LINE);
582
583 rrddim_add(st, "0%-10%", NULL, 1, 1000, RRDDIM_ABSOLUTE);
584 rrddim_add(st, "10%-20%", NULL, 1, 1000, RRDDIM_ABSOLUTE);
@@ -523,7 +611,7 @@ int do_proc_net_rpc_nfsd(int update_every, unsigned long long dt) {
611 if(do_ra == 2) {
612 st = rrdset_find_bytype("nfsd", "readahead");
613 if(!st) {
526 - st = rrdset_create("nfsd", "readahead", NULL, "nfsd", NULL, "Read Ahead Depth", "percentage", 5005, update_every, RRDSET_TYPE_STACKED);
614 + st = rrdset_create("nfsd", "readahead", NULL, "readahead", NULL, "NFS Server Read Ahead Depth", "percentage", 5005, update_every, RRDSET_TYPE_STACKED);
615
616 rrddim_add(st, "10%", NULL, 1, 1, RRDDIM_PCENT_OVER_DIFF_TOTAL);
617 rrddim_add(st, "20%", NULL, 1, 1, RRDDIM_PCENT_OVER_DIFF_TOTAL);
@@ -561,7 +649,7 @@ int do_proc_net_rpc_nfsd(int update_every, unsigned long long dt) {
649 if(do_net == 2) {
650 st = rrdset_find_bytype("nfsd", "net");
651 if(!st) {
564 - st = rrdset_create("nfsd", "net", NULL, "nfsd", NULL, "Network Reads", "reads/s", 5007, update_every, RRDSET_TYPE_STACKED);
652 + st = rrdset_create("nfsd", "net", NULL, "network", NULL, "NFS Server Network Statistics", "packets/s", 5007, update_every, RRDSET_TYPE_STACKED);
653 st->isdetail = 1;
654
655 rrddim_add(st, "udp", NULL, 1, 1, RRDDIM_INCREMENTAL);
@@ -583,10 +671,10 @@ int do_proc_net_rpc_nfsd(int update_every, unsigned long long dt) {
671 if(do_rpc == 2) {
672 st = rrdset_find_bytype("nfsd", "rpc");
673 if(!st) {
586 - st = rrdset_create("nfsd", "rpc", NULL, "nfsd", NULL, "Remote Procedure Calls", "calls/s", 5008, update_every, RRDSET_TYPE_LINE);
674 + st = rrdset_create("nfsd", "rpc", NULL, "rpc", NULL, "NFS Server Remote Procedure Calls Statistics", "calls/s", 5008, update_every, RRDSET_TYPE_LINE);
675 st->isdetail = 1;
676
589 - rrddim_add(st, "all", NULL, 1, 1, RRDDIM_INCREMENTAL);
677 + rrddim_add(st, "calls", NULL, 1, 1, RRDDIM_INCREMENTAL);
678 rrddim_add(st, "bad_format", NULL, -1, 1, RRDDIM_INCREMENTAL);
679 rrddim_add(st, "bad_auth", NULL, -1, 1, RRDDIM_INCREMENTAL);
680 }
@@ -595,7 +683,7 @@ int do_proc_net_rpc_nfsd(int update_every, unsigned long long dt) {
683 // ignore rpc_bad_client
684 if(rpc_bad_client) {};
685
598 - rrddim_set(st, "all", rpc_count);
686 + rrddim_set(st, "calls", rpc_calls);
687 rrddim_set(st, "bad_format", rpc_bad_format);
688 rrddim_set(st, "bad_auth", rpc_bad_auth);
689 rrdset_done(st);
@@ -607,15 +695,15 @@ int do_proc_net_rpc_nfsd(int update_every, unsigned long long dt) {
695 unsigned int i;
696 st = rrdset_find_bytype("nfsd", "proc2");
697 if(!st) {
610 - st = rrdset_create("nfsd", "proc2", NULL, "nfsd", NULL, "NFS v2 Calls", "calls/s", 5009, update_every, RRDSET_TYPE_STACKED);
698 + st = rrdset_create("nfsd", "proc2", NULL, "nfsv2rpc", NULL, "NFS v2 Server Remote Procedure Calls", "calls/s", 5009, update_every, RRDSET_TYPE_STACKED);
699
612 - for(i = 0; nfsd_proc_values[i].present2 ; i++)
613 - rrddim_add(st, nfsd_proc_values[i].name, NULL, 1, 1, RRDDIM_INCREMENTAL);
700 + for(i = 0; nfsd_proc2_values[i].present ; i++)
701 + rrddim_add(st, nfsd_proc2_values[i].name, NULL, 1, 1, RRDDIM_INCREMENTAL);
702 }
703 else rrdset_next(st);
704
617 - for(i = 0; nfsd_proc_values[i].present2 ; i++)
618 - rrddim_set(st, nfsd_proc_values[i].name, nfsd_proc_values[i].proc2);
705 + for(i = 0; nfsd_proc2_values[i].present ; i++)
706 + rrddim_set(st, nfsd_proc2_values[i].name, nfsd_proc2_values[i].value);
707
708 rrdset_done(st);
709 }
@@ -626,15 +714,15 @@ int do_proc_net_rpc_nfsd(int update_every, unsigned long long dt) {
714 unsigned int i;
715 st = rrdset_find_bytype("nfsd", "proc3");
716 if(!st) {
629 - st = rrdset_create("nfsd", "proc3", NULL, "nfsd", NULL, "NFS v3 Calls", "calls/s", 5010, update_every, RRDSET_TYPE_STACKED);
717 + st = rrdset_create("nfsd", "proc3", NULL, "nfsv3rpc", NULL, "NFS v3 Server Remote Procedure Calls", "calls/s", 5010, update_every, RRDSET_TYPE_STACKED);
718
631 - for(i = 0; nfsd_proc_values[i].present3 ; i++)
632 - rrddim_add(st, nfsd_proc_values[i].name, NULL, 1, 1, RRDDIM_INCREMENTAL);
719 + for(i = 0; nfsd_proc3_values[i].present ; i++)
720 + rrddim_add(st, nfsd_proc3_values[i].name, NULL, 1, 1, RRDDIM_INCREMENTAL);
721 }
722 else rrdset_next(st);
723
636 - for(i = 0; nfsd_proc_values[i].present3 ; i++)
637 - rrddim_set(st, nfsd_proc_values[i].name, nfsd_proc_values[i].proc3);
724 + for(i = 0; nfsd_proc3_values[i].present ; i++)
725 + rrddim_set(st, nfsd_proc3_values[i].name, nfsd_proc3_values[i].value);
726
727 rrdset_done(st);
728 }
@@ -645,15 +733,15 @@ int do_proc_net_rpc_nfsd(int update_every, unsigned long long dt) {
733 unsigned int i;
734 st = rrdset_find_bytype("nfsd", "proc4");
735 if(!st) {
648 - st = rrdset_create("nfsd", "proc4", NULL, "nfsd", NULL, "NFS v4 Calls", "calls/s", 5011, update_every, RRDSET_TYPE_STACKED);
736 + st = rrdset_create("nfsd", "proc4", NULL, "nfsv4rpc", NULL, "NFS v4 Server Remote Procedure Calls", "calls/s", 5011, update_every, RRDSET_TYPE_STACKED);
737
650 - for(i = 0; nfsd_proc_values[i].present4 ; i++)
651 - rrddim_add(st, nfsd_proc_values[i].name, NULL, 1, 1, RRDDIM_INCREMENTAL);
738 + for(i = 0; nfsd_proc4_values[i].present ; i++)
739 + rrddim_add(st, nfsd_proc4_values[i].name, NULL, 1, 1, RRDDIM_INCREMENTAL);
740 }
741 else rrdset_next(st);
742
655 - for(i = 0; nfsd_proc_values[i].present4 ; i++)
656 - rrddim_set(st, nfsd_proc_values[i].name, nfsd_proc_values[i].proc4);
743 + for(i = 0; nfsd_proc4_values[i].present ; i++)
744 + rrddim_set(st, nfsd_proc4_values[i].name, nfsd_proc4_values[i].value);
745
746 rrdset_done(st);
747 }
@@ -664,7 +752,7 @@ int do_proc_net_rpc_nfsd(int update_every, unsigned long long dt) {
752 unsigned int i;
753 st = rrdset_find_bytype("nfsd", "proc4ops");
754 if(!st) {
667 - st = rrdset_create("nfsd", "proc4ops", NULL, "nfsd", NULL, "NFS v4 Operations", "operations/s", 5012, update_every, RRDSET_TYPE_STACKED);
755 + st = rrdset_create("nfsd", "proc4ops", NULL, "nfsv2ops", NULL, "NFS v4 Server Operations", "operations/s", 5012, update_every, RRDSET_TYPE_STACKED);
756
757 for(i = 0; nfsd4_ops_values[i].present ; i++)
758 rrddim_add(st, nfsd4_ops_values[i].name, NULL, 1, 1, RRDDIM_INCREMENTAL);
web/index.html
+7 -1
@@ -1593,7 +1593,13 @@ var menuData = {
1593 },
1594
1595 'nfsd': {
1596 - title: 'File Server (nfsd)',
1596 + title: 'NFS Server',
1597 + icon: '<i class="fa fa-folder-open" aria-hidden="true"></i>',
1598 + info: undefined
1599 + },
1600 +
1601 + 'nfs': {
1602 + title: 'NFS Client',
1603 icon: '<i class="fa fa-folder-open" aria-hidden="true"></i>',
1604 info: undefined
1605 },