source: trunk/Modules/Network/Dostupnost.php@ 386

Last change on this file since 386 was 386, checked in by chronos, 13 years ago
  • Opraveno: Řešení zobrazování navigačního pruhu.
  • Property svn:executable set to *
File size: 5.8 KB
Line 
1<?php
2
3class 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.
26Vš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?>
Note: See TracBrowser for help on using the repository browser.