wan.php 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. <?php
  2. require_once ($_SERVER['DOCUMENT_ROOT']."/inc/auth.php");
  3. require_once ($_SERVER['DOCUMENT_ROOT']."/inc/languages/" . HTML_LANG . ".php");
  4. require_once ($_SERVER['DOCUMENT_ROOT']."/inc/header.php");
  5. require_once ($_SERVER['DOCUMENT_ROOT']."/inc/datetimefilter.php");
  6. require_once ($_SERVER['DOCUMENT_ROOT']."/inc/gatefilter.php");
  7. print_reports_submenu($page_url);
  8. function print_gateway_statistics($db, $device_id, $device_name, $date1, $date2) {
  9. $start_time = new DateTimeImmutable($date1);
  10. $stop_time = new DateTimeImmutable($date2);
  11. $interval = $stop_time->diff($start_time, true);
  12. $delta = (int)$interval->format("%a");
  13. // === Определяем СУБД ===
  14. $db_type = $db->getAttribute(PDO::ATTR_DRIVER_NAME);
  15. // === Формат даты в зависимости от СУБД и периода ===
  16. if ($delta == 1) {
  17. $mysql_format = '%Y-%m-%d %H:00:00';
  18. $pg_format = 'YYYY-MM-DD HH24:00:00';
  19. } elseif ($delta > 1 && $delta <= 31) {
  20. $mysql_format = '%Y-%m-%d';
  21. $pg_format = 'YYYY-MM-DD';
  22. } else {
  23. $mysql_format = '%Y-%m';
  24. $pg_format = 'YYYY-MM';
  25. }
  26. $l3_interfaces = get_wan_interfaces($db, $device_id);
  27. $global_int_in = $global_int_out = $global_int_f_in = $global_int_f_out = 0;
  28. echo "<tr><td class=\"info\" colspan=\"5\"><b>" . htmlspecialchars($device_name, ENT_QUOTES, 'UTF-8') . "</b></td></tr>\n";
  29. foreach ($l3_interfaces as $row) {
  30. $name = htmlspecialchars($row['name'], ENT_QUOTES, 'UTF-8');
  31. $desc = !empty($row['description'])
  32. ? ' (' . htmlspecialchars($row['description'], ENT_QUOTES, 'UTF-8') . ')'
  33. : '';
  34. echo "<tr><td class=\"data\" colspan=\"5\"><b>{$name}{$desc}</b></td></tr>\n";
  35. echo "<tr class=\"info\">\n";
  36. echo "<td>" . WEB_date . "</td>\n";
  37. echo "<td>" . WEB_title_input . "</td>\n";
  38. echo "<td>" . WEB_title_output . "</td>\n";
  39. echo "<td>" . WEB_title_forward_input . "</td>\n";
  40. echo "<td>" . WEB_title_forward_output . "</td>\n";
  41. echo "</tr>\n";
  42. // === Параметризованный запрос ===
  43. $params = [$device_id, $row['snmpin'], $date1, $date2];
  44. if ($db_type === 'mysql') {
  45. $date_expr = "DATE_FORMAT(ts, '$mysql_format')";
  46. $sql = "
  47. SELECT
  48. $date_expr AS dt,
  49. SUM(bytes_in) AS byte_in,
  50. SUM(bytes_out) AS byte_out,
  51. SUM(forward_in) AS byte_f_in,
  52. SUM(forward_out) AS byte_f_out
  53. FROM wan_stats
  54. WHERE router_id = ? AND interface_id = ? AND ts >= ? AND ts < ?
  55. GROUP BY $date_expr
  56. ORDER BY dt";
  57. } elseif ($db_type === 'pgsql') {
  58. $date_expr = "TO_CHAR(ts, '$pg_format')";
  59. $sql = "
  60. SELECT
  61. $date_expr AS dt,
  62. SUM(bytes_in) AS byte_in,
  63. SUM(bytes_out) AS byte_out,
  64. SUM(forward_in) AS byte_f_in,
  65. SUM(forward_out) AS byte_f_out
  66. FROM wan_stats
  67. WHERE router_id = ? AND interface_id = ? AND ts >= ? AND ts < ?
  68. GROUP BY $date_expr
  69. ORDER BY dt";
  70. } else {
  71. throw new Exception("Unsupported DB: $db_type");
  72. }
  73. $int_statistics = get_records_sql($db, $sql, $params);
  74. $int_in = $int_out = $int_f_in = $int_f_out = 0;
  75. foreach ($int_statistics as $stat) {
  76. echo "<tr align=\"center\" class=\"tr1\" onmouseover=\"className='tr2'\" onmouseout=\"className='tr1'\">\n";
  77. echo "<td class=\"data\">" . htmlspecialchars($stat['dt'], ENT_QUOTES, 'UTF-8') . "</td>\n";
  78. echo "<td class=\"data\">" . fbytes($stat['byte_in']) . "</td>\n";
  79. echo "<td class=\"data\">" . fbytes($stat['byte_out']) . "</td>\n";
  80. echo "<td class=\"data\">" . fbytes($stat['byte_f_in']) . "</td>\n";
  81. echo "<td class=\"data\">" . fbytes($stat['byte_f_out']) . "</td>\n";
  82. echo "</tr>\n";
  83. $int_in += $stat['byte_in'];
  84. $int_out += $stat['byte_out'];
  85. $int_f_in += $stat['byte_f_in'];
  86. $int_f_out += $stat['byte_f_out'];
  87. }
  88. echo "<tr align=\"center\" class=\"tr1\" onmouseover=\"className='tr2'\" onmouseout=\"className='tr1'\">\n";
  89. echo "<td class=\"data\"><b>" . WEB_title_itog . "</b></td>\n";
  90. echo "<td class=\"data\">" . fbytes($int_in) . "</td>\n";
  91. echo "<td class=\"data\">" . fbytes($int_out) . "</td>\n";
  92. echo "<td class=\"data\">" . fbytes($int_f_in) . "</td>\n";
  93. echo "<td class=\"data\">" . fbytes($int_f_out) . "</td>\n";
  94. echo "</tr>\n";
  95. $global_int_in += $int_in;
  96. $global_int_out += $int_out;
  97. $global_int_f_in += $int_f_in;
  98. $global_int_f_out += $int_f_out;
  99. }
  100. echo "<tr align=\"center\" class=\"tr1\" onmouseover=\"className='tr2'\" onmouseout=\"className='tr1'\">\n";
  101. echo "<td class=\"data\" colspan=\"5\"><b>" . WEB_title_itog . "</b></td></tr>\n";
  102. echo "<tr align=\"center\" class=\"tr1\" onmouseover=\"className='tr2'\" onmouseout=\"className='tr1'\">\n";
  103. echo "<td class=\"data\"></td>\n";
  104. echo "<td class=\"data\">" . fbytes($global_int_in) . "</td>\n";
  105. echo "<td class=\"data\">" . fbytes($global_int_out) . "</td>\n";
  106. echo "<td class=\"data\">" . fbytes($global_int_f_in) . "</td>\n";
  107. echo "<td class=\"data\">" . fbytes($global_int_f_out) . "</td>\n";
  108. echo "</tr>\n";
  109. }
  110. ?>
  111. <div id="cont">
  112. <form action="wan.php" method="post">
  113. <?php print_date_fields($date1,$date2,$date_shift); ?>
  114. <?php echo WEB_cell_gateway; ?>:&nbsp<?php print_gateway_select($db_link, 'gateway', $rgateway); ?>
  115. <input type="submit" value="<?php echo WEB_btn_show; ?>">
  116. </form>
  117. <br>
  118. <br>
  119. <table class="data">
  120. <?php
  121. if ($rgateway==0) {
  122. $gateways = get_gateways($db_link);
  123. foreach ($gateways as $key => $val) {
  124. print_gateway_statistics($db_link,$key,$val,$date1,$date2);
  125. }
  126. } else {
  127. $router = get_record_sql($db_link,"SELECT device_name FROM devices WHERE id=?", [ $rgateway ]);
  128. print_gateway_statistics($db_link,$rgateway,$router['device_name'],$date1,$date2);
  129. }
  130. ?>
  131. </table>
  132. <?php
  133. require_once ($_SERVER['DOCUMENT_ROOT']."/inc/footer.php");
  134. ?>