Virtlab:Řídící server/ParserEquipment.php.inc

Z VirtlabWiki

< Virtlab:Řídící server(Rozdíly mezi verzemi)
Přejít na: navigace, hledání
Verze z 21:17, 21. 2. 2007
Vav166 (Diskuse | příspěvky)

← Předchozí porovnání
Aktuální verze
Vav166 (Diskuse | příspěvky)

Řádka 1: Řádka 1:
-Tato třída pomáhá vytahovat data o vybavení z XML souboru. Ten je naparsován třídou [[Virtlab:XmlParser.php.inc|virtlabXmlParser]].+Tato třída pomáhá extrahovat data o laboratorních prvcích z příslušného XML souboru. Ten je naparsován třídou <tt>[[Virtlab:Řídící server/XmlParser.php.inc|virtlabXmlParser]]</tt>.
-== Popis funkcí ==+== Proměnné ==
 +; parsed = array() : veškerá data získaná z XML souboru parserem <tt>[[Virtlab:Řídící server/XmlParser.php.inc|virtlabXmlParser]]</tt>
 +; cached_devices = 0 : určuje, jestli se mají data o laboratorních prvcích (obečně může jít jen o část <tt>$this->parsed</tt>) cacheovat v proměnné <tt>$this->devices</tt>
 +; devices = array() : cache dat o laboratorních prvcích
 + 
 +== Metody ==
