Merge pull request #7124 from guerler/admin_error_log

Adds a vue component to display tool errors in the admin panel
This commit is contained in:
John Chilton
2019-01-02 10:04:20 -05:00
committed by GitHub
8 changed files with 79 additions and 34 deletions
+6
View File
@@ -14,6 +14,7 @@ import DataTables from "components/admin/DataTables.vue";
import DataTypes from "components/admin/DataTypes.vue";
import DataManagerView from "components/admin/DataManager/DataManagerView.vue";
import DataManagerRouter from "components/admin/DataManager/DataManagerRouter.vue";
import ErrorStack from "components/admin/ErrorStack.vue";
import DisplayApplications from "components/admin/DisplayApplications.vue";
import Vue from "vue";
import { serverPath } from "utils/serverPath";
@@ -34,6 +35,7 @@ window.app = function app(options, bootstrapped) {
"(/)admin(/)users": "show_users",
"(/)admin(/)roles": "show_roles",
"(/)admin(/)groups": "show_groups",
"(/)admin(/)error_stack": "show_error_stack",
"(/)admin(/)display_applications": "show_display_applications",
"(/)admin(/)tool_versions": "show_tool_versions",
"(/)admin(/)quotas": "show_quotas",
@@ -129,6 +131,10 @@ window.app = function app(options, bootstrapped) {
this._display_vue_helper(DataTypes);
},
show_error_stack: function() {
this._display_vue_helper(ErrorStack);
},
show_display_applications: function() {
this._display_vue_helper(DisplayApplications);
},
@@ -133,7 +133,8 @@ var AdminPanel = Backbone.View.extend({
},
{
title: _l("View error logs"),
url: "admin/tool_errors"
url: "admin/error_stack",
target: "__use_router__"
}
]
}
@@ -1,6 +1,11 @@
import { getAppRoot } from "onload/loadConfig";
import axios from "axios";
export function getErrorStack() {
let url = `${getAppRoot()}api/tools/error_stack`;
return axios.get(url);
}
export function getDisplayApplications() {
let url = `${getAppRoot()}api/display_applications`;
return axios.get(url);
@@ -0,0 +1,54 @@
<template>
<div>
<b-alert :show="messageVisible" variant="danger">
{{ messageText }}
</b-alert>
<b-alert :show="infoVisible" variant="info">
No errors available.
</b-alert>
<b-table striped v-if="errorStackVisible"
:fields="errorStackAttributes"
:items="errorStack"/>
</div>
</template>
<script>
import { getErrorStack } from "./AdminServices.js"
export default {
data() {
return {
errorStack: [],
errorStackLoaded: false,
errorStackAttributes: [
{ key: 'time', sortable: true },
{ key: 'phase', sortable: true },
{ key: 'file', sortable: true },
{ key: 'error' }
],
messageText: null
};
},
computed: {
errorStackVisible: function() {
return this.errorStack.length > 0;
},
messageVisible: function() {
return this.messageText != null;
},
infoVisible: function() {
return !this.errorStackVisible && this.errorStackLoaded;
}
},
created() {
getErrorStack()
.then(response => {
this.errorStack = response.data;
this.errorStackLoaded = true;
})
.catch(e => {
let message = e && e.response && e.response.data && e.response.data.err_msg;
this.messageText = message || "Request failed for an unknown reason.";
});
}
};
</script>
+10
View File
@@ -5,6 +5,7 @@ from json import dumps
import galaxy.queue_worker
from galaxy import exceptions, managers, util, web
from galaxy.managers.collections_util import dictify_dataset_collection_instance
from galaxy.tools import global_tool_errors
from galaxy.util.json import safe_dumps
from galaxy.util.odict import odict
from galaxy.visualization.genomes import GenomeRegion
@@ -424,6 +425,15 @@ class ToolsController(BaseAPIController, UsesVisualizationMixin):
create_payload.update(files_payload)
return self._create(trans, create_payload, **kwd)
@expose_api
@web.require_admin
def error_stack(self, trans, **kwd):
"""
GET /api/tools/error_stack
Returns global tool error stack
"""
return global_tool_errors.error_stack
@expose_api_anonymous
def create(self, trans, payload, **kwd):
"""
+2
View File
@@ -102,6 +102,7 @@ def app_factory(global_conf, load_app_kwds={}, **kwargs):
webapp.add_client_route('/admin/data_tables', 'admin')
webapp.add_client_route('/admin/data_types', 'admin')
webapp.add_client_route('/admin/data_manager{path_info:.*}', 'admin')
webapp.add_client_route('/admin/error_stack', 'admin')
webapp.add_client_route('/admin/users', 'admin')
webapp.add_client_route('/admin/display_applications', 'admin')
webapp.add_client_route('/admin/roles', 'admin')
@@ -320,6 +321,7 @@ def populate_api_routes(webapp, app):
webapp.mapper.connect('/api/tools/fetch', action='fetch', controller='tools', conditions=dict(method=["POST"]))
webapp.mapper.connect('/api/tools/all_requirements', action='all_requirements', controller="tools")
webapp.mapper.connect('/api/tools/error_stack', action='error_stack', controller="tools")
webapp.mapper.connect('/api/tools/{id:.+?}/build', action='build', controller="tools")
webapp.mapper.connect('/api/tools/{id:.+?}/reload', action='reload', controller="tools")
webapp.mapper.connect('/api/tools/tests_summary', action='tests_summary', controller="tools")
@@ -17,7 +17,6 @@ from galaxy import (
from galaxy.actions.admin import AdminActions
from galaxy.exceptions import ActionInputError, MessageException
from galaxy.model import tool_shed_install as install_model
from galaxy.tools import global_tool_errors
from galaxy.util import (
nice_size,
sanitize_text,
@@ -903,11 +902,6 @@ class AdminGalaxy(controller.JSAppLauncher, AdminActions, UsesQuotaMixin, QuotaP
message=message,
status=status)
@web.expose
@web.require_admin
def tool_errors(self, trans, **kwd):
return trans.fill_template('admin/tool_errors.mako', tool_errors=global_tool_errors.error_stack)
@web.expose
@web.require_admin
def center(self, trans, **kwd):
-27
View File
@@ -1,27 +0,0 @@
<%inherit file="/base.mako"/>
<%def name="title()">Tool Errors</%def>
<h2>Tool Errors</h2>
<p>
Internal Tool Error log
</p>
<table class="manage-table colored" border="0" cellspacing="0" cellpadding="0" width="100%">
<tr class="header">
<td>Time</td>
<td>Phase</td>
<td>File</td>
<td>Error</td>
</tr>
%for error in tool_errors:
<tr>
<td>${error['time']}</td>
<td>${error['phase']}</td>
<td>${error['file']}</td>
<td>${error['error']}</td>
</tr>
%endfor
</table>