Skip to content

Comments

[UII] Use local storage for tours in Fleet and Integrations#183102

Merged
jen-huang merged 4 commits intoelastic:mainfrom
jen-huang:fix/use-local-storage-for-tours
May 10, 2024
Merged

[UII] Use local storage for tours in Fleet and Integrations#183102
jen-huang merged 4 commits intoelastic:mainfrom
jen-huang:fix/use-local-storage-for-tours

Conversation

@jen-huang
Copy link
Contributor

@jen-huang jen-huang commented May 9, 2024

Summary

Resolves #180659.

The original bug reported an error being throw when trying to dismiss the agent activity tour while logged in as a user with limited access.

This was happening because the tour was backed by a uiSetting and attempted to write a new value to /internal/kibana/settings after dismissing the tour. uiSettings backs the global Kibana advanced settings used by all users in an instance. Therefore only users with access to Management > Advanced settings are allowed to write to it.

The tours that we use in Fleet and Integrations is not the right use case for uiSettings. This PR changes the logic for the two tours (agent activity and add agent) so that:

  • If uiSetting's hideAnnouncements is true, never show these tours - this is a global setting intended to surpress these kind of tours and messages, see [Discover] Add hideAnnouncements advanced setting #135030
  • Otherwise read from and write to local storage (using Kibana's storage service) to determine whether to show these tours or not
  • Never attempt to write to uiSettings
  • Normalize the code pattern used by hooks related to the inactive agents tour (they were already using local storage but not from useStartServices)

You can test this by:

  1. Opening actions menu in an agent list row, add a new tag to the agent, and dismiss the Agent activity tour. Refresh the page, perform the action again, and tour should not show
  2. From Integrations, add an integration to a new policy without adding an agent, after returning to the integration policies list, dismiss the Add agent activity tour. Refresh the page, perform the action again, and tour should not show

You can clear these fleet.* local settings to trigger the tours again, or use another browser / incognito mode:

image

@jen-huang jen-huang added release_note:skip Skip the PR/issue when compiling release notes Team:Fleet Team label for Observability Data Collection Fleet team v8.14.0 v8.15.0 labels May 9, 2024
@jen-huang jen-huang self-assigned this May 9, 2024
@jen-huang jen-huang requested a review from a team as a code owner May 9, 2024 22:38
@elasticmachine
Copy link
Contributor

Pinging @elastic/fleet (Team:Fleet)

@ghost
Copy link

ghost commented May 9, 2024

🤖 GitHub comments

Expand to view the GitHub comments

Just comment with:

  • /oblt-deploy : Deploy a Kibana instance using the Observability test environments.
  • run docs-build : Re-trigger the docs validation. (use unformatted text in the comment!)

@kibana-ci
Copy link

💚 Build Succeeded

Metrics [docs]

Async chunks

Total size of all lazy-loaded chunks that will be downloaded as the user navigates the app

id before after diff
fleet 1.3MB 1.3MB +301.0B

Page load bundle

Size of the bundles that are downloaded on every page load. Target size is below 100kb

id before after diff
fleet 163.2KB 163.4KB +204.0B

History

To update your PR or re-run it, just comment with:
@elasticmachine merge upstream

cc @jen-huang

Copy link
Contributor

@juliaElastic juliaElastic left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@jen-huang jen-huang merged commit 8cf79b7 into elastic:main May 10, 2024
kibanamachine pushed a commit to kibanamachine/kibana that referenced this pull request May 10, 2024
…183102)

## Summary

Resolves elastic#180659.

The original bug reported an error being throw when trying to dismiss
the agent activity tour while logged in as a user with limited access.

This was happening because the tour was backed by a `uiSetting` and
attempted to write a new value to `/internal/kibana/settings` after
dismissing the tour. `uiSettings` backs the global Kibana advanced
settings used by all users in an instance. Therefore only users with
access to Management > Advanced settings are allowed to write to it.

The tours that we use in Fleet and Integrations is not the right use
case for `uiSettings`. This PR changes the logic for the two tours
(agent activity and add agent) so that:

- If `uiSetting`'s `hideAnnouncements` is true, never show these tours -
this is a global setting intended to surpress these kind of tours and
messages, see elastic#135030
- Otherwise read from and write to local storage (using Kibana's
`storage` service) to determine whether to show these tours or not
- Never attempt to write to `uiSettings`
- Normalize the code pattern used by hooks related to the inactive
agents tour (they were already using local storage but not from
`useStartServices`)

You can test this by:

1. Opening actions menu in an agent list row, add a new tag to the
agent, and dismiss the Agent activity tour. Refresh the page, perform
the action again, and tour should not show
2. From Integrations, add an integration to a new policy without adding
an agent, after returning to the integration policies list, dismiss the
Add agent activity tour. Refresh the page, perform the action again, and
tour should not show