; function __construct($file, $is_file=0, $cache_dev=1) : konstruktor třídy v PHP5 ; function __construct($file, $is_file=0, $cache_dev=1) : konstruktor třídy v PHP5
; public function virtlabParserEquipment($file, $is_file=0, $cache_dev=1) : konstruktor třídy. Jednotlivé parametry mají tento význam: ; public function virtlabParserEquipment($file, $is_file=0, $cache_dev=1) : konstruktor třídy. Jednotlivé parametry mají tento význam:
:; $file : obsahuje cestu k XML souboru s [[Virtlab:Equipment.dtd|popisem vybavení]], nebo jsou v této proměnné uložena přímo XML data (o variantě rozhoduje parametr <tt>$is_file</tt>) :; $file : obsahuje cestu k XML souboru s [[Virtlab:Equipment.dtd|popisem vybavení]], nebo jsou v této proměnné uložena přímo XML data (o variantě rozhoduje parametr <tt>$is_file</tt>)
-:; $is_file : udává jestli je atribut <tt>$file</tt> casta k souboru, nebo přímo XML data+:; $is_file : udává, jestli je atribut <tt>$file</tt> casta k souboru, nebo přímo XML data
-:; $cache_dev : nastavuje, jestli se maji data o vybavení uložit do proměnné, ze které si při potřebě načítají, nebo se vždy čtou z původního výstupu [[Virtlab:XmlParser.php.inc|třídy virtlabXmlParser]]+:; $cache_dev : nastavuje, jestli se maji data o laboratorních prvcích uložit do proměnné <tt>$this->devices</tt>, ze které si při potřebě načítají, nebo se vždy čtou z původního výstupu [[Virtlab:Řídící server/XmlParser.php.inc|třídy virtlabXmlParser]] uloženém v <tt>$this->parsed</tt>.
-; public function getDevices() : vrátí původní pole s kompletním vybavením+; public function getDevices() : vrátí pole s kompletními daty o laboratorních prvcích
-; public function getDevicesCount() : vrátí počet zařízení+; public function getDevicesCount() : vrátí počet laboratorních prvků
-; public function getDevice($index) : vrátí určené zařízení (podle parametru <tt>$index</tt>, který odpovídá jejímu indexu v celkovém poli včech zařízení)+; public function getDevice($index) : vrátí určený laboratorní prvek (odpovídající úsek z naparsovaných dat), podle parametru <tt>$index</tt>, který odpovídá jejímu indexu v celkovém poli všech laboratorních prvků
-; public function getDeviceType($index) : vrátí typ zadaného zařízení+; public function getDeviceType($index) : vrátí typ zadaného laboratorního prvku
-; public function getDeviceName($index) : vrátí název zadaného zařízení+; public function getDeviceName($index) : vrátí název zadaného laboratorního prvku
-; public function getDeviceSerial($index) : vrátí seriové číslo zařízení+; public function getDeviceSerial($index) : vrátí seriové číslo laboratorního prvku
-; public function getDevicePlatform($index) : vrátí platformu zařízení+; public function getDevicePlatform($index) : vrátí platformu laboratorního prvku
-; public function getDeviceByName($name, &$index) : vrátí požadované zařízení (určené jeho názvem). Do parametru <tt>$index</tt> se uloží jeho index.+; public function getDeviceByName($name, &$index) : vrátí požadovaný laboratorní prvek (určený jeho názvem). Do parametru <tt>$index</tt> se uloží jeho index
-; public function getDeviceOS($name, $variant=1) : vrátí veryi OS zařízení. Parametr <tt>$variant</tt> určuje jestli má být výstup upravený nebo v podobě, jako v původním poli.+; public function getDeviceOS($name, $variant=1) : vrátí veri OS laboratorního prvku. Parametr <tt>$variant</tt> určuje jestli má být výstup upravený nebo v podobě, jako v původním poli
-; public function getDeviceInterfaces($name) : vrátí rozhraní zadaného zařízení+; public function getDeviceInterfaces($name) : vrátí rozhraní zadaného laboratorního prvku
-; public function getDeviceInterfacesCount($name) : vrátí počet rozhraní zadaného zařízení+; public function getDeviceInterfacesCount($name) : vrátí počet rozhraní zadaného laboratorního prvku
-; public function getDeviceInterface($name, $index, $variant=1) : vrátí určené rozhraní (určené parametrem <tt>$index</tt>) určeného zařízení+; public function getDeviceInterface($name, $index, $variant=1) : vrátí určené rozhraní (určené parametrem <tt>$index</tt>) určeného laboratorního prvku
-; public function getDeviceInterfaceTechnology($name, $index) : vratí technologii rozhraní+; public function getDeviceInterfaceTechnology($name, $index) : vratí technologii laboratorního prvku
-; public function getDeviceInterfaceEthertype($name, $index) : vrátí ''verzi'' ethernetu rozhraní. Pokud je technologie <tt>serial</tt> vrací NULL.+; public function getDeviceInterfaceEthertype($name, $index) : vrátí ''typ'' ethernetu rozhraní. Pokud je technologie <tt>serial</tt> vrací NULL.
; public function getDeviceInterfaceMaxbps($name, $index) : vrátí maximální rychlost rozhraní. Pokud je technologie <tt>ethernet</tt> vrací NULL. ; public function getDeviceInterfaceMaxbps($name, $index) : vrátí maximální rychlost rozhraní. Pokud je technologie <tt>ethernet</tt> vrací NULL.
; public function getDeviceInterfaceFeatures($name, $index) : vrátí speciální vlastnosti zadaného rozhraní ; public function getDeviceInterfaceFeatures($name, $index) : vrátí speciální vlastnosti zadaného rozhraní
-; public function getDeviceFeatures($name) : vrátí speciální vlastnosti zařízení+; public function getDeviceFeatures($name) : vrátí speciální vlastnosti laboratorního prvku
-; public function getDevicesFeatures() : vrátí všechny speciální vlastnosti všech zařízení+; public function getDevicesFeatures() : vrátí všechny speciální vlastnosti všech laboratorních prvků - i s duplicitami
-; public function getDevicesByType($type) : vrátí jména zařízení daného typu+; public function getDevicesByType($type) : vrátí jména laboratorních prvků daného typu
-; public function getDevicesTypes() : vrátí typy zařízení, které se ve vybavení vyskytují+; public function getDevicesTypes() : vrátí typy laboratorních prvků, které se ve vybavení vyskytují
-; public function getDeviceInterfacesFeatures($name) : vrátí speciální vlastnosti všech rozhraní daného zařízení+; public function getDeviceInterfacesFeatures($name) : vrátí speciální vlastnosti všech rozhraní daného laboratorního prvku
-; public function getDevicesInterfacesFeatures() : vrátí speciální vlastnosti všech rozhraní všech zařízení+; public function getDevicesInterfacesFeatures() : vrátí speciální vlastnosti všech rozhraní všech laboratorních prvků
-; public function getDevicesList() : vrátí seznam názvů všech zařízení+; public function getDevicesList() : vrátí seznam názvů všech laboratorních prvků
; public function getDeviceInterfaceName($name, $index) : vrátí jméno zadaného rozhraní ; public function getDeviceInterfaceName($name, $index) : vrátí jméno zadaného rozhraní
== Příklady == == Příklady ==
 + '''$parser->getDeviceInterface("r1",0,0);'''
 + Array
 + (
 + [name] => INTERFACE
 + [attribs] => Array
 + (
 + [TECHNOLOGY] => serial
 + [CONNECT_GROUP] => 1
 + [NAME] => s0/1/0
 + )
 + [child] => Array
 + (
 + [0] => Array
 + (
 + [name] => MAX_BPS
 + [content] => 128000
 + )
 + [1] => Array
 + (
 + [name] => INT_FEATURE
 + [content] => ...
 + )
 + )
 + )
