[Security Solution][Sourcerer] Maintain url sync support #221737
[Security Solution][Sourcerer] Maintain url sync support #221737lgestc merged 20 commits intoelastic:mainfrom
Conversation
|
Pinging @elastic/security-threat-hunting-investigations (Team:Threat Hunting:Investigations) |
x-pack/solutions/security/plugins/security_solution/public/app/home/index.tsx
Outdated
Show resolved
Hide resolved
| export const URL_PARAM_KEY = { | ||
| appQuery: 'query', | ||
| /** @deprecated */ | ||
| eventFlyout: 'eventFlyout', // TODO remove when we assume it's been long enough that all users should use the newer `flyout` key |
There was a problem hiding this comment.
hmmm I know we added telemetry when users open the flyout, but I don't think it logs what's in the url. Can't we just retrieve url information from Kibana telemetry? We should be able to query and see if any of the url we log contain the eventFlyout param?
There was a problem hiding this comment.
Not related to this PR I think but I can remove it if you want.
There was a problem hiding this comment.
Yea, unrelated, but didn't want this to stay in forever. No need to remove here, just wanted to call attention to it so we could remove it later
...ns/security/plugins/security_solution/public/data_view_manager/hooks/use_select_data_view.ts
Show resolved
Hide resolved
|
|
||
| // Select data view for specific scope, based on the UrlParam. | ||
| (Object.keys(initialState) as SourcererScopeName[]).forEach((scope) => { | ||
| // NOTE: looks like this is about skipping the init when the active page is detections |
There was a problem hiding this comment.
Not just detections, but the explore pages as well. If it helps, I believe this was to account for timeline as the sourcerer state for that would've been handled in the timeline slice of useUrlState.
This is how the code was: https://github.com/elastic/kibana/blob/8.2/x-pack/plugins/security_solution/public/common/components/url_state/helpers.ts
And this is an old example of how it was structured: #123617
...utions/security/plugins/security_solution/public/sourcerer/containers/use_init_sourcerer.tsx
Show resolved
Hide resolved
@michaelolo24 data view manager uses url sourced state first, with default selections applied as fallback. race conditions should not be possible after the changes. |
| (id: string, indexPattern: string = '') => { | ||
| selectDataView({ id, scope }); | ||
|
|
||
| if (isDefaultSourcerer) { |
There was a problem hiding this comment.
Not for this PR, but defaultSourcerer is vague, but I'm not sure what to rename it to or how to classify the other scopes of timeline,analyzer, and the detections page 🤔 . Anyways, just wanted to bring it up for discussion separately
| expect(initDataViewSelection).not.toHaveBeenCalled(); | ||
| }); | ||
|
|
||
| it('should call initDataViewSelection for each scope if newDataViewPickerEnabled is true', () => { |
There was a problem hiding this comment.
nit, but I would have this map over all of the available scopes, rather than just 2
| // Select data view for specific scope, based on the UrlParam. | ||
| const urlBasedSelection = (Object.keys(initialState) as SourcererScopeName[]) | ||
| .map((scope) => { | ||
| // NOTE: looks like this is about skipping the init when the active page is detections |
| } | ||
|
|
||
| // Cancel effects running for the current scope to prevent race conditions | ||
| listenerApi.cancelActiveListeners(); |
...ity/plugins/security_solution/public/data_view_manager/redux/listeners/data_view_selected.ts
Outdated
Show resolved
Hide resolved
| } | ||
| }, | ||
| init: (state) => { | ||
| init: (state, _action: PayloadAction<SelectDataViewAsyncPayload[]>) => { |
There was a problem hiding this comment.
Is the _action reference here necessary?
There was a problem hiding this comment.
I think this is where the type information is sourced from, but made it shorter.
michaelolo24
left a comment
There was a problem hiding this comment.
The changes look good and the race conditions seem to be resolved, but will do additional testing over the next few weeks off of main. Had a few more comments here, but all in all the PR looks good. Nice work! 👍🏾
💛 Build succeeded, but was flaky
Failed CI StepsMetrics [docs]Module Count
Async chunks
Page load bundle
Unknown metric groupsReferences to deprecated APIs
History
|
) ## Summary Sourcerer supports url sync for its state, and we should have the same thing working for the new data view picker. This PR maintains that and makes sure that we are not calling the update logic twice when the feature is off. One known issue: you might see a flash during app init related to data views switching after being restored from the url. This is tracked in a separate ticket. ## Testing With the feature flag on: ``` xpack.securitySolution.enableExperimental: ['newDataViewPickerEnabled'] ``` Data View Manager state should be persisted and restored to/from the url the same way it works with Sourcerer. Eg: navigate to explore pages, change the data view to 'metrics' for example. Refreshing the page should render the metrics data view selected again. ### Checklist - [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios
) ## Summary Sourcerer supports url sync for its state, and we should have the same thing working for the new data view picker. This PR maintains that and makes sure that we are not calling the update logic twice when the feature is off. One known issue: you might see a flash during app init related to data views switching after being restored from the url. This is tracked in a separate ticket. ## Testing With the feature flag on: ``` xpack.securitySolution.enableExperimental: ['newDataViewPickerEnabled'] ``` Data View Manager state should be persisted and restored to/from the url the same way it works with Sourcerer. Eg: navigate to explore pages, change the data view to 'metrics' for example. Refreshing the page should render the metrics data view selected again. ### Checklist - [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios
… Data View Picker (#210585) (#223044) # Backport This will backport the following commits from `main` to `8.19`: - [[Security Solution][Sourcerer] Replace Sourcerer with Discover Data View Picker (#210585)](#210585) - [[Security Solution] Rename use_data_view to use_data_view_spec #216461](#216461) - [[Security Solution] Rename use full data view hook #216614](#216614) - [[Security Solution] Replace sourcerer in global header #216685](#216685) - [[Security Solution] Remove .title use in use_selected_patterns #216994](#216994) - [[Security Solution] Render default security solution data view with managed label #216961](#216961) - [[Security Solution] Replace sourcerer in analyzer #218183](#218183) - [[Security Solution] Replace use_sourcerer_data_view #216997](#216997) - [[Security Solution] Replace sourcerer in EQL tab with dataview picker #218897](#218897) - [[Security Solution][Sourcerer] replace use get scoped data view #220196](#220196) - [[Security Solution] renaming dataView to dataViewSpec and adding types for clarity #220718](#220718) - [[Security Solution][Sourcerer] Maintain url sync support #221737](#221737) - [[Security Solution][Data View Manager] Allow passing data view to query bar #220585](#220585) - [[Security Solution] Fix data view picker privilege #222122](#222122) <!--- Backport version: 10.0.0 --> ### Questions ? Please refer to the [Backport tool documentation](https://github.com/sorenlouv/backport) <!--BACKPORT [{"author":{"name":"Luke Gmys","email":"11671118+lgestc@users.noreply.github.com"},"sourceCommit":{"committedDate":"2025-03-31T12:12:57Z","message":"[Security Solution][Sourcerer] Replace Sourcerer with Discover Data View Picker (#210585)\n\n# Unified Data View Picker: Phase 1 Implementation\nPart of https://github.com/elastic/security-team/issues/11959\n\n## What This PR Does\nThis PR represents the first step in our transition from the current\nSourcerer component to the new unified Data View Picker. Specifically,\nthis implementation:\n- Creates a new Data View Picker component\n- Implements feature flag protection for all changes\n- Handles asynchronous effects through Redux listener middleware\n- Establishes a new Redux store architecture to support ad hoc data\nviews infrastructure\n- Utilizes ad hoc data views to handle legacy patterns from series 7\n(replacing the previous upgrade data view flow)\n\nSee the readme for more info: \n```x-pack/solutions/security/plugins/security_solution/public/data_view_manager/readme.md```\n\n## What This PR Does NOT Cover\n- Does not affect screens other than Timelines\n- Does not modify the existing Sourcerer component in any way\n- Does not fully support all URL/local storage patterns\n\n## Implementation Notes\nWe've made several accommodations to support both Sourcerer and the new Data View Picker simultaneously during this transition period, including:\n- Some interfaces might look odd, especially the hooks that return the data view or patterns - this is intentional to support existing use cases\n- There are feature flag-based conditional statements throughout the code that will be removed once the transition is complete\n\n## Testing Instructions\n1. Add the following feature flag to your configuration:\n ```\n xpack.securitySolution.enableExperimental: ['newDataViewPickerEnabled']\n ```\n2. Navigate to the Timelines interface\n3. Test interactions with the new Data View Picker\n\n---------\n\nCo-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>","sha":"9679f2941550856d75e00c1faadd8c9669afe917","branchLabelMapping":{"^v9.1.0$":"main","^v8.19.0$":"8.x","^v(\\d+).(\\d+).\\d+$":"$1.$2"}},"sourcePullRequest":{"labels":["release_note:enhancement","backport:skip","Team: SecuritySolution","Team:Threat Hunting:Investigations","Feature:Sourcerer","9.1 candidate","v9.1.0"],"title":"[Security Solution][Sourcerer] Replace Sourcerer with Discover Data View Picker","number":210585,"url":"https://github.com/elastic/kibana/pull/210585","mergeCommit":{"message":"[Security Solution][Sourcerer] Replace Sourcerer with Discover Data View Picker (#210585)\n\n# Unified Data View Picker: Phase 1 Implementation\nPart of https://github.com/elastic/security-team/issues/11959\n\n## What This PR Does\nThis PR represents the first step in our transition from the current\nSourcerer component to the new unified Data View Picker. Specifically,\nthis implementation:\n- Creates a new Data View Picker component\n- Implements feature flag protection for all changes\n- Handles asynchronous effects through Redux listener middleware\n- Establishes a new Redux store architecture to support ad hoc data\nviews infrastructure\n- Utilizes ad hoc data views to handle legacy patterns from series 7\n(replacing the previous upgrade data view flow)\n\nSee the readme for more info: \n```x-pack/solutions/security/plugins/security_solution/public/data_view_manager/readme.md```\n\n## What This PR Does NOT Cover\n- Does not affect screens other than Timelines\n- Does not modify the existing Sourcerer component in any way\n- Does not fully support all URL/local storage patterns\n\n## Implementation Notes\nWe've made several accommodations to support both Sourcerer and the new Data View Picker simultaneously during this transition period, including:\n- Some interfaces might look odd, especially the hooks that return the data view or patterns - this is intentional to support existing use cases\n- There are feature flag-based conditional statements throughout the code that will be removed once the transition is complete\n\n## Testing Instructions\n1. Add the following feature flag to your configuration:\n ```\n xpack.securitySolution.enableExperimental: ['newDataViewPickerEnabled']\n ```\n2. Navigate to the Timelines interface\n3. Test interactions with the new Data View Picker\n\n---------\n\nCo-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>","sha":"9679f2941550856d75e00c1faadd8c9669afe917"}},"sourceBranch":"main","suggestedTargetBranches":[],"targetPullRequestStates":[{"branch":"main","label":"v9.1.0","branchLabelMappingKey":"^v9.1.0$","isSourceBranch":true,"state":"MERGED","url":"https://github.com/elastic/kibana/pull/210585","number":210585,"mergeCommit":{"message":"[Security Solution][Sourcerer] Replace Sourcerer with Discover Data View Picker (#210585)\n\n# Unified Data View Picker: Phase 1 Implementation\nPart of https://github.com/elastic/security-team/issues/11959\n\n## What This PR Does\nThis PR represents the first step in our transition from the current\nSourcerer component to the new unified Data View Picker. Specifically,\nthis implementation:\n- Creates a new Data View Picker component\n- Implements feature flag protection for all changes\n- Handles asynchronous effects through Redux listener middleware\n- Establishes a new Redux store architecture to support ad hoc data\nviews infrastructure\n- Utilizes ad hoc data views to handle legacy patterns from series 7\n(replacing the previous upgrade data view flow)\n\nSee the readme for more info: \n```x-pack/solutions/security/plugins/security_solution/public/data_view_manager/readme.md```\n\n## What This PR Does NOT Cover\n- Does not affect screens other than Timelines\n- Does not modify the existing Sourcerer component in any way\n- Does not fully support all URL/local storage patterns\n\n## Implementation Notes\nWe've made several accommodations to support both Sourcerer and the new Data View Picker simultaneously during this transition period, including:\n- Some interfaces might look odd, especially the hooks that return the data view or patterns - this is intentional to support existing use cases\n- There are feature flag-based conditional statements throughout the code that will be removed once the transition is complete\n\n## Testing Instructions\n1. Add the following feature flag to your configuration:\n ```\n xpack.securitySolution.enableExperimental: ['newDataViewPickerEnabled']\n ```\n2. Navigate to the Timelines interface\n3. Test interactions with the new Data View Picker\n\n---------\n\nCo-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>","sha":"9679f2941550856d75e00c1faadd8c9669afe917"}}]}] BACKPORT--> --------- Co-authored-by: Luke Gmys <11671118+lgestc@users.noreply.github.com> Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> Co-authored-by: Philippe Oberti <philippe.oberti@elastic.co>
) ## Summary Sourcerer supports url sync for its state, and we should have the same thing working for the new data view picker. This PR maintains that and makes sure that we are not calling the update logic twice when the feature is off. One known issue: you might see a flash during app init related to data views switching after being restored from the url. This is tracked in a separate ticket. ## Testing With the feature flag on: ``` xpack.securitySolution.enableExperimental: ['newDataViewPickerEnabled'] ``` Data View Manager state should be persisted and restored to/from the url the same way it works with Sourcerer. Eg: navigate to explore pages, change the data view to 'metrics' for example. Refreshing the page should render the metrics data view selected again. ### Checklist - [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios



Summary
Sourcerer supports url sync for its state, and we should have the same thing working for the new data view picker.
This PR maintains that and makes sure that we are not calling the update logic twice when the feature is off.
It also prevent race conditions - only the last selection will be applied to the picker in case of multiple dispatches within short time frames (eg. during app init).
One known issue: you might see a flash during app init related to data views switching after being restored from the url. This is tracked in a separate ticket.
Testing
With the feature flag on:
Data View Manager state should be persisted and restored to/from the url the same way it works with Sourcerer.
Eg: navigate to explore pages, change the data view to 'metrics' for example. Refreshing the page should render the metrics data view selected again.
Checklist