From c0a5d31926c3f025e28633259acadc0b9f13ab8c Mon Sep 17 00:00:00 2001
From: Mattia Mancini <mancini@astron.nl>
Date: Wed, 10 Oct 2018 14:30:28 +0000
Subject: [PATCH] OSB-28: add logging when inserting models

---
 .gitattributes                                |  1 +
 .../serializers/component_error.py            |  8 +++++
 .../monitoringdb/serializers/element.py       |  3 ++
 .../monitoringdb/serializers/element_error.py |  3 ++
 .../monitoringdb/serializers/log.py           | 33 +++++++++++++++++++
 .../monitoringdb/serializers/station_tests.py |  5 +++
 6 files changed, 53 insertions(+)
 create mode 100644 LCU/Maintenance/DBInterface/monitoringdb/serializers/log.py

diff --git a/.gitattributes b/.gitattributes
index 75b2fda7be0..e036eb59253 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -1818,6 +1818,7 @@ LCU/Maintenance/DBInterface/monitoringdb/serializers/component.py -text
 LCU/Maintenance/DBInterface/monitoringdb/serializers/component_error.py -text
 LCU/Maintenance/DBInterface/monitoringdb/serializers/element.py -text
 LCU/Maintenance/DBInterface/monitoringdb/serializers/element_error.py -text
+LCU/Maintenance/DBInterface/monitoringdb/serializers/log.py -text
 LCU/Maintenance/DBInterface/monitoringdb/serializers/rtsm.py -text
 LCU/Maintenance/DBInterface/monitoringdb/serializers/station.py -text
 LCU/Maintenance/DBInterface/monitoringdb/serializers/station_tests.py -text
diff --git a/LCU/Maintenance/DBInterface/monitoringdb/serializers/component_error.py b/LCU/Maintenance/DBInterface/monitoringdb/serializers/component_error.py
index 3233b4df572..c582ee9d892 100644
--- a/LCU/Maintenance/DBInterface/monitoringdb/serializers/component_error.py
+++ b/LCU/Maintenance/DBInterface/monitoringdb/serializers/component_error.py
@@ -5,6 +5,7 @@ from rest_framework.serializers import PrimaryKeyRelatedField, CharField, Intege
 from .utils import NotNullModelSerializer
 from ..models.component import Component
 from ..models.component_error import ComponentError
+from .log import ActionLogSerializer
 
 logger = logging.getLogger(__name__)
 
@@ -37,7 +38,11 @@ class ComponentErrorSerializer(NotNullModelSerializer):
             component_entry = Component(station=station_entry,
                                         **component)
             logger.debug(component_entry, component_error)
+
+
             component_entry.save()
+            # Log the action
+            ActionLogSerializer.log_model_insert(component_entry)
 
         component_error_entry = ComponentError.objects.filter(component=component_entry,
                                                               station_test=station_test_entry,
@@ -49,6 +54,9 @@ class ComponentErrorSerializer(NotNullModelSerializer):
                                                    station_test=station_test_entry,
                                                    **component_error)
             component_error_entry.save()
+            # Log the action
+            ActionLogSerializer.log_model_insert(component_error_entry)
+
         return component_error_entry
 
     @staticmethod
diff --git a/LCU/Maintenance/DBInterface/monitoringdb/serializers/element.py b/LCU/Maintenance/DBInterface/monitoringdb/serializers/element.py
index 36e27d6949c..54a1edfb0bb 100644
--- a/LCU/Maintenance/DBInterface/monitoringdb/serializers/element.py
+++ b/LCU/Maintenance/DBInterface/monitoringdb/serializers/element.py
@@ -1,5 +1,6 @@
 from rest_framework.serializers import ModelSerializer
 from ..models.element import Element
+from .log import ActionLogSerializer
 
 
 class ElementSerializer(ModelSerializer):
@@ -16,4 +17,6 @@ class ElementSerializer(ModelSerializer):
             element_entry = Element(component=component,
                                     **element)
             element_entry.save()
