{"action":"created","comment":{"url":"https://api.github.com/repos/munin-monitoring/contrib/pulls/comments/93896865","pull_request_review_id":14426386,"id":93896865,"diff_hunk":"@@ -0,0 +1,516 @@\n+#!/bin/bash\n+\n+: <<=cut\n+\n+=head1 NAME \n+\n+ emc_vnx_file_stats - Plugin to monitor Basic, NFSv3 and NFSv4 statistics of EMC VNX 5300 Unified Storage system's Datamovers\n+\n+=head1 AUTHOR\n+\n+ Evgeny Beysembaev <megabotva@gmail.com>\n+\n+=head1 LICENSE\n+\n+ GPLv2\n+\n+=head1 MAGIC MARKERS\n+\n+  #%# family=auto\n+  #%# capabilities=autoconf suggest\n+\n+=head1 DESCRIPTION\n+\n+ The plugin monitors basic statistics of EMC Unified Storage system Datamovers and NFS statistics of EMC VNX5300 Unified \n+ Storage system. Probably it can also be compatible with other Isilon or Celerra systems. It uses SSH to connect to Control \n+ Stations, then remotely executes '/nas/sbin/server_stats' and fetches and parses data from it. It supports gathering \n+ data both from active/active and active/passive Datamover configurations, ignoring offline or standby Datamovers. \n+ If all Datamovers are offline or absent, the plugin returns error.\n+ This plugin also automatically chooses Primary Control Station from the list by calling '/nasmcd/sbin/getreason' and \n+ '/nasmcd/sbin/t2slot'.\n+ \n+ At the moment data is gathered from the following statistics sources:\n+  * nfs.v3.op - Tons of timings about NFSv3 RPC calls\n+  * nfs.v4.op - Tons of timings about NFSv4 RPC calls\n+  * nfs.client - Here new Client addresses are rescanned and added automatically.\n+  * basic-std Statistics Group - Basic Statistics of Datamovers (eg. CPU, Memory etc.)\n+ \n+ It's quite easy to comment out unneeded data to make graphs less overloaded or to add new statistics sources.\n+\n+=head1 COMPATIBILITY\n+\n+ The plugin has been written for being compatible with EMC VNX5300 Storage system, as this is the only EMC storage which \n+ i have.\n+ By the way, i am pretty sure it can also work with other VNX1 storages, like VNX5100 and VNX5500.\n+ About VNX2 series, i don't know whether the plugin will be able to work with them. Maybe it would need some corrections\n+ in command-line backend. The same situation is with other EMC systems, so i encourage you to try and fix the plugin. \n+\n+=head1 CONFIGURATION\n+\n+ The plugin uses SSH to connect to Control Stations. It's possible to use 'nasadmin' user, but it would be better\n+ if you create read-only global user by Unisphere Client. The user should have only Operator role.\n+ I created \"operator\" user but due to the fact that Control Stations already had one internal \"operator\" user,\n+ the new one was called \"operator1\". So be careful.\n+ \n+ On munin-node side choose a user which will be used to connect through SSH. Generally user \"munin\" is ok. Then,\n+ execute \"sudo su munin -s /bin/bash\", \"ssh-keygen\" and \"ssh-copy-id\" to both Control Stations with newly created \n+ user.\n+ \n+ Make a link from /usr/share/munin/plugins/emc_vnx_file_stats to /etc/munin/plugins/.\n+ If you want to get NFS statistics, name the link as \"emc_vnx_file_nfs_stats_<NAME>\", otherwise to get Basic Datamover\n+ statistics you have to name it \"emc_vnx_file_basicdm_stats_<NAME>\", where <NAME> is any arbitrary name of your \n+ storage system. The plugin will return <NAME> in its answer as \"host_name\" field.\n+\n+ For example, assume your storage system is called \"VNX5300\".\n+ Make a configuration file at /etc/munin/plugin-conf.d/emc_vnx_file_stats_VNX5300\n+ \n+ [emc_vnx_file_*]\n+ user munin\t\t\t\t\t\t\t# SSH Client local user\n+ env.username operator1\t\t\t\t\t\t# Remote user with Operator role\n+ env.cs_addr 192.168.1.1 192.168.1.2\t\t\t\t# Control Stations addresses\n+ env.nas_servers server_2 server_3\t\t\t\t# This is the default value and can be omitteda\n+\n+=head1 HISTORY\n+\n+ 08.11.2016 - First Release\n+ 17.11.2016 - NFSv4 support, Memory section\n+ 16.12.2016 - Merged \"NFS\" and \"Datamover Stats\" plugins\n+ 26.12.2016 - Compatibility with Munin coding style\n+\n+=cut\n+\n+export LANG=C\n+\n+ssh_check() {\n+\tssh -q $username@$1 \"/nasmcd/sbin/getreason | grep -w slot_\\`/nasmcd/sbin/t2slot\\` | cut -d- -f1\"\n+}\n+\n+check_conf () {\n+\tif [ -z \"$username\" ]; then\n+\t\techo \"No username ('username' environment variable)!\"\n+\t\treturn 1\n+\tfi\n+\n+\tif [ -z \"$cs_addr\" ]; then\n+\t\techo \"No control station addresses ('cs_addr' environment variable)!\"\n+\t\treturn 1\n+\tfi\n+\n+\t#Choosing Cotrol Station. Code have to be \"10\"\n+\tfor CS in $cs_addr; do\n+\t\tif [[ \"10\" -eq \"$(ssh_check $CS)\" ]]; then\n+\t#\t\techo \"$CS is Primary\"\n+\t\t\tPRIMARY_CS=$CS\n+\t\t\tbreak\n+\t\tfi\n+\tdone\n+\n+\tif [ -z \"$PRIMARY_CS\" ]; then\n+\t\techo \"No alive primary Control Station from list \\\"$cs_addr\\\"\";\n+\t\treturn 1\n+\tfi\n+\treturn 0\n+}\n+\n+if [ \"$1\" = \"autoconf\" ]; then\n+\tcheck_conf_ans=$(check_conf)\n+\tif [ $? -eq 0 ]; then\n+\t\techo \"yes\"\n+\telse\n+\t\techo \"no ($check_conf_ans)\"\n+\tfi\n+\texit 0\n+fi\n+\n+if [ \"$1\" = \"suggest\" ]; then\n+\techo \"nfs_stats\"\n+\techo \"basicdm_stats\"\n+\texit 0;\n+fi\n+\n+STATSTYPE=$(echo \"${0##*/}\" | cut -d _ -f 1-5)\n+if [ \"$STATSTYPE\" = \"emc_vnx_file_nfs_stats\" ]; then STATSTYPE=NFS; \n+elif [ \"$STATSTYPE\" = \"emc_vnx_file_basicdm_stats\" ]; then STATSTYPE=BASICDM;\n+else echo \"Do not know what to do. Name the plugin as 'emc_vnx_file_nfs_stats_<HOSTNAME>' or 'emc_vnx_file_basicdm_stats_<HOSTNAME>'\"; exit 1; fi\n+# echo $STATSTYPE\n+\n+TARGET=$(echo \"${0##*/}\" | cut -d _ -f 6)\n+: ${nas_servers:=\"server_2 server_3\"}\n+\n+check_conf\n+if [[ $? -eq 1 ]]; then\n+\texit 1;\n+fi\n+\n+SSH=\"ssh -q $username@$PRIMARY_CS . /home/operator1/.bash_profile; \"\n+\n+echo \"host_name ${TARGET}\"\n+\n+if [ \"$1\" = \"config\" ] ; then\n+\tfor server in $nas_servers; do\n+\t\t$SSH nas_server -i $server | grep -q 'type *= nas'\n+\t\tif [ \"$?\" != 0 ]  ; then continue; fi\n+\t\tnas_server_ok=TRUE\n+\t\t\n+\t\tif [ $STATSTYPE = \"BASICDM\" ] ; then\n+\t\t\tcat <<-EOF \n+\t\t\tmultigraph emc_vnx_cpu_percent\n+\t\t\tgraph_title EMC VNX 5300 Datamover CPU Util %\n+\t\t\tgraph_vlabel %\n+\t\t\tgraph_category cpu\n+\t\t\tgraph_scale no\n+\t\t\tgraph_args --upper-limit 100 -l 0\n+\t\t\t${server}_cpuutil.min 0\n+\t\t\t${server}_cpuutil.label $server CPU util. in %.\n+\n+\t\t\tmultigraph emc_vnx_network_kib\n+\t\t\tgraph_title EMC VNX 5300 Datamover Network bytes over all interfaces\n+\t\t\tgraph_vlabel B/s recv. (-) / sent (+)\n+\t\t\tgraph_category network\n+\t\t\tgraph_args --base 1000\n+\t\t\t${server}_net_in.graph no\n+\t\t\t${server}_net_in.label none\n+\t\t\t${server}_net_in.cdef ${server}_net_in,1000,*\n+\t\t\t${server}_net_out.label $server B/s\n+\t\t\t${server}_net_out.cdef ${server}_net_out,1000,*\n+\t\t\t${server}_net_out.negative ${server}_net_in\n+\t\t\t${server}_net_out.draw AREA\n+\n+\t\t\tmultigraph emc_vnx_storage_kib\n+\t\t\tgraph_title EMC VNX 5300 Datamover Storage bytes over all interfaces\n+\t\t\tgraph_vlabel B/s recv. (-) / sent (+)\n+\t\t\tgraph_category network\n+\t\t\tgraph_args --base 1000\n+\t\t\t${server}_stor_read.graph no\n+\t\t\t${server}_stor_read.label none\n+\t\t\t${server}_stor_read.cdef ${server}_stor_read,1000,*\n+\t\t\t${server}_stor_write.label $server B/s\n+\t\t\t${server}_stor_write.cdef ${server}_stor_write,1000,*\n+\t\t\t${server}_stor_write.negative ${server}_stor_read\n+\t\t\t${server}_stor_write.draw AREA\n+\n+\t\t\tmultigraph emc_vnx_memory\n+\t\t\tgraph_title EMC VNX 5300 Datamover Memory\n+\t\t\tgraph_vlabel MiB\n+\t\t\tgraph_category memory\n+\t\t\tgraph_args --base 1024\n+\t\t\tgraph_order ${server}_used ${server}_free ${server}_total ${server}_freebuffer ${server}_encumbered\n+\t\t\t${server}_used.label ${server} Used\n+\t\t\t${server}_used.cdef ${server}_used,1024,/\n+\t\t\t${server}_free.label ${server} Free\n+\t\t\t${server}_free.draw STACK\n+\t\t\t${server}_free.cdef ${server}_free,1024,/\n+\t\t\t${server}_total.label ${server} Total\n+\t\t\t${server}_total.cdef ${server}_total,1024,/\n+\t\t\t${server}_freebuffer.label ${server} Free Buffer\n+\t\t\t${server}_freebuffer.cdef ${server}_freebuffer,1024,/\n+\t\t\t${server}_encumbered.label ${server} Encumbered\n+\t\t\t${server}_encumbered.cdef ${server}_encumbered,1024,/\n+\t\t\t\t\t\t\n+\t\t\tmultigraph emc_vnx_filecache\n+\t\t\tgraph_title EMC VNX 5300 File Buffer Cache\n+\t\t\tgraph_vlabel per second\n+\t\t\tgraph_category memory\n+\t\t\tgraph_args --base 1000\n+\t\t\tgraph_order ${server}_highw_hits ${server}_loww_hits ${server}_w_hits ${server}_hits ${server}_lookups\n+\t\t\t${server}_highw_hits.label High Watermark Hits\n+\t\t\t${server}_loww_hits.label Low Watermark Hits\n+\t\t\t${server}_loww_hits.draw STACK\n+\t\t\t${server}_w_hits.label Watermark Hits\n+\t\t\t${server}_hits.label Hits\n+\t\t\t${server}_lookups.label Lookups\n+\t\t\t\t\n+\t\t\tmultigraph emc_vnx_fileresolve\n+\t\t\tgraph_title EMC VNX 5300 FileResolve\n+\t\t\tgraph_vlabel Entries\n+\t\t\tgraph_category memory\n+\t\t\tgraph_args --base 1000\n+\t\t\t${server}_dropped.label Dropped Entries\n+\t\t\t${server}_max.label Max Limit\n+\t\t\t${server}_used.label Used Entries\n+\t\t\tEOF\n+\t\t\tfi\n+\t\tif [ $STATSTYPE = \"NFS\" ] ; then\n+#nfs.v3.op data\n+\t\t\tmember_elements=$($SSH server_stats $server -info nfs.v3.op | grep member_elements | sed -ne 's/^.*= //p')\n+\t\t\tIFS=',' read -ra graphs <<< \"$member_elements\"\n+\t\t\tcat <<-EOF \n+\t\t\tmultigraph vnx_emc_v3_calls_s\n+\t\t\tgraph_title EMC VNX 5300 NFSv3 Calls per second\n+\t\t\tgraph_vlabel Calls\n+\t\t\tgraph_category nfs\n+\t\t\tgraph_args --base 1000\n+\t\t\tEOF\n+\t\t\tfor graph in \"${graphs[@]}\"; do\n+\t\t\t\tfield=$(echo \"$graph\" | cut -d '.' -f4 )\n+\t\t\t\techo \"${server}_$field.label $server $field\"\n+\t\t\tdone\n+\n+\t\t\tcat <<-EOF\n+\t\t\t\n+\t\t\tmultigraph vnx_emc_v3_usec_call\n+\t\t\tgraph_title EMC VNX 5300 NFSv3 uSeconds per call\n+\t\t\tgraph_vlabel uSec / call\n+\t\t\tgraph_category nfs\n+\t\t\tgraph_args --base 1000\n+\t\t\tEOF\n+\t\t\tfor graph in \"${graphs[@]}\"; do\n+\t\t\t\tfield=$(echo \"$graph\" | cut -d '.' -f4 )\n+\t\t\t\techo \"${server}_$field.label $server $field\"\n+\t\t\tdone\n+\t\t\tcat <<-EOF\n+\n+\t\t\tmultigraph vnx_emc_v3_op_percent\n+\t\t\tgraph_title EMC VNX 5300 NFSv3 Op %\n+\t\t\tgraph_vlabel %\n+\t\t\tgraph_scale no\n+\t\t\tgraph_category nfs\n+\t\t\tEOF\n+\t\t\tfor graph in \"${graphs[@]}\"; do\n+\t\t\t\tfield=$(echo \"$graph\" | cut -d '.' -f4 )\n+\t\t\t\techo \"${server}_$field.label $server $field\"\n+\t\t\t\techo \"${server}_$field.min 0\"\n+\t\t\tdone\n+\t\t\tgraphs=()\n+#nfs.v4.op data\n+\t\t\tmember_elements=$($SSH server_stats $server -info nfs.v4.op | grep member_elements | sed -ne 's/^.*= //p')\n+\t\t\tIFS=',' read -ra graphs <<< \"$member_elements\"\n+\t\t\tcat <<-EOF\n+\t\t\tmultigraph vnx_emc_v4_calls_s\n+\t\t\tgraph_title EMC VNX 5300 NFSv4 Calls per second\n+\t\t\tgraph_vlabel Calls\n+\t\t\tgraph_category nfs\n+\t\t\tgraph_args --base 1000\n+\t\t\tEOF\n+\t\t\tfor graph in \"${graphs[@]}\"; do\n+\t\t\t\tfield=$(echo \"$graph\" | cut -d '.' -f4 )\n+\t\t\t\techo \"${server}_$field.label $server $field\"\n+\t\t\tdone\n+\n+\t\t\tcat <<-EOF\n+\n+\t\t\tmultigraph vnx_emc_v4_usec_call\n+\t\t\tgraph_title EMC VNX 5300 NFSv4 uSeconds per call\n+\t\t\tgraph_vlabel uSec / call\n+\t\t\tgraph_category nfs\n+\t\t\tgraph_args --base 1000\n+\t\t\tEOF\n+\t\t\tfor graph in \"${graphs[@]}\"; do\n+\t\t\t\tfield=$(echo \"$graph\" | cut -d '.' -f4 )\n+\t\t\t\techo \"${server}_$field.label $server $field\"\n+\t\t\tdone\n+\t\t\tcat <<-EOF\n+\t\t\t\n+\t\t\tmultigraph vnx_emc_v4_op_percent\n+\t\t\tgraph_title EMC VNX 5300 NFSv4 Op %\n+\t\t\tgraph_vlabel %\n+\t\t\tgraph_scale no\n+\t\t\tgraph_category nfs\n+\t\t\tEOF\n+\t\t\tfor graph in \"${graphs[@]}\"; do\n+\t\t\t\tfield=$(echo \"$graph\" | cut -d '.' -f4 )\n+\t\t\t\techo \"${server}_$field.label $server $field\"\n+\t\t\t\techo \"${server}_$field.min 0\"\n+\t\t\tdone\n+\n+#nfs.client data\n+#\t\t\t\t\t\t\t Total    Read     Write   Suspicious   Total    Read     Write      Avg   \n+#                                                      Ops/s    Ops/s    Ops/s    Ops diff    KiB/s    KiB/s    KiB/s   uSec/call\n+\t\t\tmember_elements=$($SSH server_stats server_2 -monitor nfs.client -count 1 -terminationsummary no -titles never | sed -ne 's/^.*id=//p' | cut -d' ' -f1)\n+\t\t\treadarray graphs2 <<< \"$member_elements\"\n+\t\t\tcat <<-EOF\n+\n+\t\t\tmultigraph vnx_emc_nfs_client_ops_s\n+\t\t\tgraph_title EMC VNX 5300 NFS Client Ops/s\n+\t\t\tgraph_vlabel Ops/s\n+\t\t\tgraph_category nfs\n+\t\t\tEOF\n+\t\t\techo -n \"graph_order \"\n+\t\t\tfor graph in \"${graphs2[@]}\"; do\n+\t\t\t\tfield=$(echo \"$graph\" | sed -ne 's/\\./_/pg' )\n+\t\t\t\techo -n \"${server}_${field}_r ${server}_${field}_w ${server}_${field}_t ${server}_${field}_s \"\n+\t\t\tdone\n+\t\t\techo \" \"\n+\t\t\tfor graph in \"${graphs2[@]}\"; do\n+\t\t\t\tfield=$(echo \"$graph\" | sed -ne 's/\\./_/pg' )\n+\t\t\t\techo \"${server}_${field}_r.label $server $field Read Ops/s\"\n+\t\t\t\techo \"${server}_${field}_w.label $server $field Write Ops/s\"\n+\t\t\t\techo \"${server}_${field}_w.draw STACK\"\n+\t\t\t\techo \"${server}_${field}_t.label $server $field Total Ops/s\"\n+\t\t\t\techo \"${server}_${field}_s.label $server $field Suspicious Ops diff\"\n+\t\t\tdone\n+\n+\t\t\tcat <<-EOF\n+\n+\t\t\tmultigraph vnx_emc_nfs_client_kib_s\n+\t\t\tgraph_title EMC VNX 5300 NFS Client B/s\n+\t\t\tgraph_vlabel B/s\n+\t\t\tgraph_category nfs\n+\t\t\tEOF\n+\t\t\techo -n \"graph_order \"\n+\t\t\tfor graph in \"${graphs2[@]}\"; do\n+\t\t\t\tfield=$(echo \"$graph\" | sed -ne 's/\\./_/pg' )\n+\t\t\t\techo -n \"${server}_${field}_r ${server}_${field}_w ${server}_${field}_t \"\n+\t\t\tdone\n+\t\t\techo \" \"\n+\t\t\tfor graph in \"${graphs2[@]}\"; do\n+\t\t\t\tfield=$(echo \"$graph\" | sed -ne 's/\\./_/pg' )\n+\t\t\t\techo \"${server}_${field}_r.label $server $field Read B/s\"\n+\t\t\t\techo \"${server}_${field}_r.cdef ${server}_${field}_r,1024,*\"\n+\t\t\t\techo \"${server}_${field}_w.label $server $field Write B/s\"\n+\t\t\t\techo \"${server}_${field}_w.cdef ${server}_${field}_w,1024,*\"\n+\t\t\t\techo \"${server}_${field}_w.draw STACK\"\n+\t\t\t\techo \"${server}_${field}_t.label $server $field Total B/s\"\n+\t\t\t\techo \"${server}_${field}_t.cdef ${server}_${field}_t,1024,*\"\n+\t\t\tdone\n+\n+\t\t\tcat <<-EOF\n+\n+\t\t\tmultigraph vnx_emc_nfs_client_avg_usec\n+\t\t\tgraph_title EMC VNX 5300 NFS Client Avg uSec/call\n+\t\t\tgraph_vlabel uSec/call\n+\t\t\tgraph_category nfs\n+\t\t\tEOF\n+\t\t\tfor graph in \"${graphs2[@]}\"; do\n+\t\t\t\tfield=$(echo \"$graph\" | sed -ne 's/\\./_/pg' )\n+\t\t\t\techo \"${server}_${field}.label $server $field Avg uSec/call\"\n+\t\t\tdone\n+\t\tfi\n+\tdone\n+\tif [ -z $nas_server_ok ]; then\n+\t\techo \"No active data movers!\"\n+\t\texit 1\n+\tfi\n+exit 0\n+fi\n+\n+for server in $nas_servers; do\n+\t$SSH nas_server -i $server | grep -q 'type *= nas'\n+\tif [ \"$?\" != 0 ]  ; then continue; fi\n+\tnas_server_ok=TRUE\n+\tif [ $STATSTYPE = \"BASICDM\" ] ; then\n+member_elements=$($SSH server_stats $server -count 1 -terminationsummary no -titles never | grep '^[^[:space:]]')\n+#       NUMCOL=5\n+        IFS=$' ' read -ra graphs <<< \"$member_elements\"\n+\n+        echo \"multigraph emc_vnx_cpu_percent\"\n+        echo \"${server}_cpuutil.value ${graphs[1]}\"\n+\n+        echo -e \"\\nmultigraph emc_vnx_network_kib\"\n+        echo \"${server}_net_in.value ${graphs[2]}\"\n+        echo \"${server}_net_out.value ${graphs[3]}\"\n+\n+        echo -e \"\\nmultigraph emc_vnx_storage_kib\"\n+        echo \"${server}_stor_read.value ${graphs[4]}\"\n+        echo \"${server}_stor_write.value ${graphs[5]}\"\n+\n+        member_elements=$($SSH server_stats $server -monitor kernel.memory -count 1 -terminationsummary no -titles never | grep '^[^[:space:]]')\n+        IFS=$' ' read -ra graphs <<< \"$member_elements\"\n+\n+        echo -e \"\\nmultigraph emc_vnx_memory\"\n+        echo \"${server}_total.value ${graphs[14]}\"\n+        echo \"${server}_used.value ${graphs[15]}\"\n+        echo \"${server}_free.value ${graphs[12]}\"\n+        echo \"${server}_freebuffer.value ${graphs[1]}\"\n+        echo \"${server}_encumbered.value ${graphs[8]}\"\n+\n+        echo -e \"\\nmultigraph emc_vnx_filecache\"\n+        echo \"${server}_highw_hits.value ${graphs[2]}\"\n+        echo \"${server}_loww_hits.value ${graphs[6]}\"\n+        echo \"${server}_w_hits.value ${graphs[7]}\"\n+        echo \"${server}_hits.value ${graphs[4]}\"\n+\techo \"${server}_lookups.value ${graphs[5]}\"\n+        \n+        echo -e \"\\nmultigraph emc_vnx_fileresolve\"\n+        echo \"${server}_dropped.value ${graphs[9]}\"\n+        echo \"${server}_max.value ${graphs[10]}\"\n+        echo \"${server}_used.value ${graphs[11]}\"\n+\n+\n+\tfi\n+\tif [ $STATSTYPE = \"NFS\" ] ; then\n+#nfs.v3.op data\n+\tmember_elements=$($SSH server_stats $server -monitor nfs.v3.op -count 1 -terminationsummary no -titles never | sed -ne 's/^.*v3/v3/p')\n+\tNUMCOL=5\n+\tLINES=$(wc -l <<< \"$member_elements\")\n+\twhile IFS=$'\\n' read -ra graphs ; do\n+\t\telement+=( $graphs )\n+\tdone <<< \"$member_elements\"\n+\n+\techo \"multigraph vnx_emc_v3_calls_s\"\n+\tfor ((i=0; i<$((LINES)); i++ )); do\n+\t\techo \"${server}_${element[i*$NUMCOL]}\".value \"${element[i*$NUMCOL+1]}\"\n+\tdone\n+\n+\techo -e \"\\nmultigraph vnx_emc_v3_usec_call\"\n+\tfor ((i=0; i<$((LINES)); i++ )); do\n+\t\techo \"${server}_${element[i*$NUMCOL]}\".value \"${element[i*$NUMCOL+3]}\"\n+\tdone\n+\n+\techo -e \"\\nmultigraph vnx_emc_v3_op_percent\"\n+\tfor ((i=0; i<$((LINES)); i++ )); do\n+\t\techo \"${server}_${element[i*$NUMCOL]}\".value \"${element[i*$NUMCOL+4]}\"\n+\tdone\n+\n+\telement=()\n+\n+#nfs.v4.op data\n+\tmember_elements=$($SSH server_stats $server -monitor nfs.v4.op -count 1 -terminationsummary no -titles never | sed -ne 's/^.*v4/v4/p')","path":"plugins/emc/emc_vnx_file_","position":458,"original_position":458,"commit_id":"210ebae0a02e70e10640015fc10e9c245bbf5d96","original_commit_id":"210ebae0a02e70e10640015fc10e9c245bbf5d96","user":{"login":"sumpfralle","id":1474141,"avatar_url":"https://avatars.githubusercontent.com/u/1474141?v=3","gravatar_id":"","url":"https://api.github.com/users/sumpfralle","html_url":"https://github.com/sumpfralle","followers_url":"https://api.github.com/users/sumpfralle/followers","following_url":"https://api.github.com/users/sumpfralle/following{/other_user}","gists_url":"https://api.github.com/users/sumpfralle/gists{/gist_id}","starred_url":"https://api.github.com/users/sumpfralle/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sumpfralle/subscriptions","organizations_url":"https://api.github.com/users/sumpfralle/orgs","repos_url":"https://api.github.com/users/sumpfralle/repos","events_url":"https://api.github.com/users/sumpfralle/events{/privacy}","received_events_url":"https://api.github.com/users/sumpfralle/received_events","type":"User","site_admin":false},"body":"What is the purpose of \"v4\"? Is it related to the version of the navicli program? Should it be defined as a constant somewhere?\r\nWhat is the expected output of this command? Multiple lines with a single or more values each?","created_at":"2016-12-27T05:15:58Z","updated_at":"2016-12-27T05:57:46Z","html_url":"https://github.com/munin-monitoring/contrib/pull/775#discussion_r93896865","pull_request_url":"https://api.github.com/repos/munin-monitoring/contrib/pulls/775","_links":{"self":{"href":"https://api.github.com/repos/munin-monitoring/contrib/pulls/comments/93896865"},"html":{"href":"https://github.com/munin-monitoring/contrib/pull/775#discussion_r93896865"},"pull_request":{"href":"https://api.github.com/repos/munin-monitoring/contrib/pulls/775"}}},"pull_request":{"url":"https://api.github.com/repos/munin-monitoring/contrib/pulls/775","id":94210303,"html_url":"https://github.com/munin-monitoring/contrib/pull/775","diff_url":"https://github.com/munin-monitoring/contrib/pull/775.diff","patch_url":"https://github.com/munin-monitoring/contrib/pull/775.patch","issue_url":"https://api.github.com/repos/munin-monitoring/contrib/issues/775","number":775,"state":"open","locked":false,"title":" Plugin for monitoring EMC VNX5300 File & Block statistics","user":{"login":"Vshmuk","id":1099087,"avatar_url":"https://avatars.githubusercontent.com/u/1099087?v=3","gravatar_id":"","url":"https://api.github.com/users/Vshmuk","html_url":"https://github.com/Vshmuk","followers_url":"https://api.github.com/users/Vshmuk/followers","following_url":"https://api.github.com/users/Vshmuk/following{/other_user}","gists_url":"https://api.github.com/users/Vshmuk/gists{/gist_id}","starred_url":"https://api.github.com/users/Vshmuk/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Vshmuk/subscriptions","organizations_url":"https://api.github.com/users/Vshmuk/orgs","repos_url":"https://api.github.com/users/Vshmuk/repos","events_url":"https://api.github.com/users/Vshmuk/events{/privacy}","received_events_url":"https://api.github.com/users/Vshmuk/received_events","type":"User","site_admin":false},"body":"The plugin monitors LUNs of EMC VNX5300 Unified Storage FLARE SP's. Probably it can also be compatible with other Clariion systems. It uses SSH to connect to Control Stations, then remotely executes\r\n/nas/sbin/navicli and fetches and parses data from it. Obviously, it's easy to reconfigure plugin not to use\r\nControl Stations' navicli in favor of using locally installed /opt/Navisphere's cli. There is no difference which\r\nStorage Processor to use to gather data, so this plugin tries both of them and uses the first active one.\r\nThis plugin also automatically chooses Primary Control Station from the list by calling /nasmcd/sbin/getreason and /nasmcd/sbin/t2slot.","created_at":"2016-11-17T17:13:10Z","updated_at":"2016-12-27T05:57:46Z","closed_at":null,"merged_at":null,"merge_commit_sha":"66c8198521302eeaa7f4762248a045e99371cc02","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/munin-monitoring/contrib/pulls/775/commits","review_comments_url":"https://api.github.com/repos/munin-monitoring/contrib/pulls/775/comments","review_comment_url":"https://api.github.com/repos/munin-monitoring/contrib/pulls/comments{/number}","comments_url":"https://api.github.com/repos/munin-monitoring/contrib/issues/775/comments","statuses_url":"https://api.github.com/repos/munin-monitoring/contrib/statuses/210ebae0a02e70e10640015fc10e9c245bbf5d96","head":{"label":"Vshmuk:emc_vnx_block_lun_perfdata","ref":"emc_vnx_block_lun_perfdata","sha":"210ebae0a02e70e10640015fc10e9c245bbf5d96","user":{"login":"Vshmuk","id":1099087,"avatar_url":"https://avatars.githubusercontent.com/u/1099087?v=3","gravatar_id":"","url":"https://api.github.com/users/Vshmuk","html_url":"https://github.com/Vshmuk","followers_url":"https://api.github.com/users/Vshmuk/followers","following_url":"https://api.github.com/users/Vshmuk/following{/other_user}","gists_url":"https://api.github.com/users/Vshmuk/gists{/gist_id}","starred_url":"https://api.github.com/users/Vshmuk/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Vshmuk/subscriptions","organizations_url":"https://api.github.com/users/Vshmuk/orgs","repos_url":"https://api.github.com/users/Vshmuk/repos","events_url":"https://api.github.com/users/Vshmuk/events{/privacy}","received_events_url":"https://api.github.com/users/Vshmuk/received_events","type":"User","site_admin":false},"repo":{"id":73127422,"name":"contrib","full_name":"Vshmuk/contrib","owner":{"login":"Vshmuk","id":1099087,"avatar_url":"https://avatars.githubusercontent.com/u/1099087?v=3","gravatar_id":"","url":"https://api.github.com/users/Vshmuk","html_url":"https://github.com/Vshmuk","followers_url":"https://api.github.com/users/Vshmuk/followers","following_url":"https://api.github.com/users/Vshmuk/following{/other_user}","gists_url":"https://api.github.com/users/Vshmuk/gists{/gist_id}","starred_url":"https://api.github.com/users/Vshmuk/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Vshmuk/subscriptions","organizations_url":"https://api.github.com/users/Vshmuk/orgs","repos_url":"https://api.github.com/users/Vshmuk/repos","events_url":"https://api.github.com/users/Vshmuk/events{/privacy}","received_events_url":"https://api.github.com/users/Vshmuk/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/Vshmuk/contrib","description":"Contributed stuff for munin (plugins, tools, etc...)","fork":true,"url":"https://api.github.com/repos/Vshmuk/contrib","forks_url":"https://api.github.com/repos/Vshmuk/contrib/forks","keys_url":"https://api.github.com/repos/Vshmuk/contrib/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Vshmuk/contrib/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Vshmuk/contrib/teams","hooks_url":"https://api.github.com/repos/Vshmuk/contrib/hooks","issue_events_url":"https://api.github.com/repos/Vshmuk/contrib/issues/events{/number}","events_url":"https://api.github.com/repos/Vshmuk/contrib/events","assignees_url":"https://api.github.com/repos/Vshmuk/contrib/assignees{/user}","branches_url":"https://api.github.com/repos/Vshmuk/contrib/branches{/branch}","tags_url":"https://api.github.com/repos/Vshmuk/contrib/tags","blobs_url":"https://api.github.com/repos/Vshmuk/contrib/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Vshmuk/contrib/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Vshmuk/contrib/git/refs{/sha}","trees_url":"https://api.github.com/repos/Vshmuk/contrib/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Vshmuk/contrib/statuses/{sha}","languages_url":"https://api.github.com/repos/Vshmuk/contrib/languages","stargazers_url":"https://api.github.com/repos/Vshmuk/contrib/stargazers","contributors_url":"https://api.github.com/repos/Vshmuk/contrib/contributors","subscribers_url":"https://api.github.com/repos/Vshmuk/contrib/subscribers","subscription_url":"https://api.github.com/repos/Vshmuk/contrib/subscription","commits_url":"https://api.github.com/repos/Vshmuk/contrib/commits{/sha}","git_commits_url":"https://api.github.com/repos/Vshmuk/contrib/git/commits{/sha}","comments_url":"https://api.github.com/repos/Vshmuk/contrib/comments{/number}","issue_comment_url":"https://api.github.com/repos/Vshmuk/contrib/issues/comments{/number}","contents_url":"https://api.github.com/repos/Vshmuk/contrib/contents/{+path}","compare_url":"https://api.github.com/repos/Vshmuk/contrib/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Vshmuk/contrib/merges","archive_url":"https://api.github.com/repos/Vshmuk/contrib/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Vshmuk/contrib/downloads","issues_url":"https://api.github.com/repos/Vshmuk/contrib/issues{/number}","pulls_url":"https://api.github.com/repos/Vshmuk/contrib/pulls{/number}","milestones_url":"https://api.github.com/repos/Vshmuk/contrib/milestones{/number}","notifications_url":"https://api.github.com/repos/Vshmuk/contrib/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Vshmuk/contrib/labels{/name}","releases_url":"https://api.github.com/repos/Vshmuk/contrib/releases{/id}","deployments_url":"https://api.github.com/repos/Vshmuk/contrib/deployments","created_at":"2016-11-07T22:39:13Z","updated_at":"2016-11-07T22:39:18Z","pushed_at":"2016-12-26T21:59:28Z","git_url":"git://github.com/Vshmuk/contrib.git","ssh_url":"git@github.com:Vshmuk/contrib.git","clone_url":"https://github.com/Vshmuk/contrib.git","svn_url":"https://github.com/Vshmuk/contrib","homepage":"http://munin-monitoring.org","size":6138,"stargazers_count":0,"watchers_count":0,"language":"Perl","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"munin-monitoring:master","ref":"master","sha":"71e8eb7ee5bcc0069c6ac5f955237496f8addec8","user":{"login":"munin-monitoring","id":909917,"avatar_url":"https://avatars.githubusercontent.com/u/909917?v=3","gravatar_id":"","url":"https://api.github.com/users/munin-monitoring","html_url":"https://github.com/munin-monitoring","followers_url":"https://api.github.com/users/munin-monitoring/followers","following_url":"https://api.github.com/users/munin-monitoring/following{/other_user}","gists_url":"https://api.github.com/users/munin-monitoring/gists{/gist_id}","starred_url":"https://api.github.com/users/munin-monitoring/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/munin-monitoring/subscriptions","organizations_url":"https://api.github.com/users/munin-monitoring/orgs","repos_url":"https://api.github.com/users/munin-monitoring/repos","events_url":"https://api.github.com/users/munin-monitoring/events{/privacy}","received_events_url":"https://api.github.com/users/munin-monitoring/received_events","type":"Organization","site_admin":false},"repo":{"id":2035393,"name":"contrib","full_name":"munin-monitoring/contrib","owner":{"login":"munin-monitoring","id":909917,"avatar_url":"https://avatars.githubusercontent.com/u/909917?v=3","gravatar_id":"","url":"https://api.github.com/users/munin-monitoring","html_url":"https://github.com/munin-monitoring","followers_url":"https://api.github.com/users/munin-monitoring/followers","following_url":"https://api.github.com/users/munin-monitoring/following{/other_user}","gists_url":"https://api.github.com/users/munin-monitoring/gists{/gist_id}","starred_url":"https://api.github.com/users/munin-monitoring/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/munin-monitoring/subscriptions","organizations_url":"https://api.github.com/users/munin-monitoring/orgs","repos_url":"https://api.github.com/users/munin-monitoring/repos","events_url":"https://api.github.com/users/munin-monitoring/events{/privacy}","received_events_url":"https://api.github.com/users/munin-monitoring/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/munin-monitoring/contrib","description":"Contributed stuff for munin (plugins, tools, etc...)","fork":false,"url":"https://api.github.com/repos/munin-monitoring/contrib","forks_url":"https://api.github.com/repos/munin-monitoring/contrib/forks","keys_url":"https://api.github.com/repos/munin-monitoring/contrib/keys{/key_id}","collaborators_url":"https://api.github.com/repos/munin-monitoring/contrib/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/munin-monitoring/contrib/teams","hooks_url":"https://api.github.com/repos/munin-monitoring/contrib/hooks","issue_events_url":"https://api.github.com/repos/munin-monitoring/contrib/issues/events{/number}","events_url":"https://api.github.com/repos/munin-monitoring/contrib/events","assignees_url":"https://api.github.com/repos/munin-monitoring/contrib/assignees{/user}","branches_url":"https://api.github.com/repos/munin-monitoring/contrib/branches{/branch}","tags_url":"https://api.github.com/repos/munin-monitoring/contrib/tags","blobs_url":"https://api.github.com/repos/munin-monitoring/contrib/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/munin-monitoring/contrib/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/munin-monitoring/contrib/git/refs{/sha}","trees_url":"https://api.github.com/repos/munin-monitoring/contrib/git/trees{/sha}","statuses_url":"https://api.github.com/repos/munin-monitoring/contrib/statuses/{sha}","languages_url":"https://api.github.com/repos/munin-monitoring/contrib/languages","stargazers_url":"https://api.github.com/repos/munin-monitoring/contrib/stargazers","contributors_url":"https://api.github.com/repos/munin-monitoring/contrib/contributors","subscribers_url":"https://api.github.com/repos/munin-monitoring/contrib/subscribers","subscription_url":"https://api.github.com/repos/munin-monitoring/contrib/subscription","commits_url":"https://api.github.com/repos/munin-monitoring/contrib/commits{/sha}","git_commits_url":"https://api.github.com/repos/munin-monitoring/contrib/git/commits{/sha}","comments_url":"https://api.github.com/repos/munin-monitoring/contrib/comments{/number}","issue_comment_url":"https://api.github.com/repos/munin-monitoring/contrib/issues/comments{/number}","contents_url":"https://api.github.com/repos/munin-monitoring/contrib/contents/{+path}","compare_url":"https://api.github.com/repos/munin-monitoring/contrib/compare/{base}...{head}","merges_url":"https://api.github.com/repos/munin-monitoring/contrib/merges","archive_url":"https://api.github.com/repos/munin-monitoring/contrib/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/munin-monitoring/contrib/downloads","issues_url":"https://api.github.com/repos/munin-monitoring/contrib/issues{/number}","pulls_url":"https://api.github.com/repos/munin-monitoring/contrib/pulls{/number}","milestones_url":"https://api.github.com/repos/munin-monitoring/contrib/milestones{/number}","notifications_url":"https://api.github.com/repos/munin-monitoring/contrib/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/munin-monitoring/contrib/labels{/name}","releases_url":"https://api.github.com/repos/munin-monitoring/contrib/releases{/id}","deployments_url":"https://api.github.com/repos/munin-monitoring/contrib/deployments","created_at":"2011-07-12T10:12:34Z","updated_at":"2016-12-23T20:23:44Z","pushed_at":"2016-12-26T21:59:30Z","git_url":"git://github.com/munin-monitoring/contrib.git","ssh_url":"git@github.com:munin-monitoring/contrib.git","clone_url":"https://github.com/munin-monitoring/contrib.git","svn_url":"https://github.com/munin-monitoring/contrib","homepage":"http://munin-monitoring.org","size":6126,"stargazers_count":927,"watchers_count":927,"language":"Perl","has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":561,"mirror_url":null,"open_issues_count":42,"forks":561,"open_issues":42,"watchers":927,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/munin-monitoring/contrib/pulls/775"},"html":{"href":"https://github.com/munin-monitoring/contrib/pull/775"},"issue":{"href":"https://api.github.com/repos/munin-monitoring/contrib/issues/775"},"comments":{"href":"https://api.github.com/repos/munin-monitoring/contrib/issues/775/comments"},"review_comments":{"href":"https://api.github.com/repos/munin-monitoring/contrib/pulls/775/comments"},"review_comment":{"href":"https://api.github.com/repos/munin-monitoring/contrib/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/munin-monitoring/contrib/pulls/775/commits"},"statuses":{"href":"https://api.github.com/repos/munin-monitoring/contrib/statuses/210ebae0a02e70e10640015fc10e9c245bbf5d96"}}}}
{"actor":{"display_login":"sumpfralle"}}