Changeset 4 for www/is/topologie-img.php
- Timestamp:
- Jan 14, 2008, 9:48:39 PM (17 years ago)
- Location:
- www
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
www
-
Property svn:ignore
set to
config.php
php_script_error.log
-
Property svn:ignore
set to
-
www/is/topologie-img.php
r1 r4 1 <? // Skript pro generování grafu stromové struktury sítì do PNG obrázku 2 include('../db.php'); 3 DB_Init('localhost','root','','is'); 4 1 <?php 2 // Skript pro generování grafu stromové struktury sítě do PNG obrázku 3 include('../global.php'); 5 4 6 5 if(array_key_exists('debug', $_GET)) $debug = $_GET['debug']; … … 9 8 // $debug = 0; 10 9 11 // === Zpìtné vyvá¾ení stromu do hloubky ======================================= 12 function balance($id, $level, &$vlast, &$vleft, &$vpred, &$vfirst, &$vnext, &$tbound, &$width, $limit) { 10 // === Zpětné vyvážení stromu do hloubky ======================================= 11 function balance($id, $level, &$vlast, &$vleft, &$vpred, &$vfirst, &$vnext, &$tbound, &$width, $limit) 12 { 13 13 global $debug, $bbound; 14 if ($i=@$vfirst[$id]) { 14 15 if ($i=@$vfirst[$id]) 16 { 15 17 if ($debug==2) echo @$id.':'.@$i.','.@$vpred[$i].'-'.@$vleft[@$vpred[$i]]."\n"; 16 if ((@$vlast[$id]>0)&&(@$vleft[$id]>@$vleft[$vlast[$id]])) { 18 if ((@$vlast[$id]>0)&&(@$vleft[$id]>@$vleft[$vlast[$id]])) 19 { 17 20 $diff=$vleft[$id]-$vleft[$vlast[$id]]; 18 21 $i=$vfirst[$id]; 19 if ($vleft[$id]>=@$tbound[$level]) { 22 if ($vleft[$id]>=@$tbound[$level]) 23 { 20 24 $tbound[$level]=$vleft[$id]+2; 21 25 if ($vleft[$id]>$width) $width=$vleft[$id]; … … 23 27 } else { 24 28 $diff=0; 25 if ($vpred[$i]&&($vleft[$i]<=$vleft[$vpred[$i]])) { 29 if ($vpred[$i]&&($vleft[$i]<=$vleft[$vpred[$i]])) 30 { 26 31 $diff=$vleft[$i]-$vleft[$vpred[$i]]+2; 27 32 } else $i = 0; 28 33 } 29 while ($i>0) { 34 while ($i>0) 35 { 30 36 $vleft[$i]+=$diff; 31 37 $limit = balance($i,$level+1, $vlast,$vleft,$vpred, $vfirst,$vnext,$tbound, $width, $limit) + 2; … … 36 42 37 43 // === Generování rovinné stromové struktury =================================== 38 function gentree($mode) { // depth-first algorithm 39 global $debug, $TopHostName; 44 function gentree($mode) // depth-first algorithm 45 { 46 global $debug, $TopHostName, $Database; 47 40 48 // --- Inicializace ---------------------------------------------------------- 41 $tbound =array(); // Hranice pozic jednotlivých úrovní42 $tranger =array(); // Hranicni prvek43 $position =array(); // Pozice aktuálního prvku na dané úrovni44 $vfirst =array(); // První potomek prvku45 $vlast =array(); // Poslední potomek prvku46 $vnext =array(); // Následující sourozenec47 $vleft =array(); // Pozice prvku zleva48 $vtop =array(); // Pozice prvku shora49 $vpred =array(); // Vedlejsi prvek na øádku49 $tbound = array(); // Hranice pozic jednotlivých úrovní 50 $tranger = array(); // Hranicni prvek 51 $position = array(); // Pozice aktuálního prvku na dané úrovni 52 $vfirst = array(); // První potomek prvku 53 $vlast = array(); // Poslední potomek prvku 54 $vnext = array(); // Následující sourozenec 55 $vleft = array(); // Pozice prvku zleva 56 $vtop = array(); // Pozice prvku shora 57 $vpred = array(); // Vedlejsi prvek na řádku 50 58 51 59 $index = 0; // Index aktuálního prvku 52 60 $curr = 0; // Aktuální prvek 53 $level = 0; // Aktuální úrove òhloubky ve stromu54 $width = 0; // ©íøka stromu61 $level = 0; // Aktuální úroveň hloubky ve stromu 62 $width = 0; // Šířka stromu 55 63 $height = 0; // Hloubka stromu 56 64 57 $parent[$level]=0; // Rodi è dané úrovnì65 $parent[$level]=0; // Rodič dané úrovně 58 66 $position[$level]=0; // Aktuální pozice prvku na dané úrovni 59 $count[$level]=0; // Po èet prvkùna dané úrovni67 $count[$level]=0; // Počet prvků na dané úrovni 60 68 61 69 // --- Hlavní cyklus --------------------------------------------------------- 62 do { 63 // --- Proveï databázový dotaz ----------------------------------------------- 70 do 71 { 72 // --- Proveď databázový dotaz ----------------------------------------------- 64 73 $query = 'SELECT * FROM hosts WHERE used=1 AND '; 65 if ($level==0) { $query .= 'name = "'.$TopHostName.'" ORDER BY id'; } else { 74 if ($level==0) 75 { 76 $query .= 'name = "'.$TopHostName.'" ORDER BY id'; 77 } else 78 { 66 79 $query .= ' parent = '.$parent[$level].' ORDER BY id'; 67 80 } 68 81 if ($mode) $query.=' DESC'; 69 82 $query .= ' LIMIT '.$position[$level].',1'; 70 DB_Query($query);71 $item = DB_Row();83 $DbResult = $Database->query($query); 84 $item = $DbResult->fetch_array(); 72 85 if ($item) { 73 // --- Zpracování polo¾ky z DB ----------------------------------------------- 74 if ($position[$level]>0) { 75 $vnext[$curr]=$item['id']; // Neprvní polo¾ka, nastav pøedchozí 86 // --- Zpracování položky z DB ----------------------------------------------- 87 if($position[$level] > 0) 88 { 89 $vnext[$curr]=$item['id']; // Neprvní položka, nastav předchozí 76 90 } 77 91 $curr = $item['id']; 78 if ($curr >@$maxindex) $maxindex=$curr;79 if ($position[$level] ==0) $vfirst[$parent[$level]]=$curr; // První polo¾ka, nastav první92 if ($curr > @$maxindex) $maxindex=$curr; 93 if ($position[$level] == 0) $vfirst[$parent[$level]]=$curr; // První položka, nastav první 80 94 $vlast[$parent[$level]]=$curr; 81 95 $vtop[$curr] = $level; … … 83 97 $vpred[$curr] = @$tranger[$level]; 84 98 $tranger[$level] = $curr; 85 if (($debug ==3)&&($level==8)) echo $curr.',';99 if (($debug == 3) && ($level == 8)) echo $curr.','; 86 100 $position[$level]++; 87 101 $count[$level]++; 88 // --- Zjisti existenci potomkù ---------------------------------------------- 89 DB_Query("SELECT COUNT(*) FROM hosts WHERE used=1 AND parent = ".$curr); 90 $childcnt = DB_Row(); 91 if ($childcnt[0]>0) { // Uzelový vrchol 92 if (@$tbound[$level+1]>$vleft[$curr]) $vleft[$curr]=@$tbound[$level+1]; 93 } 94 $tbound[$level]=$vleft[$curr]+2; 95 if ($vleft[$curr]>$width) $width=$vleft[$curr]; 96 if ($childcnt[0]>0) { 102 // --- Zjisti existenci potomků ---------------------------------------------- 103 $DbResult = $Database->query("SELECT COUNT(*) FROM hosts WHERE used=1 AND parent = ".$curr); 104 $childcnt = $DbResult->fetch_array(); 105 if ($childcnt[0] > 0) 106 { // Uzelový vrchol 107 if(@$tbound[$level + 1] > $vleft[$curr]) $vleft[$curr] = @$tbound[$level + 1]; 108 } 109 $tbound[$level] = $vleft[$curr] + 2; 110 if ($vleft[$curr] > $width) $width = $vleft[$curr]; 111 if ($childcnt[0] > 0) 112 { 97 113 $level++; 98 if ($level >$height) $height = $level;99 $parent[$level] =$curr;114 if ($level > $height) $height = $level; 115 $parent[$level] = $curr; 100 116 $position[$level]=0; 101 117 $count[$level] = 0; 102 118 } else $index++; // Listový vrchol 103 119 } else { 104 // --- Zarovnávání prvk ù kvùli vzhledu120 // --- Zarovnávání prvků kvůli vzhledu 105 121 if (@$vleft[$vfirst[$parent[$level]]]>@$vleft[$parent[$level]]) { 106 122 $vleft[$parent[$level]] = $vleft[$vfirst[$parent[$level]]]; … … 115 131 if (@$tbound[$level]>@$tbound[$level+1]) $tbound[$level+1]=$tbound[$level]; 116 132 } 117 } while ($level>=0);133 } while($level >= 0); 118 134 $data = compact('tbound','count','tbound','vfirst','vlast','vtop','vleft','height','width','index','maxindex'); 119 135 return $data; 120 136 }; 121 137 122 // === Vytvo østromy a spoj je =================================================138 // === Vytvoř stromy a spoj je ================================================= 123 139 extract(gentree(0)); 124 140 // exit(); … … 131 147 $halfx=$spacex/2; 132 148 $halfy=$spacey/2; 133 // === Na ètení pomocných obrázkù===============================================149 // === Načtení pomocných obrázků =============================================== 134 150 $im_comp = @imagecreatefrompng('images/comp.png'); 135 151 $im_dev = @imagecreatefrompng('images/device.png'); … … 148 164 } 149 165 150 DB_Query("SELECT * FROM hosts WHERE used=1"); 151 while ($item = DB_Row()) { 166 $DbResult = $Database->query("SELECT * FROM hosts WHERE used=1"); 167 while ($item = $DbResult->fetch_array()) 168 { 152 169 $id = $item['id']; 153 if ((@$vtop[$id]>0)||($item['name']==$TopHostName)) { 170 if ((@$vtop[$id]>0)||($item['name']==$TopHostName)) 171 { 154 172 if ($vtop[$id]>0) imageline($im,xpos($id)+$halfx,@$vtop[$id]*$spacey,xpos($id)+$halfx,@$vtop[$id]*$spacey+8,$black); 155 173 if (@$vfirst[$id]>0) { … … 159 177 $ip=explode('.',$item['IP']); 160 178 if (@$ip[3]<100) { $image=$im_comp; } else $image=$im_dev; 161 if(($ip[0] != 192) and ($ip[0] != 168)) { 179 if(($ip[0] != 192) and ($ip[0] != 168)) 180 { 162 181 $image = $im_dev; 163 182 } 164 if($item['IP'] == '') { 183 if($item['IP'] == '') 184 { 165 185 $color = $gray; 166 186 $image = $im_dev; 167 187 } else { 168 if ((($ip[0] != 192) and ($ip[0] != 168)) or ($ip[3]>=100) or ($ip[3]==1)) { 188 if ((($ip[0] != 192) and ($ip[0] != 168)) or ($ip[3]>=100) or ($ip[3]==1)) 189 { 169 190 if($item['online'] == 1) { $color = $green; } else $color = $red; 170 191 } else { … … 186 207 { 187 208 header("Content-type: image/png"); 188 header("Cache-Control: no-cache"); // Dynamický graf, neke ¹ovat209 header("Cache-Control: no-cache"); // Dynamický graf, nekešovat 189 210 imagepng($im); 190 211 imagedestroy($im);
Note:
See TracChangeset
for help on using the changeset viewer.