84 lines
2.4 KiB
PHP
84 lines
2.4 KiB
PHP
<?php
|
|
/**
|
|
* Observium
|
|
*
|
|
* This file is part of Observium.
|
|
*
|
|
* @package observium
|
|
* @subpackage poller
|
|
* @copyright (C) Adam Armstrong
|
|
*
|
|
*/
|
|
|
|
// Very basic parser to parse classic Observium-type schemes.
|
|
// Parser should populate $port_ifAlias array with type, descr, circuit, speed and notes
|
|
|
|
function custom_port_parser($port) {
|
|
|
|
if (safe_empty($port['ifAlias'])) {
|
|
return [];
|
|
}
|
|
|
|
print_debug($port['ifAlias']);
|
|
|
|
//$types = ['core', 'peering', 'transit', 'cust', 'server', 'l2tp', 'service'];
|
|
$types = array_keys($GLOBALS['config']['ports']['descr_groups']); // base (still configurable) interface groups
|
|
foreach ($GLOBALS['config']['int_groups'] as $custom_type) {
|
|
$types[] = strtolower(trim($custom_type));
|
|
}
|
|
|
|
if (isset($GLOBALS['config']['port_descr_regexp'])) {
|
|
$port_ifAlias = [];
|
|
$params = [ 'type', 'descr', 'circuit', 'speed', 'notes' ];
|
|
foreach ((array)$GLOBALS['config']['port_descr_regexp'] as $pattern) {
|
|
if (preg_match($pattern, $port['ifAlias'], $matches)) {
|
|
foreach ($params as $param) {
|
|
if (!safe_empty($matches[$param])) {
|
|
$port_ifAlias[$param] = $matches[$param];
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
if (isset($port_ifAlias['type'], $port_ifAlias['descr']) && in_array($port_ifAlias['type'], $types, TRUE)) {
|
|
return $port_ifAlias;
|
|
}
|
|
}
|
|
|
|
// Pull out Type and Description or abort
|
|
if (!preg_match('/^([^:]+)[:_]([^\[\]\(\)\{\}]+)/', $port['ifAlias'], $matches)) {
|
|
return [];
|
|
}
|
|
|
|
$port_ifAlias = [];
|
|
// Munge and Validate type
|
|
$type = strtolower(trim($matches[1], " \t\n\r\0\x0B\\/\"'"));
|
|
if (!in_array($type, $types, TRUE)) {
|
|
return [];
|
|
}
|
|
$port_ifAlias['type'] = $type;
|
|
|
|
// Munge and Validate description
|
|
$descr = trim($matches[2]);
|
|
if (safe_empty($descr)) {
|
|
return [];
|
|
}
|
|
$port_ifAlias['descr'] = $descr;
|
|
|
|
if (preg_match('/\{(.*?)\}/', $port['ifAlias'], $matches)) {
|
|
$port_ifAlias['circuit'] = $matches[1];
|
|
}
|
|
if (preg_match('/\[(.*?)\]/', $port['ifAlias'], $matches)) {
|
|
$port_ifAlias['speed'] = $matches[1];
|
|
}
|
|
if (preg_match('/\((.*?)\)/', $port['ifAlias'], $matches)) {
|
|
$port_ifAlias['notes'] = $matches[1];
|
|
}
|
|
|
|
print_debug_vars($port_ifAlias);
|
|
|
|
return $port_ifAlias;
|
|
}
|
|
|
|
// EOF
|