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

Finished release 0.53.

parents 78a46c16 606979f3
Branches
Tags 0.53
No related merge requests found
import json
import logging.config
import os
import pkg_resources
import sentry_sdk
from sentry_sdk.integrations.flask import FlaskIntegration
def setup_logging():
......@@ -13,6 +16,14 @@ def setup_logging():
default_filename = os.path.join(
os.path.dirname(__file__), 'logging_default_config.json')
filename = os.getenv('LOGGING_CONFIG', default_filename)
sentry_dsn = os.getenv('SENTRY_DSN')
if sentry_dsn:
sentry_sdk.init(
dsn=sentry_dsn,
integrations=[FlaskIntegration()],
release=pkg_resources.get_distribution('brian-dashboard-manager').version)
with open(filename) as f:
# TODO: this mac workaround should be removed ...
d = json.loads(f.read())
......
......@@ -4,12 +4,15 @@ Grafana Dashhboard API endpoints wrapper functions.
import logging
import os
import json
import time
from requests.exceptions import HTTPError
from brian_dashboard_manager.grafana.utils.request import TokenRequest
logger = logging.getLogger(__name__)
NUM_RETRIES = 3
def get_dashboard_definitions(dir=None):
"""
......@@ -231,9 +234,21 @@ def create_dashboard(request: TokenRequest, dashboard: dict, folder_id=None):
if folder_id:
payload['folderId'] = folder_id
try:
r = request.post('api/dashboards/db', json=payload)
return r.json()
except HTTPError:
logger.exception(f'Error when provisioning dashboard {title}')
# retry up to NUM_RETRIES times
for _ in range(NUM_RETRIES):
try:
r = request.post('api/dashboards/db', json=payload)
return r.json()
except HTTPError as e:
message = ''
if e.response is not None and e.response.status_code < 500:
# log the error message from Grafana
message = e.response.json()
# only retry on server side errors
if e.response is not None and e.response.status_code < 500:
break
logger.exception(f'Error when provisioning dashboard {title}: {message}')
time.sleep(1) # sleep for 1 second before retrying
return None
......@@ -708,9 +708,6 @@ def provision_maybe(config):
now = datetime.datetime.now()
write_timestamp(now.timestamp(), provisioning)
provision(config)
except Exception as e:
logger.exception('Uncaught Exception:')
raise e
finally:
now = datetime.datetime.now()
write_timestamp(now.timestamp(), False)
......@@ -742,7 +739,7 @@ def provision(config):
return next(
o for o in orgs_to_provision if o['name'] == org['name'])
except StopIteration:
logger.error(
logger.info(
f'Org {org["name"]} does not have valid configuration.')
return None
......
......@@ -20,7 +20,7 @@ PANEL_WIDTH = 24
logger = logging.getLogger(__file__)
def num_generator(start=1):
def num_generator(start=30):
"""
Generator for numbers starting from the value of `start`
......
......@@ -39,6 +39,23 @@
"version": 1,
"links": [],
"panels": [
{
"datasource": null,
"gridPos": {
"h": 1,
"w": 24,
"x": 0,
"y": 0
},
"id": 1,
"options": {
"content": "",
"mode": "html"
},
"pluginVersion": "8.2.5",
"title": "INFO: The average values displayed are only mean values for timescales of 2 days or less",
"type": "text"
},
{% for panel in aggregate_panels %}
{{ panel }},
{% endfor %}
......
......@@ -39,6 +39,23 @@
"version": 1,
"links": [],
"panels": [
{
"datasource": null,
"gridPos": {
"h": 1,
"w": 24,
"x": 0,
"y": 0
},
"id": 1,
"options": {
"content": "",
"mode": "html"
},
"pluginVersion": "8.2.5",
"title": "INFO: The average values displayed are only mean values for timescales of 2 days or less",
"type": "text"
}{{ "," if panels }}
{% for panel in panels %}
{{ panel }}{{ "," if not loop.last }}
{% endfor %}
......
......@@ -2,6 +2,9 @@
All notable changes to this project will be documented in this file.
## [0.53] - 2023-06-21
- Add banner explaining difference between average/mean for >48h time ranges
## [0.52] - 2023-04-17
- Changed HTTP requests to reuse TCP connections to improve provisioning time
- Changed Jinja template code to cache templates on startup
......
......@@ -9,3 +9,4 @@ responses
sphinx
sphinx-rtd-theme
sentry-sdk[flask]
\ No newline at end of file
......@@ -2,7 +2,7 @@ from setuptools import setup, find_packages
setup(
name='brian-dashboard-manager',
version="0.52",
version="0.53",
author='GEANT',
author_email='swd@geant.org',
description='',
......@@ -12,7 +12,8 @@ setup(
'requests',
'jsonschema',
'flask',
'jinja2'
'jinja2',
'sentry-sdk[flask]'
],
include_package_data=True,
)
......@@ -337,5 +337,5 @@ def test_provision_aggregate(data_config, mocker, client):
panels = result['panels']
expected_title = f'Aggregate - {TEST_DASHBOARD["dashboard_name"]}'
assert result['title'] == expected_title
assert len(panels) == 14
assert len(panels[0]['targets']) == len(TEST_DASHBOARD['interfaces'])
assert len(panels) == 15
assert len(panels[1]['targets']) == len(TEST_DASHBOARD['interfaces'])
......@@ -195,7 +195,7 @@ def test_create_dashboard_no_uid_error(data_config):
assert 'id' not in body['dashboard']
# have already tested a successful response, respond with error here.
return 400, {}, ''
return 400, {}, '{}'
responses.add_callback(
method=responses.POST,
......
......@@ -3,6 +3,7 @@ envlist = py36
[flake8]
exclude = venv,.tox
max-line-length = 120
[testenv]
setenv =
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment