Net Interfaces methods in Agent/Module updates in NetworkLink
This commit is contained in:
parent
d08aa0b32b
commit
916537ea11
|
@ -410,13 +410,81 @@ class Agent extends Entity
|
|||
}
|
||||
|
||||
|
||||
/**
|
||||
* Return a list of interfaces.
|
||||
*
|
||||
* @param array $filter Filter interfaces by name in array.
|
||||
*
|
||||
* @return array Of interfaces and modules PandoraFMS\Modules.
|
||||
*/
|
||||
public function getInterfaces(array $filter=[])
|
||||
{
|
||||
$modules = $this->searchModules(
|
||||
['nombre' => '%ifOperStatus%']
|
||||
);
|
||||
|
||||
$interfaces = [];
|
||||
foreach ($modules as $module) {
|
||||
$matches = [];
|
||||
if (preg_match(
|
||||
'/^(.*?)_ifOperStatus$/',
|
||||
$module->name(),
|
||||
$matches
|
||||
) > 0
|
||||
) {
|
||||
$interface = $matches[1];
|
||||
}
|
||||
|
||||
if (empty($interface) === true) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (empty($filter) === false
|
||||
&& in_array($interface, $filter) !== true
|
||||
) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$interfaces[$interface] = [
|
||||
'ifOperStatus' => array_shift(
|
||||
$this->searchModules(
|
||||
['nombre' => $interface.'_ifOperStatus']
|
||||
)
|
||||
),
|
||||
'ifInOctets' => array_shift(
|
||||
$this->searchModules(
|
||||
['nombre' => $interface.'_ifInOctets']
|
||||
)
|
||||
),
|
||||
'ifOutOctets' => array_shift(
|
||||
$this->searchModules(
|
||||
['nombre' => $interface.'_ifOutOctets']
|
||||
)
|
||||
),
|
||||
'ifHCInOctets' => array_shift(
|
||||
$this->searchModules(
|
||||
['nombre' => $interface.'_ifHCInOctets']
|
||||
)
|
||||
),
|
||||
'ifHCOutOctets' => array_shift(
|
||||
$this->searchModules(
|
||||
['nombre' => $interface.'_ifHCOutOctets']
|
||||
)
|
||||
),
|
||||
];
|
||||
}
|
||||
|
||||
return $interfaces;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Search for modules into this agent.
|
||||
*
|
||||
* @param array $filter Filters.
|
||||
* @param integer $limit Limit search results.
|
||||
*
|
||||
* @return PandoraFMS\Module Module found.
|
||||
* @return array Of PandoraFMS\Module Modules found.
|
||||
*/
|
||||
public function searchModules(array $filter, int $limit=0)
|
||||
{
|
||||
|
@ -443,7 +511,12 @@ class Agent extends Entity
|
|||
return $results;
|
||||
} else {
|
||||
// Search in db.
|
||||
return Module::search($filter, $limit);
|
||||
$return = Module::search($filter, $limit);
|
||||
if (is_array($return) === false) {
|
||||
return [];
|
||||
}
|
||||
|
||||
return $return;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -39,6 +39,12 @@ use PandoraFMS\ModuleType;
|
|||
class Module extends Entity
|
||||
{
|
||||
|
||||
const INTERFACE_STATUS = 1;
|
||||
const INTERFACE_INOCTETS = 2;
|
||||
const INTERFACE_OUTOCTETS = 3;
|
||||
const INTERFACE_HC_INOCTETS = 4;
|
||||
const INTERFACE_HC_OUTOCTETS = 5;
|
||||
|
||||
/**
|
||||
* Module status (From tagente_estado).
|
||||
*
|
||||
|
@ -751,6 +757,84 @@ class Module extends Entity
|
|||
}
|
||||
|
||||
|
||||
/**
|
||||
* Return true if module represents an interface (operStatus, in/outOctets)
|
||||
*
|
||||
* @return integer > 0 if interface module, 0 if not.
|
||||
*/
|
||||
public function isInterfaceModule():int
|
||||
{
|
||||
if (strstr($this->name(), '_ifOperStatus') !== false) {
|
||||
return self::INTERFACE_STATUS;
|
||||
}
|
||||
|
||||
if (strstr($this->name(), '_ifInOctets') !== false) {
|
||||
return self::INTERFACE_INOCTETS;
|
||||
}
|
||||
|
||||
if (strstr($this->name(), '_ifOutOctets') !== false) {
|
||||
return self::INTERFACE_OUTOCTETS;
|
||||
}
|
||||
|
||||
if (strstr($this->name(), '_ifHCInOctets') !== false) {
|
||||
return self::INTERFACE_HC_INOCTETS;
|
||||
}
|
||||
|
||||
if (strstr($this->name(), '_ifHCOutOctets') !== false) {
|
||||
return self::INTERFACE_HC_OUTOCTETS;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Return interface name if module represents an interface module.
|
||||
*
|
||||
* @return string|null Interface name or null.
|
||||
*/
|
||||
public function getInterfaceName():?string
|
||||
{
|
||||
$label = null;
|
||||
switch ($this->isInterfaceModule()) {
|
||||
case self::INTERFACE_STATUS:
|
||||
$label = '_ifOperStatus';
|
||||
break;
|
||||
|
||||
case self::INTERFACE_INOCTETS:
|
||||
$label = '_ifInOctets';
|
||||
break;
|
||||
|
||||
case self::INTERFACE_OUTOCTETS:
|
||||
$label = '_ifOutOctets';
|
||||
break;
|
||||
|
||||
case self::INTERFACE_HC_INOCTETS:
|
||||
$label = '_ifHCInOctets';
|
||||
break;
|
||||
|
||||
case self::INTERFACE_HC_OUTOCTETS:
|
||||
$label = '_ifHCOutOctets';
|
||||
break;
|
||||
|
||||
default:
|
||||
// Not an interface module.
|
||||
return null;
|
||||
}
|
||||
|
||||
if (preg_match(
|
||||
'/^(.*?)'.$label.'$/',
|
||||
$this->name(),
|
||||
$matches
|
||||
) > 0
|
||||
) {
|
||||
return $matches[1];
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Transforms configuration data into an array.
|
||||
*
|
||||
|
|
|
@ -396,7 +396,33 @@ final class NetworkLink extends Model
|
|||
$endX = $data['endX'];
|
||||
$endY = $data['endY'];
|
||||
|
||||
if (isset($data['width'])) {
|
||||
$linked_start = static::extractlinkedStart($data);
|
||||
$linked_end = static::extractlinkedEnd($data);
|
||||
|
||||
$start = false;
|
||||
$end = false;
|
||||
|
||||
if ($linked_start !== null) {
|
||||
$start = \db_get_row_filter(
|
||||
'tlayout_data',
|
||||
[
|
||||
'id_layout' => $data['id_layout'],
|
||||
'id' => $linked_start,
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
if ($linked_end !== null) {
|
||||
$end = \db_get_row_filter(
|
||||
'tlayout_data',
|
||||
[
|
||||
'id_layout' => $data['id_layout'],
|
||||
'id' => $linked_end,
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
if (isset($data['width']) === true) {
|
||||
// Row format.
|
||||
$startX = $data['pos_x'];
|
||||
$startY = $data['pos_y'];
|
||||
|
@ -404,47 +430,51 @@ final class NetworkLink extends Model
|
|||
$endY = $data['height'];
|
||||
}
|
||||
|
||||
$start = \db_get_row_filter(
|
||||
'tlayout_data',
|
||||
[
|
||||
'id_layout' => $data['id_layout'],
|
||||
'pos_x' => '<'.$startX,
|
||||
'pos_y' => '<'.$startY,
|
||||
'pos_x`+`width' => '>'.$startX,
|
||||
'pos_y`+`height' => '>'.$startY,
|
||||
'order' => [
|
||||
[
|
||||
'field' => 'show_on_top',
|
||||
'order' => 'desc',
|
||||
if ($start === false) {
|
||||
$start = \db_get_row_filter(
|
||||
'tlayout_data',
|
||||
[
|
||||
'id_layout' => $data['id_layout'],
|
||||
'pos_x' => '<'.$startX,
|
||||
'pos_y' => '<'.$startY,
|
||||
'pos_x`+`width' => '>'.$startX,
|
||||
'pos_y`+`height' => '>'.$startY,
|
||||
'order' => [
|
||||
[
|
||||
'field' => 'show_on_top',
|
||||
'order' => 'desc',
|
||||
],
|
||||
[
|
||||
'field' => 'id',
|
||||
'order' => 'desc',
|
||||
],
|
||||
],
|
||||
[
|
||||
'field' => 'id',
|
||||
'order' => 'desc',
|
||||
],
|
||||
],
|
||||
]
|
||||
);
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
$end = \db_get_row_filter(
|
||||
'tlayout_data',
|
||||
[
|
||||
'id_layout' => $data['id_layout'],
|
||||
'pos_x' => '<'.$endX,
|
||||
'pos_y' => '<'.$endY,
|
||||
'pos_x`+`width' => '>'.$endX,
|
||||
'pos_y`+`height' => '>'.$endY,
|
||||
'order' => [
|
||||
[
|
||||
'field' => 'show_on_top',
|
||||
'order' => 'desc',
|
||||
if ($end === false) {
|
||||
$end = \db_get_row_filter(
|
||||
'tlayout_data',
|
||||
[
|
||||
'id_layout' => $data['id_layout'],
|
||||
'pos_x' => '<'.$endX,
|
||||
'pos_y' => '<'.$endY,
|
||||
'pos_x`+`width' => '>'.$endX,
|
||||
'pos_y`+`height' => '>'.$endY,
|
||||
'order' => [
|
||||
[
|
||||
'field' => 'show_on_top',
|
||||
'order' => 'desc',
|
||||
],
|
||||
[
|
||||
'field' => 'id',
|
||||
'order' => 'desc',
|
||||
],
|
||||
],
|
||||
[
|
||||
'field' => 'id',
|
||||
'order' => 'desc',
|
||||
],
|
||||
],
|
||||
]
|
||||
);
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
return [
|
||||
'start' => $start,
|
||||
|
@ -469,6 +499,18 @@ final class NetworkLink extends Model
|
|||
$linkedStart = null;
|
||||
$linkedEnd = null;
|
||||
|
||||
/*
|
||||
* If start['id_agente_modulo'] its a network module (in/out/status)
|
||||
* then:
|
||||
*
|
||||
* start => outOctets
|
||||
*
|
||||
* If end['id_agente_modulo'] its a network module (in/out/status)
|
||||
* then:
|
||||
* end => inOctets
|
||||
*
|
||||
*/
|
||||
|
||||
if (isset($links['start']) === true) {
|
||||
$linkedStart = $links['start']['id'];
|
||||
if (is_numeric($links['start']['id_agente_modulo']) === true
|
||||
|
@ -478,8 +520,35 @@ final class NetworkLink extends Model
|
|||
(int) $links['start']['id_agente_modulo']
|
||||
);
|
||||
|
||||
$labelStart = $module->nombre();
|
||||
$labelStart .= ': '.$module->lastValue();
|
||||
if ((bool) $module->isInterfaceModule() === true) {
|
||||
$interface_name = $module->getInterfaceName();
|
||||
$interface = array_shift(
|
||||
$module->agent()->getInterfaces(
|
||||
[$interface_name]
|
||||
)
|
||||
);
|
||||
|
||||
$outOctets = 0;
|
||||
$inOctets = 0;
|
||||
|
||||
if (isset($interface['ifOutOctets']) === true) {
|
||||
$outOctets = $interface['ifOutOctets']->lastValue();
|
||||
} else if (isset($interface['ifHCOutOctets']) === true) {
|
||||
$outOctets = $interface['ifHCOutOctets']->lastValue();
|
||||
}
|
||||
|
||||
if (isset($interface['ifInOctets']) === true) {
|
||||
$inOctets = $interface['ifInOctets']->lastValue();
|
||||
} else if (isset($interface['ifHCInOctets']) === true) {
|
||||
$inOctets = $interface['ifHCInOctets']->lastValue();
|
||||
}
|
||||
|
||||
$labelStart = $interface_name;
|
||||
$labelStart .= ': '.$outOctets;
|
||||
|
||||
$labelEnd = $interface_name;
|
||||
$labelEnd .= ': '.$inOctets;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -492,8 +561,35 @@ final class NetworkLink extends Model
|
|||
(int) $links['end']['id_agente_modulo']
|
||||
);
|
||||
|
||||
$labelEnd = $module->nombre();
|
||||
$labelEnd .= ': '.$module->lastValue();
|
||||
if ((bool) $module->isInterfaceModule() === true) {
|
||||
$interface_name = $module->getInterfaceName();
|
||||
$interface = array_shift(
|
||||
$module->agent()->getInterfaces(
|
||||
[$interface_name]
|
||||
)
|
||||
);
|
||||
|
||||
$outOctets = 0;
|
||||
$inOctets = 0;
|
||||
|
||||
if (isset($interface['ifOutOctets']) === true) {
|
||||
$outOctets = $interface['ifOutOctets']->lastValue();
|
||||
} else if (isset($interface['ifHCOutOctets']) === true) {
|
||||
$outOctets = $interface['ifHCOutOctets']->lastValue();
|
||||
}
|
||||
|
||||
if (isset($interface['ifInOctets']) === true) {
|
||||
$inOctets = $interface['ifInOctets']->lastValue();
|
||||
} else if (isset($interface['ifHCInOctets']) === true) {
|
||||
$inOctets = $interface['ifHCInOctets']->lastValue();
|
||||
}
|
||||
|
||||
$labelStart .= '<br>'.$interface_name;
|
||||
$labelStart .= ': '.$outOctets;
|
||||
|
||||
$labelEnd .= '<br>'.$interface_name;
|
||||
$labelEnd .= ': '.$inOctets;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue