1 | <?php
|
---|
2 |
|
---|
3 | include_once('../global.php');
|
---|
4 |
|
---|
5 | class 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.
|
---|
22 | 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>';
|
---|
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 | ?>
|
---|