1
1
<script setup lang="ts">
2
2
import { 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" ;
8
8
import NoData from " ../NoData.vue" ;
9
9
import TimeSince from " ../TimeSince.vue" ;
10
10
import moment from " moment" ;
11
11
import ConfirmDialog from " ../ConfirmDialog.vue" ;
12
12
import FlowDiagram from " ./FlowDiagram.vue" ;
13
- import EditRetryDialog from " ./EditRetryDialog.vue" ;
13
+ import EditRetryDialog from " ../failedmessages /EditRetryDialog.vue" ;
14
14
import routeLinks from " @/router/routeLinks" ;
15
15
import { EditAndRetryConfig } from " @/resources/Configuration" ;
16
16
import { TYPE } from " vue-toastification" ;
@@ -28,6 +28,7 @@ const route = useRoute();
28
28
const failedMessage = ref <ExtendedFailedMessage | FailedMessageError >();
29
29
const editAndRetryConfiguration = ref <EditAndRetryConfig >();
30
30
31
+ const backLink = ref <string >(routeLinks .failedMessage .failedMessages .link );
31
32
const id = computed (() => route .params .id as string );
32
33
watch (id , async () => await loadFailedMessage ());
33
34
@@ -40,39 +41,34 @@ const configuration = useConfiguration();
40
41
const isMassTransitConnected = useIsMassTransitConnected ();
41
42
42
43
async 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 ;
74
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 ;
75
67
}
68
+
69
+ updateMessageDeleteDate (message );
70
+ await downloadHeadersAndBody (message );
71
+ failedMessage .value = message ;
76
72
}
77
73
78
74
async function getEditAndRetryConfig() {
@@ -361,11 +357,15 @@ function changeRefreshInterval(milliseconds: number) {
361
357
}
362
358
363
359
onMounted (async () => {
360
+ const back = useRouter ().currentRoute .value .query .back as string ;
361
+ if (back ) {
362
+ backLink .value = back ;
363
+ }
364
364
togglePanel (1 );
365
365
366
366
await getEditAndRetryConfig ();
367
367
startRefreshInterval ();
368
- loadFailedMessage ();
368
+ await loadFailedMessage ();
369
369
});
370
370
371
371
onUnmounted (() => {
@@ -386,6 +386,7 @@ onUnmounted(() => {
386
386
<div v-if =" !isError(failedMessage)" >
387
387
<div class =" row" >
388
388
<div class =" col-sm-12 no-side-padding" >
389
+ <RouterLink :to =" backLink" ><i class =" fa fa-chevron-left" ></i > Back</RouterLink >
389
390
<div class =" active break group-title" >
390
391
<h1 class =" message-type-title" >{{ failedMessage.message_type }}</h1 >
391
392
</div >
@@ -403,7 +404,9 @@ onUnmounted(() => {
403
404
{{ failedMessage.number_of_processing_attempts - 1 }} Retry Failures
404
405
</span >
405
406
<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 >
407
410
<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 >
408
411
<span class =" metadata" ><i class =" fa pa-endpoint" ></i > Endpoint: {{ failedMessage.receiving_endpoint.name }}</span >
409
412
<span class =" metadata" ><i class =" fa fa-laptop" ></i > Machine: {{ failedMessage.receiving_endpoint.host }}</span >
@@ -426,7 +429,7 @@ onUnmounted(() => {
426
429
<i class =" fa fa-pencil" ></i > Edit & retry
427
430
</button >
428
431
<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
430
433
</button >
431
434
<button type =" button" class =" btn btn-default" @click =" exportMessage()" ><i class =" fa fa-download" ></i > Export message</button >
432
435
</div >
@@ -440,7 +443,6 @@ onUnmounted(() => {
440
443
<h5 :class =" { active: panel === 3 }" class =" nav-item" @click =" togglePanel(3)" ><a href =" javascript:void(0)" >Message body</a ></h5 >
441
444
<h5 v-if =" !isMassTransitConnected" :class =" { active: panel === 4 }" class =" nav-item" @click =" togglePanel(4)" ><a href =" javascript:void(0)" >Flow Diagram</a ></h5 >
442
445
</div >
443
- <pre v-if =" panel === 0" >{{ failedMessage.exception?.message }}</pre >
444
446
<pre v-if =" panel === 1" >{{ failedMessage.exception?.stack_trace }}</pre >
445
447
<table class =" table" v-if =" panel === 2 && !failedMessage.headersNotFound" >
446
448
<tbody >
@@ -473,8 +475,8 @@ onUnmounted(() => {
473
475
showDeleteConfirm = false;
474
476
archiveMessage();
475
477
"
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."
478
480
></ConfirmDialog >
479
481
480
482
<ConfirmDialog
@@ -484,8 +486,8 @@ onUnmounted(() => {
484
486
showRestoreConfirm = false;
485
487
unarchiveMessage();
486
488
"
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."
489
491
></ConfirmDialog >
490
492
491
493
<ConfirmDialog
@@ -495,8 +497,8 @@ onUnmounted(() => {
495
497
showRetryConfirm = false;
496
498
retryMessage();
497
499
"
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?"
500
502
></ConfirmDialog >
501
503
502
504
<EditRetryDialog
0 commit comments