Provide better error messages on 404s for install or uninstall results (#23106)
#22965 # Checklist for submitter If some of the following don't apply, delete the relevant line. <!-- Note that API documentation changes are now addressed by the product design team. --> - [x] Changes file added for user-visible changes in `changes/`, `orbit/changes/` or `ee/fleetd-chrome/changes`. See [Changes files](https://github.com/fleetdm/fleet/blob/main/docs/Contributing/Committing-Changes.md#changes-files) for more information. - [x] Manual QA for all new/changed functionality
This commit is contained in:
@@ -0,0 +1 @@
|
||||
* Added a more descriptive error message when install or uninstall details do not exist for an activity
|
||||
+11
-2
@@ -1,6 +1,7 @@
|
||||
import React from "react";
|
||||
import { useQuery } from "react-query";
|
||||
import { formatDistanceToNow } from "date-fns";
|
||||
import { AxiosError } from "axios";
|
||||
|
||||
import { IActivityDetails } from "interfaces/activity";
|
||||
import {
|
||||
@@ -90,9 +91,9 @@ export const SoftwareInstallDetails = ({
|
||||
host_display_name = "",
|
||||
install_uuid = "",
|
||||
}: IPackageInstallDetails) => {
|
||||
const { data: result, isLoading, isError } = useQuery<
|
||||
const { data: result, isLoading, isError, error } = useQuery<
|
||||
ISoftwareInstallResults,
|
||||
Error,
|
||||
AxiosError,
|
||||
ISoftwareInstallResult
|
||||
>(
|
||||
["softwareInstallResults", install_uuid],
|
||||
@@ -103,11 +104,19 @@ export const SoftwareInstallDetails = ({
|
||||
refetchOnWindowFocus: false,
|
||||
staleTime: 3000,
|
||||
select: (data) => data.results,
|
||||
retry: (failureCount, err) => err?.status !== 404 && failureCount < 3,
|
||||
}
|
||||
);
|
||||
|
||||
if (isLoading) {
|
||||
return <Spinner />;
|
||||
} else if (isError && error?.status === 404) {
|
||||
return (
|
||||
<DataError
|
||||
description="Install details are no longer available for this activity."
|
||||
excludeIssueLink
|
||||
/>
|
||||
);
|
||||
} else if (isError) {
|
||||
return <DataError description="Close this modal and try again." />;
|
||||
} else if (!result) {
|
||||
|
||||
+20
-7
@@ -9,6 +9,7 @@ import { IActivityDetails } from "interfaces/activity";
|
||||
import { isPendingStatus, SoftwareInstallStatus } from "interfaces/software";
|
||||
import React from "react";
|
||||
import { useQuery } from "react-query";
|
||||
import { AxiosError } from "axios";
|
||||
import scriptsAPI, { IScriptResultResponse } from "services/entities/scripts";
|
||||
import { DEFAULT_USE_QUERY_OPTIONS } from "utilities/constants";
|
||||
import {
|
||||
@@ -55,7 +56,10 @@ const StatusMessage = ({
|
||||
return (
|
||||
<div className={`${baseClass}__status-message`}>
|
||||
<Icon
|
||||
name={INSTALL_DETAILS_STATUS_ICONS[status as SoftwareInstallStatus]}
|
||||
name={
|
||||
INSTALL_DETAILS_STATUS_ICONS[status as SoftwareInstallStatus] ??
|
||||
"pending-outline"
|
||||
}
|
||||
/>
|
||||
<span>
|
||||
Fleet {getInstallDetailsStatusPredicate(status)} <b>{software_title}</b>{" "}
|
||||
@@ -80,20 +84,29 @@ const SoftwareUninstallDetailsModal = ({
|
||||
software_title = "",
|
||||
status = "",
|
||||
}: ISoftwareUninstallDetails) => {
|
||||
const {
|
||||
data: scriptResult,
|
||||
isLoading,
|
||||
isError,
|
||||
} = useQuery<IScriptResultResponse>(
|
||||
const { data: scriptResult, isLoading, isError, error } = useQuery<
|
||||
IScriptResultResponse,
|
||||
AxiosError
|
||||
>(
|
||||
["uninstallResult", details.script_execution_id],
|
||||
() => {
|
||||
return scriptsAPI.getScriptResult(script_execution_id);
|
||||
},
|
||||
{ ...DEFAULT_USE_QUERY_OPTIONS }
|
||||
{
|
||||
...DEFAULT_USE_QUERY_OPTIONS,
|
||||
retry: (failureCount, err) => err?.status !== 404 && failureCount < 3,
|
||||
}
|
||||
);
|
||||
|
||||
if (isLoading) {
|
||||
return <Spinner />;
|
||||
} else if (isError && error?.status === 404) {
|
||||
return (
|
||||
<DataError
|
||||
description="Uninstall details are no longer available for this activity."
|
||||
excludeIssueLink
|
||||
/>
|
||||
);
|
||||
} else if (isError) {
|
||||
return <DataError description="Close this modal and try again." />;
|
||||
} else if (!scriptResult) {
|
||||
|
||||
Reference in New Issue
Block a user