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 12:52, 21. 2. 2007
Vav166 (Diskuse | příspěvky)

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

Řádka 1: Řádka 1:
-<pre>+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>.
-8: public function virtlabParserEquipment($file, $is_file=0, $cache_dev=1) {+
-24: public function getDevices() {+
-32: public function getDevicesCount() {+
-42: public function getDevice($index) {+
-48: public function getDeviceType($index) {+
-54: public function getDeviceName($index) {+
-60: public function getDeviceSerial($index) {+
-66: public function getDevicePlatform($index) {+
-72: public function getDeviceByName($name, &$index) {+
-84: public function getDeviceOS($name, $variant=1) {+
-103: public function getDeviceInterfaces($name) {+
-110: public function getDeviceInterfacesCount($name) {+
-117: public function getDeviceInterface($name, $index, $variant=1) {+
-133: public function getDeviceInterfaceTechnology($name, $index) {+
-139: public function getDeviceInterfaceEthertype($name, $index) {+
-146: public function getDeviceInterfaceMaxbps($name, $index) {+
-153: public function getDeviceInterfaceFeatures($name, $index) {+
-167: public function getDeviceFeatures($name) {+
-183: public function getDevicesFeatures() {+
-196: public function getDevicesByType($type) {+
-209: public function getDevicesTypes() {+
-221: public function getDeviceInterfacesFeatures($name) {+
-232: public function getDevicesInterfacesFeatures() {+
-244: public function getDevicesList() {+
-252: public function getDeviceInterfaceName($name, $index) {+
-</pre>+
-== Zdrojový kód ==+== Proměnné ==
-<pre>+; parsed = array() : veškerá data získaná z XML souboru parserem <tt>[[Virtlab:Řídící server/XmlParser.php.inc|virtlabXmlParser]]</tt>
-<?php+; 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
-class virtlabParserEquipment {+== Metody ==
- private $parsed = array();+; function __construct($file, $is_file=0, $cache_dev=1) : konstruktor třídy v PHP5
- private $devices = array();+; public function virtlabParserEquipment($file, $is_file=0, $cache_dev=1) : konstruktor třídy. Jednotlivé parametry mají tento význam:
- private $cached_devices = 0;+:; $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
- public function virtlabParserEquipment($file, $is_file=0, $cache_dev=1) {+:; $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>.
- $parser = new virtlabXmlParser(1);+; 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 <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 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 <tt>$index</tt> se uloží jeho index
 +; 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 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 <tt>$index</tt>) 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 <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 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í
- if($is_file) $parser->parse($file);+== Příklady ==
- else $parser->parse_data($file);+ '''$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] => ...
 + )
 + )
 + )
- $this->parsed = $parser->output;+ '''$parser->getDeviceInterface("r1",0,1);'''
- unset($parser);+ Array
 + (
 + [technology] => serial
 + [connect_group] => 1
 + [name] => s0/1/0
 + )
- if($cache_dev) {+ '''$parser->getDeviceInterface("r3",1,1);'''
- $this->devices = $this->getDevices();+ Array
- $this->cached_devices = 1;+ (
- }+ [technology] => ethernet
- }//function+ [connect_group] => 3
 + [name] => fa0/0
 + [ether_type] => fast
 + )
- + '''$parser->getDeviceInterfaceTechnology("r3",1);'''
- public function getDevices() {+ ethernet
- if(!$this->cached_devices) {+
- $temp = $this->parsed[0]["child"];+
- return $temp;+
- }+
- else return $this->devices;+
- }//function+
- public function getDevicesCount() {+ '''$parser->getDeviceInterfaceEthertype("r3",1);'''
- if(!$this->cached_devices)+ fast
- { +
- $temp = $this->getDevices();+
- return count($temp);+
- }+
- else return count($this->devices);+
- }//function+
 + '''$parser->getDevicesByType("router");'''
 + Array
 + (
 + [0] => r1
 + [1] => r3
 + [2] => r5
 + [3] => r7
 + )
- public function getDevice($index) {+ '''$parser->getDevicesTypes();'''
- $temp = $this->getDevices();+ Array
- return $temp[$index];+ (
- }//function + [0] => router
 + [1] => switch
 + )
 + '''$parser->getDevicesInterfacesFeatures();'''
 + Array
 + (
 + [0] => 802.1q
 + [1] => +++
 + [2] => xxx
 + [3] => ...
 + )
- public function getDeviceType($index) {+ '''$parser->getDevicesList();'''
- $temp = $this->getDevice($index);+ Array
- return $temp["attribs"]["TYPE"];+ (
- }//function+ [4] => swa
 + [3] => r7
 + [2] => r5
 + [1] => r3
 + [0] => r1
 + )
 + '''$parser->getDeviceInterfaceName("r1",0);'''
 + s0/1/0
- public function getDeviceName($index) {+== Zdrojový kód ==
- $temp = $this->getDevice($index);+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].
- 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:Komponenty virtlabu]]
 +[[Kategorie:Server]]
 +[[Kategorie:Řídící server]]
[[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