Skip to content

[Streams 🌊] Listing and overview page improvements#223603

Merged
rStelmach merged 18 commits intoelastic:mainfrom
rStelmach:streams-listing-and-overview-page-improvements
Jun 20, 2025
Merged

[Streams 🌊] Listing and overview page improvements#223603
rStelmach merged 18 commits intoelastic:mainfrom
rStelmach:streams-listing-and-overview-page-improvements

Conversation

@rStelmach
Copy link
Contributor

@rStelmach rStelmach commented Jun 12, 2025

📝 Summary

Closes: #238

This pull request introduces enhancements to the classic streams, focusing on visual updates, improved user interface elements, and the addition of new assets. Things that were done in this PR :

  • Improve page template to have transparent background and short description
  • Replaced old images with new ones
  • Introduced new empty state for streams list
  • Added sorting to streams list table
  • Improved loading indicators
  • Aligned streams tree table with designs and added loading indicators
  • Added tooltips to modify streams tabs as well as retention badge and stream-type badge
  • Modified Component templates table according to new designs

🎨 Previews

Empty State Before: empty state before
Empty State After: empty_state after

Streams List with no data Before:
streams list no data before
Streams List with no data After:
streams list no data

Streams List Before:
streams list with data before
Streams List After:
streams_list with data

Component Templates Before:
Component templates before
Component Templates After:
component templates after

Small demo of streams being loaded

loading.demo.mov

🔧 How to test

  • In dev console in kibana run POST kbn:/api/streams/_enable. This will enable the streams UI and put mappings and pipelines for the main logs stream into place
  • Reload the page
  • Navigate to the streams app in navigation
  • Ingesting data through synthrace: node scripts/synthtrace.js sample_logs --live --kibana=http://elastic:changeme@localhost:5601 --target=http://elastic:changeme@localhost:9200 --liveBucketSize=1000

For more info check this README file

Also please check the issue and discussion for more context

❓ Discussion

if you think that there is something else that needs improvements for classic streams, let me know so we can include it in this PR

🖌 Designs

Figma
New Images

@rStelmach rStelmach changed the title initial version Streams Listing and overview page improvements Jun 12, 2025
@rStelmach rStelmach changed the title Streams Listing and overview page improvements [Streams 🌊] Listing and overview page improvements Jun 13, 2025
@rStelmach rStelmach marked this pull request as ready for review June 13, 2025 14:35
@rStelmach rStelmach requested review from a team as code owners June 13, 2025 14:35
@rStelmach rStelmach added Team:obs-onboarding Observability Onboarding Team backport:version Backport to applied version labels v9.1.0 v8.19.0 labels Jun 13, 2025
@elasticmachine
Copy link
Contributor

Pinging @elastic/obs-ux-logs-team (Team:obs-ux-logs)

@rStelmach rStelmach added Feature:Streams This is the label for the Streams Project release_note:enhancement labels Jun 13, 2025
Copy link
Contributor

@thomheymann thomheymann left a comment

Choose a reason for hiding this comment

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

Haven't gone through the code yet but couple questions regarding the UI below

Streams listing page

Screenshot 2025-06-13 at 16 00 08

Streams details page

Screenshot 2025-06-13 at 16 09 59

@thomheymann
Copy link
Contributor

There's an issue with the retention policy badges. Some open in new windows and some dont. I think this should be consistent:

Screenshot 2025-06-17 at 13 22 20 Screenshot 2025-06-17 at 13 22 26

Comment on lines +85 to +96
<EuiToolTip
position="top"
title={i18n.translate('xpack.streams.badges.classic.title', {
defaultMessage: 'Classic Stream',
})}
content={i18n.translate('xpack.streams.badges.classic.description', {
defaultMessage:
'Classic streams are based on existing data streams and may not support all Streams features like custom re-routing',
})}
>
<ClassicStreamBadge />
</EuiToolTip>
Copy link
Contributor

Choose a reason for hiding this comment

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

Could the tooltip be part of the badge so we get it for free wherever we display it?

Copy link
Contributor

Choose a reason for hiding this comment

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

@rStelmach What do you think?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

My bad, I removed it only from index. Right now it's removed also from wrapper.

I left the wrapped tooltip around <LifecycleBadge>, I think it's cleaner than placing the wrapper in every if case inside the component, but let me know if you think that it should be done the same way.