+            # Log the action
+            ActionLogSerializer.log_model_insert(element_entry)
         return element_entry
\ No newline at end of file
diff --git a/LCU/Maintenance/DBInterface/monitoringdb/serializers/element_error.py b/LCU/Maintenance/DBInterface/monitoringdb/serializers/element_error.py
index 3fe497f3703..a4b62ae5af3 100644
--- a/LCU/Maintenance/DBInterface/monitoringdb/serializers/element_error.py
+++ b/LCU/Maintenance/DBInterface/monitoringdb/serializers/element_error.py
@@ -3,6 +3,7 @@ from rest_framework.serializers import ModelSerializer
 from .component_error import ComponentErrorSerializer
 from .element import ElementSerializer
 from ..models.element_error import ElementError
+from .log import ActionLogSerializer
 import logging
 
 
@@ -41,6 +42,8 @@ class ElementErrorSerializer(ModelSerializer):
                                                **element_error)
 
             element_error_entry.save()
+            # Log the action
+            ActionLogSerializer.log_model_insert(element_error_entry)
 
         return element_error_entry
 
diff --git a/LCU/Maintenance/DBInterface/monitoringdb/serializers/log.py b/LCU/Maintenance/DBInterface/monitoringdb/serializers/log.py
new file mode 100644
index 00000000000..f4b7915d725
--- /dev/null
+++ b/LCU/Maintenance/DBInterface/monitoringdb/serializers/log.py
@@ -0,0 +1,33 @@
+from rest_framework.serializers import ModelSerializer
+from ..models.log import ActionLog
+import logging
+
+logger = logging.getLogger(__name__)
+
+class ActionLogSerializer():
+
+    class Meta:
+        model = ActionLog
+        fields = '__all__'
+        depth = 1
+
+    @staticmethod
+    def append_log(primary_key, model_name, who, what):
+        action_log = ActionLog(entry_id=primary_key,
+                  model_name=model_name,
+                  who=who,
+                  what=what)
+        action_log.save()
+
+        return action_log
+
+    @staticmethod
+    def log_model_insert(element_entry, who='system'):
+        try:
+            ActionLogSerializer.append_log(element_entry.pk,
+                                           model_name=element_entry.__class__.__name__,
+                                           who=who,
+                                           what='Inserted')
+        except Exception as e:
+            logger.exception('Cannot log entry %s', element_entry)
+            raise e
\ No newline at end of file
diff --git a/LCU/Maintenance/DBInterface/monitoringdb/serializers/station_tests.py b/LCU/Maintenance/DBInterface/monitoringdb/serializers/station_tests.py
index 525d6331c9f..12b9dcbf38d 100644
--- a/LCU/Maintenance/DBInterface/monitoringdb/serializers/station_tests.py
+++ b/LCU/Maintenance/DBInterface/monitoringdb/serializers/station_tests.py
@@ -3,6 +3,7 @@ from ..models.station_test import StationTest
 from ..models.station import Station
 from .component_error import ComponentErrorSerializer
 from .element_error import ElementErrorSerializer
+from .log import ActionLogSerializer
 
 import logging
 
@@ -34,6 +35,8 @@ class StationTestSerializer(ModelSerializer):
             logger.debug('Station is not present, inserting ...')
             station_entry = Station(**station)
             station_entry.save()
+            # Log the action
+            ActionLogSerializer.log_model_insert(station_entry)
 
         station_test_entry = StationTest.objects.filter(**station_test).first()
         if station_test_entry is None:
@@ -41,6 +44,8 @@ class StationTestSerializer(ModelSerializer):
             station_test_entry = StationTest(station=station_entry,
                                              **station_test)
             station_test_entry.save()
+            # Log the action
+            ActionLogSerializer.log_model_insert(station_test_entry)
 
         ComponentErrorSerializer.insert_component_errors(station_test_entry,
                                                          station_entry,
-- 
GitLab