11<script setup lang="ts">
22import { computed , onMounted , onUnmounted , ref , watch } from " vue" ;
3- import { RouterLink , useRoute } from " vue-router" ;
4- import { serviceControlUrl , useFetchFromServiceControl , useTypedFetchFromServiceControl } from " ../.. /composables/serviceServiceControlUrls" ;
5- import { useArchiveMessage , useRetryMessages , useUnarchiveMessage } from " ../.. /composables/serviceFailedMessage" ;
6- import { useDownloadFileFromString } from " ../.. /composables/fileDownloadCreator" ;
7- import { useShowToast } from " ../.. /composables/toast" ;
3+ import { RouterLink , useRoute , useRouter } from " vue-router" ;
4+ import { serviceControlUrl , useFetchFromServiceControl , useTypedFetchFromServiceControl } from " @ /composables/serviceServiceControlUrls" ;
5+ import { useArchiveMessage , useRetryMessages , useUnarchiveMessage } from " @ /composables/serviceFailedMessage" ;
6+ import { useDownloadFileFromString } from " @ /composables/fileDownloadCreator" ;
7+ import { useShowToast } from " @ /composables/toast" ;
88import NoData from " ../NoData.vue" ;
99import TimeSince from " ../TimeSince.vue" ;
1010import moment from " moment" ;
1111import ConfirmDialog from " ../ConfirmDialog.vue" ;
1212import FlowDiagram from " ./FlowDiagram.vue" ;
13- import EditRetryDialog from " ./EditRetryDialog.vue" ;
13+ import EditRetryDialog from " ../failedmessages /EditRetryDialog.vue" ;
1414import routeLinks from " @/router/routeLinks" ;
1515import { EditAndRetryConfig } from " @/resources/Configuration" ;
1616import { TYPE } from " vue-toastification" ;
@@ -28,6 +28,7 @@ const route = useRoute();
2828const failedMessage = ref <ExtendedFailedMessage | FailedMessageError >();
2929const editAndRetryConfiguration = ref <EditAndRetryConfig >();
3030
31+ const backLink = ref <string >(routeLinks .failedMessage .failedMessages .link );
3132const id = computed (() => route .params .id as string );
3233watch (id , async () => await loadFailedMessage ());
3334
@@ -40,39 +41,34 @@ const configuration = useConfiguration();
4041const isMassTransitConnected = useIsMassTransitConnected ();
4142
4243async function loadFailedMessage() {
43- try {
44- const response = await useFetchFromServiceControl (" errors/last/" + id .value );
45- if (response .status === 404 ) {
46- failedMessage .value = { notFound: true } as FailedMessageError ;
47- return ;
48- } else if (! response .ok ) {
49- failedMessage .value = { error: true } as FailedMessageError ;
50- return ;
51- }
52- const message = (await response .json ()) as ExtendedFailedMessage ;
53- message .archived = message .status === FailedMessageStatus .Archived ;
54- message .resolved = message .status === FailedMessageStatus .Resolved ;
55- message .retried = message .status === FailedMessageStatus .RetryIssued ;
56- message .error_retention_period = moment .duration (configuration .value ?.data_retention .error_retention_period ).asHours ();
57- message .isEditAndRetryEnabled = editAndRetryConfiguration .value ?.enabled ?? false ;
58-
59- // Maintain the mutations of the message in memory until the api returns a newer modified message
60- if (failedMessage .value && ! isError (failedMessage .value ) && failedMessage .value .last_modified === message .last_modified ) {
61- message .retried = failedMessage .value ?.retried ;
62- message .archiving = failedMessage .value ?.archiving ;
63- message .restoring = failedMessage .value ?.restoring ;
64- } else {
65- message .archiving = false ;
66- message .restoring = false ;
67- }
68-
69- updateMessageDeleteDate (message );
70- await downloadHeadersAndBody (message );
71- failedMessage .value = message ;
72- } catch (err ) {
73- console .log (err );
44+ const response = await useFetchFromServiceControl (` errors/last/${id .value } ` );
45+ if (response .status === 404 ) {
46+ failedMessage .value = { notFound: true } as FailedMessageError ;
7447 return ;
48+ } else if (! response .ok ) {
49+ failedMessage .value = { error: true } as FailedMessageError ;
50+ return ;
51+ }
52+ const message = (await response .json ()) as ExtendedFailedMessage ;
53+ message .archived = message .status === FailedMessageStatus .Archived ;
54+ message .resolved = message .status === FailedMessageStatus .Resolved ;
55+ message .retried = message .status === FailedMessageStatus .RetryIssued ;
56+ message .error_retention_period = moment .duration (configuration .value ?.data_retention .error_retention_period ).asHours ();
57+ message .isEditAndRetryEnabled = editAndRetryConfiguration .value ?.enabled ?? false ;
58+
59+ // Maintain the mutations of the message in memory until the api returns a newer modified message
60+ if (failedMessage .value && ! isError (failedMessage .value ) && failedMessage .value .last_modified === message .last_modified ) {
61+ message .retried = failedMessage .value ?.retried ;
62+ message .archiving = failedMessage .value ?.archiving ;
63+ message .restoring = failedMessage .value ?.restoring ;
64+ } else {
65+ message .archiving = false ;
66+ message .restoring = false ;
7567 }
68+
69+ updateMessageDeleteDate (message );
70+ await downloadHeadersAndBody (message );
71+ failedMessage .value = message ;
7672}
7773
7874async function getEditAndRetryConfig() {
@@ -361,11 +357,15 @@ function changeRefreshInterval(milliseconds: number) {
361357}
362358
363359onMounted (async () => {
360+ const back = useRouter ().currentRoute .value .query .back as string ;
361+ if (back ) {
362+ backLink .value = back ;
363+ }
364364 togglePanel (1 );
365365
366366 await getEditAndRetryConfig ();
367367 startRefreshInterval ();
368- loadFailedMessage ();
368+ await loadFailedMessage ();
369369});
370370
371371onUnmounted (() => {
@@ -386,6 +386,7 @@ onUnmounted(() => {
386386 <div v-if =" !isError(failedMessage)" >
387387 <div class =" row" >
388388 <div class =" col-sm-12 no-side-padding" >
389+ <RouterLink :to =" backLink" ><i class =" fa fa-chevron-left" ></i > Back</RouterLink >
389390 <div class =" active break group-title" >
390391 <h1 class =" message-type-title" >{{ failedMessage.message_type }}</h1 >
391392 </div >
@@ -403,7 +404,9 @@ onUnmounted(() => {
403404 {{ failedMessage.number_of_processing_attempts - 1 }} Retry Failures
404405 </span >
405406 <span v-if =" failedMessage.edited" v-tippy =" `Message was edited`" class =" label sidebar-label label-info metadata-label" >Edited</span >
406- <span v-if =" failedMessage.edited" class =" metadata metadata-link" ><i class =" fa fa-history" ></i > <RouterLink :to =" routeLinks.failedMessage.message.link(failedMessage.edit_of)" >View previous version</RouterLink ></span >
407+ <span v-if =" failedMessage.edited" class =" metadata metadata-link" >
408+ <i class =" fa fa-history" ></i > <RouterLink :to =" { path: routeLinks.messages.message.link(failedMessage.edit_of), query: { back: route.path } }" >View previous version</RouterLink >
409+ </span >
407410 <span v-if =" failedMessage.time_of_failure" class =" metadata" ><i class =" fa fa-clock-o" ></i > Failed: <time-since :date-utc =" failedMessage.time_of_failure" ></time-since ></span >
408411 <span class =" metadata" ><i class =" fa pa-endpoint" ></i > Endpoint: {{ failedMessage.receiving_endpoint.name }}</span >
409412 <span class =" metadata" ><i class =" fa fa-laptop" ></i > Machine: {{ failedMessage.receiving_endpoint.host }}</span >
@@ -426,7 +429,7 @@ onUnmounted(() => {
426429 <i class =" fa fa-pencil" ></i > Edit & retry
427430 </button >
428431 <button v-if =" !isMassTransitConnected" type =" button" class =" btn btn-default" @click =" debugInServiceInsight()" title =" Browse this message in ServiceInsight, if installed" >
429- <img src =" @/assets/si-icon.svg" /> View in ServiceInsight
432+ <img src =" @/assets/si-icon.svg" alt = " ServiceInsight logo " /> View in ServiceInsight
430433 </button >
431434 <button type =" button" class =" btn btn-default" @click =" exportMessage()" ><i class =" fa fa-download" ></i > Export message</button >
432435 </div >
@@ -440,7 +443,6 @@ onUnmounted(() => {
440443 <h5 :class =" { active: panel === 3 }" class =" nav-item" @click =" togglePanel(3)" ><a href =" javascript:void(0)" >Message body</a ></h5 >
441444 <h5 v-if =" !isMassTransitConnected" :class =" { active: panel === 4 }" class =" nav-item" @click =" togglePanel(4)" ><a href =" javascript:void(0)" >Flow Diagram</a ></h5 >
442445 </div >
443- <pre v-if =" panel === 0" >{{ failedMessage.exception?.message }}</pre >
444446 <pre v-if =" panel === 1" >{{ failedMessage.exception?.stack_trace }}</pre >
445447 <table class =" table" v-if =" panel === 2 && !failedMessage.headersNotFound" >
446448 <tbody >
@@ -473,8 +475,8 @@ onUnmounted(() => {
473475 showDeleteConfirm = false;
474476 archiveMessage();
475477 "
476- : heading =" ' Are you sure you want to delete this message?' "
477- : body =" ' If you delete, this message won\ 't be available for retrying unless it is later restored.' "
478+ heading =" Are you sure you want to delete this message?"
479+ body =" If you delete, this message won't be available for retrying unless it is later restored."
478480 ></ConfirmDialog >
479481
480482 <ConfirmDialog
@@ -484,8 +486,8 @@ onUnmounted(() => {
484486 showRestoreConfirm = false;
485487 unarchiveMessage();
486488 "
487- : heading =" ' Are you sure you want to restore this message?' "
488- : body =" ' The restored message will be moved back to the list of failed messages.' "
489+ heading =" Are you sure you want to restore this message?"
490+ body =" The restored message will be moved back to the list of failed messages."
489491 ></ConfirmDialog >
490492
491493 <ConfirmDialog
@@ -495,8 +497,8 @@ onUnmounted(() => {
495497 showRetryConfirm = false;
496498 retryMessage();
497499 "
498- : heading =" ' Are you sure you want to retry this message?' "
499- : body =" ' Are you sure you want to retry this message?' "
500+ heading =" Are you sure you want to retry this message?"
501+ body =" Are you sure you want to retry this message?"
500502 ></ConfirmDialog >
501503
502504 <EditRetryDialog
0 commit comments