AETHER-1717 Validate JSON in request
Change-Id: Ia3891f6c1ff85a05f98031185ebd02576b968328
diff --git a/edge-monitoring/edge_monitoring_server.py b/edge-monitoring/edge_monitoring_server.py
index f8f8c91..aa4d7e5 100755
--- a/edge-monitoring/edge_monitoring_server.py
+++ b/edge-monitoring/edge_monitoring_server.py
@@ -12,6 +12,7 @@
from icalevents.icalevents import events
from flask import Flask, jsonify, abort, request, Response
import prometheus_client as prom
+import jsonschema
# URL of maintenance calendar
SECRET_ICAL_URL = os.environ.get("SECRET_ICAL_URL")
@@ -24,6 +25,64 @@
NO_RESULT_THRESHOLD = 720
app = Flask(__name__)
+
+edgeSchema = {
+ "type": "object",
+ "properties": {
+ "name": {"type": "string"},
+ "status": {
+ "type": "object",
+ "properties": {
+ "control_plane": {"type": "string"},
+ "user_plane": {"type": "string"}
+ },
+ "required": ["control_plane", "user_plane"]
+ },
+ "speedtest": {
+ "type": "object",
+ "properties": {
+ "ping": {
+ "type": "object",
+ "properties": {
+ "dns": {
+ "type": "object",
+ "properties": {
+ "min": {"type": "number"},
+ "avg": {"type": "number"},
+ "max": {"type": "number"},
+ "stddev": {"type": "number"}
+ },
+ "required": ["min", "avg", "max", "stddev"]
+ }
+ }
+ },
+ "iperf": {
+ "type": "object",
+ "properties": {
+ "cluster": {
+ "type": "object",
+ "properties": {
+ "downlink": {"type": "number"},
+ "uplink": {"type": "number"}
+ },
+ "required": ["downlink", "uplink"]
+ }
+ }
+ }
+ }
+ },
+ "signal_quality": {
+ "type": "object",
+ "properties": {
+ "rsrq": {"type": "number"},
+ "rsrp": {"type": "number"}
+ },
+ "required": ["rsrq", "rsrp"]
+ }
+ },
+ "required": ["name", "status"]
+}
+
edges = [
{
'name': 'ace-example',
@@ -305,11 +364,10 @@
@app.route('/edges', methods=['POST'])
@app.route('/testresults', methods=['POST'])
def create_or_update_edge():
- if not request.json:
- abort(400)
- if 'name' not in request.json:
- abort(400)
- if 'status' not in request.json:
+ try:
+ jsonschema.validate(instance=request.json, schema=edgeSchema)
+ except jsonschema.exceptions.ValidationError as err:
+ print(err)
abort(400)
req_edge = {