From d143559b84a32a3c97cafbe9b304cb02b5f77408 Mon Sep 17 00:00:00 2001 From: "Costa Tsaousis (ktsaou)" Date: Fri, 16 Sep 2016 23:49:31 +0300 Subject: [PATCH] properly supported nfsv4; added plugin to collect nfs client statistics; fixes #959 --- src/Makefile.am | 1 + src/plugin_proc.c | 10 ++ src/plugin_proc.h | 1 + src/proc_net_rpc_nfsd.c | 248 +++++++++++++++++++++++++++------------- web/index.html | 8 +- 5 files changed, 187 insertions(+), 81 deletions(-) diff --git a/src/Makefile.am b/src/Makefile.am index 0ecd5533..86b9a9fe 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -52,6 +52,7 @@ netdata_SOURCES = \ proc_net_dev.c \ proc_net_ip_vs_stats.c \ proc_net_netstat.c \ + proc_net_rpc_nfs.c \ proc_net_rpc_nfsd.c \ proc_net_snmp.c \ proc_net_snmp6.c \ diff --git a/src/plugin_proc.c b/src/plugin_proc.c index badbd327..3c57b66b 100644 --- a/src/plugin_proc.c +++ b/src/plugin_proc.c @@ -28,6 +28,7 @@ void *proc_main(void *ptr) int vdo_proc_stat = !config_get_boolean("plugin:proc", "/proc/stat", 1); int vdo_proc_meminfo = !config_get_boolean("plugin:proc", "/proc/meminfo", 1); int vdo_proc_vmstat = !config_get_boolean("plugin:proc", "/proc/vmstat", 1); + int vdo_proc_net_rpc_nfs = !config_get_boolean("plugin:proc", "/proc/net/rpc/nfs", 1); int vdo_proc_net_rpc_nfsd = !config_get_boolean("plugin:proc", "/proc/net/rpc/nfsd", 1); int vdo_proc_sys_kernel_random_entropy_avail = !config_get_boolean("plugin:proc", "/proc/sys/kernel/random/entropy_avail", 1); int vdo_proc_interrupts = !config_get_boolean("plugin:proc", "/proc/interrupts", 1); @@ -49,6 +50,7 @@ void *proc_main(void *ptr) unsigned long long sutime_proc_stat = 0ULL; unsigned long long sutime_proc_meminfo = 0ULL; unsigned long long sutime_proc_vmstat = 0ULL; + unsigned long long sutime_proc_net_rpc_nfs = 0ULL; unsigned long long sutime_proc_net_rpc_nfsd = 0ULL; unsigned long long sutime_proc_sys_kernel_random_entropy_avail = 0ULL; unsigned long long sutime_proc_interrupts = 0ULL; @@ -221,6 +223,14 @@ void *proc_main(void *ptr) } if(unlikely(netdata_exit)) break; + if(!vdo_proc_net_rpc_nfs) { + debug(D_PROCNETDEV_LOOP, "PROCNETDEV: calling do_proc_net_rpc_nfs()."); + sunow = time_usec(); + 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); + sutime_proc_net_rpc_nfs = sunow; + } + if(unlikely(netdata_exit)) break; + // END -- the job is done // -------------------------------------------------------------------- diff --git a/src/plugin_proc.h b/src/plugin_proc.h index 565cd0a2..f72a9970 100644 --- a/src/plugin_proc.h +++ b/src/plugin_proc.h @@ -13,6 +13,7 @@ extern int do_proc_net_ip_vs_stats(int update_every, unsigned long long dt); extern int do_proc_stat(int update_every, unsigned long long dt); extern int do_proc_meminfo(int update_every, unsigned long long dt); extern int do_proc_vmstat(int update_every, unsigned long long dt); +extern int do_proc_net_rpc_nfs(int update_every, unsigned long long dt); extern int do_proc_net_rpc_nfsd(int update_every, unsigned long long dt); extern int do_proc_sys_kernel_random_entropy_avail(int update_every, unsigned long long dt); extern int do_proc_interrupts(int update_every, unsigned long long dt); diff --git a/src/proc_net_rpc_nfsd.c b/src/proc_net_rpc_nfsd.c index 0323b4df..817e6c86 100644 --- a/src/proc_net_rpc_nfsd.c +++ b/src/proc_net_rpc_nfsd.c @@ -2,47 +2,135 @@ struct nfsd_procs { char name[30]; - unsigned long long proc2; - unsigned long long proc3; - unsigned long long proc4; - int present2; - int present3; - int present4; + unsigned long long value; + int present; }; -struct nfsd_procs nfsd_proc_values[] = { - { "null", 0ULL, 0ULL, 0ULL, 0, 0, 0 }, - { "getattr", 0ULL, 0ULL, 0ULL, 0, 0, 0 }, - { "setattr", 0ULL, 0ULL, 0ULL, 0, 0, 0 }, - { "lookup", 0ULL, 0ULL, 0ULL, 0, 0, 0 }, - { "access", 0ULL, 0ULL, 0ULL, 0, 0, 0 }, - { "readlink", 0ULL, 0ULL, 0ULL, 0, 0, 0 }, - { "read", 0ULL, 0ULL, 0ULL, 0, 0, 0 }, - { "write", 0ULL, 0ULL, 0ULL, 0, 0, 0 }, - { "create", 0ULL, 0ULL, 0ULL, 0, 0, 0 }, - { "mkdir", 0ULL, 0ULL, 0ULL, 0, 0, 0 }, - { "symlink", 0ULL, 0ULL, 0ULL, 0, 0, 0 }, - { "mknod", 0ULL, 0ULL, 0ULL, 0, 0, 0 }, - { "remove", 0ULL, 0ULL, 0ULL, 0, 0, 0 }, - { "rmdir", 0ULL, 0ULL, 0ULL, 0, 0, 0 }, - { "rename", 0ULL, 0ULL, 0ULL, 0, 0, 0 }, - { "link", 0ULL, 0ULL, 0ULL, 0, 0, 0 }, - { "readdir", 0ULL, 0ULL, 0ULL, 0, 0, 0 }, - { "readdirplus", 0ULL, 0ULL, 0ULL, 0, 0, 0 }, - { "fsstat", 0ULL, 0ULL, 0ULL, 0, 0, 0 }, - { "fsinfo", 0ULL, 0ULL, 0ULL, 0, 0, 0 }, - { "pathconf", 0ULL, 0ULL, 0ULL, 0, 0, 0 }, - { "commit", 0ULL, 0ULL, 0ULL, 0, 0, 0 }, - { "", 0ULL, 0ULL, 0ULL, 0, 0, 0 }, +struct nfsd_procs nfsd_proc2_values[] = { + { "null", 0ULL, 0 }, + { "getattr", 0ULL, 0 }, + { "setattr", 0ULL, 0 }, + { "root", 0ULL, 0 }, + { "lookup", 0ULL, 0 }, + { "readlink", 0ULL, 0 }, + { "read", 0ULL, 0 }, + { "wrcache", 0ULL, 0 }, + { "write", 0ULL, 0 }, + { "create", 0ULL, 0 }, + { "remove", 0ULL, 0 }, + { "rename", 0ULL, 0 }, + { "link", 0ULL, 0 }, + { "symlink", 0ULL, 0 }, + { "mkdir", 0ULL, 0 }, + { "rmdir", 0ULL, 0 }, + { "readdir", 0ULL, 0 }, + { "fsstat", 0ULL, 0 }, + + /* termination */ + { "", 0ULL, 0 } }; -struct nfsd4_ops { - char name[30]; - unsigned long long value; - int present; +struct nfsd_procs nfsd_proc3_values[] = { + { "null", 0ULL, 0 }, + { "getattr", 0ULL, 0 }, + { "setattr", 0ULL, 0 }, + { "lookup", 0ULL, 0 }, + { "access", 0ULL, 0 }, + { "readlink", 0ULL, 0 }, + { "read", 0ULL, 0 }, + { "write", 0ULL, 0 }, + { "create", 0ULL, 0 }, + { "mkdir", 0ULL, 0 }, + { "symlink", 0ULL, 0 }, + { "mknod", 0ULL, 0 }, + { "remove", 0ULL, 0 }, + { "rmdir", 0ULL, 0 }, + { "rename", 0ULL, 0 }, + { "link", 0ULL, 0 }, + { "readdir", 0ULL, 0 }, + { "readdirplus", 0ULL, 0 }, + { "fsstat", 0ULL, 0 }, + { "fsinfo", 0ULL, 0 }, + { "pathconf", 0ULL, 0 }, + { "commit", 0ULL, 0 }, + + /* termination */ + { "", 0ULL, 0 } +}; + +struct nfsd_procs nfsd_proc4_values[] = { + { "null", 0ULL, 0 }, + { "read", 0ULL, 0 }, + { "write", 0ULL, 0 }, + { "commit", 0ULL, 0 }, + { "open", 0ULL, 0 }, + { "open_conf", 0ULL, 0 }, + { "open_noat", 0ULL, 0 }, + { "open_dgrd", 0ULL, 0 }, + { "close", 0ULL, 0 }, + { "setattr", 0ULL, 0 }, + { "fsinfo", 0ULL, 0 }, + { "renew", 0ULL, 0 }, + { "setclntid", 0ULL, 0 }, + { "confirm", 0ULL, 0 }, + { "lock", 0ULL, 0 }, + { "lockt", 0ULL, 0 }, + { "locku", 0ULL, 0 }, + { "access", 0ULL, 0 }, + { "getattr", 0ULL, 0 }, + { "lookup", 0ULL, 0 }, + { "lookup_root", 0ULL, 0 }, + { "remove", 0ULL, 0 }, + { "rename", 0ULL, 0 }, + { "link", 0ULL, 0 }, + { "symlink", 0ULL, 0 }, + { "create", 0ULL, 0 }, + { "pathconf", 0ULL, 0 }, + { "statfs", 0ULL, 0 }, + { "readlink", 0ULL, 0 }, + { "readdir", 0ULL, 0 }, + { "server_caps", 0ULL, 0 }, + { "delegreturn", 0ULL, 0 }, + { "getacl", 0ULL, 0 }, + { "setacl", 0ULL, 0 }, + { "fs_locations", 0ULL, 0 }, + { "rel_lkowner", 0ULL, 0 }, + { "secinfo", 0ULL, 0 }, + { "fsid_present", 0ULL, 0 }, + + /* nfsv4.1 client ops */ + { "exchange_id", 0ULL, 0 }, + { "create_session", 0ULL, 0 }, + { "destroy_session", 0ULL, 0 }, + { "sequence", 0ULL, 0 }, + { "get_lease_time", 0ULL, 0 }, + { "reclaim_comp", 0ULL, 0 }, + { "layoutget", 0ULL, 0 }, + { "getdevinfo", 0ULL, 0 }, + { "layoutcommit", 0ULL, 0 }, + { "layoutreturn", 0ULL, 0 }, + { "secinfo_no", 0ULL, 0 }, + { "test_stateid", 0ULL, 0 }, + { "free_stateid", 0ULL, 0 }, + { "getdevicelist", 0ULL, 0 }, + { "bind_conn_to_ses", 0ULL, 0 }, + { "destroy_clientid", 0ULL, 0 }, + + /* nfsv4.2 client ops */ + { "seek", 0ULL, 0 }, + { "allocate", 0ULL, 0 }, + { "deallocate", 0ULL, 0 }, + { "layoutstats", 0ULL, 0 }, + { "clone", 0ULL, 0 }, + + /* termination */ + { "", 0ULL, 0 } }; -struct nfsd4_ops nfsd4_ops_values[] = { +struct nfsd_procs nfsd4_ops_values[] = { + { "unused_op0", 0ULL, 0}, + { "unused_op1", 0ULL, 0}, + { "future_op2", 0ULL, 0}, { "access", 0ULL, 0}, { "close", 0ULL, 0}, { "commit", 0ULL, 0}, @@ -56,7 +144,7 @@ struct nfsd4_ops nfsd4_ops_values[] = { { "lockt", 0ULL, 0}, { "locku", 0ULL, 0}, { "lookup", 0ULL, 0}, - { "lookupp", 0ULL, 0}, + { "lookup_root", 0ULL, 0}, { "nverify", 0ULL, 0}, { "open", 0ULL, 0}, { "openattr", 0ULL, 0}, @@ -107,7 +195,7 @@ struct nfsd4_ops nfsd4_ops_values[] = { { "copy", 0ULL, 0}, { "copy_notify", 0ULL, 0}, { "deallocate", 0ULL, 0}, - { "io_advise", 0ULL, 0}, + { "ioadvise", 0ULL, 0}, { "layouterror", 0ULL, 0}, { "layoutstats", 0ULL, 0}, { "offload_cancel", 0ULL, 0}, @@ -174,13 +262,13 @@ int do_proc_net_rpc_nfsd(int update_every, unsigned long long dt) { 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; 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; unsigned long long net_count = 0, net_udp_count = 0, net_tcp_count = 0, net_tcp_connections = 0; - unsigned long long rpc_count = 0, rpc_bad_format = 0, rpc_bad_auth = 0, rpc_bad_client = 0; + unsigned long long rpc_calls = 0, rpc_bad_format = 0, rpc_bad_auth = 0, rpc_bad_client = 0; for(l = 0; l < lines ;l++) { words = procfile_linewords(ff, l); if(!words) continue; - type = procfile_lineword(ff, l, 0); + type = procfile_lineword(ff, l, 0); if(do_rc == 1 && strcmp(type, "rc") == 0) { if(words < 4) { @@ -306,12 +394,12 @@ int do_proc_net_rpc_nfsd(int update_every, unsigned long long dt) { continue; } - rpc_count = strtoull(procfile_lineword(ff, l, 1), NULL, 10); + rpc_calls = strtoull(procfile_lineword(ff, l, 1), NULL, 10); rpc_bad_format = strtoull(procfile_lineword(ff, l, 2), NULL, 10); rpc_bad_auth = strtoull(procfile_lineword(ff, l, 3), NULL, 10); rpc_bad_client = strtoull(procfile_lineword(ff, l, 4), NULL, 10); - unsigned long long sum = rpc_count + rpc_bad_format + rpc_bad_auth + rpc_bad_client; + unsigned long long sum = rpc_calls + rpc_bad_format + rpc_bad_auth + rpc_bad_client; if(sum == 0ULL) do_rpc = -1; else do_rpc = 2; } @@ -321,10 +409,10 @@ int do_proc_net_rpc_nfsd(int update_every, unsigned long long dt) { unsigned long long sum = 0; unsigned int i, j; - for(i = 0, j = 2; j < words && nfsd_proc_values[i].name[0] ; i++, j++) { - nfsd_proc_values[i].proc2 = strtoull(procfile_lineword(ff, l, j), NULL, 10); - nfsd_proc_values[i].present2 = 1; - sum += nfsd_proc_values[i].proc2; + for(i = 0, j = 2; j < words && nfsd_proc2_values[i].name[0] ; i++, j++) { + nfsd_proc2_values[i].value = strtoull(procfile_lineword(ff, l, j), NULL, 10); + nfsd_proc2_values[i].present = 1; + sum += nfsd_proc2_values[i].value; } if(sum == 0ULL) { @@ -342,10 +430,10 @@ int do_proc_net_rpc_nfsd(int update_every, unsigned long long dt) { unsigned long long sum = 0; unsigned int i, j; - for(i = 0, j = 2; j < words && nfsd_proc_values[i].name[0] ; i++, j++) { - nfsd_proc_values[i].proc3 = strtoull(procfile_lineword(ff, l, j), NULL, 10); - nfsd_proc_values[i].present3 = 1; - sum += nfsd_proc_values[i].proc3; + for(i = 0, j = 2; j < words && nfsd_proc3_values[i].name[0] ; i++, j++) { + nfsd_proc3_values[i].value = strtoull(procfile_lineword(ff, l, j), NULL, 10); + nfsd_proc3_values[i].present = 1; + sum += nfsd_proc3_values[i].value; } if(sum == 0ULL) { @@ -363,10 +451,10 @@ int do_proc_net_rpc_nfsd(int update_every, unsigned long long dt) { unsigned long long sum = 0; unsigned int i, j; - for(i = 0, j = 2; j < words && nfsd_proc_values[i].name[0] ; i++, j++) { - nfsd_proc_values[i].proc4 = strtoull(procfile_lineword(ff, l, j), NULL, 10); - nfsd_proc_values[i].present4 = 1; - sum += nfsd_proc_values[i].proc4; + for(i = 0, j = 2; j < words && nfsd_proc4_values[i].name[0] ; i++, j++) { + nfsd_proc4_values[i].value = strtoull(procfile_lineword(ff, l, j), NULL, 10); + nfsd_proc4_values[i].present = 1; + sum += nfsd_proc4_values[i].value; } if(sum == 0ULL) { @@ -408,7 +496,7 @@ int do_proc_net_rpc_nfsd(int update_every, unsigned long long dt) { if(do_rc == 2) { st = rrdset_find_bytype("nfsd", "readcache"); if(!st) { - st = rrdset_create("nfsd", "readcache", NULL, "nfsd", NULL, "Read Cache", "reads/s", 5000, update_every, RRDSET_TYPE_STACKED); + st = rrdset_create("nfsd", "readcache", NULL, "cache", NULL, "NFS Server Read Cache", "reads/s", 5000, update_every, RRDSET_TYPE_STACKED); rrddim_add(st, "hits", NULL, 1, 1, RRDDIM_INCREMENTAL); 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) { if(do_fh == 2) { st = rrdset_find_bytype("nfsd", "filehandles"); if(!st) { - st = rrdset_create("nfsd", "filehandles", NULL, "nfsd", NULL, "File Handles", "handles/s", 5001, update_every, RRDSET_TYPE_LINE); + st = rrdset_create("nfsd", "filehandles", NULL, "filehandles", NULL, "NFS Server File Handles", "handles/s", 5001, update_every, RRDSET_TYPE_LINE); st->isdetail = 1; 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) { if(do_io == 2) { st = rrdset_find_bytype("nfsd", "io"); if(!st) { - st = rrdset_create("nfsd", "io", NULL, "nfsd", NULL, "I/O", "kilobytes/s", 5002, update_every, RRDSET_TYPE_AREA); + st = rrdset_create("nfsd", "io", NULL, "io", NULL, "NFS Server I/O", "kilobytes/s", 5002, update_every, RRDSET_TYPE_AREA); rrddim_add(st, "read", NULL, 1, 1000, RRDDIM_INCREMENTAL); 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) { if(do_th == 2) { st = rrdset_find_bytype("nfsd", "threads"); if(!st) { - st = rrdset_create("nfsd", "threads", NULL, "nfsd", NULL, "Threads", "threads", 5003, update_every, RRDSET_TYPE_LINE); + st = rrdset_create("nfsd", "threads", NULL, "threads", NULL, "NFS Server Threads", "threads", 5003, update_every, RRDSET_TYPE_LINE); rrddim_add(st, "threads", NULL, 1, 1, RRDDIM_ABSOLUTE); } @@ -479,7 +567,7 @@ int do_proc_net_rpc_nfsd(int update_every, unsigned long long dt) { st = rrdset_find_bytype("nfsd", "threads_fullcnt"); if(!st) { - st = rrdset_create("nfsd", "threads_fullcnt", NULL, "nfsd", NULL, "Threads Full Count", "ops/s", 5004, update_every, RRDSET_TYPE_LINE); + st = rrdset_create("nfsd", "threads_fullcnt", NULL, "threads", NULL, "NFS Server Threads Full Count", "ops/s", 5004, update_every, RRDSET_TYPE_LINE); rrddim_add(st, "full_count", NULL, 1, 1, RRDDIM_INCREMENTAL); } @@ -490,7 +578,7 @@ int do_proc_net_rpc_nfsd(int update_every, unsigned long long dt) { st = rrdset_find_bytype("nfsd", "threads_histogram"); if(!st) { - st = rrdset_create("nfsd", "threads_histogram", NULL, "nfsd", NULL, "Threads Usage Histogram", "percentage", 5005, update_every, RRDSET_TYPE_LINE); + st = rrdset_create("nfsd", "threads_histogram", NULL, "threads", NULL, "NFS Server Threads Usage Histogram", "percentage", 5005, update_every, RRDSET_TYPE_LINE); rrddim_add(st, "0%-10%", NULL, 1, 1000, RRDDIM_ABSOLUTE); 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) { if(do_ra == 2) { st = rrdset_find_bytype("nfsd", "readahead"); if(!st) { - st = rrdset_create("nfsd", "readahead", NULL, "nfsd", NULL, "Read Ahead Depth", "percentage", 5005, update_every, RRDSET_TYPE_STACKED); + st = rrdset_create("nfsd", "readahead", NULL, "readahead", NULL, "NFS Server Read Ahead Depth", "percentage", 5005, update_every, RRDSET_TYPE_STACKED); rrddim_add(st, "10%", NULL, 1, 1, RRDDIM_PCENT_OVER_DIFF_TOTAL); 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) { if(do_net == 2) { st = rrdset_find_bytype("nfsd", "net"); if(!st) { - st = rrdset_create("nfsd", "net", NULL, "nfsd", NULL, "Network Reads", "reads/s", 5007, update_every, RRDSET_TYPE_STACKED); + st = rrdset_create("nfsd", "net", NULL, "network", NULL, "NFS Server Network Statistics", "packets/s", 5007, update_every, RRDSET_TYPE_STACKED); st->isdetail = 1; 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) { if(do_rpc == 2) { st = rrdset_find_bytype("nfsd", "rpc"); if(!st) { - st = rrdset_create("nfsd", "rpc", NULL, "nfsd", NULL, "Remote Procedure Calls", "calls/s", 5008, update_every, RRDSET_TYPE_LINE); + st = rrdset_create("nfsd", "rpc", NULL, "rpc", NULL, "NFS Server Remote Procedure Calls Statistics", "calls/s", 5008, update_every, RRDSET_TYPE_LINE); st->isdetail = 1; - rrddim_add(st, "all", NULL, 1, 1, RRDDIM_INCREMENTAL); + rrddim_add(st, "calls", NULL, 1, 1, RRDDIM_INCREMENTAL); rrddim_add(st, "bad_format", NULL, -1, 1, RRDDIM_INCREMENTAL); rrddim_add(st, "bad_auth", NULL, -1, 1, RRDDIM_INCREMENTAL); } @@ -595,7 +683,7 @@ int do_proc_net_rpc_nfsd(int update_every, unsigned long long dt) { // ignore rpc_bad_client if(rpc_bad_client) {}; - rrddim_set(st, "all", rpc_count); + rrddim_set(st, "calls", rpc_calls); rrddim_set(st, "bad_format", rpc_bad_format); rrddim_set(st, "bad_auth", rpc_bad_auth); rrdset_done(st); @@ -607,15 +695,15 @@ int do_proc_net_rpc_nfsd(int update_every, unsigned long long dt) { unsigned int i; st = rrdset_find_bytype("nfsd", "proc2"); if(!st) { - st = rrdset_create("nfsd", "proc2", NULL, "nfsd", NULL, "NFS v2 Calls", "calls/s", 5009, update_every, RRDSET_TYPE_STACKED); + st = rrdset_create("nfsd", "proc2", NULL, "nfsv2rpc", NULL, "NFS v2 Server Remote Procedure Calls", "calls/s", 5009, update_every, RRDSET_TYPE_STACKED); - for(i = 0; nfsd_proc_values[i].present2 ; i++) - rrddim_add(st, nfsd_proc_values[i].name, NULL, 1, 1, RRDDIM_INCREMENTAL); + for(i = 0; nfsd_proc2_values[i].present ; i++) + rrddim_add(st, nfsd_proc2_values[i].name, NULL, 1, 1, RRDDIM_INCREMENTAL); } else rrdset_next(st); - for(i = 0; nfsd_proc_values[i].present2 ; i++) - rrddim_set(st, nfsd_proc_values[i].name, nfsd_proc_values[i].proc2); + for(i = 0; nfsd_proc2_values[i].present ; i++) + rrddim_set(st, nfsd_proc2_values[i].name, nfsd_proc2_values[i].value); rrdset_done(st); } @@ -626,15 +714,15 @@ int do_proc_net_rpc_nfsd(int update_every, unsigned long long dt) { unsigned int i; st = rrdset_find_bytype("nfsd", "proc3"); if(!st) { - st = rrdset_create("nfsd", "proc3", NULL, "nfsd", NULL, "NFS v3 Calls", "calls/s", 5010, update_every, RRDSET_TYPE_STACKED); + st = rrdset_create("nfsd", "proc3", NULL, "nfsv3rpc", NULL, "NFS v3 Server Remote Procedure Calls", "calls/s", 5010, update_every, RRDSET_TYPE_STACKED); - for(i = 0; nfsd_proc_values[i].present3 ; i++) - rrddim_add(st, nfsd_proc_values[i].name, NULL, 1, 1, RRDDIM_INCREMENTAL); + for(i = 0; nfsd_proc3_values[i].present ; i++) + rrddim_add(st, nfsd_proc3_values[i].name, NULL, 1, 1, RRDDIM_INCREMENTAL); } else rrdset_next(st); - for(i = 0; nfsd_proc_values[i].present3 ; i++) - rrddim_set(st, nfsd_proc_values[i].name, nfsd_proc_values[i].proc3); + for(i = 0; nfsd_proc3_values[i].present ; i++) + rrddim_set(st, nfsd_proc3_values[i].name, nfsd_proc3_values[i].value); rrdset_done(st); } @@ -645,15 +733,15 @@ int do_proc_net_rpc_nfsd(int update_every, unsigned long long dt) { unsigned int i; st = rrdset_find_bytype("nfsd", "proc4"); if(!st) { - st = rrdset_create("nfsd", "proc4", NULL, "nfsd", NULL, "NFS v4 Calls", "calls/s", 5011, update_every, RRDSET_TYPE_STACKED); + st = rrdset_create("nfsd", "proc4", NULL, "nfsv4rpc", NULL, "NFS v4 Server Remote Procedure Calls", "calls/s", 5011, update_every, RRDSET_TYPE_STACKED); - for(i = 0; nfsd_proc_values[i].present4 ; i++) - rrddim_add(st, nfsd_proc_values[i].name, NULL, 1, 1, RRDDIM_INCREMENTAL); + for(i = 0; nfsd_proc4_values[i].present ; i++) + rrddim_add(st, nfsd_proc4_values[i].name, NULL, 1, 1, RRDDIM_INCREMENTAL); } else rrdset_next(st); - for(i = 0; nfsd_proc_values[i].present4 ; i++) - rrddim_set(st, nfsd_proc_values[i].name, nfsd_proc_values[i].proc4); + for(i = 0; nfsd_proc4_values[i].present ; i++) + rrddim_set(st, nfsd_proc4_values[i].name, nfsd_proc4_values[i].value); rrdset_done(st); } @@ -664,7 +752,7 @@ int do_proc_net_rpc_nfsd(int update_every, unsigned long long dt) { unsigned int i; st = rrdset_find_bytype("nfsd", "proc4ops"); if(!st) { - st = rrdset_create("nfsd", "proc4ops", NULL, "nfsd", NULL, "NFS v4 Operations", "operations/s", 5012, update_every, RRDSET_TYPE_STACKED); + st = rrdset_create("nfsd", "proc4ops", NULL, "nfsv2ops", NULL, "NFS v4 Server Operations", "operations/s", 5012, update_every, RRDSET_TYPE_STACKED); for(i = 0; nfsd4_ops_values[i].present ; i++) rrddim_add(st, nfsd4_ops_values[i].name, NULL, 1, 1, RRDDIM_INCREMENTAL); diff --git a/web/index.html b/web/index.html index 8ed50999..83101b45 100644 --- a/web/index.html +++ b/web/index.html @@ -1593,7 +1593,13 @@ var menuData = { }, 'nfsd': { - title: 'File Server (nfsd)', + title: 'NFS Server', + icon: '', + info: undefined + }, + + 'nfs': { + title: 'NFS Client', icon: '', info: undefined }, -- 2.39.2