Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 8 additions & 34 deletions src/Frontend/src/components/configuration/RetryRedirects.vue
Original file line number Diff line number Diff line change
Expand Up @@ -12,14 +12,9 @@ import RetryRedirectEdit, { type RetryRedirect } from "@/components/configuratio
import FAIcon from "@/components/FAIcon.vue";
import ActionButton from "@/components/ActionButton.vue";
import { faClock } from "@fortawesome/free-regular-svg-icons";
import useEnvironmentAndVersionsAutoRefresh from "@/composables/useEnvironmentAndVersionsAutoRefresh";
import { useServiceControlStore } from "@/stores/ServiceControlStore";
import { useRedirectsStore } from "@/stores/RedirectsStore";
import LoadingSpinner from "../LoadingSpinner.vue";

const { store: environmentStore } = useEnvironmentAndVersionsAutoRefresh();
const hasResponseStatusInHeader = environmentStore.serviceControlIsGreaterThan("5.2.0");
const serviceControlStore = useServiceControlStore();
const redirectsStore = useRedirectsStore();

const loadingData = ref(true);
Expand All @@ -37,7 +32,7 @@ const selectedRedirect = ref<Redirect & { queues: string[] }>({

const redirectSaveSuccessful = ref<boolean | null>(null);

async function getRedirect() {
async function getRedirects() {
loadingData.value = true;
await redirectsStore.refresh();
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it makes me wonder if refresh should be getRedirects?

selectedRedirect.value.queues = redirectsStore.redirects.queues;
Expand All @@ -63,17 +58,11 @@ function editRedirect(redirect: Redirect) {
async function saveUpdatedRedirect(redirect: RetryRedirect) {
redirectSaveSuccessful.value = null;
showEdit.value = false;
const result = handleResponse(
await serviceControlStore.putToServiceControl(`redirects/${redirect.redirectId}`, {
id: redirect.redirectId,
fromphysicaladdress: redirect.sourceQueue,
tophysicaladdress: redirect.targetQueue,
})
);
const result = await redirectsStore.updateRedirect(redirect);
if (result.message === "success") {
redirectSaveSuccessful.value = true;
useShowToast(TYPE.INFO, "Info", "Redirect updated successfully");
getRedirect();
getRedirects();
} else {
redirectSaveSuccessful.value = false;
if (result.status === 409) {
Expand All @@ -92,16 +81,11 @@ async function saveUpdatedRedirect(redirect: RetryRedirect) {
async function saveCreatedRedirect(redirect: RetryRedirect) {
redirectSaveSuccessful.value = null;
showEdit.value = false;
const result = handleResponse(
await serviceControlStore.postToServiceControl("redirects", {
fromphysicaladdress: redirect.sourceQueue,
tophysicaladdress: redirect.targetQueue,
})
);
const result = await redirectsStore.createRedirect(redirect);
if (result.message === "success") {
redirectSaveSuccessful.value = true;
useShowToast(TYPE.INFO, "Info", "Redirect created successfully");
getRedirect();
getRedirects();
} else {
redirectSaveSuccessful.value = false;
if (result.status === 409 && result.statusText === "Duplicate") {
Expand All @@ -121,30 +105,20 @@ function deleteRedirect(redirect: Redirect) {
}

async function saveDeletedRedirect() {
const result = handleResponse(await serviceControlStore.deleteFromServiceControl(`redirects/${selectedRedirect.value.message_redirect_id}`));
const result = await redirectsStore.deleteRedirect(selectedRedirect.value.message_redirect_id);
if (result.message === "success") {
redirectSaveSuccessful.value = true;
useShowToast(TYPE.INFO, "Info", "Redirect deleted");
await getRedirect();
await getRedirects();
} else {
redirectSaveSuccessful.value = false;
useShowToast(TYPE.ERROR, "Error", result.message);
}
}

onMounted(() => {
getRedirect();
getRedirects();
});

function handleResponse(response: Response) {
const responseStatusText = hasResponseStatusInHeader.value ? response.headers.get("X-Particular-Reason") : response.statusText;
return {
message: response.ok ? "success" : `error:${response.statusText}`,
status: response.status,
statusText: responseStatusText,
data: response,
};
}
</script>

<template>
Expand Down
39 changes: 38 additions & 1 deletion src/Frontend/src/stores/RedirectsStore.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ import QueueAddress from "@/resources/QueueAddress";
import { acceptHMRUpdate, defineStore } from "pinia";
import { reactive } from "vue";
import { useServiceControlStore } from "./ServiceControlStore";
import useEnvironmentAndVersionsAutoRefresh from "@/composables/useEnvironmentAndVersionsAutoRefresh";
import { RetryRedirect } from "@/components/configuration/RetryRedirectEdit.vue";

export interface Redirects {
data: Redirect[];
Expand All @@ -18,6 +20,8 @@ export const useRedirectsStore = defineStore("RedirectsStore", () => {
});

const serviceControlStore = useServiceControlStore();
const { store: environmentStore } = useEnvironmentAndVersionsAutoRefresh();
const hasResponseStatusInHeader = environmentStore.serviceControlIsGreaterThan("5.2.0");

async function getKnownQueues() {
const [, data] = await serviceControlStore.fetchTypedFromServiceControl<QueueAddress[]>("errors/queues/addresses");
Expand All @@ -43,7 +47,40 @@ export const useRedirectsStore = defineStore("RedirectsStore", () => {
};
}

return { refresh, redirects, retryPendingMessagesForQueue };
async function updateRedirect(redirect: RetryRedirect) {
return handleResponse(
await serviceControlStore.putToServiceControl(`redirects/${redirect.redirectId}`, {
id: redirect.redirectId,
fromphysicaladdress: redirect.sourceQueue,
tophysicaladdress: redirect.targetQueue,
})
);
}

async function createRedirect(redirect: RetryRedirect) {
return handleResponse(
await serviceControlStore.postToServiceControl("redirects", {
fromphysicaladdress: redirect.sourceQueue,
tophysicaladdress: redirect.targetQueue,
})
);
}

async function deleteRedirect(redirectId: string) {
return handleResponse(await serviceControlStore.deleteFromServiceControl(`redirects/${redirectId}`));
}

function handleResponse(response: Response) {
const responseStatusText = hasResponseStatusInHeader.value ? response.headers.get("X-Particular-Reason") : response.statusText;
return {
message: response.ok ? "success" : `error:${response.statusText}`,
status: response.status,
statusText: responseStatusText,
data: response,
};
}

return { refresh, redirects, retryPendingMessagesForQueue, createRedirect, updateRedirect, deleteRedirect };
});

if (import.meta.hot) {
Expand Down