Skip to content
Snippets Groups Projects
Commit 2abbb128 authored by geant-release-service's avatar geant-release-service
Browse files

Finished release 0.58.

parents 0675fc12 feee2ca0
No related branches found
No related tags found
No related merge requests found
......@@ -21,7 +21,7 @@
"asDropdown": true,
"icon": "external link",
"tags": [
"copernicus"
"peer-aggregate"
],
"title": "Aggregates",
"type": "dashboards"
......
......@@ -19,13 +19,24 @@ def delete_folder(request: TokenRequest, title=None, uid=None):
:return: True if folder is considered deleted, False otherwise
"""
if uid:
r = request.delete(f'api/folders/{uid}').json()
try:
r = request.delete(f'api/folders/{uid}').json()
except HTTPError:
logger.exception(f'Error when deleting folder: {uid}')
return False
return r is not None
else:
folder = find_folder(request, title, False)
if folder is None:
return True
r = request.delete(f'api/folders/{folder.get("uid")}').json()
try:
r = request.delete(f'api/folders/{folder.get("uid")}')
r = r.json()
except HTTPError:
logger.exception(f'Error when deleting folder: {title}')
return False
logger.info(f'Deleted folder: {title}')
return r is not None
......@@ -48,8 +59,10 @@ def find_folder(request: TokenRequest, title, create=True):
folder = None
if not folder and create:
logger.info(f'Created folder: {title}')
folder = create_folder(request, title)
if not folder:
return None
logger.info(f'Created folder: {title}')
return folder
......@@ -61,7 +74,14 @@ def get_folders(request: TokenRequest):
:param request: TokenRequest object
:return: list of folder definitions
"""
return request.get('api/folders').json()
try:
r = request.get('api/folders')
folders = r.json()
except HTTPError:
logger.exception('Error when getting Grafana folders:')
return []
return folders
def create_folder(request: TokenRequest, title):
......
......@@ -161,12 +161,22 @@ AGG_DASHBOARDS = {
'dashboard_name': 'CAE1',
'interfaces': []
},
'IC1': {
'tag': ['ic1', 'peer-aggregate'],
'dashboard_name': 'IC-1',
'interfaces': []
},
'COPERNICUS': {
'tag': ['copernicus', 'services'],
'tag': ['copernicus', 'services', 'peer-aggregate'],
'dashboard_name': 'COPERNICUS',
'group_by': 'location',
'interfaces': []
}
},
'ANA': {
'tag': ['ana', 'peer-aggregate'],
'dashboard_name': 'ANA',
'interfaces': []
},
}
......@@ -478,6 +488,8 @@ def _provision_gws_direct(config, org_config, ds_name, token):
delete_folder(token, title=folder_name)
else:
folder = find_folder(token, folder_name)
if not folder:
logger.error(f'Folder {folder_name} not found')
with ThreadPoolExecutor(max_workers=MAX_WORKERS) as executor:
gws_data = get_gws_direct(config['inventory_provider'])
provisioned = []
......
from enum import Enum, auto
import requests
import logging
import jsonschema
from requests.exceptions import HTTPError
from enum import Enum, auto
from functools import reduce
logger = logging.getLogger(__name__)
......@@ -39,7 +40,9 @@ class BRIAN_DASHBOARDS(Enum):
GWS_UPSTREAMS = auto()
LHCONE = auto()
CAE1 = auto()
IC1 = auto()
COPERNICUS = auto()
ANA = auto()
# NREN customer
NREN = auto()
......@@ -300,9 +303,14 @@ def _get_ip_info(host):
prev[router_name] = router
return prev
r = requests.get(f'{host}/data/interfaces')
r.raise_for_status()
interfaces = r.json()
try:
r = requests.get(f'{host}/data/interfaces')
r.raise_for_status()
interfaces = r.json()
except HTTPError:
logger.exception('Failed to get IP info')
interfaces = []
jsonschema.validate(interfaces, ROUTER_INTERFACES_SCHEMA)
return reduce(reduce_func, interfaces, {})
......@@ -316,8 +324,13 @@ def get_interfaces(host):
"""
r = requests.get(f'{host}/poller/interfaces')
r.raise_for_status()
interfaces = r.json()
try:
r.raise_for_status()
interfaces = r.json()
except HTTPError:
logger.exception('Failed to get interfaces')
interfaces = []
jsonschema.validate(interfaces, INTERFACE_LIST_SCHEMA)
ip_info = _get_ip_info(host)
......@@ -336,6 +349,7 @@ def get_interfaces(host):
interface['ipv4'] = ipv4
interface['ipv6'] = ipv6
return interface
filtered = filter(lambda i: len(i['dashboards']) > 0, interfaces)
enriched = list(map(enrich, filtered))
return enriched
......@@ -351,8 +365,13 @@ def get_gws_direct(host):
"""
r = requests.get(f'{host}/poller/gws/direct')
r.raise_for_status()
interfaces = r.json()
try:
r.raise_for_status()
interfaces = r.json()
except HTTPError:
logger.exception('Failed to get GWS direct data')
interfaces = []
jsonschema.validate(interfaces, GWS_DIRECT_DATA_SCHEMA)
return interfaces
......@@ -364,10 +383,13 @@ def get_gws_indirect(host):
:param host: Hostname to perform the request to.
:return: GWS Indirect data
"""
r = requests.get(f'{host}/poller/gws/indirect')
r.raise_for_status()
interfaces = r.json()
try:
r = requests.get(f'{host}/poller/gws/indirect')
r.raise_for_status()
interfaces = r.json()
except HTTPError:
logger.exception('Failed to get GWS indirect data')
interfaces = []
return interfaces
......@@ -378,9 +400,13 @@ def get_eumetsat_multicast_subscriptions(host):
:param host: Hostname to perform the request to.
:return: EUMETSAT multicast subscriptions
"""
try:
r = requests.get(f'{host}/poller/eumetsat-multicast')
r.raise_for_status()
data = r.json()
except HTTPError:
logger.exception('Failed to get EUMETSAT multicast subscriptions')
data = []
r = requests.get(f'{host}/poller/eumetsat-multicast')
r.raise_for_status()
data = r.json()
jsonschema.validate(data, MULTICAST_SUBSCRIPTION_LIST_SCHEMA)
return data
import logging
import requests
logger = logging.getLogger(__name__)
def fetch_services(host):
"""
Fetches the current service state from the Reporting Provider host
"""
r = requests.get(f'{host}/scid/current')
r.raise_for_status()
services = r.json()
try:
r = requests.get(f'{host}/scid/current')
r.raise_for_status()
services = r.json()
except requests.exceptions.HTTPError:
logger.exception('Error when fetching services:')
services = []
return services
......@@ -2,6 +2,10 @@
All notable changes to this project will be documented in this file.
## [0.58] - 2024-04-22
- POL1-418/POL1-804: Add ANA graphs
- POL1-703: Add IC1 aggregate dashboard
## [0.57] - 2024-02-27
- Fix layout for Grafana 10.3.3
......
......@@ -2,7 +2,7 @@ from setuptools import setup, find_packages
setup(
name='brian-dashboard-manager',
version="0.57",
version="0.58",
author='GEANT',
author_email='swd@geant.org',
description='',
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment