mirror of
https://github.com/librenms/librenms.git
synced 2024-10-07 16:52:45 +00:00
Added resources/links and devices/hostname/links API calls for xDP (#9444)
* api: Add list_links and get_link api calls Signed-off-by: Misha Komarovskiy <zombah@gmail.com> * api: Add get_links api call Signed-off-by: Misha Komarovskiy <zombah@gmail.com>
This commit is contained in:
committed by
Neil Lathwood
parent
6b379afffc
commit
4efb95e059
@@ -69,3 +69,121 @@ Output:
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### `list_links`
|
||||
|
||||
Get a list of all Links.
|
||||
|
||||
Route: `/api/v0/resources/links`
|
||||
|
||||
Input:
|
||||
|
||||
-
|
||||
|
||||
Example:
|
||||
```curl
|
||||
curl -H 'X-Auth-Token: YOURAPITOKENHERE' https://librenms.org/api/v0/resources/links
|
||||
```
|
||||
|
||||
Output:
|
||||
```json
|
||||
{
|
||||
"status": "ok",
|
||||
"links": [
|
||||
{
|
||||
"id": 10,
|
||||
"local_port_id": 100,
|
||||
"local_device_id": 1,
|
||||
"remote_port_id": 200,
|
||||
"active": 1,
|
||||
"protocol": "lldp",
|
||||
"remote_hostname": "host2.example.com",
|
||||
"remote_device_id": 2,
|
||||
"remote_port": "xe-0/0/1",
|
||||
"remote_platform": null,
|
||||
"remote_version": "Example Router v.1.0"
|
||||
},
|
||||
...
|
||||
],
|
||||
"count": 100
|
||||
}
|
||||
```
|
||||
|
||||
### `get_links`
|
||||
|
||||
Get a list of Links per giver device.
|
||||
|
||||
Route: `/api/v0/devices/:hostname/links`
|
||||
|
||||
- hostname can be either the device hostname or id
|
||||
|
||||
Input:
|
||||
|
||||
-
|
||||
|
||||
Example:
|
||||
```curl
|
||||
curl -H 'X-Auth-Token: YOURAPITOKENHERE' https://librenms.org/api/v0/devices/localhost/links
|
||||
```
|
||||
|
||||
Output:
|
||||
```json
|
||||
{
|
||||
"status": "ok",
|
||||
"links": [
|
||||
{
|
||||
"id": 10,
|
||||
"local_port_id": 100,
|
||||
"local_device_id": 1,
|
||||
"remote_port_id": 200,
|
||||
"active": 1,
|
||||
"protocol": "lldp",
|
||||
"remote_hostname": "host2.example.com",
|
||||
"remote_device_id": 2,
|
||||
"remote_port": "xe-0/0/1",
|
||||
"remote_platform": null,
|
||||
"remote_version": "Example Router v.1.0"
|
||||
},
|
||||
...
|
||||
],
|
||||
"count": 10
|
||||
}
|
||||
```
|
||||
|
||||
### `get_link`
|
||||
|
||||
Retrieves Link by ID
|
||||
|
||||
Route: `/api/v0/resources/links/:id`
|
||||
|
||||
Input:
|
||||
|
||||
-
|
||||
|
||||
Example:
|
||||
```curl
|
||||
curl -H 'X-Auth-Token: YOURAPITOKENHERE' https://librenms.org/api/v0/resources/link/10
|
||||
```
|
||||
|
||||
Output:
|
||||
```json
|
||||
{
|
||||
"status": "ok",
|
||||
"links": [
|
||||
{
|
||||
"id": 10,
|
||||
"local_port_id": 100,
|
||||
"local_device_id": 1,
|
||||
"remote_port_id": 200,
|
||||
"active": 1,
|
||||
"protocol": "lldp",
|
||||
"remote_hostname": "host2.example.com",
|
||||
"remote_device_id": 2,
|
||||
"remote_port": "xe-0/0/1",
|
||||
"remote_platform": null,
|
||||
"remote_version": "Example Router v.1.0"
|
||||
}
|
||||
],
|
||||
"count": 1
|
||||
}
|
||||
```
|
||||
|
||||
@@ -1970,6 +1970,63 @@ function list_vlans()
|
||||
}
|
||||
|
||||
|
||||
function list_links()
|
||||
{
|
||||
$app = \Slim\Slim::getInstance();
|
||||
$router = $app->router()->getCurrentRoute()->getParams();
|
||||
$sql = '';
|
||||
$sql_params = array();
|
||||
$hostname = $router['hostname'];
|
||||
$device_id = ctype_digit($hostname) ? $hostname : getidbyname($hostname);
|
||||
if (is_numeric($device_id)) {
|
||||
check_device_permission($device_id);
|
||||
$sql = " AND `links`.`local_device_id`=?";
|
||||
$sql_params = array($device_id);
|
||||
}
|
||||
if (!LegacyAuth::user()->hasGlobalRead()) {
|
||||
$sql .= " AND `links`.`local_device_id` IN (SELECT device_id FROM devices_perms WHERE user_id = ?)";
|
||||
$sql_params[] = LegacyAuth::id();
|
||||
}
|
||||
|
||||
$links = array();
|
||||
foreach (dbFetchRows("SELECT `links`.* FROM `links` LEFT JOIN `devices` ON `links`.`local_device_id` = `devices`.`device_id` WHERE `links`.`id` IS NOT NULL $sql", $sql_params) as $link) {
|
||||
$host_id = get_vm_parent_id($device);
|
||||
$device['ip'] = inet6_ntop($device['ip']);
|
||||
if (is_numeric($host_id)) {
|
||||
$device['parent_id'] = $host_id;
|
||||
}
|
||||
$links[] = $link;
|
||||
}
|
||||
$total_links = count($links);
|
||||
if ($total_links == 0) {
|
||||
api_error(404, 'Links do not exist');
|
||||
}
|
||||
|
||||
api_success($links, 'links');
|
||||
}
|
||||
|
||||
|
||||
function get_link()
|
||||
{
|
||||
check_is_read();
|
||||
|
||||
$app = \Slim\Slim::getInstance();
|
||||
$router = $app->router()->getCurrentRoute()->getParams();
|
||||
$linkId = $router['id'];
|
||||
if (!is_numeric($linkId)) {
|
||||
api_error(400, 'Invalid id has been provided');
|
||||
}
|
||||
|
||||
$link = dbFetchRows("SELECT * FROM `links` WHERE `id` IS NOT NULL AND `id` = ?", array($linkId));
|
||||
$link_count = count($link);
|
||||
if ($link_count == 0) {
|
||||
api_error(404, "Link $linkId does not exist");
|
||||
}
|
||||
|
||||
api_success($link, 'link');
|
||||
}
|
||||
|
||||
|
||||
function list_ip_addresses()
|
||||
{
|
||||
check_is_read();
|
||||
|
||||
@@ -60,6 +60,8 @@ $app->group(
|
||||
$app->patch('/:hostname/rename/:new_hostname', 'authToken', 'rename_device')->name('rename_device');
|
||||
$app->get('/:hostname/vlans', 'authToken', 'get_vlans')->name('get_vlans');
|
||||
// api/v0/devices/$hostname/vlans
|
||||
$app->get('/:hostname/links', 'authToken', 'list_links')->name('get_links');
|
||||
// api/v0/devices/$hostname/links
|
||||
$app->get('/:hostname/graphs', 'authToken', 'get_graphs')->name('get_graphs');
|
||||
// api/v0/devices/$hostname/graphs
|
||||
$app->get('/:hostname/health(/:type)(/:sensor_id)', 'authToken', 'list_available_health_graphs')->name('list_available_health_graphs');
|
||||
@@ -183,6 +185,8 @@ $app->group(
|
||||
$app->group(
|
||||
'/resources',
|
||||
function () use ($app) {
|
||||
$app->get('/links', 'authToken', 'list_links')->name('list_links');
|
||||
$app->get('/links/:id', 'authToken', 'get_link')->name('get_link');
|
||||
$app->get('/locations', 'authToken', 'list_locations')->name('list_locations');
|
||||
$app->get('/vlans', 'authToken', 'list_vlans')->name('list_vlans');
|
||||
$app->group(
|
||||
|
||||
Reference in New Issue
Block a user