mirror of
https://github.com/galaxyproject/galaxy.git
synced 2026-09-24 16:30:27 +08:00
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:
@@ -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>
|
||||
@@ -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):
|
||||
"""
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user