UI: only setEditingExistingQuery in the edit query form if the query has been modified (#25115)

## #24653 

- This bug was more generally that live query runs from the Edit query
form did not include the `query_id` in the `run` API call.


![ezgif-6-8ef29273dc](https://github.com/user-attachments/assets/d6792037-5d91-4f6f-84d9-640133df0522)


- [x] Changes file added for user-visible changes in `changes/`
- [x] Manual QA for all new/changed functionality

---------

Co-authored-by: Jacob Shandling <jacob@fleetdm.com>
This commit is contained in:
jacobshandling 2025-01-03 10:46:03 -08:00 committed by GitHub
parent b1446b1ad8
commit 338a00a693
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 15 additions and 1 deletions

View file

@ -0,0 +1,2 @@
- When running a live query from the edit query form, consider the results of the run in calculating
an existing query's performance impact if the user didn't change the query from the stored version.

View file

@ -184,6 +184,7 @@ const EditQueryForm = ({
const [isEditingDescription, setIsEditingDescription] = useState(false);
const [isSaveAsNewLoading, setIsSaveAsNewLoading] = useState(false);
const [showAdvancedOptions, setShowAdvancedOptions] = useState(false);
const [queryWasChanged, setQueryWasChanged] = useState(false);
const platformCompatibility = usePlatformCompatibility();
const { setCompatiblePlatforms } = platformCompatibility;
@ -233,6 +234,7 @@ const EditQueryForm = ({
};
const onChangeQuery = (sqlString: string) => {
setQueryWasChanged(true);
setLastEditedQueryBody(sqlString);
};
@ -882,7 +884,17 @@ const EditQueryForm = ({
className={`${baseClass}__run`}
variant="blue-green"
onClick={() => {
setEditingExistingQuery(true); // Persists edited query data through live query flow
// calling `setEditingExistingQuery` here prevents
// inclusion of `query_id` in the subsequent `run` API call, which prevents counting
// this live run in performance impact. Since we DO want to count this run in those
// stats if the query is the same as the saved one, only set below IF the query
// has been changed.
// TODO - product: should host details > action > query > <select existing query>
// go to the host details page instead of the edit query page, where the user has
// the choice to edit the query or run it live directly?
if (queryWasChanged) {
setEditingExistingQuery(true); // Persists edited query data through live query flow
}
router.push(
PATHS.LIVE_QUERY(queryIdForEdit) +
TAGGED_TEMPLATES.queryByHostRoute(hostId, currentTeamId)