-== Zdrojový kód ==+ '''$parser->getDeviceInterface("r1",0,1);'''
-<pre>+ Array
-<?php+ (
 + [technology] => serial
 + [connect_group] => 1
 + [name] => s0/1/0
 + )
-class virtlabParserEquipment {+ '''$parser->getDeviceInterface("r3",1,1);'''
- private $parsed = array();+ Array
- private $devices = array();+ (
- private $cached_devices = 0;+ [technology] => ethernet
- + [connect_group] => 3
- function __construct($file, $is_file=0, $cache_dev=1) {+ [name] => fa0/0
- $this->virtlabParserEquipment($file, $is_file, $cache_dev);+ [ether_type] => fast
- }//konstruktor+ )
- +
- private function virtlabParserEquipment($file, $is_file=0, $cache_dev=1) {+
- $parser = new virtlabXmlParser(1);+
- if($is_file) $parser->parse($file);+ '''$parser->getDeviceInterfaceTechnology("r3",1);'''
- else $parser->parse_data($file);+ ethernet
- $this->parsed = $parser->output;+ '''$parser->getDeviceInterfaceEthertype("r3",1);'''
- unset($parser);+ fast
- if($cache_dev) {+ '''$parser->getDevicesByType("router");'''
- $this->devices = $this->getDevices();+ Array
- $this->cached_devices = 1;+ (
- }+ [0] => r1
- }//function+ [1] => r3
 + [2] => r5
 + [3] => r7
 + )
- + '''$parser->getDevicesTypes();'''
- public function getDevices() {+ Array
- if(!$this->cached_devices) {+ (
- $temp = $this->parsed[0]["child"];+ [0] => router
- return $temp;+ [1] => switch
- }+ )
- else return $this->devices;+
- }//function+
- public function getDevicesCount() {+ '''$parser->getDevicesInterfacesFeatures();'''
- if(!$this->cached_devices)+ Array
- { + (
- $temp = $this->getDevices();+ [0] => 802.1q
- return count($temp);+ [1] => +++
- }+ [2] => xxx
- else return count($this->devices);+ [3] => ...
- }//function+ )
 + '''$parser->getDevicesList();'''
 + Array
 + (
 + [4] => swa
 + [3] => r7
 + [2] => r5
 + [1] => r3
 + [0] => r1
 + )
- public function getDevice($index) {+ '''$parser->getDeviceInterfaceName("r1",0);'''
- $temp = $this->getDevices();+ s0/1/0
- return $temp[$index];+
- }//function +
 +== Zdrojový kód ==
 +Aktuální zdrojový kód se nachází [https://vl-test.cs.vsb.cz/websvn/filedetails.php?repname=virtlab&path=%2FDISTR%2Fweb%2Fclass%2FvirtlabParserEquipment.php.inc&rev=0&sc=0 zde].
- public function getDeviceType($index) {+[[Kategorie:Komponenty virtlabu]]
- $temp = $this->getDevice($index);+[[Kategorie:Server]]
- return $temp["attribs"]["TYPE"];+[[Kategorie:Řídící server]]
- }//function+
- +
- +
- public function getDeviceName($index) {+
- $temp = $this->getDevice($index);+
- return $temp["attribs"]["NAME"];+
- }//function+
- +
- +
- public function getDeviceSerial($index) {+
- $temp = $this->getDevice($index);+
- return $temp["attribs"]["SERIAL_NUMBER"];+
- }//function+
- +
- +
- public function getDevicePlatform($index) {+
- $temp = $this->getDevice($index);+
- return $temp["attribs"]["PLATFORM"];+
- }//function+
- +
- +
- public function getDeviceByName($name, &$index) {+
- $result = array();+
- for($i = $this->getDevicesCount(); $i>=0; $i--) {+
- if($name==$this->getDeviceName($i)) {+
- $index = $i;+
- return $this->getDevice($i);+
- }//if+
- }//for+
- return NULL;+
- }//function+
- +
- +
- public function getDeviceOS($name, $variant=1) {+
- $temp = $this->getDeviceByName($name,$idx);+
- if($temp["child"]) {+
- $temp2 = $temp["child"][0];+
- +
- if(!isset($temp2)) return NULL;+
- if($variant) {+
- //$temp3["major"] = $temp2["child"][0]["content"];+
- //if($temp2["child"][1]) $temp3["minor"] = $temp2["child"][1]["content"];+
- //if($temp2["child"][2]) $temp3["other"] = $temp2["child"][2]["content"];+
- //return $temp3;+
- return $temp2["content"];+
- }+
- else return $temp2;+
- }//if+
- else return NULL;+
- }//function+
- +
- +
- public function getDeviceInterfaces($name) {+
- $temp = $this->getDeviceByName($name,$idx);+
- if($temp["child"][1]["name"]!="INTERFACES") return NULL;+
- return $temp["child"][1];+
- }//function+
- +
- +
- public function getDeviceInterfacesCount($name) {+
- $temp = $this->getDeviceInterfaces($name);+
- if(!$temp["child"]) return NULL;+
- return count($temp["child"]);+
- }//function+
- +
- +
- public function getDeviceInterface($name, $index, $variant=1) {+
- $temp = $this->getDeviceInterfaces($name);+
- if(!$temp["child"][$index]) return NULL;+
- if($variant) {+
- $temp2 = array();+
- $temp2["technology"] = $temp["child"][$index]["attribs"]["TECHNOLOGY"];+
- $temp2["connect_group"] = $temp["child"][$index]["attribs"]["CONNECT_GROUP"];+
- $temp2["name"] = $temp["child"][$index]["attribs"]["NAME"];+
- if($temp["child"][$index]["attribs"]["ETHER_TYPE"])+
- $temp2["ether_type"] = $temp["child"][$index]["attribs"]["ETHER_TYPE"];+
- return $temp2;+
- }+
- else return $temp["child"][$index];+
- }//function+
- +
- +
- public function getDeviceInterfaceTechnology($name, $index) {+
- $temp = $this->getDeviceInterface($name, $index, 1);+
- return $temp["technology"];+
- }//function+
- +
- +
- public function getDeviceInterfaceEthertype($name, $index) {+
- $temp = $this->getDeviceInterface($name, $index, 1);+
- if($temp["technology"] == "ethernet") return $temp["ether_type"];+
- else return NULL;+
- }//function+
- +
- +
- public function getDeviceInterfaceMaxbps($name, $index) {+
- $temp = $this->getDeviceInterface($name, $index, 0);+
- if($temp["child"][0]["name"]!="MAX_BPS") return NULL;+
- return $temp["child"][0]["content"];+
- }//function+
- +
- +
- public function getDeviceInterfaceFeatures($name, $index) {+
- $temp = $this->getDeviceInterface($name, $index, 0);+
- $temp2 = array();+
- if(is_array($temp) && $temp["child"])+
- foreach($temp["child"] as $hodnota) {+
- if($hodnota["name"]=="INT_FEATURE") {+
- array_push($temp2, $hodnota["content"]);+
- }//if+
- }//foreach+
- if(!$temp2[0]) return NULL;+
- else return $temp2;+
- }//function+
- +
- +
- public function getDeviceFeatures($name) {+
- $temp = $this->getDeviceByName($name,$idx);+
- foreach($temp["child"] as $hodnota) {+
- if($hodnota["name"]=="SPECIAL") {+
- $result = array();+
- foreach($hodnota["child"] as $hodnota2) {+
- array_push($result, $hodnota2["content"]);+
- }//foreach+
- break;+
- }//if+
- }//foreach+
- if(!$result[0]) return NULL;+
- else return $result;+
- }//function +
- +
- +
- public function getDevicesFeatures() {+
- $feat = array();+
- for($i = $this->getDevicesCount() - 1; $i >= 0; $i--) {+
- $jmeno = $this->getDeviceName($i);+
- $temp = $this->getDeviceFeatures($jmeno);+
- if(is_array($temp))+
- foreach($temp as $value)+
- array_push($feat, $value);+
- }//for+
- return $feat;+
- }+
- +
- +
- public function getDevicesByType($type) {+
- $temp = $this->getDevices();+
- $temp2 = array();+
- foreach($temp as $hodnota) {+
- if($hodnota["attribs"]["TYPE"] == $type)+
- array_push($temp2, $hodnota["attribs"]["NAME"]);+
- }+
- if(!$temp2[0]) return NULL;+
- +
- return Unique($temp2);+
- }//function+
- +
- +
- public function getDevicesTypes() {+
- $temp = $this->getDevices();+
- $temp2 = array();+
- foreach($temp as $hodnota) {+
- array_push($temp2, $hodnota["attribs"]["TYPE"]);+
- }+
- if(!$temp2[0]) return NULL;+
- +
- return Unique($temp2);+
- }//function+
- +
- +
- public function getDeviceInterfacesFeatures($name) {+
- $feat = array();+
- for($i = $this->getDeviceInterfacesCount($name) - 1; $i >= 0; $i--) {+
- $temp = $this->getDeviceInterfaceFeatures($name, $i);+
- if(is_array($temp))+
- foreach($temp as $hodnota)+
- array_push($feat, $hodnota);+
- }//for+
- return $feat;+
- }//function+
- +
- public function getDevicesInterfacesFeatures() {+
- $feat = array();+
- for($i = $this->getDevicesCount() - 1; $i >= 0; $i--) {+
- $jmeno = $this->getDeviceName($i);+
- $temp = $this->getDeviceInterfacesFeatures($jmeno);+
- if(is_array($temp))+
- foreach($temp as $hodnota)+
- array_push($feat, $hodnota);+
- }//for+
- return $feat;+
- }//function+
- +
- public function getDevicesList() {+
- $temp = array();+
- for($i = $this->getDevicesCount() - 1; $i >= 0; $i--) {+
- $temp[$i] = $this->getDeviceName($i);+
- }//for+
- return $temp;+
- }//function+
- +
- public function getDeviceInterfaceName($name, $index) {+
- $temp = $this->getDeviceInterface($name, $index, 1);+
- return $temp["name"];+
- }//function+
-}//class+
-?>+
-</pre>+
- +
[[Kategorie:PHP]] [[Kategorie:PHP]]
[[Kategorie:Třída]] [[Kategorie:Třída]]
-[[Kategorie:Diplomová práce]] 
-[[Kategorie:Jan Vavříček]] 

Aktuální verze

Tato třída pomáhá extrahovat data o laboratorních prvcích z příslušného XML souboru. Ten je naparsován třídou virtlabXmlParser.

Obsah

Proměnné

parsed = array() 
veškerá data získaná z XML souboru parserem virtlabXmlParser
cached_devices = 0 
určuje, jestli se mají data o laboratorních prvcích (obečně může jít jen o část $this->parsed) cacheovat v proměnné $this->devices
devices = array() 
cache dat o laboratorních prvcích

Metody

function __construct($file, $is_file=0, $cache_dev=1) 
konstruktor třídy v PHP5
public function virtlabParserEquipment($file, $is_file=0, $cache_dev=1) 
konstruktor třídy. Jednotlivé parametry mají tento význam:
$file 
obsahuje cestu k XML souboru s popisem vybavení, nebo jsou v této proměnné uložena přímo XML data (o variantě rozhoduje parametr $is_file)
$is_file 
udává, jestli je atribut $file casta k souboru, nebo přímo XML data
$cache_dev 
nastavuje, jestli se maji data o laboratorních prvcích uložit do proměnné $this->devices, ze které si při potřebě načítají, nebo se vždy čtou z původního výstupu třídy virtlabXmlParser uloženém v $this->parsed.
public function getDevices() 
vrátí pole s kompletními daty o laboratorních prvcích
public function getDevicesCount() 
vrátí počet laboratorních prvků
public function getDevice($index) 
vrátí určený laboratorní prvek (odpovídající úsek z naparsovaných dat), podle parametru $index, který odpovídá jejímu indexu v celkovém poli všech laboratorních prvků
public function getDeviceType($index) 
vrátí typ zadaného laboratorního prvku
public function getDeviceName($index) 
vrátí název zadaného laboratorního prvku
public function getDeviceSerial($index) 
vrátí seriové číslo laboratorního prvku
public function getDevicePlatform($index) 
vrátí platformu laboratorního prvku
public function getDeviceByName($name, &$index) 
vrátí požadovaný laboratorní prvek (určený jeho názvem). Do parametru $index se uloží jeho index
public function getDeviceOS($name, $variant=1) 
vrátí veri OS laboratorního prvku. Parametr $variant určuje jestli má být výstup upravený nebo v podobě, jako v původním poli
public function getDeviceInterfaces($name) 
vrátí rozhraní zadaného laboratorního prvku
public function getDeviceInterfacesCount($name) 
vrátí počet rozhraní zadaného laboratorního prvku
public function getDeviceInterface($name, $index, $variant=1) 
vrátí určené rozhraní (určené parametrem $index) určeného laboratorního prvku
public function getDeviceInterfaceTechnology($name, $index) 
vratí technologii laboratorního prvku
public function getDeviceInterfaceEthertype($name, $index) 
vrátí typ ethernetu rozhraní. Pokud je technologie serial vrací NULL.
public function getDeviceInterfaceMaxbps($name, $index) 
vrátí maximální rychlost rozhraní. Pokud je technologie ethernet vrací NULL.
public function getDeviceInterfaceFeatures($name, $index) 
vrátí speciální vlastnosti zadaného rozhraní
public function getDeviceFeatures($name) 
vrátí speciální vlastnosti laboratorního prvku
public function getDevicesFeatures() 
vrátí všechny speciální vlastnosti všech laboratorních prvků - i s duplicitami
public function getDevicesByType($type) 
vrátí jména laboratorních prvků daného typu
public function getDevicesTypes() 
vrátí typy laboratorních prvků, které se ve vybavení vyskytují
public function getDeviceInterfacesFeatures($name) 
vrátí speciální vlastnosti všech rozhraní daného laboratorního prvku
public function getDevicesInterfacesFeatures() 
vrátí speciální vlastnosti všech rozhraní všech laboratorních prvků
public function getDevicesList() 
vrátí seznam názvů všech laboratorních prvků
public function getDeviceInterfaceName($name, $index) 
vrátí jméno zadaného rozhraní

Příklady

$parser->getDeviceInterface("r1",0,0);
Array
(
   [name] => INTERFACE
   [attribs] => Array
       (
           [TECHNOLOGY] => serial
           [CONNECT_GROUP] => 1
           [NAME] => s0/1/0
       )
   [child] => Array
       (
           [0] => Array
               (
                   [name] => MAX_BPS
                   [content] => 128000
               )
           [1] => Array
               (
                   [name] => INT_FEATURE
                   [content] => ...
               )
       )
)
$parser->getDeviceInterface("r1",0,1);
Array
(
   [technology] => serial
   [connect_group] => 1
   [name] => s0/1/0
)
$parser->getDeviceInterface("r3",1,1);
Array
(
   [technology] => ethernet
   [connect_group] => 3
   [name] => fa0/0
   [ether_type] => fast
)
$parser->getDeviceInterfaceTechnology("r3",1);
ethernet
$parser->getDeviceInterfaceEthertype("r3",1);
fast
$parser->getDevicesByType("router");
Array
(
   [0] => r1
   [1] => r3
   [2] => r5
   [3] => r7
)
$parser->getDevicesTypes();
Array
(
   [0] => router
   [1] => switch
)
$parser->getDevicesInterfacesFeatures();
Array
(
   [0] => 802.1q
   [1] => +++
   [2] => xxx
   [3] => ...
)
$parser->getDevicesList();
Array
(
   [4] => swa
   [3] => r7
   [2] => r5
   [1] => r3
   [0] => r1
)
$parser->getDeviceInterfaceName("r1",0);
s0/1/0

Zdrojový kód

Aktuální zdrojový kód se nachází zde.

Osobní nástroje