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,11 +232,11 @@ 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)
res_data.extend(res['rows'])
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
if (len(server_prop) > 0 and
@ -250,9 +251,10 @@ def properties(sid, did, node_id, node_type):
status, res = conn.execute_dict(SQL)
if not status:
return internal_server_error(errormsg=res)
res_data.extend(res['rows'])
current_app.logger.error(res)
failed_objects.append('procedure')
else:
res_data.extend(res['rows'])
# Fetch trigger functions
if ntype in ['schema', 'trigger_function']:
@ -262,9 +264,10 @@ def properties(sid, did, node_id, node_type):
status, res = conn.execute_dict(SQL)
if not status:
return internal_server_error(errormsg=res)
res_data.extend(res['rows'])
current_app.logger.error(res)
failed_objects.append('trigger function')
else:
res_data.extend(res['rows'])
# Fetch Sequences against schema
if ntype in ['schema', 'sequence']:
@ -274,8 +277,10 @@ def properties(sid, did, node_id, node_type):
status, res = conn.execute_dict(SQL)
if not status:
return internal_server_error(errormsg=res)
res_data.extend(res['rows'])
current_app.logger.error(res)
failed_objects.append('sequence')
else:
res_data.extend(res['rows'])
# Fetch Tables against schema
if ntype in ['schema', 'table']:
@ -285,9 +290,10 @@ def properties(sid, did, node_id, node_type):
status, res = conn.execute_dict(SQL)
if not status:
return internal_server_error(errormsg=res)
res_data.extend(res['rows'])
current_app.logger.error(res)
failed_objects.append('table')
else:
res_data.extend(res['rows'])
# Fetch Views against schema
if ntype in ['schema', 'view']:
@ -297,9 +303,10 @@ def properties(sid, did, node_id, node_type):
status, res = conn.execute_dict(SQL)
if not status:
return internal_server_error(errormsg=res)
res_data.extend(res['rows'])
current_app.logger.error(res)
failed_objects.append('view')
else:
res_data.extend(res['rows'])
# Fetch Materialzed Views against schema
if ntype in ['schema', 'mview']:
@ -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'])
res_data.extend(res['rows'])
msg = None
if len(failed_objects) > 0:
msg = gettext('Unable to fetch the {} objects'.format(
", ".join(failed_objects))
)
return ajax_response(
response=res_data,
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);