diff --git a/doc/Extensions/Applications.md b/doc/Extensions/Applications.md index dfa119a9c8db..f71bcb943766 100644 --- a/doc/Extensions/Applications.md +++ b/doc/Extensions/Applications.md @@ -18,6 +18,7 @@ Different applications support a variety of ways collect data: by direct connect 1. [Munin](#munin) - Agent 1. [MySQL](#mysql) - SNMP extend, Agent 1. [NGINX](#nginx) - Agent +1. [NFS-server](#nfs-server) - SNMP extend 1. [NTP Client](#ntp-client) - SNMP extend 1. [NTP Server](#ntp-server) - SNMP extend 1. [Nvidia GPU](#nvidia-gpu) - SNMP extend @@ -36,7 +37,6 @@ Different applications support a variety of ways collect data: by direct connect 1. [UPS-nut](#ups-nut) - SNMP extend 1. [UPS-apcups](#ups-apcups) - SNMP extend - ### Apache Either use SNMP extend or use the agent. ##### SNMP Extend @@ -333,6 +333,17 @@ extend nginx /etc/snmp/nginx-stats ##### Agent [Install the agent](Agent-Setup.md) on this device if it isn't already and copy the `nginx` script to `/usr/lib/check_mk_agent/local/` +##### NFS-server +Export the NFS stats from as server. + +##### SNMP Extend +1. Edit your snmpd.conf file (usually /etc/snmp/snmpd.conf) and add : +``` +extend nfs-server /bin/cat /proc/net/rpc/nfsd +``` +note : find out where cat is located using : `which cat` + +2. reload snmpd service to activate the configuration ### NTP Client A shell script that gets stats from ntp client. diff --git a/html/includes/functions.inc.php b/html/includes/functions.inc.php index 4cf133d48b52..0a30592a06ad 100644 --- a/html/includes/functions.inc.php +++ b/html/includes/functions.inc.php @@ -72,6 +72,9 @@ function nicecase($item) case 'nfs-v3-stats': return 'NFS v3 Stats'; + + case 'nfs-server': + return 'NFS Server'; case 'ntp': return 'NTP'; diff --git a/html/includes/graphs/application/nfs-server_fh.inc.php b/html/includes/graphs/application/nfs-server_fh.inc.php new file mode 100644 index 000000000000..5c256fafc106 --- /dev/null +++ b/html/includes/graphs/application/nfs-server_fh.inc.php @@ -0,0 +1,52 @@ + +*/ + +require 'includes/graphs/common.inc.php'; +$scale_min = 0; +$colours = 'mixed'; +$unit_text = 'File Handle Stats'; +$unitlen = 15; +$bigdescrlen = 15; +$smalldescrlen = 15; +$dostack = 0; +$printtotal = 0; +$addarea = 1; +$transparency = 33; + +$rrd_filename = rrd_name($device['hostname'], array('app', 'nfs-server-default', $app['app_id'])); + +$array = array( + 'fh_lookup' => array('descr' => 'fh_lookup'), + 'fh_anon' => array('descr' => 'fh_anon'), + 'fh_ncachedir' => array('descr' => 'fh_ncachedir'), + 'fh_ncachenondir' => array('descr' => 'fh_ncachenondir'), + 'fh_stale' => array('descr' => 'fh_stale'), // only var that should show something +); + +$i = 0; + +if (rrdtool_check_rrd_exists($rrd_filename)) { + foreach ($array as $ds => $var) { + $rrd_list[$i]['filename'] = $rrd_filename; + $rrd_list[$i]['descr'] = $var['descr']; + $rrd_list[$i]['ds'] = $ds; + $rrd_list[$i]['colour'] = $config['graph_colours'][$colours][$i]; + $i++; + } +} else { + echo "file missing: $rrd_filename"; +} + +require 'includes/graphs/generic_v3_multiline.inc.php'; diff --git a/html/includes/graphs/application/nfs-server_io.inc.php b/html/includes/graphs/application/nfs-server_io.inc.php new file mode 100644 index 000000000000..4e59a9723317 --- /dev/null +++ b/html/includes/graphs/application/nfs-server_io.inc.php @@ -0,0 +1,64 @@ + +*/ + +require 'includes/graphs/common.inc.php'; +$scale_min = 0; +$colours = 'mixed'; +$unit_text = 'Operations'; +$unitlen = 10; +$bigdescrlen = 15; +$smalldescrlen = 15; +$dostack = 0; +$printtotal = 0; +$addarea = 1; +$transparency = 33; + +$rrd_filename = rrd_name($device['hostname'], array('app', 'nfs-server-default', $app['app_id'])); + +$array = array( + 'io_read' => array('descr' => 'read','colour' => '2B9220',), + 'io_write' => array('descr' => 'write','colour' => 'B0262D',), +); + +$i = 0; + +if (rrdtool_check_rrd_exists($rrd_filename)) { + foreach ($array as $ds => $var) { + $rrd_list[$i]['filename'] = $rrd_filename; + $rrd_list[$i]['descr'] = $var['descr']; + $rrd_list[$i]['ds'] = $ds; + $rrd_list[$i]['colour'] = $var['colour']; + $i++; + } +} else { + echo "file missing: $rrd_filename"; +} + +require 'includes/graphs/generic_v3_multiline.inc.php'; + + +/* +This would create a graph with reads above and write belows; +I can't find out how to adapt the legend. If you wish to swap graphs, +uncomment all the above untill +*/ + +require 'includes/graphs/common.inc.php'; +$scale_min = 0; +$colours = 'mixed'; +$unit_text = 'net stats packets'; +$unitlen = 15; +$bigdescrlen = 15; +$smalldescrlen = 15; +$dostack = 0; +$printtotal = 0; +$addarea = 1; +$transparency = 33; + +$rrd_filename = rrd_name($device['hostname'], array('app', 'nfs-server-default', $app['app_id'])); + +$array = array( + 'net_udp' => array('descr' => 'udp','colour' => 'AA3F39',), + 'net_tcp' => array('descr' => 'tcp','colour' => '2C8437',), +); + +$i = 0; + +if (rrdtool_check_rrd_exists($rrd_filename)) { + foreach ($array as $ds => $var) { + $rrd_list[$i]['filename'] = $rrd_filename; + $rrd_list[$i]['descr'] = $var['descr']; + $rrd_list[$i]['ds'] = $ds; + $rrd_list[$i]['colour'] = $var['colour']; + $i++; + } +} else { + echo "file missing: $rrd_filename"; +} + +require 'includes/graphs/generic_v3_multiline.inc.php'; diff --git a/html/includes/graphs/application/nfs-server_net_tcp_conns.inc.php b/html/includes/graphs/application/nfs-server_net_tcp_conns.inc.php new file mode 100644 index 000000000000..5a7d9ed34019 --- /dev/null +++ b/html/includes/graphs/application/nfs-server_net_tcp_conns.inc.php @@ -0,0 +1,28 @@ + +*/ + +require 'includes/graphs/common.inc.php'; + +$scale_min = 0; +$ds = 'net_tcpconn'; +$colour_area = '9DDA52'; +$colour_line = '2EAC6D'; +$colour_area_max = 'FFEE99'; +$graph_max = 10000; +$unit_text = 'net tcp connections'; + +$rrd_filename = rrd_name($device['hostname'], array('app', 'nfs-server-default', $app['app_id'])); + +require 'includes/graphs/generic_simplex.inc.php'; diff --git a/html/includes/graphs/application/nfs-server_ra.inc.php b/html/includes/graphs/application/nfs-server_ra.inc.php new file mode 100644 index 000000000000..53b979782222 --- /dev/null +++ b/html/includes/graphs/application/nfs-server_ra.inc.php @@ -0,0 +1,58 @@ + +*/ + +require 'includes/graphs/common.inc.php'; +$scale_min = 0; +$colours = 'mixed'; +$unit_text = 'cache depth'; +$unitlen = 15; +$bigdescrlen = 15; +$smalldescrlen = 15; +$dostack = 0; +$printtotal = 0; +$addarea = 1; +$transparency = 33; + +$rrd_filename = rrd_name($device['hostname'], array('app', 'nfs-server-default', $app['app_id'])); + +$array = array( + 'ra_range01' => array('descr' => '0%-10%'), + 'ra_range02' => array('descr' => '10%-20%'), + 'ra_range03' => array('descr' => '20%-30%'), + 'ra_range04' => array('descr' => '30%-40%'), + 'ra_range05' => array('descr' => '40%-50%'), + 'ra_range06' => array('descr' => '50%-60%'), + 'ra_range07' => array('descr' => '60%-70%'), + 'ra_range08' => array('descr' => '70%-80%'), + 'ra_range09' => array('descr' => '80%-90%'), + 'ra_range10' => array('descr' => '90%-100%'), + 'ra_notfound' => array('descr' => 'not found'), +); + +$i = 0; + +if (rrdtool_check_rrd_exists($rrd_filename)) { + foreach ($array as $ds => $var) { + $rrd_list[$i]['filename'] = $rrd_filename; + $rrd_list[$i]['descr'] = $var['descr']; + $rrd_list[$i]['ds'] = $ds; + $rrd_list[$i]['colour'] = $config['graph_colours'][$colours][$i]; + $i++; + } +} else { + echo "file missing: $rrd_filename"; +} + +require 'includes/graphs/generic_v3_multiline.inc.php'; diff --git a/html/includes/graphs/application/nfs-server_rc.inc.php b/html/includes/graphs/application/nfs-server_rc.inc.php new file mode 100644 index 000000000000..3e2510744182 --- /dev/null +++ b/html/includes/graphs/application/nfs-server_rc.inc.php @@ -0,0 +1,49 @@ + +*/ + +require 'includes/graphs/common.inc.php'; +$scale_min = 0; +$unit_text = 'Reply cache'; +$unitlen = 15; +$bigdescrlen = 15; +$smalldescrlen = 15; +$dostack = 0; +$printtotal = 0; +$addarea = 1; +$transparency = 33; + +$rrd_filename = rrd_name($device['hostname'], array('app', 'nfs-server-default', $app['app_id'])); + +$array = array( + 'rc_hits' => array('descr' => 'hits','colour' => 'B0262D'), // this is bad : retransmitting (red) + 'rc_misses' => array('descr' => 'misses','colour' => 'B36326'), // requires caching + 'rc_nocache' => array('descr' => 'nocache','colour' => '2B9220'), // no caching needed +); + +$i = 0; + +if (rrdtool_check_rrd_exists($rrd_filename)) { + foreach ($array as $ds => $var) { + $rrd_list[$i]['filename'] = $rrd_filename; + $rrd_list[$i]['descr'] = $var['descr']; + $rrd_list[$i]['ds'] = $ds; + $rrd_list[$i]['colour'] = $var['colour']; + $i++; + } +} else { + echo "file missing: $rrd_filename"; +} + +require 'includes/graphs/generic_v3_multiline.inc.php'; diff --git a/html/includes/graphs/application/nfs-server_rpc.inc.php b/html/includes/graphs/application/nfs-server_rpc.inc.php new file mode 100644 index 000000000000..2aba5fbe1ba6 --- /dev/null +++ b/html/includes/graphs/application/nfs-server_rpc.inc.php @@ -0,0 +1,52 @@ + +*/ + +require 'includes/graphs/common.inc.php'; +$scale_min = 0; +$colours = 'mixed'; +$unit_text = 'RPC Stats'; +$unitlen = 15; +$bigdescrlen = 15; +$smalldescrlen = 15; +$dostack = 0; +$printtotal = 0; +$addarea = 1; +$transparency = 33; + +$rrd_filename = rrd_name($device['hostname'], array('app', 'nfs-server-default', $app['app_id'])); + +$array = array( + 'rpc_calls' => array('descr' => 'calls','colour' => '2C8437',), // green : good + //'rpc_badcalls' => array('descr' => 'bad calls','colour' => '600604',), # this is a sum of nbadfmt, badauth and badclnt + 'rpc_badfmt' => array('descr' => 'bad fmt','colour' => 'E6A4A5',), // pink + 'rpc_badauth' => array('descr' => 'bad auth','colour' => 'B2C8D9',), // blue + 'rpc_badclnt' => array('descr' => 'bad clnt','colour' => 'BEA37A',), // brown +); + +$i = 0; + +if (rrdtool_check_rrd_exists($rrd_filename)) { + foreach ($array as $ds => $var) { + $rrd_list[$i]['filename'] = $rrd_filename; + $rrd_list[$i]['descr'] = $var['descr']; + $rrd_list[$i]['ds'] = $ds; + $rrd_list[$i]['colour'] = $var['colour']; + $i++; + } +} else { + echo "file missing: $rrd_filename"; +} + +require 'includes/graphs/generic_v3_multiline.inc.php'; diff --git a/html/includes/graphs/application/nfs-server_stats.inc.php b/html/includes/graphs/application/nfs-server_stats.inc.php new file mode 100644 index 000000000000..6e3a6d9efdbd --- /dev/null +++ b/html/includes/graphs/application/nfs-server_stats.inc.php @@ -0,0 +1,69 @@ + +*/ + +require 'includes/graphs/common.inc.php'; +$scale_min = 0; +$colours = 'mixed'; +$unit_text = 'NFS v3 Operations'; +$unitlen = 10; +$bigdescrlen = 15; +$smalldescrlen = 15; +$dostack = 0; +$printtotal = 0; +$addarea = 1; +$transparency = 33; + +$rrd_filename = rrd_name($device['hostname'], array('app', 'nfs-server-proc3', $app['app_id'])); + +$array = array( + 'proc3_null' => array('descr' => 'Null'), + 'proc3_getattr' => array('descr' => 'Get attributes'), + 'proc3_setattr' => array('descr' => 'Set attributes'), + 'proc3_lookup' => array('descr' => 'Lookup'), + 'proc3_access' => array('descr' => 'Access'), + 'proc3_read' => array('descr' => 'Read'), + 'proc3_write' => array('descr' => 'Write'), + 'proc3_create' => array('descr' => 'Create'), + 'proc3_mkdir' => array('descr' => 'Make dir'), + 'proc3_mknod' => array('descr' => 'Make nod'), + 'proc3_link' => array('descr' => 'Link'), + 'proc3_remove' => array('descr' => 'Remove'), + 'proc3_rmdir' => array('descr' => 'Remove dir'), + 'proc3_rename' => array('descr' => 'Rename'), + 'proc3_readlink' => array('descr' => 'Read link'), + 'proc3_readdir' => array('descr' => 'Read dir'), + 'proc3_symlink' => array('descr' => 'Symlink'), + 'proc3_readdirplus' => array('descr' => 'Read dir plus'), + 'proc3_fsstat' => array('descr' => 'FS stat'), + 'proc3_fsinfo' => array('descr' => 'FS info'), + 'proc3_pathconf' => array('descr' => 'Pathconf'), + 'proc3_commit' => array('descr' => 'Commit'), + ); + +$i = 0; + +if (rrdtool_check_rrd_exists($rrd_filename)) { + foreach ($array as $ds => $var) { + $rrd_list[$i]['filename'] = $rrd_filename; + $rrd_list[$i]['descr'] = $var['descr']; + $rrd_list[$i]['ds'] = $ds; + $rrd_list[$i]['colour'] = $config['graph_colours'][$colours][$i]; + $i++; + } +} else { + echo "file missing: $rrd_filename"; +} + +require 'includes/graphs/generic_v3_multiline.inc.php'; diff --git a/html/includes/graphs/application/nfs-server_stats_v2.inc.php b/html/includes/graphs/application/nfs-server_stats_v2.inc.php new file mode 100644 index 000000000000..dbf4d45a97ca --- /dev/null +++ b/html/includes/graphs/application/nfs-server_stats_v2.inc.php @@ -0,0 +1,65 @@ + +*/ + +require 'includes/graphs/common.inc.php'; +$scale_min = 0; +$colours = 'mixed'; +$unit_text = 'NFS v2 Operations'; +$unitlen = 10; +$bigdescrlen = 15; +$smalldescrlen = 15; +$dostack = 0; +$printtotal = 0; +$addarea = 1; +$transparency = 33; + +$rrd_filename = rrd_name($device['hostname'], array('app', 'nfs-server-proc2', $app['app_id'])); + +$array = array( + 'proc2_null' => array('descr' => 'Null'), + 'proc2_getattr' => array('descr' => 'Get attributes'), + 'proc2_setattr' => array('descr' => 'Set attributes'), + 'proc2_root' => array('descr' => 'Root'), + 'proc2_lookup' => array('descr' => 'Lookup'), + 'proc2_readlink' => array('descr' => 'ReadLink'), + 'proc2_read' => array('descr' => 'Read'), + 'proc2_wrcache' => array('descr' => 'Wrcache'), + 'proc2_write' => array('descr' => 'Write'), + 'proc2_create' => array('descr' => 'Create'), + 'proc2_remove' => array('descr' => 'Remove'), + 'proc2_rename' => array('descr' => 'Rename'), + 'proc2_link' => array('descr' => 'Link'), + 'proc2_symlink' => array('descr' => 'Symlink'), + 'proc2_mkdir' => array('descr' => 'Mkdir'), + 'proc2_rmdir' => array('descr' => 'Rmdir'), + 'proc2_readdir' => array('descr' => 'Readdir'), + 'proc2_fsstat' => array('descr' => 'fsstat') + ); + +$i = 0; + +if (rrdtool_check_rrd_exists($rrd_filename)) { + foreach ($array as $ds => $var) { + $rrd_list[$i]['filename'] = $rrd_filename; + $rrd_list[$i]['descr'] = $var['descr']; + $rrd_list[$i]['ds'] = $ds; + $rrd_list[$i]['colour'] = $config['graph_colours']['default'][$i]; + $i++; + } +} else { + echo "file missing: $rrd_filename"; +} + +require 'includes/graphs/generic_v3_multiline.inc.php'; diff --git a/html/includes/graphs/application/nfs-server_stats_v4.inc.php b/html/includes/graphs/application/nfs-server_stats_v4.inc.php new file mode 100644 index 000000000000..1daa03d8288e --- /dev/null +++ b/html/includes/graphs/application/nfs-server_stats_v4.inc.php @@ -0,0 +1,49 @@ + +*/ + +require 'includes/graphs/common.inc.php'; +$scale_min = 0; +$colours = 'mixed'; +$unit_text = 'NFS v4 Stats'; +$unitlen = 10; +$bigdescrlen = 15; +$smalldescrlen = 15; +$dostack = 0; +$printtotal = 0; +$addarea = 1; +$transparency = 33; + +$rrd_filename = rrd_name($device['hostname'], array('app', 'nfs-server-proc4', $app['app_id'])); + +$array = array( + 'proc4_null' => array('descr' => 'Null','colour' => '630606'), // these should be very low + 'proc4_compound' => array('descr' => 'Compound','colour' => '50C150') // basically this are 1 or more ops + ); + +$i = 0; + +if (rrdtool_check_rrd_exists($rrd_filename)) { + foreach ($array as $ds => $var) { + $rrd_list[$i]['filename'] = $rrd_filename; + $rrd_list[$i]['descr'] = $var['descr']; + $rrd_list[$i]['ds'] = $ds; + $rrd_list[$i]['colour'] = $var['colour']; + $i++; + } +} else { + echo "file missing: $rrd_filename"; +} + +require 'includes/graphs/generic_v3_multiline.inc.php'; diff --git a/html/includes/graphs/application/nfs-server_v4ops.inc.php b/html/includes/graphs/application/nfs-server_v4ops.inc.php new file mode 100644 index 000000000000..658fffc55247 --- /dev/null +++ b/html/includes/graphs/application/nfs-server_v4ops.inc.php @@ -0,0 +1,106 @@ + +*/ + +require 'includes/graphs/common.inc.php'; +$scale_min = 0; +$colours = 'mixed'; +$unit_text = 'NFS v4 Operations'; +$unitlen = 10; +$bigdescrlen = 15; +$smalldescrlen = 15; +$dostack = 0; +$printtotal = 0; +$addarea = 1; +$transparency = 33; + +$rrd_filename = rrd_name($device['hostname'], array('app', 'nfs-server-proc4ops', $app['app_id'])); + +$array = array( + // 'v4_op0-unused' => array('descr' => 'v4_op0-unused'), + // 'v4_op1-unused' => array('descr' => 'v4_op1-unused'), + // 'v4_op2-future' => array('descr' => 'v4_op2-future'), + 'v4_access' => array('descr' => 'v4_access'), + 'v4_close' => array('descr' => 'v4_close'), + 'v4_commit' => array('descr' => 'v4_commit'), + 'v4_create' => array('descr' => 'v4_create'), + 'v4_delegpurge' => array('descr' => 'v4_delegpurge'), + 'v4_delegreturn' => array('descr' => 'v4_delegreturn'), + 'v4_getattr' => array('descr' => 'v4_getattr'), + 'v4_getfh' => array('descr' => 'v4_getfh'), + 'v4_link' => array('descr' => 'v4_link'), + 'v4_lock' => array('descr' => 'v4_lock'), + 'v4_lockt' => array('descr' => 'v4_lockt'), + 'v4_locku' => array('descr' => 'v4_locku'), + 'v4_lookup' => array('descr' => 'v4_lookup'), + 'v4_lookup_root' => array('descr' => 'v4_lookup_root'), + 'v4_nverify' => array('descr' => 'v4_nverify'), + 'v4_open' => array('descr' => 'v4_open'), + 'v4_openattr' => array('descr' => 'v4_openattr'), + 'v4_open_conf' => array('descr' => 'v4_open_conf'), + 'v4_open_dgrd' => array('descr' => 'v4_open_dgrd'), + 'v4_putfh' => array('descr' => 'v4_putfh'), + 'v4_putpubfh' => array('descr' => 'v4_putpubfh'), + 'v4_putrootfh' => array('descr' => 'v4_putrootfh'), + 'v4_read' => array('descr' => 'v4_read'), + 'v4_readdir' => array('descr' => 'v4_readdir'), + 'v4_readlink' => array('descr' => 'v4_readlink'), + 'v4_remove' => array('descr' => 'v4_remove'), + 'v4_rename' => array('descr' => 'v4_rename'), + 'v4_renew' => array('descr' => 'v4_renew'), + 'v4_restorefh' => array('descr' => 'v4_restorefh'), + 'v4_savefh' => array('descr' => 'v4_savefh'), + 'v4_secinfo' => array('descr' => 'v4_secinfo'), + 'v4_setattr' => array('descr' => 'v4_setattr'), + 'v4_setcltid' => array('descr' => 'v4_setcltid'), + 'v4_setcltidconf' => array('descr' => 'v4_setcltidconf'), + 'v4_verify' => array('descr' => 'v4_verify'), + 'v4_write' => array('descr' => 'v4_write'), + 'v4_rellockowner' => array('descr' => 'v4_rellockowner'), + 'v4_bc_ctl' => array('descr' => 'v4_bc_ctl'), + 'v4_bind_conn' => array('descr' => 'v4_bind_conn'), + 'v4_exchange_id' => array('descr' => 'v4_exchange_id'), + 'v4_create_ses' => array('descr' => 'v4_create_ses'), + 'v4_destroy_ses' => array('descr' => 'v4_destroy_ses'), + 'v4_free_stateid' => array('descr' => 'v4_free_stateid'), + 'v4_getdirdeleg' => array('descr' => 'v4_getdirdeleg'), + 'v4_getdevinfo' => array('descr' => 'v4_getdevinfo'), + 'v4_getdevlist' => array('descr' => 'v4_getdevlist'), + 'v4_layoutcommit' => array('descr' => 'v4_layoutcommit'), + 'v4_layoutget' => array('descr' => 'v4_layoutget'), + 'v4_layoutreturn' => array('descr' => 'v4_layoutreturn'), + 'v4_secinfononam' => array('descr' => 'v4_secinfononam'), + 'v4_sequence' => array('descr' => 'v4_sequence'), + 'v4_set_ssv' => array('descr' => 'v4_set_ssv'), + 'v4_test_stateid' => array('descr' => 'v4_test_stateid'), + 'v4_want_deleg' => array('descr' => 'v4_want_deleg'), + 'v4_destroy_clid' => array('descr' => 'v4_destroy_clid'), + 'v4_reclaim_comp' => array('descr' => 'v4_reclaim_comp'), + ); + +$i = 0; + +if (rrdtool_check_rrd_exists($rrd_filename)) { + foreach ($array as $ds => $var) { + $rrd_list[$i]['filename'] = $rrd_filename; + $rrd_list[$i]['descr'] = $var['descr']; + $rrd_list[$i]['ds'] = $ds; + $rrd_list[$i]['colour'] = $config['graph_colours']['manycolours'][$i]; + $i++; + } +} else { + echo "file missing: $rrd_filename"; +} + +require 'includes/graphs/generic_v3_multiline.inc.php'; diff --git a/html/pages/apps.inc.php b/html/pages/apps.inc.php index b08754cde904..ba2a0a0250aa 100644 --- a/html/pages/apps.inc.php +++ b/html/pages/apps.inc.php @@ -109,6 +109,20 @@ 'rpc', ); +$graphs['nfs-server'] = array( + 'stats_v2', + 'stats', + 'stats_v4', + 'v4ops', + 'io', + 'fh', + 'rc', + 'ra', + 'net', + 'net_tcp_conns', + 'rpc', +); + $graphs['os-updates'] = array( 'packages', ); diff --git a/html/pages/device/apps/nfs-server.inc.php b/html/pages/device/apps/nfs-server.inc.php new file mode 100644 index 000000000000..bfc1a1dc1ebc --- /dev/null +++ b/html/pages/device/apps/nfs-server.inc.php @@ -0,0 +1,106 @@ + +*/ +global $config; + +print_optionbar_start(); + +echo "".nicecase($app['app_type']).' » '; + +$app_sections = array( + 'default' => 'NFS', + 'proc2' => 'NFS v2', + 'proc3' => 'NFS v3', + 'proc4' => 'NFS v4', +); + +unset($sep); + +foreach ($app_sections as $app_section => $app_section_text) { + // remove entries that have no rrd associated + // commonly proc2 will be invisible + $var_rrd = rrd_name($device['hostname'], 'app-nfs-server-'. $app_section . '-'. $app['app_id']); + if (!rrdtool_check_rrd_exists($var_rrd)) { + continue; + } + + echo $sep; + + if (!$vars['app_section']) { + $vars['app_section'] = $app_section; + } + + if ($vars['app_section'] == $app_section) { + echo " '; + } + + $sep = ' | '; +} + +print_optionbar_end(); + +unset($graphs); + +// stat => array(text, rrd) +$graphs['default'] = array( + 'nfs-server_net' => array('Network stats', 'default'), + 'nfs-server_rpc' => array('RPC Stats', 'default'), + 'nfs-server_io' => array('IO', 'default'), + 'nfs-server_fh' => array('File handler', 'default') , + 'nfs-server_rc' => array('Reply cache', 'default'), + 'nfs-server_ra' => array('Read ahead cache', 'default') +); + +$graphs['proc2'] = array( + 'nfs-server_stats_v2' => array('NFS v2 Statistics', 'proc2') +); + +$graphs['proc3'] = array( + 'nfs-server_stats' => array('NFS v3 Statistics', 'proc3') +); + +$graphs['proc4'] = array( + 'nfs-server_stats_v4' => array('NFS v4 Statistics', 'proc4'), + 'nfs-server_v4ops' => array('NFS v4ops Statistics', 'proc4ops') +); + +foreach ($graphs[$vars['app_section']] as $key => $info) { + // check if they exist + if (!rrdtool_check_rrd_exists(rrd_name($device['hostname'], 'app-nfs-server-'. $info[1] . '-'. $app['app_id']))) { + continue; + } + + $graph_type = $key; + $graph_array['height'] = '100'; + $graph_array['width'] = '215'; + $graph_array['to'] = $config['time']['now']; + $graph_array['id'] = $app['app_id']; + $graph_array['type'] = 'application_'.$key; + + echo '