Browse Source

HUE-1855 [beeswax] Error reporting is incomplete

Harmonized error messages and catching.
Found a hive bug too.
Romain Rigaux 12 years ago
parent
commit
1826833937
2 changed files with 20 additions and 18 deletions
  1. 8 16
      apps/beeswax/src/beeswax/api.py
  2. 12 2
      apps/beeswax/src/beeswax/templates/execute.mako

+ 8 - 16
apps/beeswax/src/beeswax/api.py

@@ -51,19 +51,13 @@ def error_handler(view_fn):
       raise e
     except Exception, e:
       if not hasattr(e, 'message') or not e.message:
-        message = _("Unknown exception.")
-        response = {
-          'status': -1,
-          'error': str(e),
-          'message': message,
-        }
+        message = str(e)
       else:
         message = force_unicode(e.message, strings_only=True, errors='replace')
-        response = {
-          'status': 1,
-          'error': str(e),
-          'message': message,
-        }
+      response = {
+        'status': -1,
+        'message': message,
+      }
       return HttpResponse(json.dumps(response), mimetype="application/json", status=200)
   return decorator
 
@@ -175,15 +169,13 @@ def watch_query_refresh_json(request, id):
     'watch_url': reverse(get_app_name(request) + ':api_watch_query_refresh_json', kwargs={'id': query_history.id})
   }
 
-  # Show popup message if error, should be better in error tab instead and merged into the result response below
+  # Run time error
   if query_history.is_failure():
     res = db.get_operation_status(handle)
     if hasattr(res, 'errorMessage') and res.errorMessage:
       result['message'] = res.errorMessage
     else:
-      result['message'] = ''
-
-    result['error'] = 'Bad status for request %s:\n%s' % (id, res)
+      result['message'] = _('Bad status for request %s:\n%s') % (id, res)
     result['status'] = 1
 
   return HttpResponse(json.dumps(result), mimetype="application/json")
@@ -270,7 +262,7 @@ def execute(request, query_id=None):
             response['errors'] = parameterization_form.errors
             return HttpResponse(json.dumps(response), mimetype="application/json")
 
-      # non-parameterized query
+      # Non-parameterized query
       query = HQLdesign(query_form, query_type=query_type)
       if request.GET.get('explain', 'false').lower() == 'true':
         return explain_directly(request, query, design, query_server)

+ 12 - 2
apps/beeswax/src/beeswax/templates/execute.mako

@@ -1465,20 +1465,30 @@ $(document).on('fetched.results', resultsTable);
 
 var selectedLine = -1;
 var errorWidgets = [];
+
 $(document).on('error.query', function () {
   $.each(errorWidgets, function(index, el) {
     $(el).remove();
     errorWidgets = [];
   });
 
+  // Move error to codeMirror if we konw the line number
   $.each($(".queryErrorMessage"), function(index, el) {
     var err = $(el).text().toLowerCase();
     var firstPos = err.indexOf("line");
     if (firstPos > -1) {
       selectedLine = $.trim(err.substring(err.indexOf(" ", firstPos), err.indexOf(":", firstPos))) * 1;
-      errorWidgets.push(codeMirror.addLineWidget(selectedLine - 1, $("<div>").addClass("editorError").html("<i class='fa fa-exclamation-circle'></i> " + err)[0], {coverGutter: true, noHScroll: true}));
+      errorWidgets.push(
+         codeMirror.addLineWidget(
+             selectedLine - 1,
+             $("<div>").addClass("editorError").html("<i class='fa fa-exclamation-circle'></i> " + err)[0], {
+                 coverGutter: true,
+                 noHScroll: true
+             }
+         )
+      );
+      $(el).hide();
     }
-    $(el).hide();
   });
 
   if ($(".queryErrorMessage:hidden").length == $(".queryErrorMessage").length) {