def list(self, request): """ Compile all reports and their related results (if any). Result data is deferred in the list view. """ report_list = [] report_content_type = ContentType.objects.get(app_label='extras', model='report') results = { r.name: r for r in JobResult.objects.filter( obj_type=report_content_type, status__in=JobResultStatusChoices.TERMINAL_STATE_CHOICES). defer('data') } # Iterate through all available Reports. for module_name, reports in get_reports(): for report in reports: # Attach the relevant JobResult (if any) to each Report. report.result = results.get(report.full_name, None) report_list.append(report) serializer = serializers.ReportSerializer(report_list, many=True, context={ 'request': request, }) return Response(serializer.data)
def handle(self, *args, **options): # Gather all available reports reports = get_reports() # Run reports for module_name, report_list in reports: for report in report_list: if module_name in options['reports'] or report.full_name in options['reports']: # Run the report and create a new ReportResult self.stdout.write( "[{:%H:%M:%S}] Running {}...".format(timezone.now(), report.full_name) ) report.run() # Report on success/failure status = self.style.ERROR('FAILED') if report.failed else self.style.SUCCESS('SUCCESS') for test_name, attrs in report.result.data.items(): self.stdout.write( "\t{}: {} success, {} info, {} warning, {} failure".format( test_name, attrs['success'], attrs['info'], attrs['warning'], attrs['failure'] ) ) self.stdout.write( "[{:%H:%M:%S}] {}: {}".format(timezone.now(), report.full_name, status) ) # Wrap things up self.stdout.write( "[{:%H:%M:%S}] Finished".format(timezone.now()) )
def handle(self, *args, **options): # Gather all available reports reports = get_reports() # Run reports for module_name, report_list in reports: for report in report_list: if module_name in options['reports'] or report.full_name in options['reports']: # Run the report and create a new JobResult self.stdout.write( "[{:%H:%M:%S}] Running {}...".format(timezone.now(), report.full_name) ) report_content_type = ContentType.objects.get(app_label='extras', model='report') job_result = JobResult.enqueue_job( run_report, report.full_name, report_content_type, None ) # Wait on the job to finish while job_result.status not in JobResultStatusChoices.TERMINAL_STATE_CHOICES: time.sleep(1) job_result = JobResult.objects.get(pk=job_result.pk) # Report on success/failure if job_result.status == JobResultStatusChoices.STATUS_FAILED: status = self.style.ERROR('FAILED') elif job_result == JobResultStatusChoices.STATUS_ERRORED: status = self.style.ERROR('ERRORED') else: status = self.style.SUCCESS('SUCCESS') for test_name, attrs in job_result.data.items(): self.stdout.write( "\t{}: {} success, {} info, {} warning, {} failure".format( test_name, attrs['success'], attrs['info'], attrs['warning'], attrs['failure'] ) ) self.stdout.write( "[{:%H:%M:%S}] {}: {}".format(timezone.now(), report.full_name, status) ) self.stdout.write( "[{:%H:%M:%S}] {}: Duration {}".format(timezone.now(), report.full_name, job_result.duration) ) # Wrap things up self.stdout.write( "[{:%H:%M:%S}] Finished".format(timezone.now()) )
def list(self, request): """ Compile all reports and their related results (if any). Result data is deferred in the list view. """ report_list = [] # Iterate through all available Reports. for module_name, reports in get_reports(): for report in reports: # Attach the relevant ReportResult (if any) to each Report. report.result = ReportResult.objects.filter(report=report.full_name).defer('data').first() report_list.append(report) serializer = serializers.ReportSerializer(report_list, many=True, context={ 'request': request, }) return Response(serializer.data)
def list(self, request): """ Compile all reports and their related results (if any). Result data is deferred in the list view. """ report_list = [] # Iterate through all available Reports. for module_name, reports in get_reports(): for report in reports: # Attach the relevant ReportResult (if any) to each Report. report.result = ReportResult.objects.filter(report=report.full_name).defer('data').first() report_list.append(report) serializer = serializers.ReportSerializer(report_list, many=True, context={ 'request': request, }) return Response(serializer.data)