Skip to content

Commit

Permalink
Merge pull request #463 from ARGOeu/devel
Browse files Browse the repository at this point in the history
Version 3.4.3
  • Loading branch information
themiszamani authored Aug 4, 2022
2 parents fad4548 + 0c867b4 commit 6272a0a
Show file tree
Hide file tree
Showing 50 changed files with 18,354 additions and 12,738 deletions.
13 changes: 13 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,18 @@
# Changelog

## [3.4.3] - 2022-08-04

### Changed

* ARGO-3950 Bump Django version
* ARGO-3951 Update webpack, loaders, eslint and babel stuff
* ARGO-3952 Refine loading of custom Bootstrap options

### Fixed

* ARGO-3909 Wrong error message during tag syncing when adding/cloning metric template
* ARGO-3954 Fields in metric page enabled due to a package upgrade when they should be disabled

## [3.4.2] - 2022-06-09

### Added
Expand Down
1 change: 1 addition & 0 deletions etc/poem.conf.template
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ Reports = https://api.devel.argo.grnet.gr/api/v2/reports
ReportsTopologyTags = https://api.devel.argo.grnet.gr/api/v2/topology/tags
ReportsTopologyGroups = https://api.devel.argo.grnet.gr/api/v2/topology/groups
ReportsTopologyEndpoints = https://api.devel.argo.grnet.gr/api/v2/topology/endpoints
Metrics = https://api.devel.argo.grnet.gr/api/v2/admin/metrics

