Virtlab:Řídící server/ParserEquipment.php.inc
Z VirtlabWiki
< Virtlab:Řídící serverVerze z 14:23, 5. 3. 2007; zobrazit aktuální verzi
← Starší verze | Novější verze →
← Starší verze | Novější 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
<?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
?>
Kategorie: PHP | Třída | Diplomová práce | Jan Vavříček
