Handle backend errors properly and display them correctly on GUI for Grant Wizard

This commit is contained in:
Murtuza Zabuawala 2019-01-30 16:39:34 +05:30 committed by Akshay Joshi
parent 0e489df7b0
commit 317a04eafc
3 changed files with 59 additions and 24 deletions

View File

@ -21,7 +21,8 @@
display: inline-block;
}
.alert.alert-info {
.alert.alert-info,
.alert.alert-danger {
padding: 0.5rem;
}

View File

@ -191,6 +191,7 @@ def properties(sid, did, node_id, node_type):
server_prop = server_info
res_data = []
failed_objects = []
manager = get_driver(PG_DEFAULT_DRIVER).connection_manager(sid)
conn = manager.connection(did=did)
@ -231,10 +232,10 @@ def properties(sid, did, node_id, node_type):
node_id=node_id, type='function')
status, res = conn.execute_dict(SQL)
if not status:
return internal_server_error(errormsg=res)
current_app.logger.error(res)
failed_objects.append('function')
else:
res_data.extend(res['rows'])
# Fetch procedures only if server type is EPAS or PG >= 11
@ -250,8 +251,9 @@ def properties(sid, did, node_id, node_type):
status, res = conn.execute_dict(SQL)
if not status:
return internal_server_error(errormsg=res)
current_app.logger.error(res)
failed_objects.append('procedure')
else:
res_data.extend(res['rows'])
# Fetch trigger functions
@ -262,8 +264,9 @@ def properties(sid, did, node_id, node_type):
status, res = conn.execute_dict(SQL)
if not status:
return internal_server_error(errormsg=res)
current_app.logger.error(res)
failed_objects.append('trigger function')
else:
res_data.extend(res['rows'])
# Fetch Sequences against schema
@ -274,7 +277,9 @@ def properties(sid, did, node_id, node_type):
status, res = conn.execute_dict(SQL)
if not status:
return internal_server_error(errormsg=res)
current_app.logger.error(res)
failed_objects.append('sequence')
else:
res_data.extend(res['rows'])
# Fetch Tables against schema
@ -285,8 +290,9 @@ def properties(sid, did, node_id, node_type):
status, res = conn.execute_dict(SQL)
if not status:
return internal_server_error(errormsg=res)
current_app.logger.error(res)
failed_objects.append('table')
else:
res_data.extend(res['rows'])
# Fetch Views against schema
@ -297,8 +303,9 @@ def properties(sid, did, node_id, node_type):
status, res = conn.execute_dict(SQL)
if not status:
return internal_server_error(errormsg=res)
current_app.logger.error(res)
failed_objects.append('view')
else:
res_data.extend(res['rows'])
# Fetch Materialzed Views against schema
@ -309,12 +316,20 @@ def properties(sid, did, node_id, node_type):
status, res = conn.execute_dict(SQL)
if not status:
return internal_server_error(errormsg=res)
current_app.logger.error(res)
failed_objects.append('materialized view')
else:
res_data.extend(res['rows'])
return ajax_response(
response=res_data,
msg = None
if len(failed_objects) > 0:
msg = gettext('Unable to fetch the {} objects'.format(
", ".join(failed_objects))
)
return make_json_response(
result=res_data,
info=msg,
status=200
)

View File

@ -608,9 +608,28 @@ define([
$('.wizard-progress-bar p').show();
coll.fetch({
success: function() {
success: function(c, xhr) {
$('.wizard-progress-bar p').html('');
$('.wizard-progress-bar').hide();
c.set(xhr.result, {parse: true});
// If some objects failed while fetching then we will notify the user
if (xhr && xhr.info && xhr.info !== '') {
$('.pg-prop-status-bar .alert-text').html(xhr.info);
$('.pg-prop-status-bar').css('visibility', 'visible');
}
},
error: function(m, xhr) {
// If the main request fails as whole then
let msg;
if (xhr && xhr.responseJSON && xhr.responseJSON.errormsg) {
msg = xhr.responseJSON.errormsg;
}
if(!msg) {
msg = gettext('Unable to fetch the database objects due to an error');
}
$('.wizard-progress-bar p').removeClass('alert-info').addClass('alert-danger');
$('.wizard-progress-bar p').text(msg);
},
reset: true,
}, this);