Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[HAL-1981] [Experimental] Console dashboard #579

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
172 changes: 172 additions & 0 deletions console/HAL-1981_Dashboard.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,172 @@
---
categories:
- console
---
= [Experimental] Console Dashboard
:author: Harald Pehl
:email: hpehl@redhat.com
:toc: left
:icons: font
:idprefix:
:idseparator: -

== Overview

A dashboard will replace the homepage of the current console. The dashboard should visualize WildFly's most essential data and follow the guidelines from the PatternFly website: https://www.patternfly.org/patterns/dashboard/design-guidelines.

.Dashboard sample
image::https://www.patternfly.org/images/dashboard-view-desktop.d9b02461450d9a4e.png[Dashboard sample]

Different cards visualize the data on the dashboard. These cards include data like:

* Name, version, build, and operation mode of WildFly.
* Runtime information about memory, threads, and other essential resources.
* MicroProfile health status
* Information about deployments
* The last <n> log statements (with errors and warnings highlighted)
* Links to documentation, help, forums, and information on how to get involved with WildFly.

== Issue Metadata

The feature will be part of the next-gen console (https://github.com/hal/foundation/). It won't be available in the current (3.x) codebase.

=== Issue

* https://issues.redhat.com/browse/HAL-1981[HAL-1981]

=== Stability Level

* [x] Experimental

* [ ] Preview

* [ ] Community

* [ ] default

=== Dev Contacts

* mailto:{email}[{author}]

=== Testing By

* [x] Engineering

* [ ] QE

=== Affected Projects or Components

* Web Console

=== Relevant Installation Types

* [x] Traditional standalone server (unzipped or provisioned by Galleon)

* [x] Managed domain

* [ ] OpenShift s2i

* [ ] Bootable jar

== Requirements

The dashboard visualizes WildFly's most essential data, including configuration and runtime data and links to valuable resources. Different cards visualize the data on the dashboard. If a card shows dynamic data, it includes a refresh button. In addition, all cards are refreshed automatically (for static cards this is a noop).
Copy link
Member

Choose a reason for hiding this comment

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

If a card shows dynamic data

Do you infer that from the CLI operations or is it up to the card to define if it's dynamic or not?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

That's up to the card and part of the dashboard/card implementation. The cards are divided into static cards, like name, version, OS, and JVM information, which do not change at runtime, and dynamic cards, like deployment, memory, threads, and health information, which change at runtime.


=== Cards

==== Product info

This card shows WildFly's static and configuration data. This includes name, version, operation mode, stability level, OS/CPU, and JVM information.

*Sources*

* `:read-resource(attributes-only,include-runtime)`
Copy link
Member

Choose a reason for hiding this comment

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

thinking out loud but should this card be dynamic to track changes in the running mode of the servers?

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'd like to keep this static and move the running mode of the servers in the domain resp. runtime card.

* `:product-info()`
* `/core-service=server-environment:read-resource(include-runtime)`
* `/host=<domain-controller>/core-service=host-environment:read-resource(include-runtime)`

==== Domain

This card is only visible in domain mode and shows the number and status of domain-related resources like profiles, hosts, server groups, and servers. It shows only the number and status of the resources. All other information is available in the topology view.

*Sources*

* `:read-children-names(child-type=profile)`
* `:read-children-names(child-type=server-group)`
* `/host=<host>:read-children-names(child-type=server-config)`
* `:product-info()`

==== Deployments

This card shows the number and status of the deployments. In domain mode this card shows the deployments per server group.

*Sources*

* `:read-children-resources(child-type=deployment,include-runtime,recursive-depth=2)`
* `/server-group=*:read-children-resources(child-type=deployment,include-runtime,recursive-depth=2)`

==== Runtime

This card is only available in standalone mode. It shows memory and thread consumption. Therefore, the https://www.patternfly.org/charts/donut-utilization-chart[utilization] chart is used.

*Sources*

* `/core-service=platform-mbean/type=operating-system:read-resource(attributes-only,include-runtime)`
* `/core-service=platform-mbean/type=runtime:read-resource(attributes-only,include-runtime)`
* `/core-service=platform-mbean/type=memory:read-resource(attributes-only,include-runtime)`
* `/core-service=platform-mbean/type=threading:read-resource(attributes-only,include-runtime)`

==== Log

This card shows the last 50 lines from the `server.log` resp. `host-controller.log` file. If the logging subsystem has been configured to use a different name for the log file, the user can specify another name.

*Sources*

* `/subsystem=logging/log-file=server.log:read-log-file(lines=50,tail)`

==== Health

This card is only available in standalone mode. It uses the MicroProfile Health subsystem to show WildFly's healthiness.

* `/subsystem=microprofile-health-smallrye:check-started`
* `/subsystem=microprofile-health-smallrye:check-ready`
* `/subsystem=microprofile-health-smallrye:check-live`

If the MicroProfile Health subsystem is not available, this card contains information on how to enable it and a link to https://docs.wildfly.org/32/Admin_Guide.html#MicroProfile_Health_SmallRye.
Copy link
Member

Choose a reason for hiding this comment

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

If the MicroProfile Health subsystem is not present, you could also first check for the base health subsystem too (eg if the server only uses the wildfly-ee galleon pack)

Copy link
Contributor Author

Choose a reason for hiding this comment

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

That's a good point!


==== Documentation

This card shows links to documentation and other resources. It has two sections:

* General resources
** https://www.wildfly.org[WildFly homepage]
** https://docs.wildfly.org/32/[WildFly documentation] (the link is adjusted to point to the managed WildFly instance)
** https://docs.wildfly.org/32/wildscribe[Model reference] (the link is adjusted to point to the managed WildFly instance)
** https://www.wildfly.org/news/[Latest news]
** https://issues.jboss.org/browse/WFLY[Browse issues]
* Get Help
** https://www.wildfly.org/get-started/[Getting started]
** https://www.wildfly.org/guides/[WildFly Guides]
** https://groups.google.com/forum/#!forum/wildfly[Join the forum]
** https://wildfly.zulipchat.com/[Join Zulip chat]
** https://lists.jboss.org/archives/list/wildfly-dev@lists.jboss.org/[Developer mailing list]

=== Hard Requirements

Implement the dashboard and the cards for standalone mode.

=== Nice-to-Have Requirements

Implement domain mode.

=== Future Work

A user might choose from a list of available cards and configure the dashboard according to his needs. However, this might lead to bad UX. The dashboard uses a multi-column layout, and the position and col-span of cards should be chosen wisely.

== Community Documentation

I plan to advertise the feature using various social media channels once the feature has been implemented.

== Release Note Content

I plan to advertise the feature using various social media channels once the feature has been implemented.