`}
>
<EuiI18nNumber value={docCount} />
{hasData ? <EuiI18nNumber value={docCount} /> : 'N/A'}
Copy link
Contributor

Choose a reason for hiding this comment

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

N/A should be translated

Comment on lines +160 to +172
const sortedRoots = React.useMemo(() => {
return [...enrichedTree].sort((a, b) => {
const av = a[sortField];
const bv = b[sortField];
if (typeof av === 'string' && typeof bv === 'string') {
return sortDirection === 'asc' ? av.localeCompare(bv) : bv.localeCompare(av);
}
if (typeof av === 'number' && typeof bv === 'number') {
return sortDirection === 'asc' ? av - bv : bv - av;
}
return 0;
});
}, [enrichedTree, sortField, sortDirection]);
Copy link
Contributor

Choose a reason for hiding this comment

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

The sorting logic does not work correctly. I think in this case "logs.linux" should come before "logs.apache":

Screenshot 2025-06-17 at 14 30 51

Copy link
Contributor

Choose a reason for hiding this comment

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

The sorting is still broken. The name column has the same issue we discussed for the documents column in that it only sorts root level streams.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Right now it should work

Copy link
Contributor

Choose a reason for hiding this comment

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

With the current logic we start off with a flat list of streams (coming from GET /internal/streams). We are then turning that into a deeply nested object, walking over the entire tree structure to sort nodes and then walking over the entire structure again to flatten it back to a flat list and enrich it with meta data.

Is all that necessary or can we optimise the code to reduce complexity?

I think we should be able to derive any required fields we need in a single iteration and then let EuiMemoryTable handle the sorting:

const enrichedStreams = streamsResponse.map(enrichWithMetaDataAndSortKeys)

What do you think?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

I tried to do it in a single iteration and pass it to EuiMemoryTable but that component is unaware of parent/child boundaries, and it mixes children from different roots.

I tried to simplified the logic. Now items is built in a single depth-first walk that flattens the tree and adds level + root-level meta in one go.

What do you think of this change ? Is it a bit cleaner?

Copy link
Contributor

Choose a reason for hiding this comment

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

Yeh but I think the sort order is inverted. Ascending means 0-9/A-Z but here it seems to be the other way around:

Screenshot 2025-06-19 at 09 00 11

Can you also add unit tests for the sorting logic to ensure it works correctly?

})}{' '}
<EuiLink
target="_blank"
href="https://www.elastic.co/docs/solutions/observability/logs/streams/streams"
Copy link
Contributor

Choose a reason for hiding this comment

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

Can we use the doc links service instead?

@rStelmach rStelmach requested a review from a team as a code owner June 18, 2025 14:53
Copy link
Contributor

@thomheymann thomheymann left a comment

Choose a reason for hiding this comment

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

Thanks, the code looks good and much clearer now.

For the unit tests, I don't think we need to be clever here or try and make this dry.

The function is supposed to sort an entire list of streams so our assertions should also verify the entire list. If you start filtering you create blind spots where the sort order will not be tested correctly.

We need the following 4 test scenarios:

  1. Sort by name (asc)
  2. Sort by name (desc)
  3. Sort by retention time (asc)
  4. Sort by retention time (desc)

We need to check that the full list has been sorted correctly, not just parts.

Comment on lines +53 to +67
const rows = buildStreamRows(allStreams, 'nameSortKey', 'asc' as Direction);
expect(rows.map((r) => r.name)).toEqual([
'logs-a',
'logs-a.child1',
'logs-a.child2',
'logs-a.child3',
'logs-b',
'logs-b.child1',
'logs-b.child2',
'logs-b.child3',
'metrics-c',
'metrics-c.child1',
'metrics-c.child2',
'metrics-c.child3',
]);
Copy link
Contributor

Choose a reason for hiding this comment

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

Can you add a case for desc order?

Comment on lines +72 to +78
expect(rows.map((r) => r.name).slice(0, 5)).toEqual([
'logs-b',
'logs-b.child3',
'logs-b.child2',
'logs-b.child1',
'metrics-c',
]);
Copy link
Contributor

Choose a reason for hiding this comment

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

Why are you slicing the result?

It's quite hard to see what the expected behaviour here is without seeing the retention time. Can you include that? (e.g. rows.map((r) => ${r.name} (${retentionTime})))

Comment on lines +81 to +87
it('children are sorted by retention asc inside each root', () => {
const rows = buildStreamRows(allStreams, 'retentionMs', 'asc' as Direction);
const aChildren = rows
.filter((r) => r.name.startsWith('logs-a.') && r.level === 1)
.map((r) => r.name);
expect(aChildren).toEqual(['logs-a.child2', 'logs-a.child3', 'logs-a.child1']);
});
Copy link
Contributor

Choose a reason for hiding this comment

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

What is this assertion checking?

Copy link
Contributor

@thomheymann thomheymann left a comment

Choose a reason for hiding this comment

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

LGTM! 🥳

@elasticmachine
Copy link
Contributor

💚 Build Succeeded

Metrics [docs]

Module Count

Fewer modules leads to a faster build time

id before after diff
streamsApp 460 471 +11

Async chunks

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

id before after diff
aiAssistantManagementSelection 77.1KB 77.2KB +56.0B
lists 123.8KB 123.9KB +56.0B
streamsApp 541.0KB 553.1KB +12.1KB
total +12.2KB

Page load bundle

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

id before after diff
core 457.5KB 457.6KB +56.0B
Unknown metric groups

async chunk count

id before after diff
streamsApp 8 18 +10

miscellaneous assets size

id before after diff
streamsApp 60.6KB 304.0KB ⚠️ +243.3KB

History

@rStelmach rStelmach merged commit 4741e67 into elastic:main Jun 20, 2025
10 checks passed
@kibanamachine
Copy link
Contributor

Starting backport for target branches: 8.19

https://github.com/elastic/kibana/actions/runs/15779974687

@kibanamachine
Copy link
Contributor

💔 All backports failed

Status Branch Result
8.19 Backport failed because of merge conflicts

Manual backport

To create the backport manually run:

node scripts/backport --pr 223603

Questions ?

Please refer to the Backport tool documentation

@rStelmach
Copy link
Contributor Author

💚 All backports created successfully

Status Branch Result
8.19

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

Questions ?

Please refer to the Backport tool documentation

rStelmach added a commit to rStelmach/kibana that referenced this pull request Jun 20, 2025
## 📝 Summary
Closes: [elastic#238](elastic/streams-program#238)

This pull request introduces enhancements to the classic streams,
focusing on visual updates, improved user interface elements, and the
addition of new assets. Things that were done in this PR :

- Improve page template to have transparent background and short
description
- Replaced old images with new ones
- Introduced new empty state for streams list
- Added sorting to streams list table
- Improved loading indicators
- Aligned streams tree table with designs and added loading indicators
- Added tooltips to modify streams tabs as well as retention badge and
stream-type badge
- Modified `Component templates` table according to new designs

##  🎨 Previews
Empty State Before: ![empty state
before](https://github.com/user-attachments/assets/120b36b7-ff7b-4cb4-ab70-40908aa62f95)
Empty State After: ![empty_state
after](https://github.com/user-attachments/assets/f3f7529a-f2f8-4900-86b0-1bc938ed5264)

Streams List with no data Before:
![streams list no data
before](https://github.com/user-attachments/assets/c98d6095-88b0-4eaf-8c04-d1934cd1406a)
Streams List with no data After:
![streams list no
data](https://github.com/user-attachments/assets/00612e5d-5abb-48b0-9837-ca769bd96b66)

Streams List Before:
![streams list with data
before](https://github.com/user-attachments/assets/2f66bc32-3cf8-43ce-989c-91d5b72d4622)
Streams List After:
![streams_list with
data](https://github.com/user-attachments/assets/4f6a5987-de75-49b2-8e0e-86dfef130557)

Component Templates Before:
![Component templates
before](https://github.com/user-attachments/assets/5091eaa2-7983-48f0-ba68-808692235be4)
Component Templates After:
![component templates
after](https://github.com/user-attachments/assets/cc590c88-6170-4bc1-a18d-faf870163098)

### Small demo of streams being loaded

https://github.com/user-attachments/assets/f4a9ec48-ee01-4791-b874-03afeb7f719a

## 🔧   How to test

- In dev console in kibana run POST kbn:/api/streams/_enable. This will
enable the streams UI and put mappings and pipelines for the main logs
stream into place
- Reload the page
- Navigate to the streams app in navigation
- Ingesting data through synthrace: `node scripts/synthtrace.js
sample_logs --live --kibana=http://elastic:changeme@localhost:5601
--target=http://elastic:changeme@localhost:9200 --liveBucketSize=1000`

