Ignore:
Timestamp:
Jan 18, 2012, 10:58:27 AM (13 years ago)
Author:
chronos
Message:
  • Opraveno: Generovalo se na výstup chybně odřádkování před začátek dokumentu díky nadbytečnému odřádkování za ukončením php v souboru Meals.php. Pak nebylo možné generovat dynamicky obrázky.
  • Upraveno: Generování topologie přesunuto do systémového modulu NetworkTopology.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Modules/NetworkTopology/NetworkTopology.php

    r357 r358  
    11<?php
     2
     3function xpos()
     4{
     5  global $vleft, $spacex;
     6  return($vleft * $spacex);
     7}
     8
     9class NetworkTopologyPage extends Page
     10{
     11  var $FullTitle = 'Grafické zobrazení topologie sítě';
     12  var $ShortTitle = 'Topologie sítě';
     13  var $TopHostName = 'NIX-ROUTER';
     14 
     15  function Show()
     16  {
     17    if(count($this->System->PathItems) > 1)
     18    {
     19      if($this->System->PathItems[1] == 'topologie.png') return($this->ShowImage());
     20        else return(PAGE_NOT_FOUND);
     21     
     22    } else return($this->ShowOverview());
     23  }
     24 
     25  function ShowImage()
     26  {
     27    $this->SimplePage = true;
     28    $this->FormatHTML = false;
     29   
     30    if(array_key_exists('debug', $_GET)) $debug = $_GET['debug'];
     31      else $debug = 0;
     32    // $debug = 0;
     33
     34    // === Vytvoř stromy a ulož výsledek do databáze ===============================
     35    $DbResult = $this->Database->query("SELECT MAX(pos), MAX(depth) FROM hosts_topology");
     36    $item = $DbResult->fetch_array();
     37    $width = $item[0];
     38    $height = $item[1];
     39 
     40    $spacex = 32;
     41    $spacey = 68;
     42$halfx = $spacex / 2;
     43$halfy = $spacey / 2;
     44// === Načtení pomocných obrázků ===============================================
     45$im_comp = imagecreatefrompng(dirname(__FILE__).'/images/comp.png');
     46$im_dev = imagecreatefrompng(dirname(__FILE__).'/images/device.png');
     47// === Generování obrázku ======================================================
     48$im = imagecreate(($width + 1.6) * $spacex, ($height + 1) * $spacey);
     49$background_color = imagecolorallocate($im, 255, 255, 255);
     50$black = imagecolorallocate($im, 0, 0, 0);
     51$red = imagecolorallocate($im, 255, 0, 0);
     52$green = imagecolorallocate($im, 0, 128, 0);
     53$blue = imagecolorallocate($im, 100, 100, 255);
     54$gray = imagecolorallocate($im, 160, 160, 160);
     55
     56//$DbResult = $Database->query("SELECT * FROM hosts, hosts_topology WHERE host = id AND used=1");
     57$DbResult = $this->Database->query("SELECT tpl.*, tpl.host AS id, dev.name AS name, dev.online AS online, dtp.iconname AS iconname, 1 AS showonline
     58  FROM hosts_topology tpl LEFT JOIN NetworkDevice dev ON dev.id = tpl.host LEFT JOIN NetworkDeviceType dtp ON dev.type = dtp.id");
     59while($item = $DbResult->fetch_array())
     60{
     61  $id = $item['id'];
     62  $vleft = $item['pos'];
     63  $vtop = $item['depth'];
     64  $vfirst = $item['first'];
     65  $vlast = $item['last'];
     66  if(($vtop > 0) || ($item['name'] == $this->TopHostName))
     67  {
     68    if($vtop > 0) imageline($im, xpos() + $halfx, $vtop * $spacey, xpos() + $halfx, $vtop * $spacey + 8, $black);
     69    if($vfirst >= 0)
     70    {
     71      imageline($im, $vfirst*$spacex + $halfx, $vtop * $spacey + $spacey, $vlast*$spacex + $halfx, $vtop * $spacey + $spacey, $black);
     72      imageline($im, xpos() + $halfx, ($vtop + 1) * $spacey - 10, xpos() + $halfx, ($vtop + 1) * $spacey, $black);
     73    }
     74//    $ip = explode('.',$item['IP']);
     75//    if(!array_key_exists(3, $ip)) $ip[3] = '';
     76    if ($item['iconname']=='comp')
     77    {
     78      if($item['online'] == 1) { $color = $green; } else $color = $black;
     79      $image = $im_comp;
     80    } else $image = $im_dev; 
     81    if ($item['iconname']=='device')
     82    {
     83      if($item['online'] == 1) { $color = $green; } else $color = $red;
     84      $image = $im_dev;
     85    }
     86    if($item['showonline']==0)
     87    {
     88      $color = $gray;
     89      $image = $im_dev;
     90    }
     91//      $text='IP: '.$ip[0];
     92//      imagestring($im,2,xpos($id)+($spacex-strlen($text)*imagefontwidth(2))/2,$vtop[$id]*$spacey+24+imagefontheight(2),$text,$black);
     93    imagecopy($im, $image, xpos()+$halfx-15,$vtop*$spacey+12, 0, 0, 30, 30);
     94//    imagerectangle($im,xpos($id)+$halfx-6,$vtop[$id]*$spacey+16,xpos($id)+$halfx+6,$vtop[$id]*$spacey+28,$color);
     95    if ($debug) {
     96      imagestring($im,2,xpos()+($spacex-strlen($item['id'])*imagefontwidth(2))/2,$vtop*$spacey+31+imagefontheight(2),$item['id'],$color);
     97    } else imagestring($im,2,xpos()+($spacex-strlen($item['name'])*imagefontwidth(2))/2,$vtop*$spacey+31+imagefontheight(2),$item['name'],$color);
     98  }
     99}
     100
     101    // === Sestavení výsledného souboru ============================================
     102    if(!($debug > 1))
     103    {
     104      Header("Content-type: image/png");
     105      Header("Cache-Control: no-cache");        // Dynamický graf, nekešovat
     106      imagepng($im);
     107      imagedestroy($im);
     108      imagedestroy($im_comp);
     109      imagedestroy($im_dev);
     110    }
     111    return('');
     112  }
     113 
     114  function ShowOverview()
     115  {
     116    $Output = '<img src="topologie.png"><br/>
     117<p>Vysvětlivky: Obrázek znázorňuje připojení prvků sítě do internetu.<br/>
     118<img src="Modules/NetworkTopology/images/comp.png"> Je počítač zapojený v síti a pod ním je uvedeno jeho jméno.
     119<span style="color:green">Zelená barva</span> znamená, že počitač je zapnutý a
     120online. Černá barva znamená, že počítač je vypnutý, nebo není online.<br/>
     121<img src="Modules/NetworkTopology/images/device.png"> Představuje komunikační zařízení připojené do sítě, které
     122mají běžet nepřetržitě. Pokud je zařízení online, je text pod ním zobrazen
     123<span style="color:green">zelenou barvou</span>, pokud není online, je zobrazen
     124<span style="color:red">červenou barvou</span>. Dostupnost prvků je kontrolována
     125z počítače Centrála, takže při výpadku zařízení nebude možné zjistit stav
     126zařízení, které jsou přes něj připojeny. U zařízení, kde není stav možné
     127zjišťovat je použita <span style="color:gray">šedá barvou</span>.</p>';
     128    return($Output);
     129  }
     130}
    2131
    3132class ModuleNetworkTopology extends Module
     
    27156  function Init()
    28157  {
    29     $this->System->Pages['topologie'] = 'SharePage';
     158    $this->System->Pages['topologie'] = 'NetworkTopologyPage';
    30159  }
    31160}
Note: See TracChangeset for help on using the changeset viewer.