source: trunk/Modules/Network/dostupnost.php@ 360

Last change on this file since 360 was 315, checked in by george, 14 years ago
  • Upraveno: Příchozí pravidla pro NAT generovat jen pro vybrané místní adresy.
  • Property svn:executable set to *
File size: 5.8 KB
Line 
1<?php
2
3include_once('../global.php');
4
5class Availability extends Page
6{
7 var $FullTitle = 'Dostupnost aktivních prvků sítě';
8 var $ShortTitle = 'Dostupnost sítě';
9 var $PeriodCount = 24;
10 var $Period = array(
11 array('Column' => 'Hour', 'Title' => 'Hodina', 'Period' => 1, 'MinPercent' => 100),
12 array('Column' => 'Day', 'Title' => 'Den', 'Period' => 24, 'MinPercent' => 98),
13 array('Column' => 'Week', 'Title' => 'Týden', 'Period' => 168, 'MinPercent' => 96), // 24 * 7
14 array('Column' => 'Month', 'Title' => 'Měsíc', 'Period' => 720, 'MinPercent' => 93), // 24 * 30
15 array('Column' => 'Year', 'Title' => 'Rok', 'Period' => 8760, 'MinPercent' => 92), // 365 * 24
16 //array('Column' => 'TenYear', 'Title' => 'Desetiletí', 'Period' => 87600), // 365 * 24 * 10
17 );
18
19 function Show()
20 {
21 $Output = '<div style="font-size: small;">Dostupnost zařízení se kontroluje jednou za minutu. Hodnoty u delších intervalů nemusí odpovídat skutečnosti, protože záznam byl spuštěn až v průběhu těchto intervalu.
22Všechny prvky sítě jsou kontrolovány ze směrovačů, tj. pokud vypadne některé blízké zařízení, všechny další zařízení propojené přes něj jsou také nedostupné.</div>';
23 $Output .= '<div align="center">';
24 if(array_key_exists('Period', $_GET)) $Output .= 'Perioda: <a href="?">Smíšená</a> ';
25 else $Output .= 'Perioda: <a href="?"><strong>Smíšená</strong></a> ';
26 foreach($this->Period as $Index => $Period)
27 {
28 if(array_key_exists('Period', $_GET) and ($_GET['Period'] == $Index))
29 $Output .= ' <a href="?Period='.$Index.'"><strong>'.$Period['Title'].'</strong></a>';
30 else $Output .= ' <a href="?Period='.$Index.'">'.$Period['Title'].'</a>';
31 }
32 $Output .= '<br/>';
33
34 $HostTypeList = array();
35 $DbResult = $this->Database->select('NetworkDeviceType', '*');
36 while($DbRow = $DbResult->fetch_assoc())
37 $HostTypeList[$DbRow['Id']] = $DbRow;
38
39
40 $DbResult = $this->Database->query('SELECT COUNT(*) FROM NetworkInterface JOIN NetworkDevice ON NetworkInterface.Device = NetworkDevice.Id WHERE NetworkDevice.Used = 1 AND NetworkDevice.PermanentOnline=1');
41 $DbRow = $DbResult->fetch_row();
42 $PageList = GetPageList($DbRow[0]);
43
44 $Output .= '<br />';
45
46 $Output .= $PageList['Output'];
47 $Output .= '<table class="WideTable" style="font-size: small;">';
48
49 $TableColumns = array(
50 array('Name' => 'Name', 'Title' => 'Jméno'),
51 );
52
53
54 $Join = '';
55 $Columns = '';
56 if(!array_key_exists('Period', $_GET))
57 {
58 foreach($this->Period as $Index => $Period)
59 {
60 $TableColumns[] = array('Name' => $Period['Column'], 'Title' => $Period['Title'].' [%]');
61 $Join .= ' LEFT JOIN (SELECT NetworkInterfaceStat.NetworkInterface, (SUM(NetworkInterfaceStat. PingCount) / '.$Period['Period'].' / 60 * 100) AS Percent FROM NetworkInterfaceStat WHERE (Time > DATE_SUB(NOW(), INTERVAL '.($Period['Period'] + 1).' HOUR)) AND (Time < DATE_SUB(NOW(), INTERVAL 1 HOUR)) GROUP BY NetworkInterface) AS Period'.$Period['Column'].' ON Period'.$Period['Column'].'.NetworkInterface = NetworkInterface.Id';
62 $Columns .= ', Period'.$Period['Column'].'.Percent AS '.$Period['Column'];
63 }
64 } else
65 {
66 if(array_key_exists($_GET['Period'], $this->Period))
67 {
68 for($I = 0; $I < $this->PeriodCount; $I++)
69 {
70 $Period = $this->Period[$_GET['Period']];
71 $TableColumns[] = array('Name' => 'Period'.$I.'Column', 'Title' => $I.' [%]');
72 $Join .= ' LEFT JOIN (SELECT NetworkInterfaceStat.NetworkInterface, (SUM(NetworkInterfaceStat. PingCount) / '.$Period['Period'].' / 60 * 100) AS Percent FROM NetworkInterfaceStat WHERE (Time > DATE_SUB(NOW(), INTERVAL '.($Period['Period'] * ($I + 1) + 1).' HOUR)) AND (Time < DATE_SUB(NOW(), INTERVAL '.($Period['Period'] * $I + 1).' HOUR)) GROUP BY NetworkInterface) AS Period'.$I.' ON Period'.$I.'.NetworkInterface = NetworkInterface.Id';
73 $Columns .= ', Period'.$I.'.Percent AS Period'.$I.'Column';
74 }
75 } else die('Neznámé id');
76 }
77
78 $Order = GetOrderTableHeader($TableColumns, 'Name', 0);
79 $Output .= $Order['Output'];
80
81 $DbResult2 = $this->Database->query('SELECT NetworkInterface.Name AS InterfaceName'.$Columns.', CONCAT(NetworkDevice.Name, "-", NetworkInterface.Name) AS Name, NetworkDevice.Name AS DeviceName FROM NetworkInterface '.$Join.' JOIN NetworkDevice ON NetworkInterface.Device = NetworkDevice.Id WHERE NetworkDevice.Used = 1 AND NetworkDevice.PermanentOnline=1'.$Order['SQL'].$PageList['SQLLimit']);
82 while($Interface = $DbResult2->fetch_assoc())
83 {
84 $Name = $Interface['DeviceName'];
85 if($Interface['InterfaceName'] != '') $Name .= '-'.$Interface['InterfaceName'];
86 $Output .= '<tr><td>'.$Name.'</td>';
87 if(!array_key_exists('Period', $_GET))
88 {
89 foreach($this->Period as $Period)
90 {
91 if($Interface[$Period['Column']] >= $Period['MinPercent']) $Color = ' color: green;';
92 else $Color = 'color: red';
93 $Output .= '<td style="text-align: right;'.$Color.'">'.sprintf('%01.2f', $Interface[$Period['Column']]).'</td>';
94 }
95 } else
96 {
97 if(array_key_exists($_GET['Period'], $this->Period))
98 {
99 for($I = 0; $I < $this->PeriodCount; $I++)
100 {
101 if($Interface['Period'.$I.'Column'] >= $Period['MinPercent']) $Color = ' color: green;';
102 else $Color = 'color: red';
103 $Output .= '<td style="text-align: center;'.$Color.'">'.sprintf('%01.2f', $Interface['Period'.$I.'Column']).'</td>';
104 }
105 } else die('Neznámé id');
106 }
107 $Output .= '</tr>';
108 }
109 $Output .= '</table></div>';
110 $Output .= $PageList['Output'];
111 return($Output);
112 }
113}
114
115$System->AddModule(new Availability());
116$System->Modules['Availability']->GetOutput();
117
118?>
Note: See TracBrowser for help on using the repository browser.