You can clear these `fleet.*` local settings to trigger the tours again,
or use another browser / incognito mode:

<img width="694" alt="image"
src="https://github.com/elastic/kibana/assets/1965714/817f48fc-2a6a-411d-8242-f855f862c622">

(cherry picked from commit 8cf79b7)
@kibanamachine
Copy link
Contributor

💚 All backports created successfully

Status Branch Result
8.14

Note: Successful backport PRs will be merged automatically after passing CI.

Questions ?

Please refer to the Backport tool documentation

@jen-huang jen-huang deleted the fix/use-local-storage-for-tours branch May 10, 2024 14:25
kibanamachine added a commit that referenced this pull request May 10, 2024
…183102) (#183159)

# Backport

This will backport the following commits from `main` to `8.14`:
- [[UII] Use local storage for tours in Fleet and Integrations
(#183102)](#183102)

<!--- Backport version: 9.4.3 -->

### Questions ?
Please refer to the [Backport tool
documentation](https://github.com/sqren/backport)

<!--BACKPORT [{"author":{"name":"Jen
Huang","email":"its.jenetic@gmail.com"},"sourceCommit":{"committedDate":"2024-05-10T14:20:43Z","message":"[UII]
Use local storage for tours in Fleet and Integrations (#183102)\n\n##
Summary\r\n\r\nResolves
https://github.com/elastic/kibana/issues/180659.\r\n\r\nThe original bug
reported an error being throw when trying to dismiss\r\nthe agent
activity tour while logged in as a user with limited access.\r\n\r\nThis
was happening because the tour was backed by a `uiSetting`
and\r\nattempted to write a new value to `/internal/kibana/settings`
after\r\ndismissing the tour. `uiSettings` backs the global Kibana
advanced\r\nsettings used by all users in an instance. Therefore only
users with\r\naccess to Management > Advanced settings are allowed to
write to it.\r\n\r\nThe tours that we use in Fleet and Integrations is
not the right use\r\ncase for `uiSettings`. This PR changes the logic
for the two tours\r\n(agent activity and add agent) so that:\r\n\r\n- If
`uiSetting`'s `hideAnnouncements` is true, never show these tours
-\r\nthis is a global setting intended to surpress these kind of tours
and\r\nmessages, see https://github.com/elastic/kibana/pull/135030\r\n-
Otherwise read from and write to local storage (using
Kibana's\r\n`storage` service) to determine whether to show these tours
or not\r\n- Never attempt to write to `uiSettings`\r\n- Normalize the
code pattern used by hooks related to the inactive\r\nagents tour (they
were already using local storage but not
from\r\n`useStartServices`)\r\n\r\nYou can test this by:\r\n\r\n1.
Opening actions menu in an agent list row, add a new tag to
the\r\nagent, and dismiss the Agent activity tour. Refresh the page,
perform\r\nthe action again, and tour should not show\r\n2. From
Integrations, add an integration to a new policy without adding\r\nan
agent, after returning to the integration policies list, dismiss
the\r\nAdd agent activity tour. Refresh the page, perform the action
again, and\r\ntour should not show\r\n\r\nYou can clear these `fleet.*`
local settings to trigger the tours again,\r\nor use another browser /
incognito mode:\r\n\r\n<img width=\"694\"
alt=\"image\"\r\nsrc=\"https://github.com/elastic/kibana/assets/1965714/817f48fc-2a6a-411d-8242-f855f862c622\">","sha":"8cf79b71f26b324a27a45e6a3729cbcfb64643bb","branchLabelMapping":{"^v8.15.0$":"main","^v(\\d+).(\\d+).\\d+$":"$1.$2"}},"sourcePullRequest":{"labels":["release_note:skip","Team:Fleet","v8.14.0","v8.15.0"],"title":"[UII]
Use local storage for tours in Fleet and
Integrations","number":183102,"url":"https://github.com/elastic/kibana/pull/183102","mergeCommit":{"message":"[UII]
Use local storage for tours in Fleet and Integrations (#183102)\n\n##
Summary\r\n\r\nResolves
https://github.com/elastic/kibana/issues/180659.\r\n\r\nThe original bug
reported an error being throw when trying to dismiss\r\nthe agent
activity tour while logged in as a user with limited access.\r\n\r\nThis
was happening because the tour was backed by a `uiSetting`
and\r\nattempted to write a new value to `/internal/kibana/settings`
after\r\ndismissing the tour. `uiSettings` backs the global Kibana
advanced\r\nsettings used by all users in an instance. Therefore only
users with\r\naccess to Management > Advanced settings are allowed to
write to it.\r\n\r\nThe tours that we use in Fleet and Integrations is
not the right use\r\ncase for `uiSettings`. This PR changes the logic
for the two tours\r\n(agent activity and add agent) so that:\r\n\r\n- If
`uiSetting`'s `hideAnnouncements` is true, never show these tours
-\r\nthis is a global setting intended to surpress these kind of tours
and\r\nmessages, see https://github.com/elastic/kibana/pull/135030\r\n-
Otherwise read from and write to local storage (using
Kibana's\r\n`storage` service) to determine whether to show these tours
or not\r\n- Never attempt to write to `uiSettings`\r\n- Normalize the
code pattern used by hooks related to the inactive\r\nagents tour (they
were already using local storage but not
from\r\n`useStartServices`)\r\n\r\nYou can test this by:\r\n\r\n1.
Opening actions menu in an agent list row, add a new tag to
the\r\nagent, and dismiss the Agent activity tour. Refresh the page,
perform\r\nthe action again, and tour should not show\r\n2. From
Integrations, add an integration to a new policy without adding\r\nan
agent, after returning to the integration policies list, dismiss
the\r\nAdd agent activity tour. Refresh the page, perform the action
again, and\r\ntour should not show\r\n\r\nYou can clear these `fleet.*`
local settings to trigger the tours again,\r\nor use another browser /
incognito mode:\r\n\r\n<img width=\"694\"
alt=\"image\"\r\nsrc=\"https://github.com/elastic/kibana/assets/1965714/817f48fc-2a6a-411d-8242-f855f862c622\">","sha":"8cf79b71f26b324a27a45e6a3729cbcfb64643bb"}},"sourceBranch":"main","suggestedTargetBranches":["8.14"],"targetPullRequestStates":[{"branch":"8.14","label":"v8.14.0","branchLabelMappingKey":"^v(\\d+).(\\d+).\\d+$","isSourceBranch":false,"state":"NOT_CREATED"},{"branch":"main","label":"v8.15.0","branchLabelMappingKey":"^v8.15.0$","isSourceBranch":true,"state":"MERGED","url":"https://github.com/elastic/kibana/pull/183102","number":183102,"mergeCommit":{"message":"[UII]
Use local storage for tours in Fleet and Integrations (#183102)\n\n##
Summary\r\n\r\nResolves
https://github.com/elastic/kibana/issues/180659.\r\n\r\nThe original bug
reported an error being throw when trying to dismiss\r\nthe agent
activity tour while logged in as a user with limited access.\r\n\r\nThis
was happening because the tour was backed by a `uiSetting`
and\r\nattempted to write a new value to `/internal/kibana/settings`
after\r\ndismissing the tour. `uiSettings` backs the global Kibana
advanced\r\nsettings used by all users in an instance. Therefore only
users with\r\naccess to Management > Advanced settings are allowed to
write to it.\r\n\r\nThe tours that we use in Fleet and Integrations is
not the right use\r\ncase for `uiSettings`. This PR changes the logic
for the two tours\r\n(agent activity and add agent) so that:\r\n\r\n- If
`uiSetting`'s `hideAnnouncements` is true, never show these tours
-\r\nthis is a global setting intended to surpress these kind of tours
and\r\nmessages, see https://github.com/elastic/kibana/pull/135030\r\n-
Otherwise read from and write to local storage (using
Kibana's\r\n`storage` service) to determine whether to show these tours
or not\r\n- Never attempt to write to `uiSettings`\r\n- Normalize the
code pattern used by hooks related to the inactive\r\nagents tour (they
were already using local storage but not
from\r\n`useStartServices`)\r\n\r\nYou can test this by:\r\n\r\n1.
Opening actions menu in an agent list row, add a new tag to
the\r\nagent, and dismiss the Agent activity tour. Refresh the page,
perform\r\nthe action again, and tour should not show\r\n2. From
Integrations, add an integration to a new policy without adding\r\nan
agent, after returning to the integration policies list, dismiss
the\r\nAdd agent activity tour. Refresh the page, perform the action
again, and\r\ntour should not show\r\n\r\nYou can clear these `fleet.*`
local settings to trigger the tours again,\r\nor use another browser /
incognito mode:\r\n\r\n<img width=\"694\"
alt=\"image\"\r\nsrc=\"https://github.com/elastic/kibana/assets/1965714/817f48fc-2a6a-411d-8242-f855f862c622\">","sha":"8cf79b71f26b324a27a45e6a3729cbcfb64643bb"}}]}]
BACKPORT-->

Co-authored-by: Jen Huang <its.jenetic@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

release_note:skip Skip the PR/issue when compiling release notes Team:Fleet Team label for Observability Data Collection Fleet team v8.14.0 v8.15.0

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Fleet]: On clicking OK on tooltip on Agent activity Unable to update UI setting error is displayed with Custom Role.

5 participants