AETHER-1751 Add CI/CD

Change-Id: I29daba05c7f261e159384f94381bb8a397bd0400
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..fca7084
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,2 @@
+.DEFAULT:
+	make -C edge-monitoring-server $@
diff --git a/VERSION b/VERSION
new file mode 100644
index 0000000..394f84e
--- /dev/null
+++ b/VERSION
@@ -0,0 +1 @@
+0.6.2-dev
diff --git a/edge-monitoring-server/.gitignore b/edge-monitoring-server/.gitignore
new file mode 100644
index 0000000..c39a109
--- /dev/null
+++ b/edge-monitoring-server/.gitignore
@@ -0,0 +1,6 @@
+# Copyright 2020-present Open Networking Foundation
+#
+# SPDX-License-Identifier: LicenseRef-ONF-Member-Only-1.0
+
+*.pyc
+__pycache__/
diff --git a/edge-monitoring/Dockerfile.server b/edge-monitoring-server/Dockerfile.server
similarity index 100%
rename from edge-monitoring/Dockerfile.server
rename to edge-monitoring-server/Dockerfile.server
diff --git a/edge-monitoring/Makefile b/edge-monitoring-server/Makefile
similarity index 91%
rename from edge-monitoring/Makefile
rename to edge-monitoring-server/Makefile
index f199fa4..9cbcef0 100644
--- a/edge-monitoring/Makefile
+++ b/edge-monitoring-server/Makefile
@@ -22,7 +22,7 @@
 SHELL = bash -e -o pipefail
 
 # Variables
-VERSION                  ?= $(shell cat ./VERSION)
+VERSION                  ?= $(shell cat ../VERSION)
 VENVDIR := venv
 
 ## Docker related
@@ -57,9 +57,11 @@
 docker-push:
 	docker push ${ADAPTER_IMAGENAME}
 
-${VENVDIR}:
-	virtualenv --python=python3 ${VENVDIR};\
+${VENVDIR}: requirements.txt
+	python3 -m venv ${VENVDIR};\
         source ./${VENVDIR}/bin/activate ; set -u ;\
+		pip install --upgrade pip wheel setuptools;\
+		python3 --version; pip --version; \
         pip install -r requirements.txt
 
 clean:
diff --git a/edge-monitoring/edge_maintenance_agent.py b/edge-monitoring-server/edge_maintenance_agent.py
similarity index 100%
rename from edge-monitoring/edge_maintenance_agent.py
rename to edge-monitoring-server/edge_maintenance_agent.py
diff --git a/edge-monitoring/edge_monitoring_server.py b/edge-monitoring-server/edge_monitoring_server.py
similarity index 95%
rename from edge-monitoring/edge_monitoring_server.py
rename to edge-monitoring-server/edge_monitoring_server.py
index aa4d7e5..6f74a53 100755
--- a/edge-monitoring/edge_monitoring_server.py
+++ b/edge-monitoring-server/edge_monitoring_server.py
@@ -13,6 +13,7 @@
 from flask import Flask, jsonify, abort, request, Response
 import prometheus_client as prom
 import jsonschema
+from logging.config import dictConfig
 
 # URL of maintenance calendar
 SECRET_ICAL_URL = os.environ.get("SECRET_ICAL_URL")
@@ -24,6 +25,22 @@
 # Move to "no result" status if we don't hear from agent for this many seconds
 NO_RESULT_THRESHOLD = 720
 
+dictConfig({
+    'version': 1,
+    'formatters': {'default': {
+        'format': '[%(asctime)s] %(levelname)s  %(message)s',
+    }},
+    'handlers': {'wsgi': {
+        'class': 'logging.StreamHandler',
+        'stream': 'ext://flask.logging.wsgi_errors_stream',
+        'formatter': 'default'
+    }},
+    'root': {
+        'level': 'INFO',
+        'handlers': ['wsgi']
+    }
+})
+
 app = Flask(__name__)
 
 edgeSchema = {
@@ -195,7 +212,7 @@
             es  = events(SECRET_ICAL_URL, start = now)
             process_all_day_events(es)
         except Exception as e:
-            print(e)
+            app.logger.error(e)
         else:
             for edge in edges:
                 if 'maintenance' not in edge:
@@ -367,7 +384,7 @@
     try:
         jsonschema.validate(instance=request.json, schema=edgeSchema)
     except jsonschema.exceptions.ValidationError as err:
-        print(err)
+        app.logger.warn(err)
         abort(400)
 
     req_edge = {
@@ -406,7 +423,7 @@
 
     edge = [edge for edge in edges if edge['name'] == req_edge['name']]
     if len(edge) == 0:
-        print("new edge request " + req_edge['name'])
+        app.logger.info("new edge request " + req_edge['name'])
         edges.append(req_edge)
     else:
         edge[0]['status']['control_plane'] = req_edge['status']['control_plane']
@@ -423,7 +440,7 @@
 @app.route('/edges/<string:name>', methods=['DELETE'])
 @app.route('/testresults/<string:name>', methods=['DELETE'])
 def delete_edge(name):
-    print("delete edge request " + name)
+    app.logger.info("delete edge request " + name)
     result = False
     for i in range(len(edges)):
         if edges[i]['name'] == name:
@@ -438,7 +455,7 @@
 
 if __name__ == '__main__':
     if SECRET_ICAL_URL and AETHER_ENV:
-        print(" * Starting maintenance calendar polling thread (Aether env: %s)" % AETHER_ENV)
+        app.logger.info(" * Starting maintenance calendar polling thread (Aether env: %s)" % AETHER_ENV)
         t = threading.Thread(target=pull_maintenance_events)
         t.start()
     app.run(debug=True, host='0.0.0.0', port=80)
diff --git a/edge-monitoring/requirements.txt b/edge-monitoring-server/requirements.txt
similarity index 68%
rename from edge-monitoring/requirements.txt
rename to edge-monitoring-server/requirements.txt
index bc3f77b..0f9f0f8 100644
--- a/edge-monitoring/requirements.txt
+++ b/edge-monitoring-server/requirements.txt
@@ -3,3 +3,4 @@
 pytz
 icalevents
 jsonschema
+unittest-xml-reporting
diff --git a/edge-monitoring/test_edge_monitoring_server.py b/edge-monitoring-server/test_edge_monitoring_server.py
similarity index 98%
rename from edge-monitoring/test_edge_monitoring_server.py
rename to edge-monitoring-server/test_edge_monitoring_server.py
index e326a06..d86cd4c 100755
--- a/edge-monitoring/test_edge_monitoring_server.py
+++ b/edge-monitoring-server/test_edge_monitoring_server.py
@@ -458,5 +458,6 @@
         self.assertFalse('ace-menlo-pixel' in data)
 
 if __name__ == '__main__':
-    suite = unittest.TestLoader().loadTestsFromTestCase(TestEdgeMonitoringServer)
-    unittest.TextTestRunner(verbosity=2).run(suite)
+    import xmlrunner
+    with open('results.xml', 'wb') as output:
+        unittest.main(testRunner=xmlrunner.XMLTestRunner(verbosity=2, output=output))
\ No newline at end of file
diff --git a/edge-monitoring/VERSION b/edge-monitoring/VERSION
deleted file mode 100644
index ee6cdce..0000000
--- a/edge-monitoring/VERSION
+++ /dev/null
@@ -1 +0,0 @@
-0.6.1