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
44 changes: 9 additions & 35 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();
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();
await 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();
await 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();
onMounted(async () => {
await 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