source: trunk/Modules/NetworkTopology/NetworkTopology.php@ 548

Last change on this file since 548 was 548, checked in by chronos, 12 years ago
  • Odstraněno: Ukončovací PHP značka.
File size: 6.1 KB
Line 
1<?php
2
3class PageNetworkTopology extends Page
4{
5 var $FullTitle = 'Grafické zobrazení topologie sítě';
6 var $ShortTitle = 'Topologie sítě';
7 var $ParentClass = 'PagePortal';
8 var $TopHostName = 'NIX-ROUTER';
9
10 function Show()
11 {
12 if(count($this->System->PathItems) > 1)
13 {
14 if($this->System->PathItems[1] == 'topologie.png') return($this->ShowImage());
15 else return(PAGE_NOT_FOUND);
16
17 } else return($this->ShowOverview());
18 }
19
20 function ShowImage()
21 {
22 $this->SimplePage = true;
23 $this->FormatHTML = false;
24
25 if(array_key_exists('debug', $_GET)) $debug = $_GET['debug'];
26 else $debug = 0;
27
28 // Vytvoř stromy a ulož výsledek do databáze
29 $DbResult = $this->Database->query("SELECT MAX(Pos), MAX(Depth) FROM NetworkTopology");
30 $item = $DbResult->fetch_array();
31 $width = $item[0];
32 $height = $item[1];
33
34 $spacex = 32;
35 $spacey = 68;
36 $halfx = $spacex / 2;
37 $halfy = $spacey / 2;
38 // Načtení pomocných obrázků
39 $im_comp = imagecreatefrompng(dirname(__FILE__).'/images/comp.png');
40 $im_dev = imagecreatefrompng(dirname(__FILE__).'/images/device.png');
41 // Generování obrázku
42 $im = imagecreate(($width + 1.6) * $spacex, ($height + 1) * $spacey);
43 $background_color = imagecolorallocate($im, 255, 255, 255);
44 $black = imagecolorallocate($im, 0, 0, 0);
45 $red = imagecolorallocate($im, 255, 0, 0);
46 $green = imagecolorallocate($im, 0, 128, 0);
47 $blue = imagecolorallocate($im, 100, 100, 255);
48 $gray = imagecolorallocate($im, 160, 160, 160);
49
50 //$DbResult = $Database->query("SELECT * FROM hosts, NetworkTopology WHERE host = id AND used=1");
51 $DbResult = $this->Database->query('SELECT NetworkTopology.*, NetworkTopology.Host AS Id, '.
52 'NetworkDevice.Name AS Name, '.
53 'NetworkDevice.Online AS Online, NetworkDeviceType.IconName AS IconName, 1 AS ShowOnline '.
54 'FROM NetworkTopology LEFT JOIN NetworkDevice ON NetworkDevice.Id = NetworkTopology.Host '.
55 'LEFT JOIN NetworkDeviceType ON NetworkDevice.Type = NetworkDeviceType.Id');
56 while($item = $DbResult->fetch_array())
57 {
58 $id = $item['Id'];
59 $vleft = $item['Pos'];
60 $vtop = $item['Depth'];
61 $vfirst = $item['First'];
62 $vlast = $item['Last'];
63 $xpos = $vleft * $spacex;
64 if(($vtop > 0) or ($item['Name'] == $this->TopHostName))
65 {
66 if($vtop > 0) imageline($im, $xpos + $halfx, $vtop * $spacey, $xpos + $halfx, $vtop * $spacey + 8, $black);
67 if($vfirst >= 0)
68 {
69 imageline($im, $vfirst*$spacex + $halfx, $vtop * $spacey + $spacey, $vlast*$spacex + $halfx, $vtop * $spacey + $spacey, $black);
70 imageline($im, $xpos + $halfx, ($vtop + 1) * $spacey - 10, $xpos + $halfx, ($vtop + 1) * $spacey, $black);
71 }
72 // $ip = explode('.',$item['IP']);
73 // if(!array_key_exists(3, $ip)) $ip[3] = '';
74 if($item['IconName'] == 'comp')
75 {
76 if($item['Online'] == 1) $color = $green;
77 else $color = $black;
78 $image = $im_comp;
79 } else $image = $im_dev;
80 if($item['IconName'] == 'device')
81 {
82 if($item['Online'] == 1) $color = $green;
83 else $color = $red;
84 $image = $im_dev;
85 }
86 if($item['ShowOnline'] == 0)
87 {
88 $color = $gray;
89 $image = $im_dev;
90 }
91 // $text='IP: '.$ip[0];
92 // imagestring($im,2,xpos($id)+($spacex-strlen($text)*imagefontwidth(2))/2,$vtop[$id]*$spacey+24+imagefontheight(2),$text,$black);
93 imagecopy($im, $image, $xpos+$halfx-15, $vtop*$spacey+12, 0, 0, 30, 30);
94 // imagerectangle($im,xpos($id)+$halfx-6,$vtop[$id]*$spacey+16,xpos($id)+$halfx+6,$vtop[$id]*$spacey+28,$color);
95 if ($debug) {
96 imagestring($im, 2, $xpos+($spacex-strlen($item['Id'])*imagefontwidth(2))/2, $vtop*$spacey+31+imagefontheight(2), $item['Id'], $color);
97 } else imagestring($im,2,$xpos+($spacex-strlen($item['Name'])*imagefontwidth(2))/2, $vtop*$spacey+31+imagefontheight(2), $item['Name'], $color);
98 }
99 }
100
101 // === Sestavení výsledného souboru ============================================
102 if($debug == 0)
103 {
104 Header("Content-type: image/png");
105 Header("Cache-Control: no-cache"); // Dynamický graf, nekešovat
106 imagepng($im);
107 imagedestroy($im);
108 imagedestroy($im_comp);
109 imagedestroy($im_dev);
110 }
111 return('');
112 }
113
114 function ShowOverview()
115 {
116 $Output = '<img src="topologie.png"><br/>
117<p>Vysvětlivky: Obrázek znázorňuje připojení prvků sítě do internetu.<br/>
118<img src="Modules/NetworkTopology/images/comp.png"> Je počítač zapojený v síti a pod ním je uvedeno jeho jméno.
119<span style="color:green">Zelená barva</span> znamená, že počitač je zapnutý a
120online. Černá barva znamená, že počítač je vypnutý, nebo není online.<br/>
121<img src="Modules/NetworkTopology/images/device.png"> Představuje komunikační zařízení připojené do sítě, které
122mají běžet nepřetržitě. Pokud je zařízení online, je text pod ním zobrazen
123<span style="color:green">zelenou barvou</span>, pokud není online, je zobrazen
124<span style="color:red">červenou barvou</span>. Dostupnost prvků je kontrolována
125z počítače Centrála, takže při výpadku zařízení nebude možné zjistit stav
126zařízení, které jsou přes něj připojeny. U zařízení, kde není stav možné
127zjišťovat je použita <span style="color:gray">šedá barvou</span>.</p>';
128 return($Output);
129 }
130}
131
132class ModuleNetworkTopology extends AppModule
133{
134 function __construct($System)
135 {
136 parent::__construct($System);
137 $this->Name = 'NetworkTopology';
138 $this->Version = '1.0';
139 $this->Creator = 'Chronos';
140 $this->License = 'GNU/GPL';
141 $this->Description = 'Generate image of network device interconnection';
142 $this->Dependencies = array('Network');
143 }
144
145 function Install()
146 {
147 parent::Install();
148 }
149
150 function UnInstall()
151 {
152 parent::UnInstall();
153 }
154
155 function Start()
156 {
157 parent::Start();
158 $this->System->RegisterPage('topologie', 'PageNetworkTopology');
159 }
160}
Note: See TracBrowser for help on using the repository browser.