diff --git a/client/src/components/Common/SelfReportingError.vue b/client/src/components/Common/SelfReportingError.vue
index e1d0a75512fc..55212935b883 100644
--- a/client/src/components/Common/SelfReportingError.vue
+++ b/client/src/components/Common/SelfReportingError.vue
@@ -4,9 +4,12 @@
Dataset Error Report
-
-
-
+
+
+
+
+
+
Details
@@ -18,6 +21,19 @@
+
+
+
Detected Common Potential Problems
+
+ The tool was started with one or more empty input datasets. This frequently results in tool errors
+ due to problematic input choices.
+
+
+ The tool was started with one or more duplicate input datasets. This frequently results in tool
+ errors due to problematic input choices.
+
+
+
Troubleshooting
There are a number of helpful resources to self diagnose and correct problems.
@@ -44,19 +60,6 @@
v-model="message"
:area="true"
title="Please provide detailed information on the activities leading to this issue:" />
-
-
-
-
import { FontAwesomeIcon } from "@fortawesome/vue-fontawesome";
-import { BAlert, BButton, BCollapse, BLink } from "bootstrap-vue";
+import { BAlert } from "bootstrap-vue";
import FormElement from "components/Form/FormElement";
import { JobProblemProvider } from "components/providers/JobProvider";
import { mapState } from "pinia";
@@ -81,7 +84,6 @@ import { useMarkdown } from "@/composables/markdown";
import { useUserStore } from "@/stores/userStore";
import { sendErrorReport } from "../DatasetInformation/services";
-import { sendErrorReportTool } from "../ToolInformation/services";
export default {
components: {
@@ -89,9 +91,6 @@ export default {
FormElement,
JobProblemProvider,
BAlert,
- BButton,
- BCollapse,
- BLink,
},
props: {
dataset: {
@@ -106,10 +105,6 @@ export default {
type: Array,
default: () => [],
},
- transcript: {
- type: String,
- default: "",
- },
},
setup() {
const { renderMarkdown } = useMarkdown({ openLinksInNewPage: true });
@@ -120,7 +115,6 @@ export default {
message: null,
errorMessage: null,
resultMessages: [],
- isExpanded: false,
};
},
computed: {
@@ -134,36 +128,20 @@ export default {
const isEmailActive = !getGalaxyInstance().config.show_inactivity_warning;
return !this.currentUser?.email || !isEmailActive;
},
- title() {
- return this.isExpanded ? `-` : `+`;
- },
},
methods: {
onError(err) {
this.errorMessage = err;
},
- submit(dataset, userEmailJob) {
- const email = userEmailJob || this.currentUserEmail;
- const message = this.message;
- if (this.transcript) {
- sendErrorReportTool(dataset, message, email, this.transcript).then(
- (resultMessages) => {
- this.resultMessages = resultMessages;
- },
- (errorMessage) => {
- this.errorMessage = errorMessage;
- }
- );
- } else {
- sendErrorReport(dataset, message, email, this.transcript).then(
- (resultMessages) => {
- this.resultMessages = resultMessages;
- },
- (errorMessage) => {
- this.errorMessage = errorMessage;
- }
- );
- }
+ submit(dataset, email) {
+ sendErrorReport(dataset, this.message, email).then(
+ (resultMessages) => {
+ this.resultMessages = resultMessages;
+ },
+ (errorMessage) => {
+ this.errorMessage = errorMessage;
+ }
+ );
},
hasDetails(outputs) {
return (
diff --git a/client/src/components/DatasetInformation/DatasetError.vue b/client/src/components/DatasetInformation/DatasetError.vue
index 957b24aa7276..41186a407873 100644
--- a/client/src/components/DatasetInformation/DatasetError.vue
+++ b/client/src/components/DatasetInformation/DatasetError.vue
@@ -80,7 +80,6 @@ export default {
return [
{
text: `An error occurred while running the tool ${toolId}.`,
- variant: "danger"
},
];
},
@@ -103,7 +102,6 @@ export default {
submit(dataset, userEmailJob) {
const email = userEmailJob || this.currentUserEmail;
const message = this.message;
-
sendErrorReport(dataset, message, email).then(
(resultMessages) => {
this.resultMessages = resultMessages;
diff --git a/client/src/components/Tool/ToolForm.vue b/client/src/components/Tool/ToolForm.vue
index 528c290d4af4..9c524b2c0511 100644
--- a/client/src/components/Tool/ToolForm.vue
+++ b/client/src/components/Tool/ToolForm.vue
@@ -8,16 +8,16 @@
-
+
+ {{ errorMessage }}
+
+
+ The server could not complete this request. Please verify your parameter settings, retry submission and
+ contact the Galaxy Team if this error persists. A transcript of the submitted data is shown below.
+
+
+ {{ errorContentPretty }}
+
${toolId}.`,
- variant: "danger"
- },
- {
- text: "The server could not complete this request. Please verify your parameter settings, retry submission and contact the Galaxy Team if this error persists. A transcript of the submitted data is shown below.",
- variant: "warning"
- },
- ];
- },
- buildCommandOutputs(detail) {
- return [
- {
- text: "Tool Message (?)",
- detail: [detail],
- }
- ];
- },
},
};
diff --git a/lib/galaxy/schema/jobs.py b/lib/galaxy/schema/jobs.py
index fea16f214ef4..fe6316262983 100644
--- a/lib/galaxy/schema/jobs.py
+++ b/lib/galaxy/schema/jobs.py
@@ -98,11 +98,6 @@ class ReportJobErrorPayload(Model):
title="Message",
description="The optional message sent with the error report.",
)
- toolTranscript: Optional[str] = Field(
- default=None,
- title="Transcript",
- description="The optional Tool Transcript error created by the user and sent with the error report.",
- )
class SearchJobsPayload(Model):
diff --git a/lib/galaxy/tools/error_reports/__init__.py b/lib/galaxy/tools/error_reports/__init__.py
index 8b5c42f682e2..3ac83fbb42a3 100644
--- a/lib/galaxy/tools/error_reports/__init__.py
+++ b/lib/galaxy/tools/error_reports/__init__.py
@@ -65,7 +65,7 @@ def submit_report(self, dataset, job, tool, user=None, user_submission=False, **
for plugin in self.plugins:
if user_submission == plugin.user_submission:
try:
- response = plugin.submit_report(dataset, job, tool, user, **kwargs)
+ response = plugin.submit_report(dataset, job, tool, **kwargs)
log.debug("Bug report plugin %s generated response %s", plugin, response)
if plugin.verbose and response:
responses.append(response)
diff --git a/lib/galaxy/tools/error_reports/plugins/email.py b/lib/galaxy/tools/error_reports/plugins/email.py
index b0aa0ae84183..42446c2ecb3e 100644
--- a/lib/galaxy/tools/error_reports/plugins/email.py
+++ b/lib/galaxy/tools/error_reports/plugins/email.py
@@ -23,13 +23,12 @@ def __init__(self, **kwargs):
self.verbose = string_as_bool(kwargs.get("verbose", True))
self.user_submission = string_as_bool(kwargs.get("user_submission", True))
- def submit_report(self, dataset, job, tool, user, **kwargs):
+ def submit_report(self, dataset, job, tool, **kwargs):
"""Send report as an email"""
try:
error_reporter = EmailErrorReporter(dataset.id, self.app)
error_reporter.send_report(
- user=user,
- tool=tool,
+ user=job.get_user(),
email=kwargs.get("email", None),
message=kwargs.get("message", None),
redact_user_details_in_bugreport=self.redact_user_details_in_bugreport,
diff --git a/lib/galaxy/tools/errors.py b/lib/galaxy/tools/errors.py
index 3d59126c781a..e1dc2052bb5f 100644
--- a/lib/galaxy/tools/errors.py
+++ b/lib/galaxy/tools/errors.py
@@ -156,7 +156,7 @@ def _can_access_dataset(self, user):
roles = []
return self.app.security_agent.can_access_dataset(roles, self.hda.dataset)
- def create_report(self, user, tool, email="", message="", redact_user_details_in_bugreport=False, **kwd):
+ def create_report(self, user, email="", message="", redact_user_details_in_bugreport=False, **kwd):
hda = self.hda
job = self.job
host = self.app.url_for("/", qualified=True)
@@ -205,8 +205,8 @@ def create_report(self, user, tool, email="", message="", redact_user_details_in
hda_show_params_link=hda_show_params_link,
job_id_encoded=self.app.security.encode_id(job.id),
job_id=job.id,
- tool_version=tool.tool_version,
- job_tool_id=tool.id,
+ tool_version=job.tool_version,
+ job_tool_id=job.tool_id,
job_tool_version=hda.tool_version,
job_runner_external_id=job.job_runner_external_id,
job_command_line=job.command_line,
@@ -227,12 +227,12 @@ def create_report(self, user, tool, email="", message="", redact_user_details_in
self.html_report = string.Template(error_report_template_html).safe_substitute(report_variables)
- def _send_report(self, user, tool, email=None, message=None, **kwd):
+ def _send_report(self, user, email=None, message=None, **kwd):
return self.report
- def send_report(self, user, tool, email=None, message=None, **kwd):
+ def send_report(self, user, email=None, message=None, **kwd):
if self.report is None:
- self.create_report(user, tool, email=email, message=message, **kwd)
+ self.create_report(user, email=email, message=message, **kwd)
return self._send_report(user, email=email, message=message, **kwd)
diff --git a/lib/galaxy/webapps/galaxy/api/jobs.py b/lib/galaxy/webapps/galaxy/api/jobs.py
index 2b269561d322..7d0d2757b333 100644
--- a/lib/galaxy/webapps/galaxy/api/jobs.py
+++ b/lib/galaxy/webapps/galaxy/api/jobs.py
@@ -73,8 +73,6 @@
)
from galaxy.work.context import WorkRequestContext
-import json
-
log = logging.getLogger(__name__)
router = Router(tags=["jobs"])
@@ -313,41 +311,15 @@ def error(
payload: Annotated[ReportJobErrorPayload, ReportErrorBody],
job_id: JobIdPathParam,
trans: ProvidesUserContext = DependsOnTrans,
- ) -> JobErrorSummary:
- myMessages = self.error_all(payload, job_id, trans)
- return JobErrorSummary(messages=myMessages)
-
- @router.post(
- "/api/jobs/no-job-id-error",
- name="report_error_no_job_id",
- summary="Submits a bug report via the API.",
- )
- def error_no_job_id(
- self,
- payload: Annotated[ReportJobErrorPayload, ReportErrorBody],
- trans: ProvidesUserContext = DependsOnTrans,
- ) -> JobErrorSummary:
- myMessages = self.error_all(payload=payload, job_id=None, trans=trans)
- return JobErrorSummary(messages=myMessages)
-
- def error_all(
- self,
- payload: Annotated[ReportJobErrorPayload, ReportErrorBody],
- job_id,
- trans: ProvidesUserContext = DependsOnTrans,
) -> JobErrorSummary:
# Get dataset on which this error was triggered
dataset_id = payload.dataset_id
dataset = self.service.hda_manager.get_accessible(id=dataset_id, user=trans.user)
+ # Get job
+ job = self.service.get_job(trans, job_id)
if not dataset.creating_job or dataset.creating_job.id != job.id:
raise exceptions.RequestParameterInvalidException("dataset_id was not created by job_id")
- if payload.toolTranscript:
- job = {}
- transcript = json.loads(payload.toolTranscript)
- tool = trans.app.toolbox.get_tool(transcript["tool_id"], tool_version=transcript["tool_version"])
- else:
- job = self.service.get_job(trans, job_id)
- tool = trans.app.toolbox.get_tool(job.tool_id, tool_version=job.tool_version) or None
+ tool = trans.app.toolbox.get_tool(job.tool_id, tool_version=job.tool_version) or None
email = payload.email
if not email and not trans.anonymous:
email = trans.user.email
@@ -360,7 +332,7 @@ def error_all(
email=email,
message=payload.message,
)
- return messages
+ return JobErrorSummary(messages=messages)
@router.get(
"/api/jobs/{job_id}/inputs",