1 | <?php
|
---|
2 |
|
---|
3 | class AvailabilityPage extends Page
|
---|
4 | {
|
---|
5 | var $PeriodCount = 24;
|
---|
6 | var $Period = array(
|
---|
7 | array('Column' => 'Hour', 'Title' => 'Hodina', 'Period' => 1, 'MinPercent' => 100),
|
---|
8 | array('Column' => 'Day', 'Title' => 'Den', 'Period' => 24, 'MinPercent' => 98),
|
---|
9 | array('Column' => 'Week', 'Title' => 'Týden', 'Period' => 168, 'MinPercent' => 96), // 24 * 7
|
---|
10 | array('Column' => 'Month', 'Title' => 'Měsíc', 'Period' => 720, 'MinPercent' => 93), // 24 * 30
|
---|
11 | array('Column' => 'Year', 'Title' => 'Rok', 'Period' => 8760, 'MinPercent' => 92), // 365 * 24
|
---|
12 | //array('Column' => 'TenYear', 'Title' => 'Desetiletí', 'Period' => 87600), // 365 * 24 * 10
|
---|
13 | );
|
---|
14 |
|
---|
15 | function __construct()
|
---|
16 | {
|
---|
17 | parent::__construct();
|
---|
18 | $this->FullTitle = 'Dostupnost aktivních prvků sítě';
|
---|
19 | $this->ShortTitle = 'Dostupnost sítě';
|
---|
20 | $this->NavigationPath[] = array('Name' => $this->ShortTitle, 'URL' => 'dostupnost');
|
---|
21 | }
|
---|
22 |
|
---|
23 | function Show()
|
---|
24 | {
|
---|
25 | $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.
|
---|
26 | Vš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>';
|
---|
27 | $Output .= '<div align="center">';
|
---|
28 | if(array_key_exists('Period', $_GET)) $Output .= 'Perioda: <a href="?">Smíšená</a> ';
|
---|
29 | else $Output .= 'Perioda: <a href="?"><strong>Smíšená</strong></a> ';
|
---|
30 | foreach($this->Period as $Index => $Period)
|
---|
31 | {
|
---|
32 | if(array_key_exists('Period', $_GET) and ($_GET['Period'] == $Index))
|
---|
33 | $Output .= ' <a href="?Period='.$Index.'"><strong>'.$Period['Title'].'</strong></a>';
|
---|
34 | else $Output .= ' <a href="?Period='.$Index.'">'.$Period['Title'].'</a>';
|
---|
35 | }
|
---|
36 | $Output .= '<br/>';
|
---|
37 |
|
---|
38 | $HostTypeList = array();
|
---|
39 | $DbResult = $this->Database->select('NetworkDeviceType', '*');
|
---|
40 | while($DbRow = $DbResult->fetch_assoc())
|
---|
41 | $HostTypeList[$DbRow['Id']] = $DbRow;
|
---|
42 |
|
---|
43 |
|
---|
44 | $DbResult = $this->Database->query('SELECT COUNT(*) FROM NetworkInterface JOIN NetworkDevice ON NetworkInterface.Device = NetworkDevice.Id WHERE NetworkDevice.Used = 1 AND NetworkDevice.PermanentOnline=1');
|
---|
45 | $DbRow = $DbResult->fetch_row();
|
---|
46 | $PageList = GetPageList($DbRow[0]);
|
---|
47 |
|
---|
48 | $Output .= '<br />';
|
---|
49 |
|
---|
50 | $Output .= $PageList['Output'];
|
---|
51 | $Output .= '<table class="WideTable" style="font-size: small;">';
|
---|
52 |
|
---|
53 | $TableColumns = array(
|
---|
54 | array('Name' => 'Name', 'Title' => 'Jméno'),
|
---|
55 | );
|
---|
56 |
|
---|
57 |
|
---|
58 | $Join = '';
|
---|
59 | $Columns = '';
|
---|
60 | if(!array_key_exists('Period', $_GET))
|
---|
61 | {
|
---|
62 | foreach($this->Period as $Index => $Period)
|
---|
63 | {
|
---|
64 | $TableColumns[] = array('Name' => $Period['Column'], 'Title' => $Period['Title'].' [%]');
|
---|
65 | $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';
|
---|
66 | $Columns .= ', Period'.$Period['Column'].'.Percent AS '.$Period['Column'];
|
---|
67 | }
|
---|
68 | } else
|
---|
69 | {
|
---|
70 | if(array_key_exists($_GET['Period'], $this->Period))
|
---|
71 | {
|
---|
72 | for($I = 0; $I < $this->PeriodCount; $I++)
|
---|
73 | {
|
---|
74 | $Period = $this->Period[$_GET['Period']];
|
---|
75 | $TableColumns[] = array('Name' => 'Period'.$I.'Column', 'Title' => $I.' [%]');
|
---|
76 | $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';
|
---|
77 | $Columns .= ', Period'.$I.'.Percent AS Period'.$I.'Column';
|
---|
78 | }
|
---|
79 | } else die('Neznámé id');
|
---|
80 | }
|
---|
81 |
|
---|
82 | $Order = GetOrderTableHeader($TableColumns, 'Name', 0);
|
---|
83 | $Output .= $Order['Output'];
|
---|
84 |
|
---|
85 | $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']);
|
---|
86 | while($Interface = $DbResult2->fetch_assoc())
|
---|
87 | {
|
---|
88 | $Name = $Interface['DeviceName'];
|
---|
89 | if($Interface['InterfaceName'] != '') $Name .= '-'.$Interface['InterfaceName'];
|
---|
90 | $Output .= '<tr><td>'.$Name.'</td>';
|
---|
91 | if(!array_key_exists('Period', $_GET))
|
---|
92 | {
|
---|
93 | foreach($this->Period as $Period)
|
---|
94 | {
|
---|
95 | if($Interface[$Period['Column']] >= $Period['MinPercent']) $Color = ' color: green;';
|
---|
96 | else $Color = 'color: red';
|
---|
97 | $Output .= '<td style="text-align: right;'.$Color.'">'.sprintf('%01.2f', $Interface[$Period['Column']]).'</td>';
|
---|
98 | }
|
---|
99 | } else
|
---|
100 | {
|
---|
101 | if(array_key_exists($_GET['Period'], $this->Period))
|
---|
102 | {
|
---|
103 | for($I = 0; $I < $this->PeriodCount; $I++)
|
---|
104 | {
|
---|
105 | if($Interface['Period'.$I.'Column'] >= $Period['MinPercent']) $Color = ' color: green;';
|
---|
106 | else $Color = 'color: red';
|
---|
107 | $Output .= '<td style="text-align: center;'.$Color.'">'.sprintf('%01.2f', $Interface['Period'.$I.'Column']).'</td>';
|
---|
108 | }
|
---|
109 | } else die('Neznámé id');
|
---|
110 | }
|
---|
111 | $Output .= '</tr>';
|
---|
112 | }
|
---|
113 | $Output .= '</table></div>';
|
---|
114 | $Output .= $PageList['Output'];
|
---|
115 | return($Output);
|
---|
116 | }
|
---|
117 | }
|
---|
118 |
|
---|
119 | ?>
|
---|