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

Z VirtlabWiki

(Rozdíly mezi verzemi)
Přejít na: navigace, hledání
Verze z 10:16, 22. 10. 2007
Vav166 (Diskuse | příspěvky)

← Předchozí porovnání
Verze z 11:41, 22. 10. 2007
Vav166 (Diskuse | příspěvky)

Následující porovnání →
Řádka 1: Řádka 1:
-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:XmlParser.php.inc|virtlabXmlParser]]</tt>.+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>.
== Proměnné == == Proměnné ==
-; parsed = array() : veškerá data získaná z XML souboru parserem <tt>[[Virtlab:XmlParser.php.inc|virtlabXmlParser]]</tt>+; 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> ; 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 ; devices = array() : cache dat o laboratorních prvcích
Řádka 11: Řádka 11:
:; $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 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:XmlParser.php.inc|třídy virtlabXmlParser]] uloženém v <tt>$this->parsed</tt>.+:; $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í pole s kompletními daty o laboratorních prvcích ; 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 getDevicesCount() : vrátí počet laboratorních prvků
Řádka 125: Řádka 125:
== Zdrojový kód == == Zdrojový kód ==
-<pre>+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].
-<?php+
- +
-class virtlabParserEquipment {+
- private $parsed = array();+
- private $devices = array();+
- private $cached_devices = 0;+
- +
- function __construct($file, $is_file=0, $cache_dev=1) {+
- $this->virtlabParserEquipment($file, $is_file, $cache_dev);+
- }//konstruktor+
- +
- private function virtlabParserEquipment($file, $is_file=0, $cache_dev=1) {+
- $parser = new virtlabXmlParser(1);+
- +
- if($is_file) $parser->parse($file);+
- else $parser->parse_data($file);+
- +
- $this->parsed = $parser->output;+
- unset($parser);+
- +
- if($cache_dev) {+
- $this->devices = $this->getDevices();+
- $this->cached_devices = 1;+
- }+
- }//function+
- +
- +
- public function getDevices() {+
- if(!$this->cached_devices) {+
- $temp = $this->parsed[0]["child"];+
- return $temp;+
- }+
- else return $this->devices;+
- }//function+
- +
- public function getDevicesCount() {+
- if(!$this->cached_devices)+
- { +
- $temp = $this->getDevices();+
- return count($temp);+
- }+
- else return count($this->devices);+
- }//function+
- +
- +
- public function getDevice($index) {+
- $temp = $this->getDevices();+
- return $temp[$index];+
- }//function +
- +
- +
- public function getDeviceType($index) {+
- $temp = $this->getDevice($index);+
- return $temp["attribs"]["TYPE"];+
- }//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:Komponenty virtlabu]]
 +[[Kategorie:Server]]
 +[[Kategorie:Řídící server]]
[[Kategorie:PHP]] [[Kategorie:PHP]]
[[Kategorie:Třída]] [[Kategorie:Třída]]
 +[[Kategorie:UNCOMPLETE]]

Verze z 11:41, 22. 10. 2007

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