freenetis-github/application/libraries/Snmp_Factory.php @ 49a8b6b4
31ca0a32 | Michal Kliment | <?php defined('SYSPATH') or die('No direct script access.');
|
|
/*
|
|||
* This file is part of open source system FreenetIS
|
|||
* and it is released under GPLv3 licence.
|
|||
*
|
|||
* More info about licence can be found:
|
|||
* http://www.gnu.org/licenses/gpl-3.0.html
|
|||
*
|
|||
* More info about project can be found:
|
|||
* http://www.freenetis.org/
|
|||
*
|
|||
*/
|
|||
define("SNMP_CLASS_PATH", APPPATH . 'libraries/snmp/');
|
|||
require_once SNMP_CLASS_PATH . 'Abstract_Snmp.php';
|
|||
/**
|
|||
* factory for creating of SNMP handlers.
|
|||
*
|
|||
* @author Ondrej Fibich
|
|||
*/
|
|||
class Snmp_Factory
|
|||
{
|
|||
/**
|
|||
* Mikrotik driver name
|
|||
*/
|
|||
const MIKROTIK = 'mikrotik';
|
|||
/**
|
|||
* List of available drivers.
|
|||
* Key contains name of driver.
|
|||
* Value contains information about driver such as version (version of SNMP)
|
|||
* and class (class of driver). (more oprtions will be added in future)
|
|||
*
|
|||
* @var array
|
|||
*/
|
|||
public static $DRIVERS = array
|
|||
(
|
|||
'mikrotik' => array
|
|||
(
|
|||
'version' => 2,
|
|||
'class' => 'Mikrotik_Snmp'
|
|||
),
|
|||
'linux' => array
|
|||
(
|
|||
'version' => 2,
|
|||
'class' => 'Linux_Snmp'
|
|||
),
|
|||
'edgecore' => array
|
|||
(
|
|||
'version' => 2,
|
|||
'class' => 'Edgecore_Snmp'
|
|||
),
|
|||
'signamax' => array
|
|||
(
|
|||
'version' => 2,
|
|||
'class' => 'Signamax_Snmp'
|
|||
),
|
|||
'signamaxold' => array
|
|||
(
|
|||
'version' => 2,
|
|||
'class' => 'SignamaxOld_Snmp'
|
|||
),
|
|||
'hp' => array
|
|||
(
|
|||
'version' => 2,
|
|||
'class' => 'HP_Snmp'
|
|||
)
|
|||
);
|
|||
/**
|
|||
* Creates SNMP driver with the given name.
|
|||
*
|
|||
* @param string $driver Driver name
|
|||
* @return Abstract_SNMP Creates driver
|
|||
* @throws InvalidArgumentException On invalid driver name (unknown)
|
|||
*/
|
|||
public static function factory($driver)
|
|||
{
|
|||
if (array_key_exists($driver, self::$DRIVERS))
|
|||
{
|
|||
require_once SNMP_CLASS_PATH . self::$DRIVERS[$driver]['class'] . '.php';
|
|||
return new self::$DRIVERS[$driver]['class'];
|
|||
}
|
|||
// driver not exists
|
|||
$m = 'Driver ' . $driver . ' does not exists.';
|
|||
throw new InvalidArgumentException($m);
|
|||
}
|
|||
/**
|
|||
* Creates SNMP driver for the device from the given IP address.
|
|||
*
|
|||
* @param string $device_ip Device IP address
|
|||
* @return Abstract_Snmp
|
|||
* @throws InvalidArgumentException If no driver suits the given device
|
|||
*/
|
|||
public static function factoryForDevice($device_ip)
|
|||
{
|
|||
foreach (self::$DRIVERS as $key => $val)
|
|||
{
|
|||
$snmp = self::factory($key);
|
|||
if ($snmp->isCompactibleDriverWith($device_ip))
|
|||
{
|
|||
$snmp->setDeviceIp($device_ip);
|
|||
return $snmp;
|
|||
}
|
|||
}
|
|||
// not founded
|
|||
$m = 'There is no driver for the device on ' . $device_ip;
|
|||
throw new InvalidArgumentException($m);
|
|||
}
|
|||
}
|