[GENERAL_ALL]
PublicPage = tenant.com
Expand Down
4 changes: 1 addition & 3 deletions poem/Poem/.babelrc
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,7 @@
{
"targets": {
"browsers": [
">0.25%",
"not ie 11",
"not op_mini all"
"defaults"
]
}
}
Expand Down
6 changes: 3 additions & 3 deletions poem/Poem/.eslintrc.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
module.exports = {
parser: "@babel/eslint-parser",
"env": {
"jest": true,
"browser": true,
"es6": true
"jest": true,
"browser": true,
"es6": true
},
"extends": [
"eslint:recommended",
Expand Down
207 changes: 206 additions & 1 deletion poem/Poem/api/internal_views/metrics.py
Original file line number Diff line number Diff line change
@@ -1,16 +1,18 @@
import ast
import json

import requests
from Poem.api.internal_views.utils import one_value_inline, two_value_inline, \
inline_metric_for_db
from Poem.api.views import NotFound
from Poem.api.views import NotFound, ListMetricOverrides
from Poem.helpers.history_helpers import create_history
from Poem.helpers.metrics_helpers import import_metrics, \
update_metric_in_schema, get_metrics_in_profiles, \
delete_metrics_from_profile
from Poem.poem import models as poem_models
from Poem.poem_super_admin import models as admin_models
from django.contrib.contenttypes.models import ContentType
from django.db import IntegrityError
from rest_framework import status
from rest_framework.authentication import SessionAuthentication
from rest_framework.response import Response
Expand Down Expand Up @@ -691,3 +693,206 @@ def put(self, request):
status_code=status.HTTP_401_UNAUTHORIZED,
detail="You do not have permission to update metrics' versions."
)


class ListMetricConfiguration(ListMetricOverrides):
authentication_classes = (SessionAuthentication,)
permission_classes = ()

def get(self, request, name=None):
if request.user.is_superuser:
if name:
configurations = poem_models.MetricConfiguration.objects.filter(
name=name
)

if configurations.count() == 0:
raise NotFound(
status=404, detail="Metric configuration not found."
)

else:
configurations = poem_models.MetricConfiguration.objects.all()

results = []
for configuration in configurations:
global_attributes = self._get_global_attributes(
configuration.globalattribute
)
host_attributes = self._get_host_attributes(
configuration.hostattribute
)
metric_parameters = self._get_metric_parameters(
configuration.metricparameter
)

results.append(dict(
id=configuration.id,
name=configuration.name,
global_attributes=global_attributes,
host_attributes=host_attributes,
metric_parameters=metric_parameters
))

results = sorted(results, key=lambda k: k["name"])

if name:
return Response(results[0])

else:
return Response(results)

else:
return error_response(
status_code=status.HTTP_401_UNAUTHORIZED,
detail="You do not have permission to view metric "
"configuration overrides."
)

def put(self, request):
if request.user.is_superuser:
try:
conf = poem_models.MetricConfiguration.objects.get(
id=request.data["id"]
)
conf.name = request.data["name"]
global_attrs = list()
for item in dict(request.data)["global_attributes"]:
if isinstance(item, str):
item = ast.literal_eval(item)
global_attrs.append("{attribute} {value}".format(**item))

host_attrs = list()
for item in dict(request.data)["host_attributes"]:
if isinstance(item, str):
item = ast.literal_eval(item)
host_attrs.append(
"{hostname} {attribute} {value}".format(**item)
)

metric_params = list()
for item in dict(request.data)["metric_parameters"]:
if isinstance(item, str):
item = ast.literal_eval(item)
metric_params.append(
"{hostname} {metric} {parameter} {value}".format(**item)
)

conf.globalattribute = json.dumps(global_attrs)
conf.hostattribute = json.dumps(host_attrs)
conf.metricparameter = json.dumps(metric_params)

conf.save()

return Response(status=status.HTTP_201_CREATED)

except IntegrityError:
return error_response(
status_code=status.HTTP_400_BAD_REQUEST,
detail="Metric configuration override with this name "
"already exists."
)

except poem_models.MetricConfiguration.DoesNotExist:
return error_response(
status_code=status.HTTP_404_NOT_FOUND,
detail="Metric configuration override with requested id "
"does not exist."
)

except KeyError as e:
return error_response(
status_code=status.HTTP_400_BAD_REQUEST,
detail=f"Missing data key: {e.args[0]}"
)

else:
return error_response(
status_code=status.HTTP_401_UNAUTHORIZED,
detail="You do not have permission to change metric "
"configuration overrides."
)

def post(self, request):
if request.user.is_superuser:
try:
global_attrs = list()
for item in dict(request.data)["global_attributes"]:
if isinstance(item, str):
item = ast.literal_eval(item)
global_attrs.append("{attribute} {value}".format(**item))

host_attrs = list()
for item in dict(request.data)["host_attributes"]:
if isinstance(item, str):
item = ast.literal_eval(item)
host_attrs.append(
"{hostname} {attribute} {value}".format(**item)
)

metric_params = list()
for item in dict(request.data)["metric_parameters"]:
if isinstance(item, str):
item = ast.literal_eval(item)
metric_params.append(
"{hostname} {metric} {parameter} {value}".format(**item)
)

poem_models.MetricConfiguration.objects.create(
name=request.data["name"],
globalattribute=json.dumps(global_attrs),
hostattribute=json.dumps(host_attrs),
metricparameter=json.dumps(metric_params)
)

return Response(status=status.HTTP_201_CREATED)

except IntegrityError:
return error_response(
status_code=status.HTTP_400_BAD_REQUEST,
detail="Local metric configuration with this name already "
"exists."
)

except KeyError as e:
return error_response(
status_code=status.HTTP_400_BAD_REQUEST,
detail=f"Missing data key: {e.args[0]}"
)

else:
return error_response(
status_code=status.HTTP_401_UNAUTHORIZED,
detail="You do not have permission to add metric configuration "
"overrides."
)

def delete(self, request, name=None):
if request.user.is_superuser:
if name:
try:
conf = poem_models.MetricConfiguration.objects.get(
name=name
)
conf.delete()

return Response(status=status.HTTP_204_NO_CONTENT)

except poem_models.MetricConfiguration.DoesNotExist:
return error_response(
status_code=status.HTTP_404_NOT_FOUND,
detail="Metric configuration not found."
)

else:
return error_response(
status_code=status.HTTP_400_BAD_REQUEST,
detail="Metric configuration name must be defined."
)

else:
return error_response(
status_code=status.HTTP_401_UNAUTHORIZED,
detail="You do not have permission to delete local metric "
"configurations."
)
Loading

0 comments on commit 6272a0a

Please sign in to comment.