diff --git a/pkg/systemd/overview-cards/tuned-dialog.jsx b/pkg/systemd/overview-cards/tuned-dialog.jsx
index fc019d6dbcfb..bfd753252ff1 100644
--- a/pkg/systemd/overview-cards/tuned-dialog.jsx
+++ b/pkg/systemd/overview-cards/tuned-dialog.jsx
@@ -41,6 +41,7 @@ export const TunedPerformanceProfile = () => {
const [btnText, setBtnText] = useState();
const [state, setState] = useState();
const [status, setStatus] = useState();
+ const [openDialog, setOpenDialog] = useState(false);
const tunedService = useObject(() => service.proxy("tuned.service"),
null,
@@ -105,11 +106,32 @@ export const TunedPerformanceProfile = () => {
updateButton();
}, [updateButton]);
- const showDialog = () => {
- Dialogs.show();
- };
+ const startTuned = useCallback(() => {
+ tunedService.start()
+ .then(() => setOpenDialog(true));
+ }, [tunedService, setOpenDialog]);
+
+ const showDialog = useCallback(() => {
+ if (tunedService.state !== "running") {
+ if (!openDialog) {
+ Dialogs.show();
+ }
+ } else {
+ setOpenDialog(false);
+ if (Dialogs.isActive()) {
+ Dialogs.close();
+ }
+ Dialogs.show();
+ }
+ }, [updateButton, poll, startTuned, tuned, tunedService, openDialog, setOpenDialog, Dialogs]);
+
+ useEffect(() => {
+ if (openDialog) {
+ showDialog();
+ }
+ }, [openDialog, showDialog]);
return (
@@ -124,6 +146,39 @@ export const TunedPerformanceProfile = () => {
);
};
+const StartTunedDialog = ({
+ startTuned,
+}) => {
+ const [loading, setLoading] = useState(false);
+ const Dialogs = useDialogs();
+
+ const startService = () => {
+ setLoading(true);
+ startTuned();
+ };
+
+ return (
+
+
+
+ >
+ }
+ >
+ {loading && }
+
+ );
+};
+
const TunedDialog = ({
updateButton,
poll,
@@ -244,7 +299,7 @@ const TunedDialog = ({
const tunedProfiles = () => {
return tunedDbus.call('/Tuned', 'com.redhat.tuned.control', 'profiles2', [])
.then((result) => result[0])
- .catch(ex => {
+ .catch(() => {
return tunedDbus.call('/Tuned', 'com.redhat.tuned.control', 'profiles', [])
.then((result) => result[0]);
});
@@ -266,8 +321,7 @@ const TunedDialog = ({
.catch(setError);
};
- tunedService.start()
- .then(updateButton)
+ updateButton()
.then(withTuned)
.catch(setError)
.finally(() => setLoading(false));