@@ -7,7 +7,8 @@ import ServiceControlAvailable from "../ServiceControlAvailable.vue";
77import MessageList , { IMessageList } from " ./MessageList.vue" ;
88import ConfirmDialog from " ../ConfirmDialog.vue" ;
99import PaginationStrip from " ../../components/PaginationStrip.vue" ;
10- import { FailedMessageStatus } from " @/resources/FailedMessage" ;
10+ import dayjs from " @/utils/dayjs" ;
11+ import { ExtendedFailedMessage } from " @/resources/FailedMessage" ;
1112import { TYPE } from " vue-toastification" ;
1213import FAIcon from " @/components/FAIcon.vue" ;
1314import { faArrowRotateRight } from " @fortawesome/free-solid-svg-icons" ;
@@ -26,6 +27,102 @@ const { messages, groupId, groupName, totalCount, pageNumber, selectedPeriod } =
2627
2728const showConfirmRestore = ref (false );
2829const messageList = ref <IMessageList | undefined >();
30+ const messages = ref <ExtendedFailedMessage []>([]);
31+
32+ watch (pageNumber , () => loadMessages ());
33+
34+ const configurationStore = useConfigurationStore ();
35+ const { configuration } = storeToRefs (configurationStore );
36+ const serviceControlStore = useServiceControlStore ();
37+
38+ function loadMessages() {
39+ let startDate = new Date (0 );
40+ const endDate = new Date ();
41+
42+ switch (selectedPeriod .value ) {
43+ case " All Deleted" :
44+ startDate = new Date ();
45+ startDate .setHours (startDate .getHours () - 24 * 365 );
46+ break ;
47+ case " Deleted in the last 2 Hours" :
48+ startDate = new Date ();
49+ startDate .setHours (startDate .getHours () - 2 );
50+ break ;
51+ case " Deleted in the last 1 Day" :
52+ startDate = new Date ();
53+ startDate .setHours (startDate .getHours () - 24 );
54+ break ;
55+ case " Deleted in the last 7 days" :
56+ startDate = new Date ();
57+ startDate .setHours (startDate .getHours () - 24 * 7 );
58+ break ;
59+ }
60+ return loadPagedMessages (groupId .value , pageNumber .value , " " , " " , startDate .toISOString (), endDate .toISOString ());
61+ }
62+
63+ async function loadGroupDetails(groupId : string ) {
64+ const [, data] = await serviceControlStore .fetchTypedFromServiceControl <FailureGroup >(` archive/groups/id/${groupId } ` );
65+ groupName .value = data .title ;
66+ }
67+
68+ function loadPagedMessages(groupId ? : string , page : number = 1 , sortBy : string = " modified" , direction : string = " desc" , startDate : string = new Date (0 ).toISOString (), endDate : string = new Date ().toISOString ()) {
69+ const dateRange = startDate + " ..." + endDate ;
70+ let loadGroupDetailsPromise;
71+ if (groupId && ! groupName .value ) {
72+ loadGroupDetailsPromise = loadGroupDetails (groupId );
73+ }
74+
75+ async function loadDelMessages() {
76+ try {
77+ const [response, data] = await serviceControlStore .fetchTypedFromServiceControl <ExtendedFailedMessage []>(
78+ ` ${groupId ? ` recoverability/groups/${groupId }/ ` : " " }errors?status=archived&page=${page }&per_page=${perPage }&sort=${sortBy }&direction=${direction }&modified=${dateRange } `
79+ );
80+
81+ totalCount .value = parseInt (response .headers .get (" Total-Count" ) ?? " 0" );
82+
83+ if (messages .value .length && data .length ) {
84+ // merge the previously selected messages into the new list so we can replace them
85+ messages .value .forEach ((previousMessage ) => {
86+ const receivedMessage = data .find ((m ) => m .id === previousMessage .id );
87+ if (receivedMessage ) {
88+ if (previousMessage .last_modified === receivedMessage .last_modified ) {
89+ receivedMessage .retryInProgress = previousMessage .retryInProgress ;
90+ receivedMessage .deleteInProgress = previousMessage .deleteInProgress ;
91+ }
92+
93+ receivedMessage .selected = previousMessage .selected ;
94+ }
95+ });
96+ }
97+ messages .value = updateMessagesScheduledDeletionDate (data );
98+ } catch (err ) {
99+ console .log (err );
100+ const result = {
101+ message: " error" ,
102+ };
103+ return result ;
104+ }
105+ }
106+
107+ const loadDelMessagesPromise = loadDelMessages ();
108+
109+ if (loadGroupDetailsPromise ) {
110+ return Promise .all ([loadGroupDetailsPromise , loadDelMessagesPromise ]);
111+ }
112+
113+ return loadDelMessagesPromise ;
114+ }
115+
116+ function updateMessagesScheduledDeletionDate(messages : ExtendedFailedMessage []) {
117+ // check deletion time
118+ messages .forEach ((message ) => {
119+ message .error_retention_period = dayjs .duration (configuration .value ?.data_retention .error_retention_period ?? " PT0S" ).asHours ();
120+ const countdown = dayjs (message .last_modified ).add (message .error_retention_period , " hours" );
121+ message .delete_soon = countdown < dayjs ();
122+ message .deleted_in = countdown .format ();
123+ });
124+ return messages ;
125+ }
29126
30127function numberSelected() {
31128 return messageList .value ?.getSelectedMessages ()?.length ?? 0 ;
0 commit comments