mirror of
https://github.com/librenms/librenms.git
synced 2024-10-07 16:52:45 +00:00
more filter options for the BGP peer API endpoint (#15599)
* Add more filter options for the BGP API endpoint. bgp_descr, bgp_state and bgp_adminstate * typo and lint * Adress family filter would also be helpful. casting AS1234 Like inputs to plain numbers * linting again...
This commit is contained in:
@@ -11,6 +11,10 @@ Input:
|
||||
- remote_asn = Filter by remote peer ASN
|
||||
- remote_address = Filter by remote peer address
|
||||
- local_address = Filter by local address
|
||||
- bgp_descr = Filter by BGP neighbor description
|
||||
- bgp_state = Filter by BGP session state (like established,idle...)
|
||||
- bgp_state = Filter by BGP admin state (start,stop,running...)
|
||||
- bgp_family = Filter by BGP address Family (4,6)
|
||||
|
||||
|
||||
|
||||
@@ -22,6 +26,11 @@ curl -H 'X-Auth-Token: YOURAPITOKENHERE' https://librenms.org/api/v0/bgp?hostnam
|
||||
curl -H 'X-Auth-Token: YOURAPITOKENHERE' https://librenms.org/api/v0/bgp?asn=1234
|
||||
curl -H 'X-Auth-Token: YOURAPITOKENHERE' https://librenms.org/api/v0/bgp?remote_asn=1234
|
||||
curl -H 'X-Auth-Token: YOURAPITOKENHERE' https://librenms.org/api/v0/bgp?local_address=1.1.1.1&remote_address=2.2.2.2
|
||||
curl -H 'X-Auth-Token: YOURAPITOKENHERE' https://librenms.org/api/v0/bgp?bgp_descr=UPSTREAM
|
||||
curl -H 'X-Auth-Token: YOURAPITOKENHERE' https://librenms.org/api/v0/bgp?bgp_state=established
|
||||
curl -H 'X-Auth-Token: YOURAPITOKENHERE' https://librenms.org/api/v0/bgp?bgp_adminstate=start
|
||||
curl -H 'X-Auth-Token: YOURAPITOKENHERE' https://librenms.org/api/v0/bgp?bgp_family=6
|
||||
curl -H 'X-Auth-Token: YOURAPITOKENHERE' https://librenms.org/api/v0/bgp?bgp_state=idle&bgp_descr=CORE&bgp_family=4
|
||||
```
|
||||
|
||||
Output:
|
||||
@@ -32,21 +41,27 @@ Output:
|
||||
"message": "",
|
||||
"bgp_sessions": [
|
||||
{
|
||||
"bgpPeer_id": "4",
|
||||
"device_id": "2",
|
||||
"astext": "",
|
||||
"bgpPeerIdentifier": "1234:1b80:1:12::2",
|
||||
"bgpPeerRemoteAs": "54321",
|
||||
"bgpPeer_id": 1260,
|
||||
"device_id": 7,
|
||||
"vrf_id": null,
|
||||
"astext": "Acme Ltd",
|
||||
"bgpPeerIdentifier": "2001:0DB8:0000:24cb:0000:0000:0000:0001",
|
||||
"bgpPeerRemoteAs": 65432,
|
||||
"bgpPeerState": "established",
|
||||
"bgpPeerAdminStatus": "running",
|
||||
"bgpLocalAddr": "1234:1b80:1:12::1",
|
||||
"bgpPeerAdminStatus": "start",
|
||||
"bgpPeerLastErrorCode": 6,
|
||||
"bgpPeerLastErrorSubCode": 2,
|
||||
"bgpPeerLastErrorText": "administrative shutdown",
|
||||
"bgpPeerIface": 268,
|
||||
"bgpLocalAddr": "2001:0DB8:0000:24cb:0000:0000:0000:0002",
|
||||
"bgpPeerRemoteAddr": "0.0.0.0",
|
||||
"bgpPeerInUpdates": "3",
|
||||
"bgpPeerOutUpdates": "1",
|
||||
"bgpPeerInTotalMessages": "0",
|
||||
"bgpPeerOutTotalMessages": "0",
|
||||
"bgpPeerFsmEstablishedTime": "0",
|
||||
"bgpPeerInUpdateElapsedTime": "0",
|
||||
"bgpPeerDescr": "Another one #CORE",
|
||||
"bgpPeerInUpdates": 283882969,
|
||||
"bgpPeerOutUpdates": 7008,
|
||||
"bgpPeerInTotalMessages": 283883031,
|
||||
"bgpPeerOutTotalMessages": 1386692,
|
||||
"bgpPeerFsmEstablishedTime": 1628487,
|
||||
"bgpPeerInUpdateElapsedTime": 0,
|
||||
"context_name": ""
|
||||
},
|
||||
...
|
||||
|
@@ -633,6 +633,10 @@ function list_bgp(Illuminate\Http\Request $request)
|
||||
$remote_asn = $request->get('remote_asn');
|
||||
$local_address = $request->get('local_address');
|
||||
$remote_address = $request->get('remote_address');
|
||||
$bgp_descr = $request->get('bgp_descr');
|
||||
$bgp_state = $request->get('bgp_state');
|
||||
$bgp_adminstate = $request->get('bgp_adminstate');
|
||||
$bgp_family = $request->get('bgp_family');
|
||||
$device_id = ctype_digit($hostname) ? $hostname : getidbyname($hostname);
|
||||
if (is_numeric($device_id)) {
|
||||
$sql .= ' AND `devices`.`device_id` = ?';
|
||||
@@ -640,11 +644,11 @@ function list_bgp(Illuminate\Http\Request $request)
|
||||
}
|
||||
if (! empty($asn)) {
|
||||
$sql .= ' AND `devices`.`bgpLocalAs` = ?';
|
||||
$sql_params[] = $asn;
|
||||
$sql_params[] = preg_replace('/[^0-9]/', '', $asn);
|
||||
}
|
||||
if (! empty($remote_asn)) {
|
||||
$sql .= ' AND `bgpPeers`.`bgpPeerRemoteAs` = ?';
|
||||
$sql_params[] = $remote_asn;
|
||||
$sql_params[] = preg_replace('/[^0-9]/', '', $remote_asn);
|
||||
}
|
||||
if (! empty($local_address)) {
|
||||
$sql .= ' AND `bgpPeers`.`bgpLocalAddr` = ?';
|
||||
@@ -662,6 +666,25 @@ function list_bgp(Illuminate\Http\Request $request)
|
||||
return api_error(400, 'Invalid remote address');
|
||||
}
|
||||
}
|
||||
if (! empty($bgp_descr)) {
|
||||
$sql .= ' AND `bgpPeers`.`bgpPeerDescr` LIKE ?';
|
||||
$sql_params[] = "%$bgp_descr%";
|
||||
}
|
||||
if (! empty($bgp_state)) {
|
||||
$sql .= ' AND `bgpPeers`.`bgpPeerState` = ?';
|
||||
$sql_params[] = $bgp_state;
|
||||
}
|
||||
if (! empty($bgp_adminstate)) {
|
||||
$sql .= ' AND `bgpPeers`.`bgpPeerAdminStatus` = ?';
|
||||
$sql_params[] = $bgp_adminstate;
|
||||
}
|
||||
if (! empty($bgp_family)) {
|
||||
if ($bgp_family == 4) {
|
||||
$sql .= ' AND `bgpPeers`.`bgpLocalAddr` LIKE \'%.%\'';
|
||||
} elseif ($bgp_family == 6) {
|
||||
$sql .= ' AND `bgpPeers`.`bgpLocalAddr` LIKE \'%:%\'';
|
||||
}
|
||||
}
|
||||
|
||||
$bgp_sessions = dbFetchRows("SELECT `bgpPeers`.* FROM `bgpPeers` LEFT JOIN `devices` ON `bgpPeers`.`device_id` = `devices`.`device_id` WHERE `bgpPeerState` IS NOT NULL AND `bgpPeerState` != '' $sql", $sql_params);
|
||||
$total_bgp_sessions = count($bgp_sessions);
|
||||
|
Reference in New Issue
Block a user