For more info check this
[README](https://github.com/elastic/streams-program) file

Also please check the [issue and
discussion](elastic/streams-program#238) for
more context

## ❓ Discussion

if you think that there is something else that needs improvements for
classic streams, let me know so we can include it in this PR

## 🖌  Designs

[Figma](https://www.figma.com/design/MgwQzRrh2CWFSE711GEW1o/Streams-Index-and-Onboarding?node-id=1343-139771&m=dev&focus-id=1344-51082)
[New Images

](https://elasticsearch.app.box.com/s/37d3su7j500n9ax6666pv1hbckycjjr0/folder/319936922134)

---------

Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>
(cherry picked from commit 4741e67)

# Conflicts:
#	src/platform/packages/shared/kbn-doc-links/src/get_doc_links.ts
#	x-pack/platform/plugins/shared/streams_app/public/components/data_management/stream_detail_management/wired.tsx
#	x-pack/platform/plugins/shared/streams_app/public/components/data_management/stream_detail_management/wrapper.tsx
#	x-pack/platform/plugins/shared/streams_app/public/components/stream_badges/index.tsx
#	x-pack/platform/plugins/shared/streams_app/tsconfig.json
rStelmach added a commit that referenced this pull request Jun 23, 2025
…224715)

# Backport

This will backport the following commits from `main` to `8.19`:
- [[Streams 🌊] Listing and overview page improvements
(#223603)](#223603)

<!--- Backport version: 10.0.1 -->

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

<!--BACKPORT [{"author":{"name":"Robert
Stelmach","email":"60304951+rStelmach@users.noreply.github.com"},"sourceCommit":{"committedDate":"2025-06-20T13:24:17Z","message":"[Streams
🌊] Listing and overview page improvements (#223603)\n\n## 📝
Summary\nCloses:
[#238](https://github.com/elastic/streams-program/issues/238)\n\nThis
pull request introduces enhancements to the classic streams,\nfocusing
on visual updates, improved user interface elements, and the\naddition
of new assets. Things that were done in this PR :\n\n- Improve page
template to have transparent background and short\ndescription\n-
Replaced old images with new ones\n- Introduced new empty state for
streams list\n- Added sorting to streams list table \n- Improved loading
indicators\n- Aligned streams tree table with designs and added loading
indicators\n- Added tooltips to modify streams tabs as well as retention
badge and\nstream-type badge\n- Modified `Component templates` table
according to new designs\n\n\n\n## 🎨 Previews\nEmpty State Before:
![empty
state\nbefore](https://github.com/user-attachments/assets/120b36b7-ff7b-4cb4-ab70-40908aa62f95)\nEmpty
State After:
![empty_state\nafter](https://github.com/user-attachments/assets/f3f7529a-f2f8-4900-86b0-1bc938ed5264)\n\nStreams
List with no data Before: \n![streams list no
data\nbefore](https://github.com/user-attachments/assets/c98d6095-88b0-4eaf-8c04-d1934cd1406a)\nStreams
List with no data After:\n![streams list
no\ndata](https://github.com/user-attachments/assets/00612e5d-5abb-48b0-9837-ca769bd96b66)\n\n\nStreams
List Before:\n![streams list with
data\nbefore](https://github.com/user-attachments/assets/2f66bc32-3cf8-43ce-989c-91d5b72d4622)\nStreams
List After:\n![streams_list
with\ndata](https://github.com/user-attachments/assets/4f6a5987-de75-49b2-8e0e-86dfef130557)\n\nComponent
Templates Before:\n![Component
templates\nbefore](https://github.com/user-attachments/assets/5091eaa2-7983-48f0-ba68-808692235be4)\nComponent
Templates After:\n![component
templates\nafter](https://github.com/user-attachments/assets/cc590c88-6170-4bc1-a18d-faf870163098)\n\n###
Small demo of streams being loaded
\n\n\nhttps://github.com/user-attachments/assets/f4a9ec48-ee01-4791-b874-03afeb7f719a\n\n##
🔧 How to test \n\n- In dev console in kibana run POST
kbn:/api/streams/_enable. This will\nenable the streams UI and put
mappings and pipelines for the main logs\nstream into place\n- Reload
the page\n- Navigate to the streams app in navigation\n- Ingesting data
through synthrace: `node scripts/synthtrace.js\nsample_logs --live
--kibana=http://elastic:changeme@localhost:5601\n--target=http://elastic:changeme@localhost:9200
--liveBucketSize=1000`\n\nFor more info check
this\n[README](https://github.com/elastic/streams-program) file\n\nAlso
please check the [issue
and\ndiscussion](elastic/streams-program#238)
for\nmore context\n\n## ❓ Discussion \n\nif you think that there is
something else that needs improvements for\nclassic streams, let me know
so we can include it in this PR\n\n## 🖌 Designs
\n\n[Figma](https://www.figma.com/design/MgwQzRrh2CWFSE711GEW1o/Streams-Index-and-Onboarding?node-id=1343-139771&m=dev&focus-id=1344-51082)\n[New
Images\n\n](https://elasticsearch.app.box.com/s/37d3su7j500n9ax6666pv1hbckycjjr0/folder/319936922134)\n\n---------\n\nCo-authored-by:
kibanamachine
<42973632+kibanamachine@users.noreply.github.com>","sha":"4741e67d5cc549ff7070b8e1101c59228e01f86c","branchLabelMapping":{"^v9.1.0$":"main","^v(\\d+).(\\d+).\\d+$":"$1.$2"}},"sourcePullRequest":{"labels":["release_note:enhancement","Team:obs-ux-logs","backport:version","Feature:Streams","v9.1.0","v8.19.0"],"title":"[Streams
🌊] Listing and overview page
improvements","number":223603,"url":"https://github.com/elastic/kibana/pull/223603","mergeCommit":{"message":"[Streams
🌊] Listing and overview page improvements (#223603)\n\n## 📝
Summary\nCloses:
[#238](https://github.com/elastic/streams-program/issues/238)\n\nThis
pull request introduces enhancements to the classic streams,\nfocusing
on visual updates, improved user interface elements, and the\naddition
of new assets. Things that were done in this PR :\n\n- Improve page
template to have transparent background and short\ndescription\n-
Replaced old images with new ones\n- Introduced new empty state for
streams list\n- Added sorting to streams list table \n- Improved loading
indicators\n- Aligned streams tree table with designs and added loading
indicators\n- Added tooltips to modify streams tabs as well as retention
badge and\nstream-type badge\n- Modified `Component templates` table
according to new designs\n\n\n\n## 🎨 Previews\nEmpty State Before:
![empty
state\nbefore](https://github.com/user-attachments/assets/120b36b7-ff7b-4cb4-ab70-40908aa62f95)\nEmpty
State After:
![empty_state\nafter](https://github.com/user-attachments/assets/f3f7529a-f2f8-4900-86b0-1bc938ed5264)\n\nStreams
List with no data Before: \n![streams list no
data\nbefore](https://github.com/user-attachments/assets/c98d6095-88b0-4eaf-8c04-d1934cd1406a)\nStreams
List with no data After:\n![streams list
no\ndata](https://github.com/user-attachments/assets/00612e5d-5abb-48b0-9837-ca769bd96b66)\n\n\nStreams
List Before:\n![streams list with
data\nbefore](https://github.com/user-attachments/assets/2f66bc32-3cf8-43ce-989c-91d5b72d4622)\nStreams
List After:\n![streams_list
with\ndata](https://github.com/user-attachments/assets/4f6a5987-de75-49b2-8e0e-86dfef130557)\n\nComponent
Templates Before:\n![Component
templates\nbefore](https://github.com/user-attachments/assets/5091eaa2-7983-48f0-ba68-808692235be4)\nComponent
Templates After:\n![component
templates\nafter](https://github.com/user-attachments/assets/cc590c88-6170-4bc1-a18d-faf870163098)\n\n###
Small demo of streams being loaded
\n\n\nhttps://github.com/user-attachments/assets/f4a9ec48-ee01-4791-b874-03afeb7f719a\n\n##
🔧 How to test \n\n- In dev console in kibana run POST
kbn:/api/streams/_enable. This will\nenable the streams UI and put
mappings and pipelines for the main logs\nstream into place\n- Reload
the page\n- Navigate to the streams app in navigation\n- Ingesting data
through synthrace: `node scripts/synthtrace.js\nsample_logs --live
--kibana=http://elastic:changeme@localhost:5601\n--target=http://elastic:changeme@localhost:9200
--liveBucketSize=1000`\n\nFor more info check
this\n[README](https://github.com/elastic/streams-program) file\n\nAlso
please check the [issue
and\ndiscussion](elastic/streams-program#238)
for\nmore context\n\n## ❓ Discussion \n\nif you think that there is
something else that needs improvements for\nclassic streams, let me know
so we can include it in this PR\n\n## 🖌 Designs
\n\n[Figma](https://www.figma.com/design/MgwQzRrh2CWFSE711GEW1o/Streams-Index-and-Onboarding?node-id=1343-139771&m=dev&focus-id=1344-51082)\n[New
Images\n\n](https://elasticsearch.app.box.com/s/37d3su7j500n9ax6666pv1hbckycjjr0/folder/319936922134)\n\n---------\n\nCo-authored-by:
kibanamachine
<42973632+kibanamachine@users.noreply.github.com>","sha":"4741e67d5cc549ff7070b8e1101c59228e01f86c"}},"sourceBranch":"main","suggestedTargetBranches":["8.19"],"targetPullRequestStates":[{"branch":"main","label":"v9.1.0","branchLabelMappingKey":"^v9.1.0$","isSourceBranch":true,"state":"MERGED","url":"https://github.com/elastic/kibana/pull/223603","number":223603,"mergeCommit":{"message":"[Streams
🌊] Listing and overview page improvements (#223603)\n\n## 📝
Summary\nCloses:
[#238](https://github.com/elastic/streams-program/issues/238)\n\nThis
pull request introduces enhancements to the classic streams,\nfocusing
on visual updates, improved user interface elements, and the\naddition
of new assets. Things that were done in this PR :\n\n- Improve page
template to have transparent background and short\ndescription\n-
Replaced old images with new ones\n- Introduced new empty state for
streams list\n- Added sorting to streams list table \n- Improved loading
indicators\n- Aligned streams tree table with designs and added loading
indicators\n- Added tooltips to modify streams tabs as well as retention
badge and\nstream-type badge\n- Modified `Component templates` table
according to new designs\n\n\n\n## 🎨 Previews\nEmpty State Before:
![empty
state\nbefore](https://github.com/user-attachments/assets/120b36b7-ff7b-4cb4-ab70-40908aa62f95)\nEmpty
State After:
![empty_state\nafter](https://github.com/user-attachments/assets/f3f7529a-f2f8-4900-86b0-1bc938ed5264)\n\nStreams
List with no data Before: \n![streams list no
data\nbefore](https://github.com/user-attachments/assets/c98d6095-88b0-4eaf-8c04-d1934cd1406a)\nStreams
List with no data After:\n![streams list
no\ndata](https://github.com/user-attachments/assets/00612e5d-5abb-48b0-9837-ca769bd96b66)\n\n\nStreams
List Before:\n![streams list with
data\nbefore](https://github.com/user-attachments/assets/2f66bc32-3cf8-43ce-989c-91d5b72d4622)\nStreams
List After:\n![streams_list
with\ndata](https://github.com/user-attachments/assets/4f6a5987-de75-49b2-8e0e-86dfef130557)\n\nComponent
Templates Before:\n![Component
templates\nbefore](https://github.com/user-attachments/assets/5091eaa2-7983-48f0-ba68-808692235be4)\nComponent
Templates After:\n![component
templates\nafter](https://github.com/user-attachments/assets/cc590c88-6170-4bc1-a18d-faf870163098)\n\n###
Small demo of streams being loaded
\n\n\nhttps://github.com/user-attachments/assets/f4a9ec48-ee01-4791-b874-03afeb7f719a\n\n##
🔧 How to test \n\n- In dev console in kibana run POST
kbn:/api/streams/_enable. This will\nenable the streams UI and put
mappings and pipelines for the main logs\nstream into place\n- Reload
the page\n- Navigate to the streams app in navigation\n- Ingesting data
through synthrace: `node scripts/synthtrace.js\nsample_logs --live
--kibana=http://elastic:changeme@localhost:5601\n--target=http://elastic:changeme@localhost:9200
--liveBucketSize=1000`\n\nFor more info check
this\n[README](https://github.com/elastic/streams-program) file\n\nAlso
please check the [issue
and\ndiscussion](elastic/streams-program#238)
for\nmore context\n\n## ❓ Discussion \n\nif you think that there is
something else that needs improvements for\nclassic streams, let me know
so we can include it in this PR\n\n## 🖌 Designs
\n\n[Figma](https://www.figma.com/design/MgwQzRrh2CWFSE711GEW1o/Streams-Index-and-Onboarding?node-id=1343-139771&m=dev&focus-id=1344-51082)\n[New
Images\n\n](https://elasticsearch.app.box.com/s/37d3su7j500n9ax6666pv1hbckycjjr0/folder/319936922134)\n\n---------\n\nCo-authored-by:
kibanamachine
<42973632+kibanamachine@users.noreply.github.com>","sha":"4741e67d5cc549ff7070b8e1101c59228e01f86c"}},{"branch":"8.19","label":"v8.19.0","branchLabelMappingKey":"^v(\\d+).(\\d+).\\d+$","isSourceBranch":false,"state":"NOT_CREATED"}]}]
BACKPORT-->

---------

Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>
akowalska622 pushed a commit to akowalska622/kibana that referenced this pull request Jun 25, 2025
## 📝 Summary
Closes: [elastic#238](elastic/streams-program#238)

This pull request introduces enhancements to the classic streams,
focusing on visual updates, improved user interface elements, and the
addition of new assets. Things that were done in this PR :

- Improve page template to have transparent background and short
description
- Replaced old images with new ones
- Introduced new empty state for streams list
- Added sorting to streams list table 
- Improved loading indicators
- Aligned streams tree table with designs and added loading indicators
- Added tooltips to modify streams tabs as well as retention badge and
stream-type badge
- Modified `Component templates` table according to new designs



##  🎨 Previews
Empty State Before: ![empty state
before](https://github.com/user-attachments/assets/120b36b7-ff7b-4cb4-ab70-40908aa62f95)
Empty State After: ![empty_state
after](https://github.com/user-attachments/assets/f3f7529a-f2f8-4900-86b0-1bc938ed5264)

Streams List with no data Before: 
![streams list no data
before](https://github.com/user-attachments/assets/c98d6095-88b0-4eaf-8c04-d1934cd1406a)
Streams List with no data After:
![streams list no
data](https://github.com/user-attachments/assets/00612e5d-5abb-48b0-9837-ca769bd96b66)


Streams List Before:
![streams list with data
before](https://github.com/user-attachments/assets/2f66bc32-3cf8-43ce-989c-91d5b72d4622)
Streams List After:
![streams_list with
data](https://github.com/user-attachments/assets/4f6a5987-de75-49b2-8e0e-86dfef130557)

Component Templates Before:
![Component templates
before](https://github.com/user-attachments/assets/5091eaa2-7983-48f0-ba68-808692235be4)
Component Templates After:
![component templates
after](https://github.com/user-attachments/assets/cc590c88-6170-4bc1-a18d-faf870163098)

### Small demo of streams being loaded 


https://github.com/user-attachments/assets/f4a9ec48-ee01-4791-b874-03afeb7f719a

## 🔧   How to test 

- In dev console in kibana run POST kbn:/api/streams/_enable. This will
enable the streams UI and put mappings and pipelines for the main logs
stream into place
- Reload the page
- Navigate to the streams app in navigation
- Ingesting data through synthrace: `node scripts/synthtrace.js
sample_logs --live --kibana=http://elastic:changeme@localhost:5601
--target=http://elastic:changeme@localhost:9200 --liveBucketSize=1000`

For more info check this
[README](https://github.com/elastic/streams-program) file

Also please check the [issue and
discussion](elastic/streams-program#238) for
more context

## ❓ Discussion 

if you think that there is something else that needs improvements for
classic streams, let me know so we can include it in this PR

## 🖌  Designs 

[Figma](https://www.figma.com/design/MgwQzRrh2CWFSE711GEW1o/Streams-Index-and-Onboarding?node-id=1343-139771&m=dev&focus-id=1344-51082)
[New Images

](https://elasticsearch.app.box.com/s/37d3su7j500n9ax6666pv1hbckycjjr0/folder/319936922134)

---------

Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

backport:version Backport to applied version labels Feature:Streams This is the label for the Streams Project release_note:enhancement Team:obs-onboarding Observability Onboarding Team v8.19.0 v9.1.0

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants