From 5b16d13e15cf1f8d9c06edde6a67530d1c34c2c6 Mon Sep 17 00:00:00 2001 From: Phil Bastian Date: Wed, 29 Oct 2025 14:06:37 +0800 Subject: [PATCH 1/9] clean up initialisation of MessageStore --- src/Frontend/src/stores/ConfigurationStore.ts | 1 - src/Frontend/src/stores/EditRetryStore.ts | 25 ------------------- src/Frontend/src/stores/MessageStore.ts | 19 ++++++++------ 3 files changed, 12 insertions(+), 33 deletions(-) delete mode 100644 src/Frontend/src/stores/EditRetryStore.ts diff --git a/src/Frontend/src/stores/ConfigurationStore.ts b/src/Frontend/src/stores/ConfigurationStore.ts index b7e4b9fbd..231f1e6a4 100644 --- a/src/Frontend/src/stores/ConfigurationStore.ts +++ b/src/Frontend/src/stores/ConfigurationStore.ts @@ -22,7 +22,6 @@ export const useConfigurationStore = defineStore("ConfigurationStore", () => { return { configuration, - refresh, isMassTransitConnected, }; }); diff --git a/src/Frontend/src/stores/EditRetryStore.ts b/src/Frontend/src/stores/EditRetryStore.ts deleted file mode 100644 index 2fe34e8c5..000000000 --- a/src/Frontend/src/stores/EditRetryStore.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { acceptHMRUpdate, defineStore } from "pinia"; -import { ref } from "vue"; -import { EditAndRetryConfig } from "@/resources/Configuration"; -import { useServiceControlStore } from "./ServiceControlStore"; - -export const useEditRetryStore = defineStore("EditRetryStore", () => { - const config = ref({ enabled: false, locked_headers: [], sensitive_headers: [] }); - const serviceControlStore = useServiceControlStore(); - - async function loadConfig() { - const [, data] = await serviceControlStore.fetchTypedFromServiceControl("edit/config"); - config.value = data; - } - - return { - config, - loadConfig, - }; -}); - -if (import.meta.hot) { - import.meta.hot.accept(acceptHMRUpdate(useEditRetryStore, import.meta.hot)); -} - -export type EditRetryStore = ReturnType; diff --git a/src/Frontend/src/stores/MessageStore.ts b/src/Frontend/src/stores/MessageStore.ts index 97f714feb..b3b83148d 100644 --- a/src/Frontend/src/stores/MessageStore.ts +++ b/src/Frontend/src/stores/MessageStore.ts @@ -1,9 +1,8 @@ import { acceptHMRUpdate, defineStore, storeToRefs } from "pinia"; -import { computed, reactive, ref } from "vue"; +import { computed, reactive, ref, watch } from "vue"; import Header from "@/resources/Header"; import type EndpointDetails from "@/resources/EndpointDetails"; import { FailedMessage, ExceptionDetails, FailedMessageStatus } from "@/resources/FailedMessage"; -import { useEditRetryStore } from "@/stores/EditRetryStore"; import { useConfigurationStore } from "@/stores/ConfigurationStore"; import Message, { MessageStatus } from "@/resources/Message"; import moment from "moment/moment"; @@ -11,6 +10,7 @@ import { parse, stringify } from "lossless-json"; import xmlFormat from "xml-formatter"; import { DataContainer } from "./DataContainer"; import { useServiceControlStore } from "./ServiceControlStore"; +import { EditAndRetryConfig } from "@/resources/Configuration"; interface Model { id?: string; @@ -62,19 +62,24 @@ export const useMessageStore = defineStore("MessageStore", () => { const headers = ref>({ data: [] }); const body = ref>({ data: {} }); const state = reactive>({ data: { failure_metadata: {}, failure_status: {}, dialog_status: {}, invoked_saga: {} } }); + const edit_and_retry_config = ref({ enabled: false, locked_headers: [], sensitive_headers: [] }); + const conversationData = ref>({ data: [] }); + let bodyLoadedId = ""; let conversationLoadedId = ""; - const conversationData = ref>({ data: [] }); - const editRetryStore = useEditRetryStore(); + const configStore = useConfigurationStore(); const serviceControlStore = useServiceControlStore(); + const { serviceControlUrl } = storeToRefs(serviceControlStore); - const { config: edit_and_retry_config } = storeToRefs(editRetryStore); const { configuration } = storeToRefs(configStore); const error_retention_period = computed(() => moment.duration(configuration.value?.data_retention?.error_retention_period).asHours()); - // eslint-disable-next-line promise/catch-or-return,promise/prefer-await-to-then,promise/valid-params - Promise.all([editRetryStore.loadConfig(), configStore.refresh()]).then(); + watch(serviceControlUrl, loadConfig, { immediate: true }); + async function loadConfig() { + const [, data] = await serviceControlStore.fetchTypedFromServiceControl("edit/config"); + edit_and_retry_config.value = data; + } function reset() { state.data = { failure_metadata: {}, failure_status: {}, dialog_status: {}, invoked_saga: {} }; From e33538a6b402dc39636f7a1d258f378d2e141c7a Mon Sep 17 00:00:00 2001 From: Phil Bastian Date: Wed, 29 Oct 2025 14:34:31 +0800 Subject: [PATCH 2/9] handle test setup --- src/Frontend/src/stores/MessageStore.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Frontend/src/stores/MessageStore.ts b/src/Frontend/src/stores/MessageStore.ts index b3b83148d..3863baf1c 100644 --- a/src/Frontend/src/stores/MessageStore.ts +++ b/src/Frontend/src/stores/MessageStore.ts @@ -1,5 +1,5 @@ import { acceptHMRUpdate, defineStore, storeToRefs } from "pinia"; -import { computed, reactive, ref, watch } from "vue"; +import { computed, reactive, Ref, ref, watch } from "vue"; import Header from "@/resources/Header"; import type EndpointDetails from "@/resources/EndpointDetails"; import { FailedMessage, ExceptionDetails, FailedMessageStatus } from "@/resources/FailedMessage"; @@ -77,6 +77,7 @@ export const useMessageStore = defineStore("MessageStore", () => { watch(serviceControlUrl, loadConfig, { immediate: true }); async function loadConfig() { + if (!serviceControlUrl.value) return; const [, data] = await serviceControlStore.fetchTypedFromServiceControl("edit/config"); edit_and_retry_config.value = data; } From a5826ae0985f29a7665f5865ef815d9802039f98 Mon Sep 17 00:00:00 2001 From: Phil Bastian Date: Wed, 29 Oct 2025 14:39:26 +0800 Subject: [PATCH 3/9] remove unused import --- src/Frontend/src/stores/MessageStore.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Frontend/src/stores/MessageStore.ts b/src/Frontend/src/stores/MessageStore.ts index 3863baf1c..9dfaf5ea9 100644 --- a/src/Frontend/src/stores/MessageStore.ts +++ b/src/Frontend/src/stores/MessageStore.ts @@ -1,5 +1,5 @@ import { acceptHMRUpdate, defineStore, storeToRefs } from "pinia"; -import { computed, reactive, Ref, ref, watch } from "vue"; +import { computed, reactive, ref, watch } from "vue"; import Header from "@/resources/Header"; import type EndpointDetails from "@/resources/EndpointDetails"; import { FailedMessage, ExceptionDetails, FailedMessageStatus } from "@/resources/FailedMessage"; From 6e051e258b8e1e889fefa04ae25dc9a5e9aadcf0 Mon Sep 17 00:00:00 2001 From: Phil Bastian Date: Thu, 30 Oct 2025 15:37:45 +0800 Subject: [PATCH 4/9] fix auditlist incrementing registered count on each autorefresh change and fix autorefresh interval change --- src/Frontend/src/components/audit/AuditList.vue | 4 ++-- src/Frontend/src/composables/autoRefresh.ts | 8 ++++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/Frontend/src/components/audit/AuditList.vue b/src/Frontend/src/components/audit/AuditList.vue index 1004e7113..423644e71 100644 --- a/src/Frontend/src/components/audit/AuditList.vue +++ b/src/Frontend/src/components/audit/AuditList.vue @@ -15,7 +15,7 @@ const { messages, totalCount, sortBy, messageFilterString, selectedEndpointName, const route = useRoute(); const router = useRouter(); const autoRefreshValue = ref(null); -const { refreshNow, isRefreshing, updateInterval, start, stop } = useFetchWithAutoRefresh("audit-list", store.refresh, 3000); +const { refreshNow, isRefreshing, updateInterval, isActive, start, stop } = useFetchWithAutoRefresh("audit-list", store.refresh, 0); const firstLoad = ref(true); onBeforeMount(() => { @@ -82,7 +82,7 @@ watch(autoRefreshValue, (newValue) => { updateInterval(newValue || 0); if (newValue === null || newValue === 0) { stop(); - } else { + } else if (!isActive.value) { start(); } }); diff --git a/src/Frontend/src/composables/autoRefresh.ts b/src/Frontend/src/composables/autoRefresh.ts index eb01dc397..5ebaf166c 100644 --- a/src/Frontend/src/composables/autoRefresh.ts +++ b/src/Frontend/src/composables/autoRefresh.ts @@ -14,7 +14,7 @@ export default function useFetchWithAutoRefresh(name: string, fetch: () => Promi await fetch(); isRefreshing.value = false; }; - const { pause, resume } = useTimeoutPoll( + const { isActive, pause, resume } = useTimeoutPoll( fetchWrapper, interval, { immediate: false, immediateCallback: true } // we control first fetch manually @@ -60,7 +60,11 @@ export default function useFetchWithAutoRefresh(name: string, fetch: () => Promi const updateInterval = (newIntervalMs: number) => { interval.value = newIntervalMs; + pause(); + if (newIntervalMs > 0) { + resume(); + } }; - return { refreshNow: fetchWrapper, isRefreshing: shallowReadonly(isRefreshing), updateInterval, start, stop }; + return { refreshNow: fetchWrapper, isRefreshing: shallowReadonly(isRefreshing), updateInterval, isActive, start, stop }; } From 16a1936da3ad07759b38407c6b0a18973e2ba85a Mon Sep 17 00:00:00 2001 From: Phil Bastian Date: Fri, 31 Oct 2025 10:24:08 +0800 Subject: [PATCH 5/9] refactor deletedmessagegroups view data handling into a store --- .../failedmessages/DeletedMessageGroups.vue | 248 +++--------------- .../failedmessages/messageGroupClient.ts | 6 +- src/Frontend/src/composables/autoRefresh.ts | 3 + .../src/composables/useAutoRefresh.ts | 22 +- .../useConnectionsAndStatsAutoRefresh.ts | 2 +- .../useCustomChecksStoreAutoRefresh.ts | 2 +- .../useEnvironmentAndVersionsAutoRefresh.ts | 2 +- .../useHeartbeatInstancesStoreAutoRefresh.ts | 2 +- .../useHeartbeatsStoreAutoRefresh.ts | 2 +- .../useThroughputStoreAutoRefresh.ts | 2 +- .../src/stores/DeletedMessageGroupsStore.ts | 146 +++++++++++ 11 files changed, 201 insertions(+), 236 deletions(-) create mode 100644 src/Frontend/src/stores/DeletedMessageGroupsStore.ts diff --git a/src/Frontend/src/components/failedmessages/DeletedMessageGroups.vue b/src/Frontend/src/components/failedmessages/DeletedMessageGroups.vue index b3f0a1242..94877b4ef 100644 --- a/src/Frontend/src/components/failedmessages/DeletedMessageGroups.vue +++ b/src/Frontend/src/components/failedmessages/DeletedMessageGroups.vue @@ -1,169 +1,36 @@