From a726255dd7237650fe16d311bca4cd13d14f79fb Mon Sep 17 00:00:00 2001 From: Adam Amstrong Date: Sat, 19 Jun 2010 16:06:57 +0000 Subject: [PATCH] UCD DiskIO MIB support. Still needs graphs tidied up and web display made a bit more useful git-svn-id: http://www.observium.org/svn/observer/trunk@1214 61d68cd4-352d-0410-923a-c4978735b2b8 --- discovery.php | 2 + html/images/icons/diskio.png | Bin 0 -> 955 bytes html/images/icons/greyscale/diskio.png | Bin 0 -> 766 bytes html/images/icons/greyscale/storage.png | Bin 766 -> 881 bytes html/images/icons/storage.png | Bin 793 -> 957 bytes html/includes/graphs/generic_duplex.inc.php | 1 - html/pages/device/health.inc.php | 3 + html/pages/device/health/diskio.inc.php | 73 ++++++++++++++++++++ includes/discovery/ucd-diskio.inc.php | 52 ++++++++++++++ includes/polling/ucd-diskio.inc.php | 65 +++++++++++++++++ poll-device.php | 1 + 11 files changed, 196 insertions(+), 1 deletion(-) create mode 100644 html/images/icons/diskio.png create mode 100644 html/images/icons/greyscale/diskio.png create mode 100644 html/pages/device/health/diskio.inc.php create mode 100644 includes/discovery/ucd-diskio.inc.php create mode 100644 includes/polling/ucd-diskio.inc.php diff --git a/discovery.php b/discovery.php index cd3ecb9c6..43f9a63c3 100755 --- a/discovery.php +++ b/discovery.php @@ -7,6 +7,7 @@ include("includes/functions.php"); include("includes/discovery/functions.inc.php"); $start = utime(); +$runtime_stats = array(); ### Observer Device Discovery @@ -122,6 +123,7 @@ while ($device = mysql_fetch_array($device_query)) include("includes/discovery/cisco-vrf.inc.php"); include("includes/discovery/toner.inc.php"); include("includes/discovery/ups.inc.php"); + include("includes/discovery/ucd-diskio.inc.php"); if ($device['type'] == "unknown") { diff --git a/html/images/icons/diskio.png b/html/images/icons/diskio.png new file mode 100644 index 0000000000000000000000000000000000000000..dfa0c3f343e38f88e50f82c2221245401918f38e GIT binary patch literal 955 zcmV;s14R6ZP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGh)&Kwv)&Y=jd7JeSaefwW^{L9 za%BKeVQFr3E>1;MAa*k@H7+$tiu~XJ00S#YL_t(IPj!-MOjAJ+$6q9VRcTT1n+7i; z&;~(Kii!#aq(UO`g2coFHJ%_uss;(lq1-Bnphy5Y1SLh}u-Y_`a#;_82UbM9z$hSC zBS$fRXI`RT)J9++OgMCq;T&>M8PRa1%Az1?_jdInw7J=EW?Mb({~ zsI0z$23;LPf09iRGIG-FQnQkOeEQsvqVfXted+@bc4PoUdEN2s35-wLal2lFrq)Kz zZj1o4grxL%839HZz!8SN4&r0~2h`lH24yBj?|StDozFW&0Dl=kC5{llS)h8o)3Z~C z+3D^3UKCdpB0K*gS|7HE|D45dK&`e0vUnVYVedb_ z1MAY=V-f)xtx-ISJ9i3NeFG?SGXX*cnj-QFb0!Fa`;A)Bi6e7K7K;Vu?`Cn&YiljS zqU*%y3?c0%$Tw0TF;ZE){Oec5`Z~K_BDvtL8qS8U`*8t~r8Ys8xu_mMe9viOV z#F->qF1W-(W(d)-QI%X5i^Y-DsqF~b*N&)U6Sf^SV)d3fD1tQz+;b29JL=%-lZE}! zxhN>P3hIR_1~l`VKkP7ywR>*T!NIEvi#$u=wW;jSb2_a|gZuhS619hVLW`2hA{;vv z*(T7`&2P)9w?Asb)2>bo41U4*__){)k4p+MIyQ>4*;*3Oh{k5U*l65PltHgR(-7Cg zZOj6-JTSmO7g}hYwAK@97n!)vZ-2m5hCmw$l-ASWKYJ!?@J$Fiw9`_dDHGHGZ8gd9 zNLlHD;(!3;`zjG5bA)=a12PmIC|9X)aPcA>4)Vd?@ZFPw)J{6=zS<2|Q>`%FW*Y1r z=0LGrj?npYk>Iuju`Y51&y+$Xv4$T-USlVPLbd=)6)qs(0l{Xr)U?299^}iM;7Xee zTji^O|3)QL&I{o~sRnKifNzjDJiS+lcjWHQnD1!MfX9NwR-%^7vK}Y1{L5@@W=#I) dY>f6pegRbFitBLOr;Gpq002ovPDHLkV1gqsuzvsm literal 0 HcmV?d00001 diff --git a/html/images/icons/greyscale/diskio.png b/html/images/icons/greyscale/diskio.png new file mode 100644 index 0000000000000000000000000000000000000000..7262022ddaf53cf0fc4bb7e8b0decfec96e8ba56 GIT binary patch literal 766 zcmVPx#1ZP1_K>z@;j|==^1poj532;bRa{vGh)&Kwv)&Y=jd7JeSaefwW^{L9 za%BKeVQFr3E>1;MAa*k@H7+$tiu~XJ00M4FL_t(IPjymXOX5)wz3hI6Wk1F4V_%@i zo|7o`QIaqS7cGRKg2=S24GggqUqdAcg6N?T)HQxf z%>CVafA^f3IWt0#-QM0>uCK3q;cyri7Z*4?JHyGz3H*LPj*gDrxXK%(lqt*VSTrP*3 zn;Z0cy*I$;=V#pC-=p1bvrbha7!$;#xw^WNVOYFjRxX$2uk-VBRI61`=5->_2wJ|R zQmHnPpjN95CD`5F1t~A1GYM(eCah7A7}2nK@zuB$IrC=`O%>jilFKV6)lacDvzpIwcv+0Wz5kXB1?D zZ-4gOZnwj1Hp65xVS9UfkQJX-S6Ahk=OCZY36)C48q|cxgE@$qpp`A_oB5bqATZ_&N_7cJ!x=;zfHMF0Q*07*qoM6N<$f~C(@ivR!s literal 0 HcmV?d00001 diff --git a/html/images/icons/greyscale/storage.png b/html/images/icons/greyscale/storage.png index 6c0f1b978cb8ef5e4448daac13b10b270d63cba2..4e82a8ce6271118a8d357215949f52892906b3d5 100644 GIT binary patch delta 770 zcmV+d1O5E|1@Q)udw=0cL_t(IPi>NGE97Aq#{cbphiN~>ZeBPgZ3#>Fx^lBDp0 zvC)W}8_{HyoFfWhSm#5IIgCRXBgZjL5nI+q+Rd8LwfFVZZrkoo-ShlU_wT;0>v=Ry ze#67V=DxnZ=dP|Uw70jTwY3#ZO--n)t3ypq%|BIJTkEc`uYWhQR~r}@cqz>um&=92 z!$V9?PGW6s4YRYeI66AQ{{B8zS68vLw1m02In2z=z-F@%`YiQAvs$gMy1To-pP!#& ze0&^dXJ@#*y;Y3_5X$SFogFwF4$RNbV|{&{>K+B4(>gjj-U#5H08Y5Pyu|70DHawM zAj;JAgM$O??tkto09OLU;=KS~YvMPgr>EzRO~=Q_n3$MAe}6yhcDuT#ieG@m#YId_ zO<`kWgE`#^AVd?Ap|`j9fgdtFP9f~%2&@EY;SL)t*s5q%gYeu4+1b~@@E_x z8hR24R#sM26DQNs&CLz2udmfJN+*ER36bocr1yg+VSiW{-pI&^`iK)*o12@eL3RnU zZ73@%LuqL##>U3b(9nRv!9fQ3QEO~$w9*&D;v^={;nT&8VuXLSkYf%FD|g zn#gf+Z-1Hk*47sG_V#dbaiOLZ7Z;FH@D`_H0<(a}*Qmr6J! zK0Y3CadB!54-ZF4Nr^}E_4U6aS*O#%%gYOqk$aJf&alKI%x1Gn-()f&A|gWB2o4TL zOiT=<_lxG|=kJV;eh-7efP{nuC6j>>K<^nD8Olm}dOCuFf)ExKhS=CxL`6jrVAp(n z{7l~7zCWbg|Eqw2KzC^9J5ONXThCwbALU;E6Y=rIzW7^^cK`qY07*qoM6N<$f+w(n Af&c&j delta 655 zcmV;A0&xBD2L1(*dw*_8L_t(IPnD9(PFhhEhIiU`X!;cG$VYI_K*dBK!9?41(%`_T zi6MrhVjMWYFu)n1BL#J$2{xh<1R){FMLg*D`{;B! zh{a+k7K=zGlj!w&Xt&$AzrRN|o5k(zEfR?Ya=9F#Lx~US?Ck8b&*y7H#?{poU)rFM z07CiQY&KD=)sRl7Q7)HRT}J?))ba80R{_*1Vg`qHgG!}BpK1aaRYICRKR<7B zBh6zL!iK{k=u5ZTeFfC(bsQZXA)n7fDsKv4TFK*kC=}`m1cgFD6EXAK!8Mjn0J9S! z-t|QLLx~v{nimd-wN1>(czAetHISw2CURXoLogVmk$=C`{{Fs`ebFptqT>u6+x7J| z;_|H+vy?6aM^?z)yR4Qrky}do3l1H3pOV=MC zAMy0`^iTh9Cyho!6Z4|+LP-TFC66lm;Wef~ESE4nIOjUgUKi5?nl2tRl+)?#vrm@z zo}k9%a(@lf#KdH6d3hNlBO@>v449dj!Q$c~tX3vudW^K>>{5)o7X9)D%PDHLkV1mlQI_CfY diff --git a/html/images/icons/storage.png b/html/images/icons/storage.png index 5dd9b8beae525bb335236b2c5203a9ac56f80c5e..1c48c415d8ca93e54affbbe847307d3969c5e01e 100755 GIT binary patch delta 935 zcmV;Y16cf-2E7N6B!2;OQb$4nuFf3k00004XF*Lt006O%3;baP00009a7bBm000fv z000fv0g!KboB#j-8FWQhbW?9;ba!ELWdKlNX>N2bPDNB8b~7$DE;UJt{NMlp11(8J zK~y+TZIWq7R8bViAJqp*RMMP6ao02`CpAaMz)BKh#MA-%;(vV5#1E1t$%L3FDWrjn zY2`Xv(ii(PmpP!H1+}wX6FE8(~pr9a~a=H5Y`jagAXmN27b8~ZOZEeNS z&=9m*Efy9QFn=>MgTcW;^!E0mv$GQ&9UbWF>m%qfixXURb@lnm%F1tRYinp}X~F91 zDt2~u_(TE_l)fh?C!y2n(ACw2;o)KG?tlRVoJyq&1jg9eh>f#rmr>6&PZEYAC z86lr`8NiogB$-;R-lvUZ9#tXO^71msm-+em-++mU36zzUp})T$tn+;aka6r4*Vx$j zgF!GbFu*5KWsp66#^_+>WM++Fd}On`;d6j%%8(03??!38CZ1pY`$ zPJcP#JUqm^k&%%Q2n29(aX~;p03sqHP!JS|DSJz3ovhJiZ-v(q3C@_`g{fOPP8r^T z-|axK+|Qh+r+7X%SPGd;hVbxk5G*=68u4;DiltI?>z~GZ1AV;k@qw{G1P3Q?NTneN z3JM~?7$*{WCb+wMd}nd^zqlp5au{aka3CbPbouD7^#e8!{RzE|r!&5xwjlrj002ov JPDHLkV1g)vsy6@t delta 769 zcmV+c1OEKI2bl(tB!2{RLP=Bz2nYy#2xN!=000SaNLh0L01ejw01ejxLMWSf0000P zbVXQnQ*UN;cVTj60C#tHE@^ISb7Ns}WiD@WXPfRk8UO$SmPtfGR5*=|lFMo%R}@9p zebhrPmmaN_)W|ZP7;JFcc-G_x{3-r~hRia{r2iq`pn-qEV}E1ek&Q4)2ZJet9+q^g z?yY+>2oWSrAREr?usCP$EkX#~+}!+HRn=E(t#r=eoWoj+a}Mu4|CSKKNh!ZwUtj+$ z#^bT7>$<$SxKMRnGn>t5wOXv#Yeu6H&N-ILCJkNQ3eSZZ&N=dWXq^@h~x@NIh5XUi6O6$Gq9}OpIXpb%;o*VpcFWPx5yRmS?>%*01F%}HFvig7 zbcmuTR8=+5*4lxTQaR_iy}jk~@{(q=NeBV&Jt2ghd4J7jlj(FymSsdyq=12}s;VEy zadLlu&&kONS(f3wM=3?C)gsSxwAMSw+1VM7kB`K0oB*G+l=2{oqDV?fp69#R7K;VO z7`*qqy}i+Hw+SI2gdj~*;y8|^lq0Q_I?`Ix>2yev1Zyn-+wGR3C{Rk#>2!ABMx()C zFkro2BY%WA(!fwDMWfL`DaGF29%Wh5>-Fe%yMz$XTBEflO;a|T&2C2sG1MW1zEbKR z8RvOUmSrSK0)R0FV+=)6V2s&8LkI&MLijMB&v|)y;rRF%V+>_k?o10I{4meY&nTq` zA$-v9@9%k*Wt^X%|IqpWQm@xzI-N3`&Gy8XFM2=CFD^c}#^W&u2M3HsBl`V5?RJ~} z{e6-oA%uW)jy00000NkvXXu0mjfln`~P diff --git a/html/includes/graphs/generic_duplex.inc.php b/html/includes/graphs/generic_duplex.inc.php index 5d92a7d0d..f7ccab7ae 100644 --- a/html/includes/graphs/generic_duplex.inc.php +++ b/html/includes/graphs/generic_duplex.inc.php @@ -5,7 +5,6 @@ include("common.inc.php"); - $unit_text = str_pad(truncate($unit_text,10),10); $rrd_options .= " DEF:".$out."=".$rrd_filename.":".$rra_out.":AVERAGE"; diff --git a/html/pages/device/health.inc.php b/html/pages/device/health.inc.php index 034afbef5..267643b7f 100644 --- a/html/pages/device/health.inc.php +++ b/html/pages/device/health.inc.php @@ -2,6 +2,7 @@ $temperatures = mysql_result(mysql_query("select count(*) from temperature WHERE device_id = '" . $device['device_id'] . "'"), 0); $storage = mysql_result(mysql_query("select count(*) from storage WHERE device_id = '" . $device['device_id'] . "'"), 0); +$diskio = mysql_result(mysql_query("select count(*) from ucd_diskio WHERE device_id = '" . $device['device_id'] . "'"), 0); $memory = mysql_result(mysql_query("select count(*) from mempools WHERE device_id = '" . $device['device_id'] . "'"), 0); $processor = mysql_result(mysql_query("select count(*) from processors WHERE device_id = '" . $device['device_id'] . "'"), 0); $fans = mysql_result(mysql_query("select count(*) from fanspeed WHERE device_id = '" . $device['device_id'] . "'"), 0); @@ -13,6 +14,7 @@ $datas[] = 'overview'; if ($processor) { $datas[] = 'processors'; } if ($memory) { $datas[] = 'memory'; } if ($storage) { $datas[] = 'storage'; } +if ($diskio) { $datas[] = 'diskio'; } if ($temperatures) { $datas[] = 'temperatures'; } if ($fans) { $datas[] = 'fanspeeds'; } if ($volts) { $datas[] = 'voltages'; } @@ -24,6 +26,7 @@ $type_text['overview'] = "Overview"; $type_text['temperatures'] = "Temperatures"; $type_text['memory'] = "Memory Pools"; $type_text['storage'] = "Disk Usage"; +$type_text['diskio'] = "Disk IO"; $type_text['processors'] = "Processor Usage"; $type_text['voltages'] = "Voltages"; $type_text['fanspeeds'] = "Fan Speeds"; diff --git a/html/pages/device/health/diskio.inc.php b/html/pages/device/health/diskio.inc.php new file mode 100644 index 000000000..f9d870fe4 --- /dev/null +++ b/html/pages/device/health/diskio.inc.php @@ -0,0 +1,73 @@ +"); + +#echo(" +# Drive +# Usage +# Free +# +# "); + +$row = 1; + +while($drive = mysql_fetch_array($query)) { + + if(is_integer($row/2)) { $row_colour = $list_colour_a; } else { $row_colour = $list_colour_b; } + +# $total = $drive['storage_size']; +# $used = $drive['storage_used']; +# $free = $drive['storage_free']; +# $perc = round($drive['storage_perc'], 0); +# $used = formatStorage($used); +# $total = formatStorage($total); +# $free = formatStorage($free); + + $fs_url = "/device/".$device['device_id']."/health/diskio/"; + + $fs_popup = "onmouseover=\"return overlib('
".$device['hostname']." - ".$drive['diskio_descr']; + $fs_popup .= "
"; + $fs_popup .= "', RIGHT, FGCOLOR, '#e5e5e5');\" onmouseout=\"return nd();\""; + + if($perc > '90') { $left_background='c4323f'; $right_background='C96A73'; + } elseif($perc > '75') { $left_background='bf5d5b'; $right_background='d39392'; + } elseif($perc > '50') { $left_background='bf875b'; $right_background='d3ae92'; + } elseif($perc > '25') { $left_background='5b93bf'; $right_background='92b7d3'; + } else { $left_background='9abf5b'; $right_background='bbd392'; } + + echo("" . $drive['diskio_descr'] . ""); + + $types = array("diskio_bits", "diskio_ops"); + + foreach($types as $graph_type) { + + echo(''); + + $graph_array['height'] = "100"; + $graph_array['width'] = "215"; + $graph_array['to'] = $now; + $graph_array['id'] = $drive['diskio_id']; + $graph_array['type'] = $graph_type; + + $periods = array('day', 'week', 'month', 'year'); + + foreach($periods as $period) { + $graph_array['from'] = $$period; + $graph_array_zoom = $graph_array; $graph_array_zoom['height'] = "150"; $graph_array_zoom['width'] = "400"; + echo(overlib_link($_SERVER['REQUEST_URI'], generate_graph_tag($graph_array), generate_graph_tag($graph_array_zoom), NULL)); + } + + echo(''); + + } + + $row++; + +} + + echo(""); + +?> diff --git a/includes/discovery/ucd-diskio.inc.php b/includes/discovery/ucd-diskio.inc.php new file mode 100644 index 000000000..1abadc521 --- /dev/null +++ b/includes/discovery/ucd-diskio.inc.php @@ -0,0 +1,52 @@ + $entry) { + + if($entry['diskIONRead'] > "0" || $entry['diskIONWritten'] > "0") { + echo("$index ".$entry['diskIODevice']."\n"); + + if (mysql_result(mysql_query("SELECT COUNT(*) FROM `ucd_diskio` WHERE `device_id` = '".$device['device_id']."' AND `diskio_index` = '".$index."'"),0) == "0") + { + $sql = "INSERT INTO `ucd_diskio` (`device_id`,`diskio_index`,`diskio_descr`) VALUES ('".$device['device_id']."','".$index."','".$entry['diskIODevice']."')"; + mysql_query($sql); echo("+"); + if($debug) { echo($sql . " - " . mysql_affected_rows() . "inserted "); } + } + else + { + echo("."); + ## Need update code here! + } + + $valid_diskio[$index] = 1; + + } ## end validity check + } ## end array foreach + } ## End array if + + +### Remove diskio entries which weren't redetected here + + $sql = "SELECT * FROM `ucd_diskio` where `device_id` = '".$device['device_id']."'"; + $query = mysql_query($sql); + + if($debug) { print_r ($valid_vp); } + + while ($test = mysql_fetch_array($query)) { + if($debug) { echo($test['diskio_index'] . " -> " . $test['diskio_descr'] . "\n"); } + if(!$valid_diskio[$test['diskio_index']]) { + echo("-"); + mysql_query("DELETE FROM `ucd_diskio` WHERE `diskio_id` = '" . $test['diskio_id'] . "'"); + } + } + + unset($valid_diskio); + echo("\n"); + + +?> diff --git a/includes/polling/ucd-diskio.inc.php b/includes/polling/ucd-diskio.inc.php new file mode 100644 index 000000000..32b2be4d5 --- /dev/null +++ b/includes/polling/ucd-diskio.inc.php @@ -0,0 +1,65 @@ + diff --git a/poll-device.php b/poll-device.php index e36ce2694..f5908ed1e 100755 --- a/poll-device.php +++ b/poll-device.php @@ -179,6 +179,7 @@ while ($device = mysql_fetch_array($device_query)) { include("includes/polling/cisco-mac-accounting.inc.php"); include("includes/polling/bgpPeer.inc.php"); include("includes/polling/toner.inc.php"); + include("includes/polling/ucd-diskio.inc.php"); unset( $update ) ; unset( $seperator) ;