diff --git a/LCU/Maintenance/DBInterface/monitoringdb/tasks.py b/LCU/Maintenance/DBInterface/monitoringdb/tasks.py index 7a2a0e4ac0ce05ca7b93de76a6fe4c375a648e53..fdb75db4f65ac2a000d8c115824a4636f3c3d0ff 100644 --- a/LCU/Maintenance/DBInterface/monitoringdb/tasks.py +++ b/LCU/Maintenance/DBInterface/monitoringdb/tasks.py @@ -5,7 +5,8 @@ import matplotlib.pyplot as plt import numpy from celery import shared_task from django.conf import settings - +from celery.signals import task_prerun +from lofar.maintenance.django_postgresql import backend_tasks from .models.rtsm import RTSMObservation, MODE_TO_COMPONENT, RTSMErrorSummary, RTSMSummaryPlot logger = logging.getLogger(__name__) @@ -208,15 +209,15 @@ def generate_summary_plot_for_error(error_summary_id): full_path) summary_plot.uri = file_name summary_plot.save() - return full_path + return summary_plot.pk except Exception as e: logger.exception('exception %s occurred skipping...', e) summary_plot.delete() raise e -@shared_task(bind=True, track_started=True) -def check_error_summary_plot(self, error_summary_id): +@shared_task() +def check_error_summary_plot(error_summary_id): """ Checks if the error summary plot is presents otherwise it generates one :param self: shared_task @@ -224,8 +225,11 @@ def check_error_summary_plot(self, error_summary_id): :param error_summary_id: database id of the RTSMErrorSummary to check :return: """ + logger.debug('looking for rtsm error summary %s', error_summary_id) error_summary = RTSMErrorSummary.objects.get(pk=error_summary_id) summary_plot = error_summary.summary_plot.first() + logger.debug('summary error found %s', summary_plot) + if summary_plot is None: return generate_summary_plot_for_error(error_summary_id) else: @@ -238,26 +242,5 @@ def check_error_summary_plot(self, error_summary_id): elif os.path.isdir(full_path): raise Exception('%s is a directory' % full_path) else: - return error_summary.summary_plot.uri - - -@shared_task(bind=True, track_started=True) -def check_observation_plots(self, database_id): - """ - Generate the summary plots from a given RTSM observation - :param self: shared_task - :type self: celery.shared_task() - :param database_id: database id of the RTSM observation - :return: - """ - - observation = RTSMObservation.objects.get(id=database_id) - observation_metadata = ObservationMetadata() - - observation_metadata.observation_id = observation.observation_id - observation_metadata.station_name = observation.station.name - observation_metadata.samples = observation.samples - list_of_generated_files = [] - for error in observation.errors_summary.all(): - list_of_generated_files += [check_error_summary_plot.delay(error.pk)] - return 'checking in progress' + logger.debug('summary error %s is complete no need to generate additional plot', summary_plot.pk) + return summary_plot.pk diff --git a/LCU/Maintenance/DBInterface/monitoringdb/urls.py b/LCU/Maintenance/DBInterface/monitoringdb/urls.py index 119c244538b62f9cbdd5ac564aaddc67689fece9..55302abc5295044a997a4d6edc16d2e0d241ebf6 100644 --- a/LCU/Maintenance/DBInterface/monitoringdb/urls.py +++ b/LCU/Maintenance/DBInterface/monitoringdb/urls.py @@ -44,7 +44,5 @@ urlpatterns = [ url(r'^api/view/ctrl_stationtest_statistics', ControllerStationTestStatistics.as_view()), url(r'^api/view/ctrl_list_component_error_types', ControllerAllComponentErrorTypes.as_view()), url(r'^api/view/ctrl_station_component_errors', ControllerStationComponentErrors.as_view()), - url(r'^api/view/ctrl_test_queue', ControllerTestCeleryQueue.as_view()), - url(r'^api/docs', include_docs_urls(title='Monitoring DB API')) ] diff --git a/LCU/Maintenance/DBInterface/monitoringdb/views/rtsm_views.py b/LCU/Maintenance/DBInterface/monitoringdb/views/rtsm_views.py index 04cc5f151dbf270ca8627639793e6a488e09f8be..3cbf3109ebc8c1f10e6b07fc5ffe6a3758fdef9c 100644 --- a/LCU/Maintenance/DBInterface/monitoringdb/views/rtsm_views.py +++ b/LCU/Maintenance/DBInterface/monitoringdb/views/rtsm_views.py @@ -1,8 +1,10 @@ from .common import * from ..models.rtsm import RTSMObservation, RTSMError, RTSMSpectrum from ..serializers.rtsm import RTSMObservationSerializer, RTSMErrorSerializer, \ - RTSMSpectrumSerializer, RTSMSummaryPlotSerializer, RTSMSummaryPlot + RTSMSpectrumSerializer, RTSMSummaryPlotSerializer, RTSMErrorSummary from ..rtsm_test_raw_parser import parse_rtsm_test +import os +from ..tasks import check_error_summary_plot logger = logging.getLogger('views') @@ -24,14 +26,19 @@ class RTSMObservationViewSet(viewsets.ReadOnlyModelViewSet): serializer_class = RTSMObservationSerializer filter_fields = '__all__' -import os @api_view(['GET']) def get_summary_plot(request, pk): try: - entity = RTSMSummaryPlot.objects.get(pk=pk) - uri = RTSMSummaryPlotSerializer(entity).data['uri'] + entity = RTSMErrorSummary.objects.get(pk=pk) + summary_plot = entity.summary_plot.first() + + if summary_plot is None: + + raise ObjectDoesNotExist() + uri = RTSMSummaryPlotSerializer(summary_plot).data['uri'] except ObjectDoesNotExist as e: + check_error_summary_plot.delay(pk) return HttpResponse('<h1>NOT FOUND</h1>', status=status.HTTP_404_NOT_FOUND) try: