---
title: "Web Dashboard"
description: ""
url: "https://docs.itrsgroup.com/docs/geneos/7.11.0/visualization/web-dashboard/index.html"
---
## Introduction

Geneos Web Dashboard is a client/server web application that allows Active Dashboards to be published and viewed over the web. Existing Active Dashboards can be deployed to a centralised location and viewed remotely without requiring the installation of Active Console.

With Web Dashboard, you are able to:

- Deploy a dashboard previously created in Active Console inside a web server.
- Access that dashboard from the web browser and see updates coming from Geneos.
- Navigate around and monitor multiple dashboards from the same web server.
- Access and execute data item commands for which the user has permission.
- Access external web pages if such links are defined within the dashboard contents.

The following diagram describes the application:

![image1](https://docscdn.itrsgroup.com/geneos/images/webserver-images/image1_geneos_web_server_user_manual.jpg)

The server side deploys dashboards created with Active Console and renders them suitable to be seen through a web browser. It also establishes connections to Geneos Gateways to feed Geneos data to dashboards.

The client side communicates with the server to display and interact with deployed dashboards in a web browser.

## User interface

The user interface is accessed using a web browser.

There are two main sections that can be accessed via the following URLs:

- Display and navigation of dashboards and slideshows:

```
http://<web-dashboard-host>:<web-dashboard-port>/
```

- Configuration of connections, dashboards and slideshows:

```
http://<web-dashboard-host>:<web-dashboard-port>/#Config:
```

### Dashboard navigation

This user interface allows the navigation through the dashboards that
have been uploaded in Web Dashboard and have been configured to
appear in the navigation tree.

The navigation tree also allows viewing the slideshows if they have been
configured.

The following picture shows the navigation page.

![image2](https://docscdn.itrsgroup.com/geneos/images/webserver-images/image2_geneos_web_server_user_manual.png)

### Dashboard configuration

This user interface is required to add/remove dashboards in Web Dashboard,
configure the navigation tree, and define slideshows and connections.

The following picture shows the configuration pages.

![image3](https://docscdn.itrsgroup.com/geneos/images/webserver-images/image3_geneos_web_server_user_manual.png)

## System requirements

Web Dashboard is a 64-bit application on Linux, with the following system
requirements:

Web Dashboard requires `libnsl.so.1` library in order to run the application properly on Red Hat Enterprise Linux (RHEL) 8.


**Note**

  Other OS distributions may work with the correct libraries installed but are not officially supported.
For x86-64 distributions, the required 32-bit libraries must be available on the system. Also, other web browsers may work but are not officially supported.



**Warning**

Beginning Geneos version 5.0.0, this component is only compatible with other Geneos components that are version 3.6.0 or higher. For more information, see the [Geneos Compatibility Matrix](https://docs.itrsgroup.com/docs/all/geneos/7x-release/compat-matrix/).


When Security-Enhanced Linux (SELinux) is running in `Enforcing mode`, it may deny certain functions of Geneos depending on the implemented configurations and policies.
To see which functions SELinux denies, check the audit log. The log is typically located in `/var/log/audit.log`, where the log type entry is `AVC`. The audit log provides the details of any denied access. For example, denied connection to the TCP port.
If you experience issues related to this mode,  you may opt to disable SELinux, or create policy modules to grant the required access. Please contact your administrator or security team for assistance.
 <div class="table-container">
 <table class="legacy-table" style="width: 100%;margin-left: 0;margin-right: auto;mc-table-style: url('../Resources/TableStyles/ref_2_col_table.css');" class="TableStyle-ref_2_col_table" cellspacing="0">
                         <col class="TableStyle-ref_2_col_table-Column-Column1"/>
                         <col class="TableStyle-ref_2_col_table-Column-Column1"/>
                         <thead>
                             <tr class="TableStyle-ref_2_col_table-Head-Header1">
                                 <th class="TableStyle-ref_2_col_table-HeadE-Column1-Header1">Prerequisite</th>
                                 <th class="TableStyle-ref_2_col_table-HeadD-Column1-Header1">Minimum requirement</th>
                             </tr>
                         </thead>
                         <tbody>
                             <tr class="TableStyle-ref_2_col_table-Body-Body1">
                                 <td class="TableStyle-ref_2_col_table-BodyE-Column1-Body1">CPU</td>
                                 <td class="TableStyle-ref_2_col_table-BodyD-Column1-Body1">Multi-core CPU</td>
                             </tr>
                             <tr class="TableStyle-ref_2_col_table-Body-Body1">
                                 <td class="TableStyle-ref_2_col_table-BodyE-Column1-Body1">RAM</td>
                                 <td class="TableStyle-ref_2_col_table-BodyD-Column1-Body1">4 GB</td>
                             </tr>
                             <tr class="TableStyle-ref_2_col_table-Body-Body1">
                                 <td class="TableStyle-ref_2_col_table-BodyE-Column1-Body1">Network</td>
                                 <td class="TableStyle-ref_2_col_table-BodyD-Column1-Body1">1 network interface card</td>
                             </tr>
                             <tr class="TableStyle-ref_2_col_table-Body-Body1">
                                 <td class="TableStyle-ref_2_col_table-BodyE-Column1-Body1">Disk</td>
                                 <td class="TableStyle-ref_2_col_table-BodyD-Column1-Body1">500 MB available space</td>
                             </tr>
                             <tr class="TableStyle-ref_2_col_table-Body-Body1">
                                 <td class="TableStyle-ref_2_col_table-BodyB-Column1-Body1"> </td>
                                 <td class="TableStyle-ref_2_col_table-BodyA-Column1-Body1"> </td>
                             </tr>
                         </tbody>
                     </table>
                     
 </div>

## Install the Web Dashboard

There are two ways to install the Web Dashboard:

- Using extracted binaries
- Using Helm — refer to [Web Dashboard deployments](https://docs.itrsgroup.com/docs/geneos/7.11.0/administration/orchestrated-environments/installation-using-helm/index.html#web-dashboard-deployments) for more information.

To install the Web Dashboard using the binaries, follow these steps:

1. Download the binaries at [Downloads](https://resources.itrsgroup.com/downloads).
2. Extract the binary to a writable location in the host. This will become the installation directory.
3. Open the Web Dashboard. See [Starting the Web Dashboard](https://docs.itrsgroup.com/docs/geneos/7.11.0/visualization/web-dashboard/index.html#starting-web-dashboard) for different run options.

Take note of the host name or IP address of the server hosting the Web Dashboard and the port number since these are applied in the URL used to access it.
The default port number is `8080`. If required, edit the `GWS_PORT` variable either in `run` or `geneosws` start-up script to change the port number.

### Fontconfig dependency

The Web Dashboard is packaged with the default font in order to run properly on Linux. You must install the `fontconfig` and run the following command:

```
sudo yum install fontconfig
```

Web Dashboard will not work properly without the installed `fontconfig`. If the `fontconfig` package is not installed in the system, Web Dashboard will display this error message in the logs: `[ERROR] The dependency 'fontconfig' does not exist in the system. Please install this before running web-server`.

Beginning Geneos 5.7.x, Web Dashboard uses Open Sans as its default font that is located in `/resources/fonts` where the new font files are stored. If you want to use a different font, take note of the following:

- Only the `.ttf` or `.ttc` file formats are allowed to be used in the Web Dashboard. If a font file is not supported, Web Dashboard will display a warning message.

  - TTC files are a collection of one or more fonts. Only one font from this will be registered.
- Any font files added in this directory will be registered when you run the Web Dashboard and those fonts can be used by the dashboards that are already uploaded in the system. If a font file is registered, Web Dashboard will display this information message in the logs: `2021-03-29 07:57:08 WebAppServer [INFO] Registered font Open Sans`.
- If the `fontconfig` folder is deleted, Web Dashboard will display this warning message in the logs: `[WARN] Fonts directory /home/ec2-user/testfix/resources/resources/fonts/ does not exist. Fonts in this folder will not be registered"`.

If an uploaded dashboard is using fonts that do not exist in the system, Web Dashboard will display a warning message and the default font will replace the non-existing font.

## Upgrading Web Dashboard


**Note**

  The steps below are for Web Dashboard users upgrading from versions 3.0.x. 


1. Make sure that Web Dashboard is not running.
2. Extract the new Web Dashboard binary to a new folder.
3. Copy `config.xml` and the `.adb` files from the old Web Dashboard directory into the new `<web\_dashboard\_install\_dir>/config`
and `<web\_dashboard\_install\_dir>/dashboards/uploaded` directories respectively.
4. Edit `config.xml` and make sure that the paths defined for each dashboard item are pointing correctly to the new Web Dashboard directory.

```
<dashboards>
<dashboard name="SampleDashboard" path="<web_dashboard_install_dir>/dashboards/uploaded/SampleDashboard.adb"/>
</dashboards>
```

5. Start Web Dashboard.

## Starting Web Dashboard

The first time Web Dashboard is started:

- The minimal template file `config.xml.min.tmpl` is automatically renamed to `config.xml` and used as minimal configuration by the server.
- A `Logs` folder is created in the installation directory with the file `WebDashboard.log.{date}`.

## Running start scripts


**Note**

  JRE 17.x 64-bit is required. For binaries packaged without JRE, `JAVA_HOME` environment variable should be set on the machine. 


There are two scripts in the installation directory to start Web Dashboard:

- `run` — starts Web Dashboard in the foreground and produces a standard output as well as a log file.
This is the default mode, and the script can be run in all supported operating systems.

```
./run
```

- `geneosws` — starts Web Dashboard in the background as a service with the output sent to a log file.
This script can only be run in Linux Red Hat or CentOS operating systems.

The following additional configuration must be done in order for the script to work:

1. Copy the `geneosws` script into the system’s `/etc/init.d` directory.
2. Set the appropriate run level. For example, in CentOS, it is:

```
chkconfig --level 345 geneosws on
```

4. Specify the user that will start the service by editing the `USERNAME` variable. This user must have administrative authorization to run the service.
5. Change the base directory by editing the `SCRIPTPATH` variable from “.” to the installation directory. By default, the `geneosws` script assumes that the base directory is the current directory.

The following commands are supported:

```
./geneosws {start|stop|status|try-restart|restart|force-reload|reload}
```

- `start` — launches web server in the background.
- `stop` — kills web server process.
- `status` — checks if web server is running.
- `reload`/`restart`/`force-reload`/`try-restart` — restarts web server process.

### Enabling MAX_THREADS

You can change the maximum threads that Web Dashboard allows by enabling the `MAX_THREADS` parameter through the `run` and `geneosws` scripts. If the Web server experiences connection issues, you can adjust the max thread count and use a load balancer, which is capable of distributing network or application traffic across multiple servers.

By default, this setting is disabled. To enable this setting, include this parameter in the script:

```
MAX_THREADS="-maxThreads 254"
```

Default value: `254`

### Defining the VALID_HOST_HEADER

The `VALID_HOST_HEADER` parameter defines what host header values are accepted by the Web Server. Configuring this parameter ensures that the Web Server validates the host header and processes requests for the correct domain, preventing potential security vulnerabilities.

The value of the `VALID_HOST_HEADER` parameter is in the form of a regex pattern. By default, its value is `.*`, which allows the Web Server to accept any sequence of characters.

To modify this parameter:

1. Open the `run` or the `geneosws` start up script.
2. Uncomment the `VALID_HOST_HEADER` line and define the desired regular expression pattern.

   ```
   -Dvalid.host.header=.*
   ```

### Setting the DEFAULT_ROOT_CONTEXT_PATH

The `DEFAULT_ROOT_CONTEXT_PATH` parameter defines the base URL path at which the Web Dashboard can be accessed. For example, if the root context path is set to `/dashboard`, then the Web Dashboard is accessible at `<protocol>://<hostname>:<port>/dashboard`.

By default, the root context path is `/`.

To modify this parameter:

1. Open the `run` or the `geneosws` start up script.
2. Uncomment the `DEFAULT_ROOT_CONTEXT_PATH` line and specify the desired root context path.

   ```
   DEFAULT_ROOT_CONTEXT_PATH="-Droot.context.path=/dashboard"
   ```


**Note**



- The value of the root context path parameter should start with a `/`.
- If single sign-on (SSO) is enabled, the `webdashboard.url` property in the `sso.properties` file does not need to include the root context path. 


### Log masking

Web Dashboard logging uses Log4j2 and [log masking](https://docs.itrsgroup.com/docs/geneos/7.11.0/administration/log-masking/index.html) can be enabled.

On Linux and Unix systems, the `run` and `no_jre/run` scripts define an optional shell variable `LOG_MASKING`, and pass `$LOG_MASKING` on the `java` command line (after `-Dlog4j2.configurationFile=...`).

To enable masking:

1. Open the `run` or `no_jre/run` script in the [Web Dashboard installation directory](https://docs.itrsgroup.com/docs/geneos/7.11.0/visualization/web-dashboard/index.html#running-start-scripts).
2. Uncomment the line that sets `LOG_MASKING` to `-Dgeneos.logMasking.rules=${SCRIPTPATH}/config/geneos-log-masking/log-masking-rules.yaml`, or update the path to point to your own rules file.

If you start Web Dashboard using the `geneosws` service script instead of `run`, add the same `-Dgeneos.logMasking.rules=...` JVM option to the `java` command in that script, or replicate the `LOG_MASKING` configuration used in `run`.

### Setting the DASHBOARDS_EXTRACT_DIR

The `DASHBOARDS_EXTRACT_DIR` parameter defines a specific folder where the contents of the Active Dashboard files (`.adb`) are extracted for conversion into Web Dashboards. This is enabled by default and is recommended especially if you are running multiple servers on the same machine.

To modify this parameter:

1. Open the `run` or the `geneosws` start up script.
2. Locate the `DASHBOARDS_EXTRACT_DIR` line and specify the desired folder path.

   ```
   DASHBOARDS_EXTRACT_DIR="-Dcom.itrsgroup.dashboard.extract=${SCRIPTPATH}/extract"
   ```


**Caution**

 If this setting is disabled, all `.adb` files will be extracted to the default `.geneos` folder. This may cause newer dashboard files to overwrite existing ones, preventing dashboards from displaying properly. 


### Enabling LOG_USERS_ACCESS

The `LOG_USERS_ACCESS` parameter enables dashboard access tracking by logging user dashboard access at the INFO level. This parameter is disabled by default.

To enable this parameter:

1. Open the `run` or the `geneosws` start up script.
2. Uncomment the `LOG_USERS_ACCESS` line.

   ```
   LOG_USERS_ACCESS="-Dcom.itrsgroup.dashboard.user.logging=true"
   ```

Logs will be generated in this format:

```log
YYYY-MM-DD HH:MM:SS.sss DashboardAccessLogger [INFO] User '<username> (<ip address>)' accessed dashboard '<dashboard name>'
```

The IP address is displayed only when no authentication is configured or when basic authentication is used. Below are some log examples:

- No authentication configured

```log
2025-09-15 14:51:14.478 DashboardAccessLogger [INFO] User 'anonymousUser (192.168.100.78)' accessed dashboard 'INFRA_DASHBOARD'
```

- Using basic authentication

```log
2025-09-15 14:51:14.478 DashboardAccessLogger [INFO] User 'admin (192.168.100.78)' accessed dashboard 'System_Status'
```

- Using SSO authentication

```log
2025-09-15 14:51:14.478 DashboardAccessLogger [INFO] User 'LDN\johndoe' accessed dashboard 'Database Monitoring'
```

When both basic authentication and SSO are enabled, logs will follow the format used for SSO authentication.


**Note**

 This parameter uses Log4j logging. Setting the [log level](https://logging.apache.org/log4j/2.x/manual/customloglevels.html) to WARN or higher will prevent user access logs from being displayed, even when logging is enabled. 


## Total cell count across connected Gateways

Web Server periodically records the total cell count across all connected Gateways its application log as a metric.

The metric represents the total number of table cells and headline cells that Web Server receives from all connected Gateways. It provides a lightweight indicator of the volume of data being processed by Web Server.

Use this metric to:

- Monitor changes in the volume of data delivered from connected Gateways.
- Correlate increases in data volume with changes in Web Server performance or responsiveness.
- Compare historical values when investigating performance-related issues.

The metric is written to the log every 10 minutes. The log message uses this format:

```log
YYYY-MM-DD HH:MM:SS.sss DataViewCellCounter [INFO] Total Cell Count Across All Connected Gateways=<total> (table_cells=<table_cells> + headlines=<headlines>)
```

For example:

```log
2026-05-21 17:32:40.640 DataViewCellCounter [INFO] Total Cell Count Across All Connected Gateways=21794 (table_cells=20724 + headlines=1070)
```

The reported value is informational only and does not affect the operation of Web Server.


**Note**


The same total cell count across all connected Gateways metric is recorded in the [Active Console logs](https://docs.itrsgroup.com/docs/geneos/7.11.0/visualization/active-console/configuration/startup-settings/index.html#total-cell-count-across-connected-gateways).



## Enabling authentication


**Note**

  Always clear browser cache and cookies when switching between authenticated and unauthenticated versions of Web Dashboard. 



**Note**

  Single Sign On (SSO) must be disabled when enabling Authentication. 


- Go to `<web\_dashboard\_install\_dir>/config` directory.
- Edit `security.xml`. Comment out:

```
<intercept-url pattern="/**" access="permitAll" />
```

In XML documents, follow this syntax to comment out: "<!--Comment String Here-->"  and uncomment the following:

```
<intercept-url pattern="/**" access="isAuthenticated()" />
```

```
<authentication-provider>
    <password-encoder hash="bcrypt"/>
    <user-service properties="file:./config/users.properties"/>
</authentication-provider>
```

- Edit `users.properties`. Follow the syntax indicated in the file to add users.
To generate an encrypted password, run the following command at the `<web\_dashboard\_install\_dir>` directory:

```
java -cp 'jars/*:jars/geneos-bcrypt-hasher-1.0.jar' com.itrsgroup.login.auth.BCryptPasswordHasher <password to encrypt>
```

## Enabling SSO

If Single-Sign-On (SSO) is enabled, the SSO Agent verifies your user permission. After verifying your user credentials, the Web Dashboard checks your user's group to grant the appropriate access.

For more information, see [Enable SSO with Web Dashboard](/visualization/../security/access-controls/sso/sso-agent-ug/#enable-sso-with-web-dashboard).


**Note**

  Authentication must be disabled when enabling SSO. 


### Connect to SSO Agent through Kerberos

 Web Dashboard supports Basic and Kerberos authentication. When you are connecting to SSO Agent through Kerberos, Web Dashboard looks for the `krb5.conf` in `/etc/` directory by default.
 
 If you want to modify its location:
 
 1. Open `run/geneosws` start-up scripts.
 2. Edit the config under `SSO_PROPERTIES`:
 
 ```
 -Djava.security.krb5.conf=/etc/krb5.conf
 ```


### Connect to SSO Agent through basic authentication

When you log in for the first time, your browser will automatically save your credentials in the cache. Clear the browser cache to change the current user.

### SSO configuration properties

To edit the SSO configuration properties:

1. Go to your `<web_dashboard_install_dir>/config` directory.
2. Edit `sso.properties`.

These are the SSO properties that you may need to configure when connecting to SSO Agent:

### SSO public keys

The SSO provider's public key is used by Web Dashboard as part of the SSO authentication process. If using SSO Agent, copy the Agent's pub.key file to a directory accessible to Web Dashboard. If using Gateway Hub or ITRS Analytics, copy the public key from the administrator UI to a file accessible to Web Dashboard.

If the file containing the public key is not in the working directory of Web Dashboard, the sso.pubkey property must include the file path as well as its name.

 
 The key must be in PEM format, with lines no longer than 76 characters. For example:
 
 ```
 -----BEGIN PUBLIC KEY----
 MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA9KTR6IFL44UTGCs5Hi2xfISO7eMBaqf7
 5BQym/E8woQE2NOocyAvshGLAaE9oHP4vqRnc+hHyDs7DDF2u0VFcYp6r4uISe+HUka+wKjfSZZF
 OB5lFYzZfb7hRGvc5kMZEvg7QYBej/c37uSB9r1/T4yao3SAdHGEwlthTKf0V+TtDGvlWPKGzVdC
 YowmNC0Z1RxsT/X3jhNvnkHRQYXWhwGiEKU1+U7Bgtlpzd/3UFQnZsOIMFME9R53b+Wjron04B6O
 BB0jqmWFTYaoXWh2oZBK5XZ1e165HaNXAYkeC4RcHdu8M0urk8JkkRby9M8UXxCATbVrtYGosoI9
 JH+t1wIDAQAB
 -----END PUBLIC KEY-----
 ```



**Note**

 In ITRS Analytics 2.17.x, the default realm name was `obcerv`. In 2.18.0, it is `itrs-analytics`. Obtain the public key from `auth/realms/itrs-analytics` when connecting to ITRS Analytics 2.18.0 or later. For more information, see [Review SSO realm references](https://docs.itrsgroup.com/docs/itrs-analytics/platform/2.18.0/upgrade/upgrading-to-version-2-18-0/index.html#review-sso-realm-references). 


 The public key used to sign ITRS Analytics JWTs can be obtained from the `auth/realms/itrs-analytics` endpoint provided by ITRS Analytics. This produces a JSON file that looks like:
 
 ```
 {"realm":"itrs-analytics","public_key":"MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs+MoswQTYc+J0MhLhzprJTb8U0MAd4f1X+txv9j653tsIGTsyV0ufJpsvTMk+kt/7XI1RNGuJ9IqrYenRnN1h65C6xb1ehJ0f8BCYLL+lv084RR5T7bcxAIKOEr6TUQmKSIE2uqi0EZg0MyGhAkEcDjrf7YqPPTiMCffOx+T9/yPo/wLcSluP2VdESkU0R91D9d2KGv0LmzWFLHRN9Ag70EWokM4Cw+/zi32ZqQEGlTA1G7YyEM+FlbrYPSYiBe1toCJ3fKJE1xvrp7+kj4imxWd5l0ljs/233DCcBVEM46UJ5cupTptZfTGnP/9NbrYySMpT6wga5eK2y28AdOFJQIDAQAB","token-service":"https://cconfig-playground.itrslab.com/auth/realms/itrs-analytics/protocol/openid-connect","account-service":"https://cconfig-playground.itrslab.com/auth/realms/itrs-analytics/account","tokens-not-before":0}
 ```
 
 The key needs to be line-wrapped with the added PEM Public key header and footer using the following bash script:
 
 ```
 #!/bin/bash
 itrs_analytics_url=$1
 echo "-----BEGIN PUBLIC KEY-----"
 curl -s -k ${itrs_analytics_url}/auth/realms/itrs-analytics | jq -r .public_key | fold -w 40 -
 echo "-----END PUBLIC KEY-----"
 ```


### Access for user groups

To allow global access for `config.user.groups` and `dashboard.user.groups`, use a wildcard (**\***) as follows:

- `dashboard.user.groups=*`
- `config.user.groups=GENEOS-ADMIN*`

A pattern is used to check if the user group roles are authorised. For example, if **GENEOS\_ADMIN\_USER**:

<div class="table-container">
<table class="legacy-table" style="width: 100%;margin-left: 0;margin-right: auto;mc-table-style: url('../Resources/TableStyles/ref_2_col_table.css');" class="TableStyle-ref_2_col_table" cellspacing="0">
                            <col class="TableStyle-ref_2_col_table-Column-Column1"/>
                            <col class="TableStyle-ref_2_col_table-Column-Column1"/>
                            <thead>
                                <tr class="TableStyle-ref_2_col_table-Head-Header1">
                                    <th class="TableStyle-ref_2_col_table-HeadE-Column1-Header1">Pattern</th>
                                    <th class="TableStyle-ref_2_col_table-HeadD-Column1-Header1">Description</th>
                                </tr>
                            </thead>
                            <tbody>
                                <tr class="TableStyle-ref_2_col_table-Body-Body1">
                                    <td class="TableStyle-ref_2_col_table-BodyE-Column1-Body1">Starts with GENEOS*, GEN*, G*</td>
                                    <td class="TableStyle-ref_2_col_table-BodyD-Column1-Body1">Groups are authorised because they start with the correct pattern.</td>
                                </tr>
                                <tr class="TableStyle-ref_2_col_table-Body-Body1">
                                    <td class="TableStyle-ref_2_col_table-BodyE-Column1-Body1">Starts with Geneos*</td>
                                    <td class="TableStyle-ref_2_col_table-BodyD-Column1-Body1">Group is not authorised because the validation is case sensitive. </td>
                                </tr>
                                <tr class="TableStyle-ref_2_col_table-Body-Body1">
                                    <td class="TableStyle-ref_2_col_table-BodyE-Column1-Body1">Starts with ADMIN*</td>
                                    <td class="TableStyle-ref_2_col_table-BodyD-Column1-Body1">Group is not authorised because the user group does not start with ADMIN.</td>
                                </tr>
                                <tr class="TableStyle-ref_2_col_table-Body-Body1">
                                    <td class="TableStyle-ref_2_col_table-BodyE-Column1-Body1">Ends with *USER, *SER, *R</td>
                                    <td class="TableStyle-ref_2_col_table-BodyD-Column1-Body1">Groups are authorised because they start with the correct pattern.</td>
                                </tr>
                                <tr class="TableStyle-ref_2_col_table-Body-Body1">
                                    <td class="TableStyle-ref_2_col_table-BodyE-Column1-Body1">Ends with *User</td>
                                    <td class="TableStyle-ref_2_col_table-BodyD-Column1-Body1">Group is not authorised because the validation is case sensitive.</td>
                                </tr>
                                <tr class="TableStyle-ref_2_col_table-Body-Body1">
                                    <td class="TableStyle-ref_2_col_table-BodyE-Column1-Body1">In between *ADMIN*, *GENEOS*, *_USER*</td>
                                    <td class="TableStyle-ref_2_col_table-BodyD-Column1-Body1">Groups are authorised because this will find the pattern within the role whether it is in the beginning or the end.</td>
                                </tr>
                                <tr class="TableStyle-ref_2_col_table-Body-Body1">
                                    <td class="TableStyle-ref_2_col_table-BodyB-Column1-Body1"> </td>
                                    <td class="TableStyle-ref_2_col_table-BodyA-Column1-Body1"> </td>
                                </tr>
                            </tbody>
                        </table>
                    
</div>

### Access for Gateway Hub roles

Beginning Geneos 5.7.x, the `config.user.groups` and `dashboard.user.groups` properties in the Web Dashboard can accept Gateway Hub roles for configuration and dashboard page access.

For more information about Gateway Hub roles, see [Roles in the Web Console](https://docs.itrsgroup.com/docs/geneos-gateway-hub/current/webconsole/roles/).

### Access for ITRS Analytics roles

Beginning Geneos 6.3.x, the `config.user.groups` and `dashboard.user.groups` properties in the Web Dashboard can accept ITRS Analytics roles for configuration and dashboard page access.

By default, ITRS Analytics is shipped with just two roles, **admin** and **user**. Additional roles can be configured using the integrated Keycloak UI.

| Property | Description |
|----------|-------------|
| `sso.agent.url` | Base URL for the SSO provider. - If the SSO provider is the SSO Agent or Gateway Hub, specify its protocol, hostname, and port. For example: `https://192.168.0.0:8080`
- If the SSO provider is ITRS Analytics, specify the whole URL up to the ITRS Analytics realm. For example: `https://obcerv.example.com/auth/realms/itrs-analytics`
**Important**

 In ITRS Analytics 2.17.x, the default realm name was `obcerv`. In 2.18.0, it is `itrs-analytics`. When the SSO provider is ITRS Analytics 2.18.0 or later, set `sso.agent.url` using `auth/realms/itrs-analytics`. For more information, see [Review SSO realm references](https://docs.itrsgroup.com/docs/itrs-analytics/platform/2.18.0/upgrade/upgrading-to-version-2-18-0/index.html#review-sso-realm-references). 
 |
| `webdashboard.url` | Web Dashboard URL and port. |
| `dashboard.user.groups` | Comma-separated values that define the user groups or roles that are allowed to access the Dashboards and Slideshows sections of Web Dashboard. |
| `config.user.groups` | Comma-separated values that define the user groups or roles that are allowed to access the Config section of Web Dashboard. |
| `sso.enabled` | Determines whether SSO is enabled (`true`) or disabled (`false`). |
| `sso.pubkey` | File containing the public key of the SSO provider. |

## Enabling SSL

Here are the steps to enable an SSL and scripts that you can use in the Web Dashboard.

### Configure SSL certificates

A script called `ssl_util.sh` exists in the installation directory which is used to generate or import a certificate.

There are two ways to configure an SSL certificate on the server:

- [Generate a new self signed certificate](https://docs.itrsgroup.com/docs/geneos/7.11.0/visualization/web-dashboard/index.html#generate-a-new-self-signed-certificate)
- [Import an existing certificate for your domain name](https://docs.itrsgroup.com/docs/geneos/7.11.0/visualization/web-dashboard/index.html#import-an-existing-certificate-for-your-domain-name)

Before you generate a self-signed certificate, you must update the following fields in the `ssl_util.sh` to ensure Web Dashboard can connect correctly to different components that also have SSL enabled such as SSO Agent:

#### Generate a new self-signed certificate

To generate a new self-signed certificate:

1. Run `./ssl_util.sh` from `<web_dashboard_install_dir>` directory.
2. Specify the host name or IP address of the box.
This generates the certificate and add it to a keystore:

```
cd <web_dashboard_install_dir>./ssl_util.sh add <hostname_or_ip>
```


**Success**

  A new certificate is now generated. 


#### Import an existing certificate for your domain name

If the server running Web Dashboard has an existing SSL certificate issued by a Certificate Authority (CA),
you need to import that certificate and its private key into the server’s keystore.

1. Convert your existing certificate and private key into `PKCS12` format. Your certificate file needs to be called `<hostname_or_ip>.cer`.

```
cd <web_dashboard_install_dir>./ssl_util.sh convert <hostname_or_ip> <private_key_file>
```

3. If your CA provides multiple intermediary certificates, you need to combine them into a single file using the command:

```
cat my_cert.cer intermediate1.cer intermediate2.cer > hostname_or_ip.cer
```

5. Import the newly converted certificate using the command and specify the Export Password.

```
./ssl_util.sh import <hostname_or_ip> <export_password>
```


**Success**

  The certificate is now imported. 


#### Edit config files

Edit <web\_dashboard\_install\_dir>/config/security.properties. If changes were made to the value of `KEYSTORE` and `PASSWD`
in `ssl\_util.sh`, update the values of the properties below:

```
keyStore=config/keystore.db
trustStore=config/keystore.db
keyStorePassword=ab987c
trustStorePassword=ab987c
port=7443
```

The `port` property sets the port for secure connections. The default value is `7443`. This value must differ from the insecure port that `GWS_PORT` sets in the `run` or `geneosws` script.

<div class="table-container">
<table class="legacy-table" style="width: 100%; mc-table-style: url('../Resources/TableStyles/ref_2_col_table.css'); margin-left: 0; margin-right: auto;" class="TableStyle-ref_2_col_table" cellspacing="0">
                            <col class="TableStyle-ref_2_col_table-Column-Column1"/>
                            <col class="TableStyle-ref_2_col_table-Column-Column1"/>
                            <thead>
                                <tr class="TableStyle-ref_2_col_table-Head-Header1">
                                    <th class="TableStyle-ref_2_col_table-HeadE-Column1-Header1">Field</th>
                                    <th class="TableStyle-ref_2_col_table-HeadD-Column1-Header1">Description</th>
                                </tr>
                            </thead>
                            <tbody>
                                <tr class="TableStyle-ref_2_col_table-Body-Body1">
                                    <td class="TableStyle-ref_2_col_table-BodyE-Column1-Body1"><code class="docutils literal">&lt;web_dashboard_install_dir&gt;</code>
                                    </td>
                                    <td class="TableStyle-ref_2_col_table-BodyD-Column1-Body1">
                                        <p>Web Dashboard installation directory.</p>
                                        <p>For example:</p>
                                        <div><pre xml:space="preserve" class="code">WEB_DASHBOARD_INSTALL_DIR=&lt;web_dashboard_install_dir&gt;</pre>
                                        </div>
                                    </td>
                                </tr>
                                <tr class="TableStyle-ref_2_col_table-Body-Body1">
                                    <td class="TableStyle-ref_2_col_table-BodyE-Column1-Body1"><code>DNAME</code>
                                    </td>
                                    <td class="TableStyle-ref_2_col_table-BodyD-Column1-Body1">
                                        <p>Certificate information variables.</p>
                                        <p>Distinguished Name (<code>DN</code>) contains the following:</p>
                                        <ul>
                                            <li>Common Name (<code>CN</code>) or the server identity</li>
                                            <li>Organisational Unit (<code>OU</code>)</li>
                                            <li>Organisation (<code>O</code>)</li>
                                            <li>Locality (<code>L</code>)</li>
                                            <li>State (<code>S</code>)</li>
                                            <li>Country (<code>C</code>)</li>
                                        </ul>
                                        <p>For example:</p>
                                        <div><pre xml:space="preserve" class="code">CN=localhost.itrs.test, OU=Geneos, O=ITRS,
L=Mountain View, ST=California, C=US</pre>
                                        </div>
                                        <p>The value of <code>CN</code> flag should match the hostname, IP address, or DNS of the machine where the Web Dashboard is running on.</p>
                                    </td>
                                </tr>
                                <tr class="TableStyle-ref_2_col_table-Body-Body1">
                                    <td class="TableStyle-ref_2_col_table-BodyE-Column1-Body1"><code>PASSWD</code>
                                    </td>
                                    <td class="TableStyle-ref_2_col_table-BodyD-Column1-Body1">
                                        <p>Password for your private key.</p>
                                        <p>Set the <code>PASSWD</code> as the same password used in the <code>keystore.db</code>.</p>
                                        <p>If you change the password, you should also update it in the <code>$WEBDASHBOARD_CONFIG_DIR/security.properties</code> file.</p>
                                    </td>
                                </tr>
                                <tr class="TableStyle-ref_2_col_table-Body-Body1">
                                    <td class="TableStyle-ref_2_col_table-BodyE-Column1-Body1"><code>keystore_type</code>
                                    </td>
                                    <td class="TableStyle-ref_2_col_table-BodyD-Column1-Body1">
                                        <p>By default, Web Dashboard sets the value of <code>keystore_type</code> to <code>JCEKS</code>.</p>
                                        <p>If you require Web Dashboard to have keys in <code>PKCS12</code>, you must convert the keystore file in the config folder. For more information, refer to  <a href="https://docs.itrsgroup.com/docs/geneos/7.11.0/visualization/web-dashboard/index.html#Adding_a_Certificate_and_Private_Key_to_the_keystore">Adding a Certificate and Private Key to the keystore</a>.</p>
                                    </td>
                                </tr>
                                <tr class="TableStyle-ref_2_col_table-Body-Body1">
                                    <td class="TableStyle-ref_2_col_table-BodyB-Column1-Body1"> </td>
                                    <td class="TableStyle-ref_2_col_table-BodyA-Column1-Body1"> </td>
                                </tr>
                            </tbody>
                        </table>
                        
</div>

#### Edit scripts

These are the scripts that you can modify when configuring the SSL certificates.

 Edit the `run` or `geneosws` script depending on the start-up mode to use. Uncomment this line:

```
#ENABLE_SSL="-ssl true"
```

Restart your Web Dashboard server and verify that the certificate is being used by opening the following page:
`https://hostname\_or\_ip:port/`. If you generated a self-signed SSL certificate, the browser warns you
that the certificate is not trusted. Add an exclusion rule (or continue).

## Configuring Web Dashboard

Type the host and the port of Web Dashboard in the web browser to access the configuration page in the following format:

```
http://<web-dashboard-host>:<web-dashboard-port>/#Config:
```

Example:

```
http://192.168.10.155:8080/#Config:
```

### Adding Active Dashboards

Dashboards need to be created in Active Console and exported as `.adb` files before they can be added to Web Dashboard.

The deployment of dashboards into Web Dashboard takes place in three steps:

![image5](https://docscdn.itrsgroup.com/geneos/images/webserver-images/image5_geneos_web_server_user_manual.jpg)

#### Connecting to Gateways

1. Click on the “Add Connection” button to add a new Gateway connection.
2. Edit the Gateway connection fields. If connecting to a secure Gateway, tick the “Secure” check box.
3. Click on the “Save” button for Web Dashboard to establish the new Gateway connection and add it to `config.xml`.

![image30](https://docscdn.itrsgroup.com/geneos/images/webserver-images/image30_geneos_web_server_user_manual.jpg)

##### Encrypting and decrypting Gateway connection passwords


**Note**

  Older versions of theWeb Dashboard binary expose a secret key that can be used to decrypt the password of the Gateway connection. This will be retained for backward compatibility since an existing Gateway configuration cannot be decrypted without it. 


Upon the start of the Web Dashboard, a new randomized secret key will be generated in the config folder called `secretKey`. This new key will be used to decrypt and encrypt new passwords. However,after saving the Web Dashboard setup, the Gateway connection password will only be encrypted with the new key.

##### Gateway connections in config.xml

Each connection is defined by a `<gatewayConnection>` element with a *name* attribute. The connection has the following properties:

Example:

```
<geneosWebServer>
        <gatewayConnections>
                <gatewayConnection name="Gateway1">
                        <enabled>true</enabled>
                        <primary>
                                <host>gateway1A-host</host>
                                <port>30001</port>
                        </primary>
                        <secondary>
                                <host>gateway1B-host</host>
                                <port>30002</port>
                        </secondary>
                        <description>Gateway One</description>
                        <user>user1</user>
                        <password type="encrypted">AABBZZYYZZ</password>
                </gatewayConnection>
                <gatewayConnection name="Gateway3">
                        <enabled>true</enabled>
                        <secure>true</secure>
                        <primary>
                                <host>localhost</host>
                                <port>80003</port>
                        </primary>
                        <secondary>
                                <host/>
                                <port>0</port>
                        </secondary>
                        <description>Gateway Three</description>
                        <user>admin</user>
                        <password type="plain">MyPlainPassword</password>
    </gatewayConnection>
                <gatewayConnectionname="Gateway2">
                    <enabled>true</enabled>
                    <secure>true</secure>
                <primary>
                <host>gateway2A-host</host>
                        <port>80004</port>
                </primary>
                <secondary>
                        <host/>
                        <port>0</port>
                </secondary><description>Gateway Two</description>
                <sslEnabled>admin</sslEnabled>
                <user>admin</user>
                <passwordtype="plain"></password>
            </gatewayConnection>
        </gatewayConnections>
</geneosWebServer>
```

<div class="table-container">
<table class="legacy-table"   class="TableStyle-ref_3_col_table" style="margin-left: 0;margin-right: auto;width: 100%;mc-table-style: url('../Resources/TableStyles/ref_3_col_table.css');" cellspacing="0">
                                <col style="width: 33%;" class="TableStyle-ref_3_col_table-Column-Column1"/>
                                <col style="width: 33%;" class="TableStyle-ref_3_col_table-Column-Column1"/>
                                <col style="width: 33%;" class="TableStyle-ref_3_col_table-Column-Column1"/>
                                <thead>
                                    <tr class="TableStyle-ref_3_col_table-Head-Header1">
                                        <th class="TableStyle-ref_3_col_table-HeadE-Column1-Header1"><strong>Property</strong>
                                        </th>
                                        <th class="TableStyle-ref_3_col_table-HeadE-Column1-Header1"><strong>Mandatory</strong>
                                        </th>
                                        <th class="TableStyle-ref_3_col_table-HeadD-Column1-Header1"><strong>Description</strong>
                                        </th>
                                    </tr>
                                </thead>
                                <tbody valign="top">
                                    <tr class="TableStyle-ref_3_col_table-Body-Body1">
                                        <td class="TableStyle-ref_3_col_table-BodyE-Column1-Body1">&lt;enabled&gt;</td>
                                        <td class="TableStyle-ref_3_col_table-BodyE-Column1-Body1">Yes</td>
                                        <td class="TableStyle-ref_3_col_table-BodyD-Column1-Body1">Determines whether a connection is enabled or disabled.</td>
                                    </tr>
                                    <tr class="TableStyle-ref_3_col_table-Body-Body1">
                                        <td class="TableStyle-ref_3_col_table-BodyE-Column1-Body1">&lt;primary&gt;</td>
                                        <td class="TableStyle-ref_3_col_table-BodyE-Column1-Body1">Yes</td>
                                        <td class="TableStyle-ref_3_col_table-BodyD-Column1-Body1">Contains the primary gateway&#8217;s host and port number defined in &lt;host&gt; and &lt;port&gt;.</td>
                                    </tr>
                                    <tr class="TableStyle-ref_3_col_table-Body-Body1">
                                        <td class="TableStyle-ref_3_col_table-BodyE-Column1-Body1">&lt;secondary&gt;</td>
                                        <td class="TableStyle-ref_3_col_table-BodyE-Column1-Body1">No</td>
                                        <td class="TableStyle-ref_3_col_table-BodyD-Column1-Body1">Contains the secondary gateway&#8217;s host and port number defined in &lt;host&gt; and &lt;port&gt;.</td>
                                    </tr>
                                    <tr class="TableStyle-ref_3_col_table-Body-Body1">
                                        <td class="TableStyle-ref_3_col_table-BodyE-Column1-Body1">&lt;secure&gt;</td>
                                        <td class="TableStyle-ref_3_col_table-BodyE-Column1-Body1">No</td>
                                        <td class="TableStyle-ref_3_col_table-BodyD-Column1-Body1">Determines whether a connection is secure or insecure.</td>
                                    </tr>
                                    <tr class="TableStyle-ref_3_col_table-Body-Body1">
                                        <td class="TableStyle-ref_3_col_table-BodyE-Column1-Body1">&lt;description&gt;</td>
                                        <td class="TableStyle-ref_3_col_table-BodyE-Column1-Body1">No</td>
                                        <td class="TableStyle-ref_3_col_table-BodyD-Column1-Body1">The  description of the Gateway.</td>
                                    </tr>
                                    <tr class="TableStyle-ref_3_col_table-Body-Body1">
                                        <td class="TableStyle-ref_3_col_table-BodyE-Column1-Body1">&lt;sslEnabled&gt;</td>
                                        <td class="TableStyle-ref_3_col_table-BodyE-Column1-Body1">No</td>
                                        <td class="TableStyle-ref_3_col_table-BodyD-Column1-Body1">Determines whether a connection will use SSL connection  or normal authentication (false). When this is	enabled, the user property becomes mandatory and the password is no longer used.</td>
                                    </tr>
                                    <tr class="TableStyle-ref_3_col_table-Body-Body1">
                                        <td class="TableStyle-ref_3_col_table-BodyE-Column1-Body1">&lt;user&gt;</td>
                                        <td class="TableStyle-ref_3_col_table-BodyE-Column1-Body1">No</td>
                                        <td class="TableStyle-ref_3_col_table-BodyD-Column1-Body1">Username to access the Gateway.</td>
                                    </tr>
                                    <tr class="TableStyle-ref_3_col_table-Body-Body1">
                                        <td class="TableStyle-ref_3_col_table-BodyE-Column1-Body1">&lt;password&gt;</td>
                                        <td class="TableStyle-ref_3_col_table-BodyE-Column1-Body1">No</td>
                                        <td class="TableStyle-ref_3_col_table-BodyD-Column1-Body1">
                                            <p class="first">Password to access the Gateway.</p>
                                            <p class="last">The password has an attribute called <em>type</em> which could have the values &#8220;encrypted&#8221; or &#8220;plain&#8221;. This attribute is used to determine if the password is encrypted or not. By default, the type is &#8220;encrypted&#8221; if the Gateway connection has been entered through the configuration interface.</p>
                                        </td>
                                    </tr>
                                    <tr class="TableStyle-ref_3_col_table-Body-Body1">
                                        <td class="TableStyle-ref_3_col_table-BodyB-Column1-Body1"> </td>
                                        <td class="TableStyle-ref_3_col_table-BodyB-Column1-Body1"> </td>
                                        <td class="TableStyle-ref_3_col_table-BodyA-Column1-Body1"> </td>
                                    </tr>
                                </tbody>
                            </table>
                            
</div>

### SSL Certificate Authentication

In addition to password authentication, a secure connection to a Gateway can be
 established using an SSL Certificate. This authentication method can be enabled
 by ticking the SSL column of a Gateway in the connections configuration page, or by
 setting the Gateway's `sslEnabled` property to `true`. An SSL certificate or key pair needs to be
 added to the keystore and aliased 'geneosAuthentication' before the Web Server
 is started.

#### Generating an SSL Certificate and Private Key pair

To generate a public certificate and private key for Web Dashboard, see the
 [examples in Secure Communications](https://docs.itrsgroup.com/docs/geneos/7.11.0/security/secure-communications/ssl_ug/index.html#examples). The process is the same as when generating
 a certificate and private key for the Gateway or Netprobe. The certificate for
 Web Dashboard should be named `geneosAuthentication.cer`and this should be generated by
 the same Certificate Authority as the certificate issued for every Gateway Web Dashboard will connect to.

#### Connection between Web Dashboard and Gateway with an SSL enabled authentication

 You can configure the Web Dashboard so that it can connect to a Gateway with an SSL enabled authentication. If the Gateway is using an SSL authentication, then it may be using a certificate in `PKCS12` format.

Before you generate your keystore, follow these steps:

1. Edit the value of the `KEYSTORE_TYPE` variable in the `ssl_util.sh` to `PKCS12` instead of the default `JCEKS`. The `keystore.db` is generated after this.
2. Edit the `keyStoreType` and `trustStoreType` variable in `config/security.properties` to `PKCS12`.
3. You can now import the certificate to the keystore by using the sample command:

```
./ssl_util.sh import geneosAuthentication <password>
```

#### Adding a Certificate and Private Key to the keystore

1. Edit `<web_dashboard_install_dir>/ssl_utl.sh` and change the value of
 `KEYSTORE` to point to the desired keystore file. The keystore password can
 be changed by modifying the value of `PASSWD`.

```
KEYSTORE=${WEB_DASHBOARD_CONFIG_DIR}/keystore.db
```

3. Convert your existing certificate and private key into `PKCS12` format. The
 certificate needs to be called `geneosAuthentication.cer`.

```
cd <web_dashboard_install_dir>
/ssl_util.sh convert geneosAuthentication <private_key_file>

```

5. The converted certificate needs to be imported to the keystore using the
 password specified when the certificate was converted.

```
./ssl_util.sh import geneosAuthentication <password>
```

7. If `KEYSTORE` or `PASSWD` have been changed in:

```
<web_dashboard_install_dir>/ssl_utl.sh
```

9. Then edit:

```
<web_dashboard_install_dir>/config/security.properties
```

11. Update the values of the properties below accordingly:

```
keyStore=config/keystore.db
trustStore=config/keystore.db
keyStorePassword=ab987c
trustStorePassword=ab987c
```

#### Uploading .adb files

When naming web dashboards, avoid using the following characters because it can cause an error to the displayed dashboard view:

- Ampersand (`&`).
- Plus (`+`).
- Double quotation marks (`"`).
- URL character codes, such as `'%20'` or `'%5C'`.

To upload a new .adb file into the web dashboard, follow these steps:

1. Select **Dashboards** from the left-hand navigation list in order to deploy a dashboard.
2. Click **Add Dashboard**. This shows the Dashboard dialog.
3. In the dialog, type a name for the dashboard.
4. Click **Browse** to locate the `.adb` file to upload.
5. Click **Upload** to make a copy of the `.adb` file in the dashboard folder.
6. Click **Save** for Web Dashboard to add the new dashboard to `config.xml`.

![image7](https://docscdn.itrsgroup.com/geneos/images/webserver-images/image7_geneos_web_server_user_manual.jpg)

##### Uploaded dashboards in config.xml

Dashboard information is contained in the `<dashboard>` element in `config.xml` with the following attributes:

Example:

```
<geneosWebServer>
        <dashboards>
                <dashboard name="dashboard1" path="/path/to/dashboards/uploaded/dashboard1.adb"/>
                <dashboard name="dashboard2" path="/path/to/dashboards/uploaded/dashboard2.adb"/>
                <dashboard name="dashboard3" path="/path/to/dashboards/uploaded/dashboard3.adb"/>
                </dashboard>
        </dashboards>
</geneosWebServer>
```

When you get an error when loading `.adb` files, see [When loading .adb files into older versions of Web Dashboard](https://docs.itrsgroup.com/docs/geneos/7.11.0/visualization/web-dashboard/index.html#when-loading-adb-files-into-older-versions-of-web-dashboard).

<div class="table-container">
<table class="legacy-table"   style="margin-left: 0;margin-right: auto;width: 100%;mc-table-style: url('../Resources/TableStyles/ref_2_col_table.css');" cellspacing="0">
                                <col style="width: 50%;" class="TableStyle-ref_2_col_table-Column-Column1"/>
                                <col style="width: 50%;" class="TableStyle-ref_2_col_table-Column-Column1"/>
                                <thead>
                                    <tr class="TableStyle-ref_2_col_table-Head-Header1">
                                        <th class="TableStyle-ref_2_col_table-HeadE-Column1-Header1"><strong>Attribute</strong>
                                        </th>
                                        <th class="TableStyle-ref_2_col_table-HeadD-Column1-Header1"><strong>Description</strong>
                                        </th>
                                    </tr>
                                </thead>
                                <tbody valign="top">
                                    <tr class="TableStyle-ref_2_col_table-Body-Body1">
                                        <td class="TableStyle-ref_2_col_table-BodyE-Column1-Body1">name</td>
                                        <td class="TableStyle-ref_2_col_table-BodyD-Column1-Body1">The name given to the dashboard.</td>
                                    </tr>
                                    <tr class="TableStyle-ref_2_col_table-Body-Body1">
                                        <td class="TableStyle-ref_2_col_table-BodyE-Column1-Body1">path</td>
                                        <td class="TableStyle-ref_2_col_table-BodyD-Column1-Body1">
                                            <p class="first">The location where the <code class="docutils literal"><span class="pre">.adb</span></code> file used by the dashboard is contained.</p>
                                            <p class="last">By default, the path is <code class="docutils literal"><span class="pre">installation_directory/dashboards/uploaded</span></code> folder if the dashboard has been uploaded using the configuration interface.
Optionally, a user may allocate another path that contains the <code class="docutils literal"><span class="pre">.adb</span></code> file.</p>
                                        </td>
                                    </tr>
                                    <tr class="TableStyle-ref_2_col_table-Body-Body1">
                                        <td class="TableStyle-ref_2_col_table-BodyB-Column1-Body1"> </td>
                                        <td class="TableStyle-ref_2_col_table-BodyA-Column1-Body1"> </td>
                                    </tr>
                                </tbody>
                            </table>
                            
</div>

#### Changing the default dashboards upload folder

 To change the default dashboard upload folder, edit the run script and the value of the `DASHBOARDS_DIR` parameter to the path of the chosen folder where the dashboard files are uploaded.

```
DASHBOARDS_DIR="-Dcom.itrsgroup.dashboard.dir=<Path to dashboards directory>"
```

For users who have as existing setup and would want to change their dashboard upload folder, the following steps have to be done:

1. Manually update the dashboard paths in the config.xml file to point to the new dashboard upload folder.
2. Copy all the dashboards (.adb) files from the old upload folder to the new one.

Remember to do the 2 steps when setting a new upload folder from an existing setup. Doing only step 2 will cause the dashboards copied to the new upload folder to be deleted.

#### Configuring the navigation tree

Select *Navigation* from the left-hand navigation list in order to organise the tree of dashboards for viewing.

1. Select *Dashboards* which is the top of the tree.
2. Click on the “Add Group” button to add a group. This shows a dialog with a single field to type the name of the new group.

![image8](https://docscdn.itrsgroup.com/geneos/images/webserver-images/image8_geneos_web_server_user_manual.jpg)

3. Select a group and click on the “Add Dashboard” button to add a dashboard in the group. This shows a dialog with a dropdown
menu of dashboards that have been uploaded by Web Dashboard.

![image9](https://docscdn.itrsgroup.com/geneos/images/webserver-images/image9_geneos_web_server_user_manual.jpg)

4. Type in the first characters of a dashboard name filters the dropdown menu to the dashboard names that start with those characters.

![image10](https://docscdn.itrsgroup.com/geneos/images/webserver-images/image10_geneos_web_server_user_manual.jpg)

5. Continue creating new groups which can be populated with selected
dashboards. A hierarchical order can be defined in the navigation
tree by creating groups under groups.

![image11](https://docscdn.itrsgroup.com/geneos/images/webserver-images/image11_geneos_web_server_user_manual.jpg)

6. Click on the “Save” button to save the configuration of the navigation tree in `config.xml`.
7. Click on the *Dashboard* tab to check how the navigation will be seen by users.

![image12](https://docscdn.itrsgroup.com/geneos/images/webserver-images/image12_geneos_web_server_user_manual.jpg)

##### Navigation tree in config.xml

The navigation tree is defined under the `<tree>` element with the following properties:

Example:

```
<geneosWebServer>
        <tree>
                <group name="GROUP 1">
                        <dashboard name="dashboard1A"/>
                        <dashboard name="Dashboard1B"/>
                </group>
                <group name="GROUP 2">
                        <dashboard name="dashboard2A"/>
                        <dashboard name="dashboard2B"/>
                        <dashboard name="dashboard2AC"/>
                        <group name="GROUP 2.1">
                                <dashboard name="dashboard2.1A"/>
                                <dashboard name="dashboard2.1B"/>
                        </group>
                </group>
                <group name="GROUP 3">
                        <dashboard name="dashboard3A"/>
                        <dashboard name="Dashboard3B"/>
                </group>
        </tree>
</geneosWebServer>
```

<div class="table-container">
<table class="legacy-table"   class="TableStyle-ref_4_col_table" style="margin-left: 0;margin-right: auto;width: 100%;mc-table-style: url('../Resources/TableStyles/ref_4_col_table.css');" cellspacing="0">
                                <col style="width: 25%;" class="TableStyle-ref_4_col_table-Column-Column1"/>
                                <col style="width: 25%;" class="TableStyle-ref_4_col_table-Column-Column1"/>
                                <col style="width: 25%;" class="TableStyle-ref_4_col_table-Column-Column1"/>
                                <col style="width: 25%;" class="TableStyle-ref_4_col_table-Column-Column1"/>
                                <thead>
                                    <tr class="TableStyle-ref_4_col_table-Head-Header1">
                                        <th class="TableStyle-ref_4_col_table-HeadE-Column1-Header1"><strong>Property</strong>
                                        </th>
                                        <th class="TableStyle-ref_4_col_table-HeadE-Column1-Header1"><strong>Mandatory?</strong>
                                        </th>
                                        <th class="TableStyle-ref_4_col_table-HeadE-Column1-Header1"><strong>Attribute</strong>
                                        </th>
                                        <th class="TableStyle-ref_4_col_table-HeadD-Column1-Header1"><strong>Description</strong>
                                        </th>
                                    </tr>
                                </thead>
                                <tbody valign="top">
                                    <tr class="TableStyle-ref_4_col_table-Body-Body1">
                                        <td class="TableStyle-ref_4_col_table-BodyE-Column1-Body1">&lt;group&gt;</td>
                                        <td class="TableStyle-ref_4_col_table-BodyE-Column1-Body1">No</td>
                                        <td class="TableStyle-ref_4_col_table-BodyE-Column1-Body1">name</td>
                                        <td class="TableStyle-ref_4_col_table-BodyD-Column1-Body1">A group contains one or more dashboards and could also contain another group.</td>
                                    </tr>
                                    <tr class="TableStyle-ref_4_col_table-Body-Body1">
                                        <td class="TableStyle-ref_4_col_table-BodyB-Column1-Body1">&lt;dashboard&gt;</td>
                                        <td class="TableStyle-ref_4_col_table-BodyB-Column1-Body1">No</td>
                                        <td class="TableStyle-ref_4_col_table-BodyB-Column1-Body1">name</td>
                                        <td class="TableStyle-ref_4_col_table-BodyA-Column1-Body1">A dashboard is part of a group</td>
                                    </tr>
                                </tbody>
                            </table>
                            
</div>

### Defining slideshows

Slideshows can be defined to view a set of dashboards or all dashboards,
one after another at specified time intervals.

Select *Slideshows* from the left-hand navigation list in order to define a slideshow.

Web Dashboard can be configured to set:

- A single slideshow for all dashboards defined in the navigation tree
- Any number of user-defined slideshows to view selected dashboards in the navigation tree

#### Slideshow to display all dashboards in the navigation tree

1. Tick the “Add a slideshow with all dashboards” checkbox. This shows the interval time field.
2. The default interval time is 5 seconds. If a longer interval is required, edit the interval time.
3. Click on the “Save” button to save the slideshow in `config.xml`.

![image13](https://docscdn.itrsgroup.com/geneos/images/webserver-images/image13_geneos_web_server_user_manual.jpg)

4. Go to the *Dashboard* tab to check the “All Dashboards” slideshow.

![image14](https://docscdn.itrsgroup.com/geneos/images/webserver-images/image14_geneos_web_server_user_manual.jpg)

#### Slideshow to display selected dashboards

1. Click on the “Add Slideshow” button to open a new slideshow row.
2. Edit the name of the new slideshow. This shows the *Dashboards* dialog.
3. The default interval time is 5 seconds. If a longer interval is required, edit the interval time.
4. Click on the “Add” button in the *Dashboards* dialog. By default, the name of the first dashboard in the list appears.
Click on the name to show the dropdown list of dashboards.

![image15](https://docscdn.itrsgroup.com/geneos/images/webserver-images/image15_geneos_web_server_user_manual.jpg)

5. Repeat step 4 to add more dashboards to this slideshow.

![image16](https://docscdn.itrsgroup.com/geneos/images/webserver-images/image16_geneos_web_server_user_manual.jpg)

- The “Up” and “Down” buttons in the *Dashboards* dialog can be used to define the sequence of dashboards in the slideshow.

![image17](https://docscdn.itrsgroup.com/geneos/images/webserver-images/image17_geneos_web_server_user_manual.jpg)

- The “Remove” button can be used to delete a dashboard from the slideshow.

![image18](https://docscdn.itrsgroup.com/geneos/images/webserver-images/image18_geneos_web_server_user_manual.jpg)

6. Once the new slideshow configuration is completed, click on the “Save” button to save the new slideshow details `config.xml`.
7. Go to the *Dashboard* tab to check the new slideshow.

![image19](https://docscdn.itrsgroup.com/geneos/images/webserver-images/image19_geneos_web_server_user_manual.jpg)

#### Slideshows in config.xml

A slideshow is stored under the `<slideshows>` element with the following attributes:

And can contain one or more dashboards.

Example:

```
<geneosWebServer>
   <slideshows>
          <slideshow name="All Dashboards" interval="5"/>
          <slideshow name="Slideshow 1" interval="5">
                 <dashboard name="dashboard1"/>
                 <dashboard name="dashboard2"/>
                 <dashboard name="dashboard3"/>
                 <dashboard name="dashboard4"/></slideshows>
</geneosWebServer>
```

<div class="table-container">
<table class="legacy-table"   style="margin-left: 0;margin-right: auto;width: 100%;mc-table-style: url('../Resources/TableStyles/ref_2_col_table.css');" cellspacing="0">
                            <col style="width: 50%;" class="TableStyle-ref_2_col_table-Column-Column1"/>
                            <col style="width: 50%;" class="TableStyle-ref_2_col_table-Column-Column1"/>
                            <thead>
                                <tr class="TableStyle-ref_2_col_table-Head-Header1">
                                    <th class="TableStyle-ref_2_col_table-HeadE-Column1-Header1"><strong>Attribute</strong>
                                    </th>
                                    <th class="TableStyle-ref_2_col_table-HeadD-Column1-Header1"><strong>Description</strong>
                                    </th>
                                </tr>
                            </thead>
                            <tbody valign="top">
                                <tr class="TableStyle-ref_2_col_table-Body-Body1">
                                    <td class="TableStyle-ref_2_col_table-BodyE-Column1-Body1">name</td>
                                    <td class="TableStyle-ref_2_col_table-BodyD-Column1-Body1">The name given to the slideshow</td>
                                </tr>
                                <tr class="TableStyle-ref_2_col_table-Body-Body1">
                                    <td class="TableStyle-ref_2_col_table-BodyB-Column1-Body1">interval</td>
                                    <td class="TableStyle-ref_2_col_table-BodyA-Column1-Body1">
                                        <p class="first">The time in seconds taken by every dashboard in the slideshow to be on display.</p>
                                        <p class="last">Default value: 5 seconds</p>
                                    </td>
                                </tr>
                            </tbody>
                        </table>
                        
</div>

### Settings for the visualisation of dashboards in browsers

`config.xml` contains the `<dashboardDefaults>` element with the
settings applicable to all dashboards configured in Web Dashboard:

```
<geneosWebServer>
        <dashboardDefaults>
                <updateRate>5</updateRate>
                <dashboardRefreshRate>3</dashboardRefreshRate>
                <tileSize>
                        <width>200</width>
                        <height>200</height>
                </tileSize>
        </dashboardDefaults>
</geneosWebServer>
```

It is not recommended to change these settings but, if required, these
changes need to be implemented with care. The following points need to
be taken in consideration:

- `<updateRate>` should be set equal or more than `<dashboardRefreshRate>`
since clients are guaranteed not to receive an update until a dashboard refresh takes place.
- Faster `<dashboardRefreshRate>` makes dashboards appear more
real-time but in turn increases CPU usage on the server and
potentially increases network traffic as updates are being sent more
frequently – this assumes `<updateRate>` is closely aligned to
`<dashboardRefreshRate>`.
- Tiling size allows for more granular control of how updates are
processed on the server and sent over the network. Smaller values
make more efficient use of network as clients download less redundant
data but in turn makes many more requests. Also, CPU usage on the
server may increase due to processing more granular updates and
handling the increased number of requests.


**Note**

  The settings tileCacheSize and tileCacheTime have been removed from `config.xml`. 


<div class="table-container">
<table class="legacy-table"   class="TableStyle-ref_3_col_table" style="margin-left: 0;margin-right: auto;width: 100%;mc-table-style: url('../Resources/TableStyles/ref_3_col_table.css');" cellspacing="0">
                        <col style="width: 33%;" class="TableStyle-ref_3_col_table-Column-Column1"/>
                        <col style="width: 33%;" class="TableStyle-ref_3_col_table-Column-Column1"/>
                        <col style="width: 33%;" class="TableStyle-ref_3_col_table-Column-Column1"/>
                        <thead>
                            <tr class="TableStyle-ref_3_col_table-Head-Header1">
                                <th class="TableStyle-ref_3_col_table-HeadE-Column1-Header1"><strong>Property</strong>
                                </th>
                                <th class="TableStyle-ref_3_col_table-HeadE-Column1-Header1"><strong>Attribute</strong>
                                </th>
                                <th class="TableStyle-ref_3_col_table-HeadD-Column1-Header1"><strong>Description</strong>
                                </th>
                            </tr>
                        </thead>
                        <tbody valign="top">
                            <tr class="TableStyle-ref_3_col_table-Body-Body1">
                                <td class="TableStyle-ref_3_col_table-BodyE-Column1-Body1">&lt;updateRate&gt;</td>
                                <td class="TableStyle-ref_3_col_table-BodyE-Column1-Body1">Not applicable</td>
                                <td class="TableStyle-ref_3_col_table-BodyD-Column1-Body1">
                                    <p class="first">Sets the interval time at which the Web Dashboard client checks for updates to a dashboard. Once set, it determines the last updated timestamp between your internet browser and the Web Dashboard client. </p>
                                    <p class="last">Default value: 5 seconds</p>
                                    <p class="note">Note: Setting this value to <code>0</code> prevents the Web Dashboard from automatically pushing updates to your web browser. To get the updated data, you need to manually refresh your web browser.</p>
                                </td>
                            </tr>
                            <tr class="TableStyle-ref_3_col_table-Body-Body1">
                                <td class="TableStyle-ref_3_col_table-BodyE-Column1-Body1">&lt;dashboardRefreshRate&gt;</td>
                                <td class="TableStyle-ref_3_col_table-BodyE-Column1-Body1">Not applicable</td>
                                <td class="TableStyle-ref_3_col_table-BodyD-Column1-Body1">
                                    <p class="first">Sets the frequency at which the Web Dashboard server processes dashboard updates.</p>
                                    <p class="last">Default value: 3 seconds</p>
                                </td>
                            </tr>
                            <tr class="TableStyle-ref_3_col_table-Body-Body1">
                                <td class="TableStyle-ref_3_col_table-BodyB-Column1-Body1">&lt;tileSize&gt;</td>
                                <td class="TableStyle-ref_3_col_table-BodyB-Column1-Body1">
                                    <div class="first last line-block">
                                        <div class="line">&lt;width&gt;</div>
                                        <div class="line">&lt;height&gt;</div>
                                    </div>
                                </td>
                                <td class="TableStyle-ref_3_col_table-BodyA-Column1-Body1">
                                    <p class="first">Sets the tile size to be used by Web Dashboard when rendering the dashboard image.</p>
                                    <p class="last">Default value for both attributes: 200 pixels</p>
                                </td>
                            </tr>
                        </tbody>
                    </table>
                    
</div>

### Delete dashboards in the Web Dashboard

Removing dashboards from the configuration takes place following these steps in a
precise sequence:

![image20](https://docscdn.itrsgroup.com/geneos/images/webserver-images/image20_geneos_web_server_user_manual.jpg)

#### Remove the dashboard from a user-defined slideshow

1. Go to the *Slideshows* configuration page.
2. Click on the user-defined slideshow. This shows the *Dashboards* dialog.
3. Select the dashboard in the *Dashboards* dialog list and click on the “Remove” button.
4. Click on the “Save” button so that Web Dashboard modifies the `<slideshows>` element in `config.xml`.

#### Remove the dashboard from the navigation tree

1. Go to the *Navigation* configuration page.
2. Locate the dashboard in the navigation tree and right-click on it.
3. Select the “Remove” option.
4. Click on the “Save” button so that Web Dashboard modifies the `<tree>` element in `config.xml` and its internal dashboard handler program.

#### Delete the dashboard from the Web Dashboard

1. Go to the *Dashboards* configuration page.
2. Click on the dashboard so that the “Remove Dashboard” button is activated.
3. Click on the “Remove Dashboard” button.
4. Click on the “Save” button so that Web Dashboard modifies the `<dashboards>` element `config.xml` and deletes the uploaded `.adb` file in the installation directory.

#### Delete the Gateway connection if it only served the deleted dashboard

1. Go to the *Connections* configuration page.
2. Locate the gateway and click on its “X” icon.
3. Click on the “Save” button so that Web Dashboard modifies the `<gatewayConnections>` element in `config.xml`.

### Delete a slideshow in the Web Dashboard

1. Go to the *Slideshows* configuration page.
2. Locate the slideshow and click on its “X” icon.
3. Click on the “Save” button so that Web Dashboard modifies the `<slideshows>` element in `config.xml`.

### Delete unused dashboards

Web Dashboard stores the uploaded and saved `.adb` files in the default dashboard directory, `<web-server-location/dashboards/uploaded>`, which you can change manually. When you have unused dashboards that are not defined in the `config.xml` file, Web Dashboard will automatically delete these unused dashboards by default.

You can disable the automatic file deletion of unused dashboards by setting the value of `deleteUnusedDashboards` property to `false` in the `web-server/config/config.xml` in your local machine.

However, when you disable the auto-deletion of unused dashboard files, this affects the behaviour of saving your changes in the Web Dashboard. For example, if you manually remove a dashboard in the Web Dashboard, and then you save the changes, its corresponding dashboard file will not be removed automatically from the dashboard directory. You must delete the file manually in order to completely remove it.

When upgrading to Web Dashboard 5.10.x, you have an option to immediately disable the auto-deletion of unused dashboards:

1. Open the Web Server binaries on your local machine.
2. Copy the existing `config.xml` file from the previous version, and then paste it to the latest `config` directory.
3. Modify the configuration file, and then add the `deleteUnusedDashboards` property under the `dashboardDefaults`.
4. Set the value to `false`.

```
<dashboardDefaults>
 <deleteUnusedDashboards>false</deleteUnusedDashboards>
</dashboardDefaults>
```

6. Save your changes.

Alternatively, you can create a new configuration file from scratch, and change the value of the `deleteUnusedDashboards` property in the `web-server/config/config.xml` folder.

## Working with the Web Dashboard navigation interface

### Opening the navigation interface

Type the host and the port of Web Dashboard in the web browser to access the navigation interface in the following format:

```
http://<web-dashboard-host>:<web-dashboard-port>/
```

Example:

```
http://192.168.10.155:8080/
```

If authentication is enabled, the page displays a log-in screen. See *Enabling Authentication* in [Starting Web Dashboard](#StartingWeb) section to set up users.


**Note**

  Username is case-insensitive. 


![image28](https://docscdn.itrsgroup.com/geneos/images/webserver-images/image28_geneos_web_server_user_manual.jpg)

If authentication is disabled or after a successful log-in, the page displays the navigation tree with 2 root entries:
*Dashboards* and *Slideshows*. The *Dashboards* group expands to the first level if the navigation tree has been configured.

![image22](https://docscdn.itrsgroup.com/geneos/images/webserver-images/image22_geneos_web_server_user_manual.jpg)

The **Last Updated** timestamp is the update between the user's browser and the Web Dashboard client. For more information, see `<updateRate>` property in the [Settings for the visualisation of dashboards in browsers](https://docs.itrsgroup.com/docs/geneos/7.11.0/visualization/web-dashboard/index.html#settings-for-the-visualisation-of-dashboards-in-browsers).

### Selecting a dashboard to view

There are two ways to bring a dashboard to be displayed:

- Select the dashboard in the **Dashboards** navigation tree. This may require to expand a group in the tree by clicking the add button.
- Access the dashboard directly by adding `#WebDashboard:<dashboardname>` to the basic URL. Example:

```
http://192.168.10.155:8080/#WebDashboard:Dashboard1
```

### Maximizing the view of the dashboard

By default, the dashboard on display occupies a pane beside the
navigation tree and under the top banner.

There are 2 ways to maximize the display of a dashboard:

- Right-click anywhere in the dashboard and select “Toggle Full Screen”.

![image23](https://docscdn.itrsgroup.com/geneos/images/webserver-images/image23_geneos_web_server_user_manual.png)

The same steps can be used to return to the normal view.

- Select the dashboard in the *Dashboards* navigation tree and add `?fullscreen` to the basic URL, e.g.,

```
http://192.168.10.155:8080/?fullscreen#WebDashboard:Dashboard1
```

![image29](https://docscdn.itrsgroup.com/geneos/images/webserver-images/image29_geneos_web_server_user_manual.png)

### Executing data item commands

Right-click on a data item in the dashboard to access data item commands.
This action prompts Web Dashboard to display a menu with
the commands relevant to the data item.

If the selected command requires user input, the page displays a dialog for the user to fill in.

![image24](https://docscdn.itrsgroup.com/geneos/images/webserver-images/image24_geneos_web_server_user_manual.jpg)

If the execution of the command results to an output, the page displays a command output dialog.

![image25](https://docscdn.itrsgroup.com/geneos/images/webserver-images/image25_geneos_web_server_user_manual.jpg)

### Executing hyperlinks

If hyperlinks have been defined in the dashboard, these can be accessed
through the right-click menu of the data item. Select a link to open its page as a new tab in the browser.

![image26](https://docscdn.itrsgroup.com/geneos/images/webserver-images/image26_geneos_web_server_user_manual.jpg)

### Selecting a slideshow to view

There are 3 ways to bring a slideshow to be displayed:

- Click on the slideshow in the *Slideshows* navigation tree.
- Right-click on the slideshow in the *Slideshows* navigation tree and select the “Play” option.
- Access the slideshow directly by adding `#Slideshow:<slideshowname>` to the basic URL, e.g.,

```
http://192.168.10.155:8080/#Slideshow:User Slideshow 1
```

The slideshow displays the sequence of dashboards it was configured
with. The time a dashboard remains in view is the time interval defined
in the configuration of the slideshow.

Every dashboard in the slideshow that is displayed is highlighted in the
*Dashboards* navigation tree. This allows the user to follow the order of
the sequence.

![image27](https://docscdn.itrsgroup.com/geneos/images/webserver-images/image27_geneos_web_server_user_manual.png)

### Stopping a slideshow

There are 2 ways to stop a slideshow:

- Right-click on the slideshow in the navigation tree and select the “Stop” option.
- Select and click on any other dashboard in the navigation tree.

## Troubleshooting

### When loading .adb files into older versions of Web Dashboard

 You cannot load `.adb` files in any versions of the Active Console or Web Dashboard that are older than the version used to create the file. To load the dashboard correctly, use a version of Active Console or Web Dashboard that is the same or a newer version than the version that was used to create the `.adb` file.
 
 The following errors are displayed when loading or importing an `.adb` file created in a newer version of Active Console or Web Dashboard:
 
 - `CRITICAL: Problem reading a dashboard`
 - `WARNING: Problem reading a dashboards modifiers`
 - `An Active dashboard failed to load`
 
 The screenshot below shows these errors:
 
 ![](https://docscdn.itrsgroup.com/geneos/images/webserver-images/dashboard-loading-error.png)


### Increase the heap size to reduce memory issues in dashboards

Memory issues can affect the system performance of your dashboards. Dashboards freezing or not responding can be due to a problem with the allotted memory or large number of XPaths used when loading dashboards. Also, check if `OutOfMemoryException` is present in the logs of your dashboards.

If you suspect memory or performance issues when processing or loading multiple dashboards, follow these recommendations:

1. Use JMX plug-in to check the CPU and memory usage. This allows you to monitor the heap memory size and ensure it has not reached its allocated maximum. For more information, refer to [Enable JMX port for remote monitoring](https://docs.itrsgroup.com/docs/geneos/7.11.0/visualization/web-dashboard/index.html#enable-jmx-port-for-remote-monitoring).
2. Increase the heap memory size. This can be done by manually editing the `geneosws` file, located in the main directory of the web dashboard folder. Inside the `geneosws` file is a variable named `GWS_RUN_CMD`:

```
GWS_RUN_CMD="$JRE_BIN_PATH/java -XX:+UseConcMarkSweepGC -Xmx1024M -server $HEADLESS
```

The option `-Xmx1024M` represents the heap size. By default, this is set to 1GB (1024M). To increase the heap size, change 1024 to a larger number.

### Define update rates or tiling size settings for individual dashboards

By default, the settings in the `<dashboardDefaults>` element are applied
to all dashboards configured in Web Dashboard. However, if these
settings are not adequate for an individual dashboard, specific
settings may be set for that dashboard only.

Edit the dashboard entry in `config.xml` and add the new settings.

Example:

```
<dashboardDefaults>
   <updateRate>5</updateRate>
   <dashboardRefreshRate>3</dashboardRefreshRate>
   <tileSize>
          <width>200</width>
          <height>200</height>
   </tileSize>
</dashboardDefaults>
<dashboards>
        <dashboard name="Dashboard1" path="/root/dashboards/uploaded/db1.adb"/>
        <dashboard name="Dashboard2" path="/root/dashboards/uploaded/db2.adb"/>
        <dashboard name="Dashboard3" path="/root/dashboards/uploaded/db3.adb">
                <!-- DASHBOARD SPECIFIC SETTINGS -->
                <updateRate>10</updateRate>
                <dashboardRefreshRate>5</dashboardRefreshRate>
                <tileSize>
                        <width>400</width>
                        <height>400</height>
                </tileSize>
        </dashboard>
</dashboards>
```

In this example, “Dashboard1” and “Dashboard2” use the default settings, while “Dashboard3” has its own settings.

### Redirect the dashboard loading folder

By default, Web Dashboard uploads the `.adb` files into the
`<web\_dashboard\_install\_dir>/dashboards/uploaded/` folder and then
loads the dashboard from that location.

If a different location is required, edit `config.xml` to change the
path attribute of the dashboard under the `<dashboards>` element.

Example:

```
<dashboards>
  <dashboard name="Dashboard_A2" path="/home/gelo/etc/support_dashboard.adb"/>
  <dashboard name="Dashboard_B1" path="/home/gelo/etc/test.adb"/>
  </dashboard>
</dashboards>
```

### Resolve the high CPU/memory of Web Dashboard

CPU and memory used by Web Dashboard are largely determined by
the contents and updates of the dashboards it has been configured with.

Edit `config.xml` to slow down the update rate for:

- The `<dashboardDefaults>` element - this action implies that the new
settings for `<updateRate>` and `<dashboardRefreshRate>` are applied
to all dashboards.
- Individual dashboards if they have been identified as main
contributors to the high CPU/memory - the settings for `<updateRate>`
and `<dashboardRefreshRate>` need to be added to the specific dashboard
under the `<Dashboards>` element.

In both cases, it is recommended that `<dashboardRefreshRate>` is
equal or faster than `<updateRate>` to ensure timely updates.


**Note**


When investigating high CPU or memory usage, check the [total cell count across connected Gateways](https://docs.itrsgroup.com/docs/geneos/7.11.0/visualization/web-dashboard/index.html#total-cell-count-across-connected-gateways) metric in the logs. A higher cell count indicates that Web Dashboard is processing more monitoring data from connected Gateways, which can correlate with increased CPU and memory consumption.



### Resolve the constant flickering and blank areas of a dashboard on display

This issue may be the result of:

- Having more updates than those processed by Web Dashboard in the time set by the `<dashboardRefreshRate>` parameter.
If this is the case, increase the value of this parameter up to the value of the `<updateRate>` parameter.
- Having increased the tile size, which implies that there is too much data through the network for each tile.
If this is the case, reduce the values of the `<tileSize>` element.

### Prevent memory buildup due to gateway disconnection

By default, Web Dashboard will try to reconnect to a disconnected
gateway over and over again until the connection is restored. This, in turn,
causes rapid memory buildup. To prevent this behavior:

1. Edit the `run` script to add:

```
export ORBFASTER_FAST_CALLBACK=false
```

2. Save the changes and restart Web Dashboard.

### Apply MySQL to Web Dashboard

Web Dashboard supports database queries required for historical
charts. Although no changes are required for Sybase, MSSQL, or Oracle,
the connection to MySQL needs to be manually incorporated to the `geneos-web-server.jar` file.

1. Create a temporary directory (e.g., gws) under the Web Dashboard installation directory.
2. Copy `geneos-web-server.jar` into the gws directory.
3. Extract the jar file with the following command:

```
jar xvf geneos-web-server.jar
```

The gws directory will contain the folders: `com` and `META-INF`.

4. Delete `geneos-web-server.jar` from the gws directory.
5. Navigate to the `META-INF` folder.
6. Open `MANIFEST.MF` in an editor.
7. Add the path to the MySQL driver to the end of the Class-Path pair and save the `MANIFEST.MF` file.
8. Go back to the gws directory and recreate `geneos-web-server.jar` with the following command:

```
jar cmf META-INF/MANIFEST.MF geneos-web-server.jar *
```

9. Replace `geneos-web-server.jar` in the Web Dashboard installation directory with the new `geneos-web-server.jar` file just created.


**Note**

  The jar command is present in the Java JDK package, and the path must be indicated. 


The `MANIFEST.MF` file must end with a blank line, and the maximum width of the line is 70 characters.

### Enable DEBUG in Web Dashboard

Sometimes, there may be issues with Web Dashboard that need
further investigation, and a detailed log file may be useful.

1. Edit `log4j.properties` and modify the `log4j.rootLogger` parameter from:

```
log4j.rootLogger=off, CONSOLE, FILE
```

to:

```
log4j.rootLogger=DEBUG, CONSOLE, FILE
```

2. Save the changes and restart Web Dashboard.
3. Repeat the actions that led to the issue.
4. Send the log file to Geneos Support for assistance.

### Enable JMX port for remote monitoring

JMX can be used to remotely monitor the `GatewayMonitor` and `DashboardMonitor` MBeans.

To do this, enable the `JMX_PORT` and `JMX_FLAG` debugging flags in the run script of your installation.

```
JMX_PORT=50505
JMX_FLAGS="-Dcom.sun.management.jmxremote.port=$JMX_PORT -Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false"

```

#### GatewayMonitor MBeans

The `GatewayMonitor` MBean attributes are as follows:

<div class="table-container">
<table class="legacy-table" style="width: 100%;margin-left: 0;margin-right: auto;mc-table-style: url('../Resources/TableStyles/ref_2_col_table.css');" class="TableStyle-ref_2_col_table" cellspacing="0">
                        <col class="TableStyle-ref_2_col_table-Column-Column1"/>
                        <col class="TableStyle-ref_2_col_table-Column-Column1"/>
                        <thead>
                            <tr class="TableStyle-ref_2_col_table-Head-Header1">
                                <th class="TableStyle-ref_2_col_table-HeadE-Column1-Header1">Field</th>
                                <th class="TableStyle-ref_2_col_table-HeadD-Column1-Header1">Description</th>
                            </tr>
                        </thead>
                        <tbody>
                            <tr class="TableStyle-ref_2_col_table-Body-Body1">
                                <td class="TableStyle-ref_2_col_table-BodyE-Column1-Body1">GatewaysCount</td>
                                <td class="TableStyle-ref_2_col_table-BodyD-Column1-Body1">Number of Gateways configured. </td>
                            </tr>
                            <tr class="TableStyle-ref_2_col_table-Body-Body1">
                                <td class="TableStyle-ref_2_col_table-BodyE-Column1-Body1">GatewayInformation</td>
                                <td class="TableStyle-ref_2_col_table-BodyD-Column1-Body1">List of <code>CompositeData</code> that represents each <code>GatewayDetails</code> of configured gateways.</td>
                            </tr>
                            <tr class="TableStyle-ref_2_col_table-Body-Body1">
                                <td class="TableStyle-ref_2_col_table-BodyE-Column1-Body1">GatewaysAreDown</td>
                                <td class="TableStyle-ref_2_col_table-BodyD-Column1-Body1">Indicates when one of the gateways connected to the Web Dashboard is down. </td>
                            </tr>
                            <tr class="TableStyle-ref_2_col_table-Body-Body1">
                                <td class="TableStyle-ref_2_col_table-BodyB-Column1-Body1"> </td>
                                <td class="TableStyle-ref_2_col_table-BodyA-Column1-Body1"> </td>
                            </tr>
                        </tbody>
                    </table>
                    
</div>

Each item in the `CompositeData` list contains `GatewayDetails`that represents Gateway attributes:

<div class="table-container">
<table class="legacy-table" style="width: 100%;margin-left: 0;margin-right: auto;mc-table-style: url('../Resources/TableStyles/ref_2_col_table.css');" class="TableStyle-ref_2_col_table" cellspacing="0">
                        <col class="TableStyle-ref_2_col_table-Column-Column1"/>
                        <col class="TableStyle-ref_2_col_table-Column-Column1"/>
                        <thead>
                            <tr class="TableStyle-ref_2_col_table-Head-Header1">
                                <th class="TableStyle-ref_2_col_table-HeadE-Column1-Header1">Field</th>
                                <th class="TableStyle-ref_2_col_table-HeadD-Column1-Header1">Description</th>
                            </tr>
                        </thead>
                        <tbody>
                            <tr class="TableStyle-ref_2_col_table-Body-Body1">
                                <td class="TableStyle-ref_2_col_table-BodyE-Column1-Body1">name</td>
                                <td class="TableStyle-ref_2_col_table-BodyD-Column1-Body1">Gateway name.</td>
                            </tr>
                            <tr class="TableStyle-ref_2_col_table-Body-Body1">
                                <td class="TableStyle-ref_2_col_table-BodyE-Column1-Body1">versionString</td>
                                <td class="TableStyle-ref_2_col_table-BodyD-Column1-Body1">Gateway version.</td>
                            </tr>
                            <tr class="TableStyle-ref_2_col_table-Body-Body1">
                                <td class="TableStyle-ref_2_col_table-BodyE-Column1-Body1">statusInfo</td>
                                <td class="TableStyle-ref_2_col_table-BodyD-Column1-Body1">Gateway status information.</td>
                            </tr>
                            <tr class="TableStyle-ref_2_col_table-Body-Body1">
                                <td class="TableStyle-ref_2_col_table-BodyE-Column1-Body1">isConnected</td>
                                <td class="TableStyle-ref_2_col_table-BodyD-Column1-Body1">Gateway connection current status.</td>
                            </tr>
                            <tr class="TableStyle-ref_2_col_table-Body-Body1">
                                <td class="TableStyle-ref_2_col_table-BodyE-Column1-Body1">isConnectedToSecondary</td>
                                <td class="TableStyle-ref_2_col_table-BodyD-Column1-Body1">Shows if the Gateway is connected to the secondary Gateway.</td>
                            </tr>
                            <tr class="TableStyle-ref_2_col_table-Body-Body1">
                                <td class="TableStyle-ref_2_col_table-BodyE-Column1-Body1">hostNameAndPort</td>
                                <td class="TableStyle-ref_2_col_table-BodyD-Column1-Body1">Gateway host name and port.</td>
                            </tr>
                            <tr class="TableStyle-ref_2_col_table-Body-Body1">
                                <td class="TableStyle-ref_2_col_table-BodyE-Column1-Body1">primaryHostAndPort</td>
                                <td class="TableStyle-ref_2_col_table-BodyD-Column1-Body1">Primary Gateway host and port.</td>
                            </tr>
                            <tr class="TableStyle-ref_2_col_table-Body-Body1">
                                <td class="TableStyle-ref_2_col_table-BodyE-Column1-Body1">secondaryHostAndPort</td>
                                <td class="TableStyle-ref_2_col_table-BodyD-Column1-Body1">Secondary Gateway host and port.</td>
                            </tr>
                            <tr class="TableStyle-ref_2_col_table-Body-Body1">
                                <td class="TableStyle-ref_2_col_table-BodyE-Column1-Body1">connectionState</td>
                                <td class="TableStyle-ref_2_col_table-BodyD-Column1-Body1">Connection state of the Gateway.  Values:  -2 : Unknown state -1 : In error  0 : Waiting for the connection to be established  1 : Waiting for the system to start  2 : Connected  3 : Disconnected  4 : Connected, waiting for the data state  5 : Authenticating </td>
                            </tr>
                            <tr class="TableStyle-ref_2_col_table-Body-Body1">
                                <td class="TableStyle-ref_2_col_table-BodyB-Column1-Body1"> </td>
                                <td class="TableStyle-ref_2_col_table-BodyA-Column1-Body1"> </td>
                            </tr>
                        </tbody>
                    </table>
                    
</div>

#### DashboardMonitor MBean

The `DashboardMonitor` MBean attributes are as follows:

<div class="table-container">
<table class="legacy-table" style="width: 100%;margin-left: 0;margin-right: auto;mc-table-style: url('../Resources/TableStyles/ref_2_col_table.css');" class="TableStyle-ref_2_col_table" cellspacing="0">
                        <col class="TableStyle-ref_2_col_table-Column-Column1"/>
                        <col class="TableStyle-ref_2_col_table-Column-Column1"/>
                        <thead>
                            <tr class="TableStyle-ref_2_col_table-Head-Header1">
                                <th class="TableStyle-ref_2_col_table-HeadE-Column1-Header1">Field</th>
                                <th class="TableStyle-ref_2_col_table-HeadD-Column1-Header1">Description</th>
                            </tr>
                        </thead>
                        <tbody>
                            <tr class="TableStyle-ref_2_col_table-Body-Body1">
                                <td class="TableStyle-ref_2_col_table-BodyE-Column1-Body1">DashboardsCount</td>
                                <td class="TableStyle-ref_2_col_table-BodyD-Column1-Body1">Number of dashboards that are currently configured in the navigation page. </td>
                            </tr>
                            <tr class="TableStyle-ref_2_col_table-Body-Body1">
                                <td class="TableStyle-ref_2_col_table-BodyE-Column1-Body1">DashboardInformation</td>
                                <td class="TableStyle-ref_2_col_table-BodyD-Column1-Body1">List of <code>CompositeData</code> that represents each <code>DashboardDetails</code> of configured dashboards in the navigation page.</td>
                            </tr>
                            <tr class="TableStyle-ref_2_col_table-Body-Body1">
                                <td class="TableStyle-ref_2_col_table-BodyB-Column1-Body1"> </td>
                                <td class="TableStyle-ref_2_col_table-BodyA-Column1-Body1"> </td>
                            </tr>
                        </tbody>
                    </table>
                    
</div>

Each item in the `CompositeData` list contains `DashboardDetails`that represents Gateway attributes:

<div class="table-container">
<table class="legacy-table" style="width: 100%;margin-left: 0;margin-right: auto;mc-table-style: url('../Resources/TableStyles/ref_2_col_table.css');" class="TableStyle-ref_2_col_table" cellspacing="0">
                        <col class="TableStyle-ref_2_col_table-Column-Column1"/>
                        <col class="TableStyle-ref_2_col_table-Column-Column1"/>
                        <thead>
                            <tr class="TableStyle-ref_2_col_table-Head-Header1">
                                <th class="TableStyle-ref_2_col_table-HeadE-Column1-Header1">Field</th>
                                <th class="TableStyle-ref_2_col_table-HeadD-Column1-Header1">Description</th>
                            </tr>
                        </thead>
                        <tbody>
                            <tr class="TableStyle-ref_2_col_table-Body-Body1">
                                <td class="TableStyle-ref_2_col_table-BodyE-Column1-Body1">displayName</td>
                                <td class="TableStyle-ref_2_col_table-BodyD-Column1-Body1">WebDashboard display name. </td>
                            </tr>
                            <tr class="TableStyle-ref_2_col_table-Body-Body1">
                                <td class="TableStyle-ref_2_col_table-BodyE-Column1-Body1">clientRequestRate</td>
                                <td class="TableStyle-ref_2_col_table-BodyD-Column1-Body1">Web server refresh rate of the dashboard based on the <code>&lt;updateRate&gt;</code> property.</td>
                            </tr>
                            <tr class="TableStyle-ref_2_col_table-Body-Body1">
                                <td class="TableStyle-ref_2_col_table-BodyE-Column1-Body1">dashboardRefreshRate</td>
                                <td class="TableStyle-ref_2_col_table-BodyD-Column1-Body1">Dashboard refresh rate configured in the <code>&lt;dashboardRefreshRate&gt;</code> property.</td>
                            </tr>
                            <tr class="TableStyle-ref_2_col_table-Body-Body1">
                                <td class="TableStyle-ref_2_col_table-BodyE-Column1-Body1">lastUpdateTime</td>
                                <td class="TableStyle-ref_2_col_table-BodyD-Column1-Body1">Date and time since the dashboard received updates from the Gateway.</td>
                            </tr>
                            <tr class="TableStyle-ref_2_col_table-Body-Body1">
                                <td class="TableStyle-ref_2_col_table-BodyB-Column1-Body1"> </td>
                                <td class="TableStyle-ref_2_col_table-BodyA-Column1-Body1"> </td>
                            </tr>
                        </tbody>
                    </table>
                
</div>

### Gateway connections are not displayed when opening the configuration interface

Frequent manipulation of `config.xml` may disrupt the presentation of the *Connections* page.

Press the “Reload” button to restore the gateway connections or press F5 to refresh the page.

### Cannot remove a dashboard in the Dashboards configuration interface

This action will not be allowed if the dashboard has been configured in
the *Navigation* tree and has been included in *Slideshows*.

1. Remove the dashboard from *Slideshows* and then in the *Navigation* tree.
2. Remove the dashboard from the *Dashboards* configuration interface.

### Slideshow on display does not seem to update if a new dashboard has been added

Press F5 to refresh the slideshow on display.


