diff --git a/.github/workflows/release-rmf-app-grafana.yml b/.github/workflows/release-rmf-app-grafana.yml new file mode 100644 index 0000000..0edf27f --- /dev/null +++ b/.github/workflows/release-rmf-app-grafana.yml @@ -0,0 +1,97 @@ +name: Release Grafana RMF App + +on: + push: + tags: + - ibm-rmf-grafana/v* + +jobs: + build: + runs-on: ubuntu-latest + + defaults: + run: + working-directory: grafana/rmf-app + + steps: + - name: Check out + uses: actions/checkout@v4 + + - name: Setup Node.js + uses: actions/setup-node@v3 + with: + node-version-file: grafana/rmf-app/.nvmrc + cache: 'yarn' + cache-dependency-path: 'grafana/rmf-app/yarn.lock' + + - name: Setup Golang + uses: actions/setup-go@v4 + with: + go-version-file: grafana/rmf-app/go.mod + cache-dependency-path: grafana/rmf-app/go.sum + + - name: Build + run: make all + + - name: Fetch Release Notes + id: changelog + run: | + awk '/^## / {s++} s == 1 {print}' CHANGELOG.md > RELEASE_NOTES.md + + - name: Upload Build + uses: actions/upload-artifact@v3 + with: + name: rmf-app-grafana + path: | + grafana/rmf-app/RELEASE_NOTES.md + grafana/rmf-app/build/ibm-rmf-grafana-* + + sign: + runs-on: code-sign + needs: build + + steps: + - name: Download Build + uses: actions/download-artifact@v3 + with: + name: rmf-app-grafana + + - name: Sign + run: | + $env:Path = 'C:\Program Files (x86)\Garantir\GRS;' + $env:Path + gpg-agent + gpg --detach-sign -a build/ibm-rmf-grafana-*.zip + + - name: Upload Signature + uses: actions/upload-artifact@v3 + with: + name: rmf-app-grafana-signature + path: build/ibm-rmf-grafana-*.zip.asc + + - name: Clean up + run: rm -r -force * + + release: + runs-on: ubuntu-latest + needs: sign + + steps: + - name: Download Build + uses: actions/download-artifact@v3 + with: + name: rmf-app-grafana + + - name: Download Signature + uses: actions/download-artifact@v3 + with: + name: rmf-app-grafana-signature + + - name: Release Draft + uses: softprops/action-gh-release@v1 + with: + prerelease: false + draft: true + files: | + build/ibm-rmf-grafana-* + ibm-rmf-grafana-*.zip.asc + body_path: RELEASE_NOTES.md diff --git a/README.md b/README.md index 0306b9b..1c643d6 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,10 @@ # RMF + Resource Measurement Facility for z/OS + +## IBM RMF for z/OS Grafana Plugin + +The IBM® RMF for z/OS Grafana plugin provides effortless analysis and visualization of +RMF Monitor III metrics and reports within the Grafana platform. + +See [IBM RMF for z/OS Grafana Plugin](grafana/rmf-app/README.md) for more details. diff --git a/docs/grafana/rmf-app/access_grafana_zosmf.html b/docs/grafana/rmf-app/access_grafana_zosmf.html new file mode 100644 index 0000000..00151a0 --- /dev/null +++ b/docs/grafana/rmf-app/access_grafana_zosmf.html @@ -0,0 +1,204 @@ + + + Accessing the Grafana dashboard + + + + + + + + + + + + + + + + + Jump to main content + + + + + + + + + + + + + +
+
+ + +
+ + + + +
+
+ + + + +
+ + + +
+

Accessing the Grafana dashboard

+ +

You can access the Grafana dashboard from the Resource + Monitoring page of z/OSMF to + investigate the RMF Monitor III metrics and reports.

+

Before you begin

You must have completed the following tasks:
+

Procedure

  1. + Enter the URL of z/OSMF in a web browser. +
  2. + Log in to z/OSMF if + you are not already logged in. +
  3. + Double-click Resource Monitoring. +
  4. + Select the Grafana server that you want to access from the drop-down + list. +
  5. + Click Load Grafana. +
+

Results

You have accessed Grafana from z/OSMF.
+

What to do next

You can perform the following tasks:
    +
  • Sign in to the Grafana server if you are not already signed in.
  • +
  • Add a RMF data source to fetch data from Distributed Data Servers (DDS). See Creating RMF data sources.
  • +
+
+
+ + + + + + +
+ +
+
+ + + +
+ + +
+ +
+ + + + + + + \ No newline at end of file diff --git a/docs/grafana/rmf-app/alerts.html b/docs/grafana/rmf-app/alerts.html new file mode 100644 index 0000000..8988554 --- /dev/null +++ b/docs/grafana/rmf-app/alerts.html @@ -0,0 +1,189 @@ + + + Introduction to Alerts + + + + + + + + + + + + + + + + + Jump to main content + + + + + + + + + + + + + +
+
+ + +
+ + + + +
+
+ + + + +
+ + + +
+

Introduction to Alerts

+ + +

Grafana Alerting feature provides a reliable solution to detect and respond to system + issues in real time.

+

Through Grafana monitoring capabilities, you can keep track of incoming metrics data and + configure the alerting system to detect specific events or circumstances. When the + system identifies any issues, it automatically sends notifications to ensure that you + are up to date. With Grafana Alerting, you can eliminate the need for manual monitoring + and control system outages that could lead to significant incidents.

+

For more information, refer to the Alerting section in the Grafana + documentation.

+
Note: Currently, you can configure alerts only on RMF Time Series + dashboards.
+
+
+ + + + + + +
+ +
+
+ + + +
+ + +
+ +
+ + + + + + + \ No newline at end of file diff --git a/docs/grafana/rmf-app/apply_transformation.html b/docs/grafana/rmf-app/apply_transformation.html new file mode 100644 index 0000000..552acf6 --- /dev/null +++ b/docs/grafana/rmf-app/apply_transformation.html @@ -0,0 +1,210 @@ + + + Applying transformation to data + + + + + + + + + + + + + + + + + Jump to main content + + + + + + + + + + + + + +
+
+ + +
+ + + + +
+
+ + + + +
+ + + +
+

Applying transformation to data

+ +

You can transform your data by renaming fields, joining time series data, and + performing mathematical operations across queries.

+

Before you begin

You must have completed the following tasks:
+

About this task

You can add multiple transformation to your data. When there are multiple + transformations, Grafana applies them sequentially. Each transformation produces a + result set that is passed on to the next transformation in the pipeline.

Grafana + provides several ways that you can transform data. For entire list of + transformations, refer to the Grafana + documentation.

+

Procedure

  1. + Identify the dashboard for which you want to add the transformation. +
  2. + Move the mouse pointer over any part of the panel to display the + Menu + icon. +
  3. + Click the Menu icon, and then select + Edit. +
  4. + Click the Transformation tab, and then select a + transformation from the list. +
    Upon accessing the transformation options, a dedicated row is presented for + configuration.
    Note: You can click + Add + Transformation to add multiple transformations to + data.
    +
  5. + Click Save to store the changes made to the + dashboard. +
+

Results

You have added the transformation to the data.
+
+
+ + + + + + +
+ +
+
+ + + +
+ + +
+ +
+ + + + + + + \ No newline at end of file diff --git a/docs/grafana/rmf-app/apply_visualize.html b/docs/grafana/rmf-app/apply_visualize.html new file mode 100644 index 0000000..dac5de4 --- /dev/null +++ b/docs/grafana/rmf-app/apply_visualize.html @@ -0,0 +1,270 @@ + + + Applying visualization to data + + + + + + + + + + + + + + + + + Jump to main content + + + + + + + + + + + + + +
+
+ + +
+ + + + +
+
+ + + + +
+ + + +
+

Applying visualization to data

+ +

By adding panels to dashboards, you can effectively present your data in a visual + format. Each panel must require at least one query to display a significant + visualization.

+

Before you begin

You must have completed the following tasks:
+

Procedure

  1. + Identify the dashboard for which you want to add visualization. +
  2. + Perform one of the steps described in the following table: +
    +
    + + + + + + + + +
    Step descriptionStep #
    If there are no panels added to the dashboardPerform step 3.
    If at least one panel is added to the dashboardPerform step 5.
    +
    +
  3. + Click + Add visualization to add visualization to your + data. +
    +
    Note: The navigation of the user interface can differ based on the + Grafana version that is currently installed.
    +
    +
    The Edit panel is displayed.
    +
  4. + Go to step 6. +
  5. + Click Add > Visualization from the dashboard header. +
    +

    +
    +
    The Edit panel is displayed.
    +
  6. + Enter a name for the panel in the Title field. +
    Optionally you can also provide a description for the panel that you are + creating.

    When you add the description for the panel, a notification icon + is + displayed after the Panel title, as shown in the + following image:

    +
  7. + Select one of the visualization types from the drop-down menu: +
    +

    +

    You can choose Report for IBM RMF for z/OS or any + other built-in Grafana visualization types from the drop-down list.

    +
    +
  8. + Click the Query tab, and then enter a query in the query + language of the RMF data source. +
    +
    Note: You can click + Query to add + multiple queries.
    +
    +
  9. + Select the existing data sources from the Data source + drop-down list. +
  10. + Click the Time Picker drop-down list to select relative + time range options and set custom absolute time ranges. +
    +

    +
    +
  11. + Click the Refresh dashboard + icon to query the RMF + data source. +
    Grafana provides you with a preview of your query results along with the + corresponding visualization.
    +
  12. Optional: + Click Apply to view your changes applied to the + dashboard. +
  13. + Click Save, and then enter a note describing the changes + you have made. +
  14. + Click Save to store the changes made to the + dashboard. +
+

What to do next

+

Grafana provides a range of visualizations that cater to different use cases. For + more information about the built-in panels, options, and typical usage, refer to the + Grafana documentation.

+

You can also configure the panel options based on your requirements. For more + information refer to the Grafana documentation.

+
+
+
+ + + + + + +
+ +
+
+ + + +
+ + +
+ +
+ + + + + + + \ No newline at end of file diff --git a/docs/grafana/rmf-app/config_contact_points.html b/docs/grafana/rmf-app/config_contact_points.html new file mode 100644 index 0000000..0807baa --- /dev/null +++ b/docs/grafana/rmf-app/config_contact_points.html @@ -0,0 +1,221 @@ + + + Configuring contact points + + + + + + + + + + + + + + + + + Jump to main content + + + + + + + + + + + + + +
+
+ + +
+ + + + +
+
+ + + + +
+ + + +
+

Configuring contact points

+ +

You can set up contact points to specify how contacts receive notifications when an + alert rule is triggered.

+

Before you begin

You must have created the alert rule. See Creating alert rules.
+

Procedure

  1. + Navigate to the left-side menu, and then click Alerting > Contact points. +
    +
    Note: The navigation of the user interface can differ based on the + Grafana version that is currently installed.
    +
    +
  2. + Click + Add contact points. +
  3. + Select a value from the Alertmanager drop-down + list. +
    +
    Note: The default alert manager selected is + Grafana.
    +
    +
  4. + Enter a name for the contact point in the Name + field. +
  5. + Select a type from the Integration drop-down list based + on your requirements. +
    +
    Important: You must complete all mandatory + fields in the Integration panel. For instance, if you + select email, you must input the email addresses. If you choose Slack, you + must enter the Slack channel(s) and the users who must be contacted.
    +
    +
  6. Optional: + Specify additional settings for the selected contact point integration in the + Optional settings panel. +
  7. Optional: + Select the Disable resolved message checkbox if you do + not want to be notified when an alert resolves in the Notification + settings panel. +
  8. + Click Save contact point to save your changes. +
+

Results

You have configured the contact point.
+

What to do next

You can edit, delete, or test a contact point that you + created. For more information, refer to the Grafana documentation.
+
+
+ + + + + + +
+ +
+
+ + + +
+ + +
+ +
+ + + + + + + \ No newline at end of file diff --git a/docs/grafana/rmf-app/context-help-map.xml b/docs/grafana/rmf-app/context-help-map.xml new file mode 100644 index 0000000..59b2435 --- /dev/null +++ b/docs/grafana/rmf-app/context-help-map.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/grafana/rmf-app/create_dashboards.html b/docs/grafana/rmf-app/create_dashboards.html new file mode 100644 index 0000000..f79c0aa --- /dev/null +++ b/docs/grafana/rmf-app/create_dashboards.html @@ -0,0 +1,218 @@ + + + Creating dashboards + + + + + + + + + + + + + + + + + Jump to main content + + + + + + + + + + + + + +
+
+ + +
+ + + + +
+
+ + + + +
+ + + +
+

Creating dashboards

+ +

To understand your data better, you must create a dashboard that displays different + charts, statistics, and tables. This can give you more insight into your data.

+

Before you begin

You must have completed the following tasks:
    +
  • Been assigned the role of an + Administrator of Grafana.
  • +
  • Created a folder in Grafana. See Creating Folders.
  • +
+

Procedure

  1. + Navigate to the left-side menu, and then click + Dashboards. +
    +
    Note: The navigation of the user interface can differ based on the + Grafana version that is currently installed.
    +
    +
  2. + Click New, and then select New + Dashboard. +
  3. + Click the Save + icon. +
  4. + Enter a name for the dashboard in the Dashboard name + field. +
  5. + Select a location to save your dashboard from the Folder + list. +
    +
    Note: The default location for the + Folder is set as + General.
    +
    +
  6. + Click Save. +
+

Results

You have created the dashboard.
+

What to do next

You can perform the following tasks:
    +
  • Create panels in the dashboard to visualize the data. See Applying visualization to data.
  • +
  • Customize the dashboard settings. For more information, refer to the Grafana + documentation.
  • +
+
+
+ + + + + + +
+ +
+
+ + + +
+ + +
+ +
+ + + + + + + \ No newline at end of file diff --git a/docs/grafana/rmf-app/create_datasources.html b/docs/grafana/rmf-app/create_datasources.html new file mode 100644 index 0000000..4ebef94 --- /dev/null +++ b/docs/grafana/rmf-app/create_datasources.html @@ -0,0 +1,263 @@ + + + Creating RMF data sources + + + + + + + + + + + + + + + + + Jump to main content + + + + + + + + + + + + + +
+
+ + +
+ + + + +
+
+ + + + +
+ + + +
+

Creating RMF data sources

+ +

To access RMF Monitor III metrics in Grafana, you need to connect to the Distributed Data Servers by adding an RMF data source.

+

Before you begin

You must have completed the following tasks:
    +
  • Been assigned the role of an + Administrator of Grafana.
  • +
  • Installed the IBM® RMF for z/OS Grafana App plugin. See Installing the plugin on Grafana.
  • +
  • Copied the hostname and port number of the DDS to be used during the creation of + the data source process.
  • +
+

Procedure

  1. + Go to Apps > IBM RMF +
    +
    Note: The navigation of the user interface can differ based on the + Grafana version that is currently installed.
    +
    +
  2. + Click Add RMF Data Source. +
  3. + Enter a name for the data source in the Name + field. +
  4. Optional: + Set Default + to ON to + make the added data source the default one. +
    +
    Note: When you create new panels, the default data source + is preselected.
    +
    +
  5. + Enter the details for the following fields in the Server + Information section: +
    +
    + + + + + + + + +
    FieldsAction
    ServerEnter the hostname of the DDS in this field.
    PortEnter the port number of the DDS in this field.
    +
    +
  6. + Choose one of the following methods to create the data source: +
    +
    + + + + + + + + + + + +
    MethodsDescriptionAction
    Create the data source with no authenticationYou do not require any credentials to create the data + source.Click Save & test.

    The Data source is working message is + displayed.

    Create the data source with SSL and Basic + AuthenticationYou must select the Use SSL radio button + and be required to provide a username and password to create the + data source. +
      +
    1. Set Use SSL + to ON to enable the secure connection.
      +
      Remember: When you enable SSL, the Verify the + server’s certificate chain/hostname option is also + enabled.

      You can set Verify the server’s certificate + chain/hostname + to OFF to accept any + certificate presented by the DDS and any hostname in that + certificate.

      +
    2. +
    3. Enter the credentials of the DDS in the + Username and Password + fields.
    4. +
    5. Click Save & test.

      The Data source is working message is + displayed.

    6. +
    +
    +
    +
+

Results

You have added the RMF data source.
+

What to do next

You can create dashboards to visualize RMF Monitor III + data and metrics. See Creating dashboards.
+
+
+ + + + + + +
+ +
+
+ + + +
+ + +
+ +
+ + + + + + + \ No newline at end of file diff --git a/docs/grafana/rmf-app/creating_alert_rules.html b/docs/grafana/rmf-app/creating_alert_rules.html new file mode 100644 index 0000000..0186858 --- /dev/null +++ b/docs/grafana/rmf-app/creating_alert_rules.html @@ -0,0 +1,275 @@ + + + Creating alert rules + + + + + + + + + + + + + + + + + Jump to main content + + + + + + + + + + + + + +
+
+ + +
+ + + + +
+
+ + + + +
+ + + +
+

Creating alert rules

+ +

You can create an alert rule to determine when an alert should be triggered. It + comprises one or more queries and expressions over which the condition must be satisfied for + the alert to start triggering.

+

Before you begin

You must have completed the following tasks:
+

Procedure

  1. + Navigate to the left-side menu, and then click + Alerting. +
    +
    Note: The navigation of the user interface can differ based on the + Grafana version that is currently installed.
    +
    +
  2. + Click Manage alert rules from the Alert + rules section. +
  3. + Click Create alert rule. +
  4. + Enter a name to label the alert rule in the Rule name + field. +
  5. + Select Grafana managed alert as the alert rule + type. +
  6. + Select a data source from the list. +
  7. + Click the Time Picker drop-down list and apply the + relative time range. +
  8. + Enter a query in the query language of the RMF data source to get the data you + want to measure. +
    +
    Note: You can click + Add query to + add multiple queries for the alert rule.
    +
    +
  9. + Add an expression. +
    +
    Notes: +
      +
    • An alert rule triggers only when certain conditions are met.
    • +
    • You can click + Add expression to add + multiple expressions for the alert rule.
    • +
    +
    +
    +
  10. Optional: + Click Preview to verify the applied expression is + correct. +
  11. + Click Make this the alert condition on the query or + expression to set selected query or expression as alert condition. +
  12. + Perform the following steps to determine how often an alert rule should be + checked and quickly it must change its state: +
      +
    1. + Select a folder from the drop-down list for the rule. +
      Alternatively, you can click +Add new to create + a folder.
      +
    2. +
    3. + Select an evaluation group from the drop-down list. +
      Alternatively, you can type a name to create an evaluation + group.
      +
    4. +
    5. + Enter the evaluation interval for the group in the Evaluate + every field, if you create a evaluation group. +
    6. +
    +
  13. + Enter a value in the for field to specify a pending + period. +
    The pending period refers to the time frame in which an alert rule can violate + the condition before it triggers the alert. When a condition is met, the alert + enters the Pending state. If the situation remains + active for the specified duration, the alert transitions to the Firing state + before returning to the Normal state.
    +
  14. + Set up alerting behavior if no data or error is found in the + Configure no data and error handling section. +
  15. + Click Save to save your changes. +
+

Results

You have created the alert rule.
+

What to do next

You can configure the contact points to receive + notifications when an alert rule is triggered. See Configuring contact points.
You can refer to the following sections in + the Grafana documentation for additional information about expressions + and configuring no data and error handling: +
+
+
+ + + + + + +
+ +
+
+ + + +
+ + +
+ +
+ + + + + + + \ No newline at end of file diff --git a/docs/grafana/rmf-app/cshelp.html b/docs/grafana/rmf-app/cshelp.html new file mode 100644 index 0000000..36dd219 --- /dev/null +++ b/docs/grafana/rmf-app/cshelp.html @@ -0,0 +1,10 @@ + + + + Context Sensitive Help + + + + + + \ No newline at end of file diff --git a/docs/grafana/rmf-app/db_ovw.html b/docs/grafana/rmf-app/db_ovw.html new file mode 100644 index 0000000..0d8afb2 --- /dev/null +++ b/docs/grafana/rmf-app/db_ovw.html @@ -0,0 +1,184 @@ + + + Dashboards overview + + + + + + + + + + + + + + + + + Jump to main content + + + + + + + + + + + + + +
+
+ + +
+ + + + +
+
+ + + + +
+ + + +
+

Dashboards overview

+ + +

Grafana provides a highly flexible and customizable dashboard consisting of one or + more rows and panels.

+

You can use various pre-configured panels to construct queries and tailor the + visualization to meet your requirements. This enables you to create a personalized + dashboard that seamlessly interacts with data from a configured Distributed Data Server (DDS).

+ +
+
+ + + + + + +
+ +
+
+ + + +
+ + +
+ +
+ + + + + + + \ No newline at end of file diff --git a/docs/grafana/rmf-app/define_grafana_zosmf.html b/docs/grafana/rmf-app/define_grafana_zosmf.html new file mode 100644 index 0000000..d6ac53f --- /dev/null +++ b/docs/grafana/rmf-app/define_grafana_zosmf.html @@ -0,0 +1,252 @@ + + + Defining the Grafana server + + + + + + + + + + + + + + + + + Jump to main content + + + + + + + + + + + + + +
+
+ + +
+ + + + +
+
+ + + + +
+ + + +
+

Defining the Grafana server

+ +

You must define the Grafana server as a target system in z/OSMF to access Grafana from the Resource + Monitoring page of z/OSMF.

+

Before you begin

You must have completed the following tasks:
+

Procedure

  1. + Enter the URL of z/OSMF in a web browser. +
  2. + Log in to z/OSMF if + you are not already logged in. +
  3. + Double-click System Status. +
  4. + Click Add Entry from the Actions + drop-down list. +
  5. + Perform the following steps to add details about the Grafana server: +
      +
    1. + Enter a name of your choice for the Grafana server in the + Resource name field. +
      The Resource name is the required field, and + you must provide a unique name. The Resource name + can contain up to 24 characters including + alphanumeric characters (A-Z, + a-z, and + 0-9) and special characters + (@ # $).
      Note: You must note that the Resource name is not + case sensitive. Therefore, the entries with similar names but + different capitalization, such as SYS1 + and Sys1 are considered as identical by + the system.
      +
    2. +
    3. + Enter the host name or IP address of the Grafana server that you want + to access in the Host name or IP address + field. +
      The host name or IP address can contain up to + 4000 characters.
      +
    4. +
    5. + Select Grafana from the Target system + type drop-down list. +
    6. +
    7. + Select the Use HTTPS checkbox to enable secure + communication. +
    8. +
    9. + Enter the port number where the Grafana server is hosted in the + Port field. +
      +

      The Port is the required field, and the + default port number is set to 3000.

      +
      Tip: Alternatively, you can use + up-down controls to specify the port + number.
      +
      +
    10. +
    +
  6. + Click OK. +
+

Results

You have defined the Grafana server as the target system. + The connectivity status of the specified Grafana server is displayed as + Connected on the System Status + page.
+

What to do next

You can perform the following tasks:
    +
  • Modify or Remove the Grafana server by clicking the + Action drop-down menu from the System + Statuss page.
  • +
  • Access Grafana dashboards. See Accessing the Grafana dashboard.
  • +
+
+
+ + + + + + +
+ +
+
+ + + +
+ + +
+ +
+ + + + + + + \ No newline at end of file diff --git a/docs/grafana/rmf-app/error_reports.html b/docs/grafana/rmf-app/error_reports.html new file mode 100644 index 0000000..35e986d --- /dev/null +++ b/docs/grafana/rmf-app/error_reports.html @@ -0,0 +1,223 @@ + + + Error reporting in the plugin + + + + + + + + + + + + + + + + + Jump to main content + + + + + + + + + + + + + +
+
+ + +
+ + + + +
+
+ + + + +
+ + + +
+

Error reporting in the plugin

+ + +

Whenever you encounter issues while using the IBM® RMF for z/OS Grafana App plugin, you can view detailed error messages + that contain sufficient information to help you identify and troubleshoot the + problem.

+

By viewing these error messages, you can quickly and efficiently troubleshoot any issues + you may encounter while using the IBM® RMF for z/OS Grafana App + plugin.

+
The errors that can occur vary in severity and are classified into different types as + described in the following table:
+ + + + + + + + + + + + + + + + + + + +
TypeError CodeDescription
SevereSWhen a severe error occurs, it can result in the termination of the + ongoing operation.

It is essential to take necessary measures to prevent + such errors to ensure the smooth functioning of the IBM® RMF for z/OS Grafana App plugin.

Eventual Action EAn error which may not affect the overall functionality but can still + cause inconvenience to the user.
WarningWA warning does not indicate any error state in the IBM® RMF for z/OS Grafana App plugin. However, it is of + utmost importance to remain vigilant and take proactive measures to ensure + that all features function properly.
InformationIAn information message informs the users about changes or updates in + the IBM® RMF for z/OS Grafana App plugin.

You need not + take any action in response, but it's essential to stay up-to-date and + be aware of these updates.

+

When an error occurs, it is assigned a unique Error ID that can help quickly identify the + root cause of the issue by referring to the log file. The Error ID is a combination of + 10 characters comprising lower and upper case alphabets.

+

In case of any problems with the Distributed Data Server (DDS), you can identify the issues by looking + into DDS-specific errors, which will be + displayed without any modifications. The messages issued by the Distributed Data Server are documented in the Distributed Data Server messages - GPM topic + in the z/OS Resource Measurement Facility Messages and Codes.

+

Here are examples of two types of error messages that you may encounter while using DDS:

+

DDS_error

+

Error_plugin

+
+
+ + + + + + +
+ +
+
+ + + +
+ + +
+ +
+ + + + + + + \ No newline at end of file diff --git a/docs/grafana/rmf-app/grafana_via_zosmf.html b/docs/grafana/rmf-app/grafana_via_zosmf.html new file mode 100644 index 0000000..03ac641 --- /dev/null +++ b/docs/grafana/rmf-app/grafana_via_zosmf.html @@ -0,0 +1,210 @@ + + + Grafana through IBM z/OS Management Facility + + + + + + + + + + + + + + + + + Jump to main content + + + + + + + + + + + + + +
+
+ + +
+ + + + +
+
+ + + + +
+ + + +
+

Grafana through IBM® z/OS Management Facility

+ + +

When you use IBM® z/OS Management Facility to monitor the performance + of the z/OS sysplexes in your environment, you can also access Grafana dashboards from z/OSMF.

+
You must complete specific tasks to access Grafana through z/OSMF. The following table lists the task flows + to access Grafana from z/OSMF:
+ + + + + + + + + + + + + + + + + + + + + + + + + +
TasksMore information
Install and configure z/OSMF.z/OS + Management Facility Configuration + Guide
Install Grafana v9.2.5 or later.Grafana + documentation
Install the IBM® RMF for z/OS Grafana App plugin + on Grafana.Installing the plugin on Grafana
Define Grafana servers as target systems.Defining the Grafana server
Access Grafana dashboardsAccessing the Grafana dashboard
+
+
+ + + + + + +
+ +
+
+ + + +
+ + +
+ +
+ + + + + + + \ No newline at end of file diff --git a/docs/grafana/rmf-app/historical_data.html b/docs/grafana/rmf-app/historical_data.html new file mode 100644 index 0000000..d710586 --- /dev/null +++ b/docs/grafana/rmf-app/historical_data.html @@ -0,0 +1,201 @@ + + + Historical data collection + + + + + + + + + + + + + + + + + Jump to main content + + + + + + + + + + + + + +
+
+ + +
+ + + + +
+
+ + + + +
+ + + +
+

Historical data collection

+ + +

In Grafana, you can collect historical data using absolute and relative time + ranges.

+
+

Collecting historical data is a common practice across organizations for various + purposes. The importance and use of historical data are significant in + decision-making, research, analysis, and planning. Analyzing historical data + provides valuable insights into the status, usage, performance, and health of + various resources.

+

You can also access cached metric data for queries, data sources, and timestamp + combinations that have already viewed by other user on Grafana. This means that if + any user requests metrics data for the same query, datasource, and timestamp, the + cached data can be displayed faster than a service call from DDS. If data for a + particular timestamp is not found in the cache, it will be fetched by a service call + from DDS. This feature can save you time and provide a faster experience accessing + metric data.

+

The following example shows the percentage of time during the report interval that + the system job or enclave was waiting for a processor by specifying absolute + time:

+

+

Similarly, you can collect the data for the percentage of time delay for a processor + by specifying the relative time range:

+

+
+
+
+ + + + + + +
+ +
+
+ + + +
+ + +
+ +
+ + + + + + + \ No newline at end of file diff --git a/docs/grafana/rmf-app/images/add_visulize.png b/docs/grafana/rmf-app/images/add_visulize.png new file mode 100644 index 0000000..c1768ce Binary files /dev/null and b/docs/grafana/rmf-app/images/add_visulize.png differ diff --git a/docs/grafana/rmf-app/images/app_section.png b/docs/grafana/rmf-app/images/app_section.png new file mode 100644 index 0000000..b32f6f8 Binary files /dev/null and b/docs/grafana/rmf-app/images/app_section.png differ diff --git a/docs/grafana/rmf-app/images/default_db_view.png b/docs/grafana/rmf-app/images/default_db_view.png new file mode 100644 index 0000000..f001e3a Binary files /dev/null and b/docs/grafana/rmf-app/images/default_db_view.png differ diff --git a/docs/grafana/rmf-app/images/del.png b/docs/grafana/rmf-app/images/del.png new file mode 100644 index 0000000..c57c707 Binary files /dev/null and b/docs/grafana/rmf-app/images/del.png differ diff --git a/docs/grafana/rmf-app/images/error_dds.png b/docs/grafana/rmf-app/images/error_dds.png new file mode 100644 index 0000000..2abef50 Binary files /dev/null and b/docs/grafana/rmf-app/images/error_dds.png differ diff --git a/docs/grafana/rmf-app/images/error_plugin.png b/docs/grafana/rmf-app/images/error_plugin.png new file mode 100644 index 0000000..b05cbb5 Binary files /dev/null and b/docs/grafana/rmf-app/images/error_plugin.png differ diff --git a/docs/grafana/rmf-app/images/historical_data_absolute_time.mp4 b/docs/grafana/rmf-app/images/historical_data_absolute_time.mp4 new file mode 100644 index 0000000..4a44e34 Binary files /dev/null and b/docs/grafana/rmf-app/images/historical_data_absolute_time.mp4 differ diff --git a/docs/grafana/rmf-app/images/historical_data_relative_time.mp4 b/docs/grafana/rmf-app/images/historical_data_relative_time.mp4 new file mode 100644 index 0000000..1896d58 Binary files /dev/null and b/docs/grafana/rmf-app/images/historical_data_relative_time.mp4 differ diff --git a/docs/grafana/rmf-app/images/import_db.png b/docs/grafana/rmf-app/images/import_db.png new file mode 100644 index 0000000..bb49c86 Binary files /dev/null and b/docs/grafana/rmf-app/images/import_db.png differ diff --git a/docs/grafana/rmf-app/images/menu_icon.png b/docs/grafana/rmf-app/images/menu_icon.png new file mode 100644 index 0000000..97a0475 Binary files /dev/null and b/docs/grafana/rmf-app/images/menu_icon.png differ diff --git a/docs/grafana/rmf-app/images/notification_display.png b/docs/grafana/rmf-app/images/notification_display.png new file mode 100644 index 0000000..d7ae14e Binary files /dev/null and b/docs/grafana/rmf-app/images/notification_display.png differ diff --git a/docs/grafana/rmf-app/images/notification_icon.png b/docs/grafana/rmf-app/images/notification_icon.png new file mode 100644 index 0000000..b58f289 Binary files /dev/null and b/docs/grafana/rmf-app/images/notification_icon.png differ diff --git a/docs/grafana/rmf-app/images/refresh.png b/docs/grafana/rmf-app/images/refresh.png new file mode 100644 index 0000000..6d95508 Binary files /dev/null and b/docs/grafana/rmf-app/images/refresh.png differ diff --git a/docs/grafana/rmf-app/images/reimport.png b/docs/grafana/rmf-app/images/reimport.png new file mode 100644 index 0000000..005f582 Binary files /dev/null and b/docs/grafana/rmf-app/images/reimport.png differ diff --git a/docs/grafana/rmf-app/images/save_icon.png b/docs/grafana/rmf-app/images/save_icon.png new file mode 100644 index 0000000..f52a898 Binary files /dev/null and b/docs/grafana/rmf-app/images/save_icon.png differ diff --git a/docs/grafana/rmf-app/images/share_icon.png b/docs/grafana/rmf-app/images/share_icon.png new file mode 100644 index 0000000..64339c0 Binary files /dev/null and b/docs/grafana/rmf-app/images/share_icon.png differ diff --git a/docs/grafana/rmf-app/images/time_picker.png b/docs/grafana/rmf-app/images/time_picker.png new file mode 100644 index 0000000..1c8758d Binary files /dev/null and b/docs/grafana/rmf-app/images/time_picker.png differ diff --git a/docs/grafana/rmf-app/images/toggle-off.png b/docs/grafana/rmf-app/images/toggle-off.png new file mode 100644 index 0000000..02c6422 Binary files /dev/null and b/docs/grafana/rmf-app/images/toggle-off.png differ diff --git a/docs/grafana/rmf-app/images/toggle-on.png b/docs/grafana/rmf-app/images/toggle-on.png new file mode 100644 index 0000000..fd12168 Binary files /dev/null and b/docs/grafana/rmf-app/images/toggle-on.png differ diff --git a/docs/grafana/rmf-app/images/visualize_drop-down.png b/docs/grafana/rmf-app/images/visualize_drop-down.png new file mode 100644 index 0000000..1016076 Binary files /dev/null and b/docs/grafana/rmf-app/images/visualize_drop-down.png differ diff --git a/docs/grafana/rmf-app/index.html b/docs/grafana/rmf-app/index.html new file mode 100644 index 0000000..927a3c2 --- /dev/null +++ b/docs/grafana/rmf-app/index.html @@ -0,0 +1,124 @@ + + IBM® RMF for z/OS Grafana App + + + + + + + + + + + + + + + + + + + + + + + + + + Jump to main content + + + + + + + + + + + + + + + + + +
+ +
+ +
Overview
This section provides a detailed overview of the IBM® RMF for z/OS Grafana + App plugin and its various features and capabilities.
Visualization of RMF Monitor III metrics in Grafana
Grafana is a platform for monitoring and visualizing data. It enables users to create, explore, and share dashboards that are interactive and customizable. The IBM® RMF for z/OS Grafana App plugin provides effortless analysis and visualization of z/OS Resource Measurement Facility (RMF) Monitor III metrics and reports within the Grafana platform. Thereby, you can monitor and analyze the health and performance of applications.
IBM® RMF for z/OS Grafana App plugin
IBM® RMF for z/OS Grafana App is a plugin for Grafana that provides custom panels for RMF data source. It consists of RMF Charts, RMF Reporting, and RMF Time Series dashboards.
Query languages
In Grafana, queries are essential for fetching and transforming data from RMF data sources.
Release notes
This article covers the new features, system requirements, and known issues of the IBM® RMF for z/OS Grafana App plugin.
Installing the plugin
You must install the IBM® RMF for z/OS Grafana App plugin to analyze and visualize RMF Monitor III metrics and reports.
Creating RMF data sources
To access RMF Monitor III metrics in Grafana, you need to connect to the Distributed Data Servers by adding an RMF data source.
Dashboards
Grafana provides a highly flexible and customizable dashboard consisting of one or more rows and panels.
Creating dashboards
To understand your data better, you must create a dashboard that displays different charts, statistics, and tables. This can give you more insight into your data.
Managing dashboards
You can mange the dashboard to perform various tasks such as creating a folder or a dashboard, moving dashboards into folders, deleting multiple dashboards, and navigating to a folder page where you can assign folder and dashboard permissions.
Applying visualization to data
By adding panels to dashboards, you can effectively present your data in a visual format. Each panel must require at least one query to display a significant visualization.
Applying transformation to data
You can transform your data by renaming fields, joining time series data, and performing mathematical operations across queries.
Variables
Variables are a powerful tool to create more interactive and dynamic dashboards. They offer a way to replace hard-coded values in metric queries and panel titles with placeholders for values.
Alerts
Grafana Alerting feature provides a reliable solution to detect and respond to system issues in real time.
Creating alert rules
You can create an alert rule to determine when an alert should be triggered. It comprises one or more queries and expressions over which the condition must be satisfied for the alert to start triggering.
Configuring contact points
You can set up contact points to specify how contacts receive notifications when an alert rule is triggered.
z/OSMF
When you use IBM® z/OS Management Facility to monitor the performance of the z/OS sysplexes in your environment, you can also access Grafana dashboards from z/OSMF.
Defining the Grafana server
You must define the Grafana server as a target system in z/OSMF to access Grafana from the Resource Monitoring page of z/OSMF.
Accessing the Grafana dashboard
You can access the Grafana dashboard from the Resource Monitoring page of z/OSMF to investigate the RMF Monitor III metrics and reports.
Historical data
In Grafana, you can collect historical data using absolute and relative time ranges.
Error types
Whenever you encounter issues while using the IBM® RMF for z/OS Grafana App plugin, you can view detailed error messages that contain sufficient information to help you identify and troubleshoot the problem.
+ +
+
+ + + + + + + + + + \ No newline at end of file diff --git a/docs/grafana/rmf-app/index.xml b/docs/grafana/rmf-app/index.xml new file mode 100644 index 0000000..73a489a --- /dev/null +++ b/docs/grafana/rmf-app/index.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/grafana/rmf-app/indexTerms.html b/docs/grafana/rmf-app/indexTerms.html new file mode 100644 index 0000000..0113134 --- /dev/null +++ b/docs/grafana/rmf-app/indexTerms.html @@ -0,0 +1,104 @@ + + Index Terms - IBM® RMF for z/OS Grafana App + + + + + + + + + + + + + + + + + + + + + + + Jump to index list + + + + + + + + + + + + + + + +
+
+
+
+
+ + + + + + + + + + \ No newline at end of file diff --git a/docs/grafana/rmf-app/indexterms.properties b/docs/grafana/rmf-app/indexterms.properties new file mode 100644 index 0000000..a5ce161 --- /dev/null +++ b/docs/grafana/rmf-app/indexterms.properties @@ -0,0 +1 @@ +indexterms.available=false \ No newline at end of file diff --git a/docs/grafana/rmf-app/install_grafana_plugin.html b/docs/grafana/rmf-app/install_grafana_plugin.html new file mode 100644 index 0000000..7827b1a --- /dev/null +++ b/docs/grafana/rmf-app/install_grafana_plugin.html @@ -0,0 +1,233 @@ + + + Installing the plugin on Grafana + + + + + + + + + + + + + + + + + Jump to main content + + + + + + + + + + + + + +
+
+ + +
+ + + + +
+
+ + + + +
+ + + +
+

Installing the plugin on Grafana

+ + +

You must install the IBM® RMF for z/OS Grafana App plugin to analyze + and visualize RMF Monitor III metrics and reports.

+

Before you begin

+
    +
  • You must be familiar with working with Grafana.
  • +
  • You must have completed the following tasks:
      +
    • Installed Grafana 9.5.1 or later.
    • +
    • Been assigned the role of an + Administrator of Grafana.
    • +
  • +
+
+

Procedure

  1. + Download the IBM® RMF for z/OS Grafana App plugin from the + following URL: + +
  2. + Extract the contents of the + ibm-rmf-app-a.b.c.zip file into the + Grafana plugins directory. +
    +

    For example, on Windows systems, you must place the files in + ..\..\grafana-enterprise-x.y.z.windows-amd64\grafana-x.y.z\data\plugins

    +
    Where:
      +
    • a.b.c is the version number + of the IBM® RMF for z/OS Grafana App plugin.
    • +
    • x.y.z is the version number + of Grafana.
    • +
    +
    +
  3. + Restart Grafana. +
  4. + Enter the URL of Grafana in your web browser. +
  5. + Enter the username and password of Grafana on the sign-in + page. +
  6. + Go to Administration > Plugins. +
    +
    Note: The navigation of the user interface can differ based on the + Grafana version that is currently installed.
    +
    +
  7. + Enter RMF in the Search bar on the + Plugins page. +
  8. + Click IBM RMF in the + search results. +
  9. + Click Enable. +
+

Results

You have installed the IBM® RMF for z/OS Grafana App plugin. You can find the IBM RMF plugin listed under the + Apps section.

+

What to do next

You can add a RMF data source to fetch data from Distributed Data Servers (DDS). See Creating RMF data sources.
+
+
+ + + + + + +
+ +
+
+ + + +
+ + +
+ +
+ + + + + + + \ No newline at end of file diff --git a/docs/grafana/rmf-app/license-3rd-party.txt b/docs/grafana/rmf-app/license-3rd-party.txt new file mode 100644 index 0000000..0986be4 --- /dev/null +++ b/docs/grafana/rmf-app/license-3rd-party.txt @@ -0,0 +1,610 @@ +DO NOT TRANSLATE OR LOCALIZE. + +THIRD-PARTY SOFTWARE NOTICES + +This product may be based on or incorporates copyrighted material from the files listed below (collectively, �Third Party Code�). +The Third Party Code is licensed to you under its original license terms which are provided below. + + +THIRDPARTY COMPONENT FILE LICENSE +(path in the installation) (see license text reproduced below) + +Third Party Code in generated WebHelp Output: + +oxygen-webhelp/app/search/nwSearchFnt.js BSD 3-Clause (see oxygen-webhelp/search/nwSearchFnt.LICENSE.txt ) +oxygen-webhelp/app/search/stemmers/de_stemmer.js BSD 2-Clause (FormBlitz AG) +oxygen-webhelp/app/search/stemmers/fr_stemmer.js BSD 2-Clause (Kasun Gajasinghe) +oxygen-webhelp/app/search/stemmers/en_stemmer.js BSD 2-Clause (http://tartarus.org/~martin/PorterStemmer/) +oxygen-webhelp/app/util/parseuri.js MIT License (author Steven Levithan) + + +Bootstrap v4.4.1 (https://getbootstrap.com/) MIT License (https://github.com/twbs/bootstrap/blob/v4.4.1/LICENSE) + - oxygen-webhelp/lib/bootstrap/css/bootstrap.min.css + - oxygen-webhelp/lib/bootstrap/js/bootstrap.bundle.min.js + +jQuery v3.5.1 (https://jquery.org) MIT License (https://jquery.org/license/) + - oxygen-webhelp/lib/jquery/jquery-3.5.1.min.js + +bootpag v1.07 (http://botmonster.com/jquery-bootpag/) MIT License (http://www.opensource.org/licenses/mit-license.php) + - oxygen-webhelp/lib/jquery-bootpag/jquery.bootpag.min.js + +highlight v3 MIT license (https://opensource.org/licenses/MIT) +(https://johannburkard.de/blog/programming/javascript/highlight-javascript-text-higlighting-jquery-plugin.html) + - oxygen-webhelp/lib/jquery-highlight/jquery.highlight-3.js + +jQuery UI v1.13.2 (http://jqueryui.com) MIT License (https://jquery.org/license/) + - oxygen-webhelp/lib/jquery-ui/jquery-ui.min.css + - oxygen-webhelp/lib/jquery-ui/jquery-ui.min.js + +kuromoji v0.1.1 (https://github.com/takuyaa/kuromoji.js) Apache License, Version 2.0 (http://www.apache.org/licenses/LICENSE-2.0) + - oxygen-webhelp/lib/kuromoji/kuromoji.js + - oxygen-webhelp/lib/kuromoji/dict/base.dat.gz + - oxygen-webhelp/lib/kuromoji/dict/cc.dat.gz + - oxygen-webhelp/lib/kuromoji/dict/check.dat.gz + - oxygen-webhelp/lib/kuromoji/dict/tid_map.dat.gz + - oxygen-webhelp/lib/kuromoji/dict/tid_pos.dat.gz + - oxygen-webhelp/lib/kuromoji/dict/tid.dat.gz + - oxygen-webhelp/lib/kuromoji/dict/unk_char.dat.gz + - oxygen-webhelp/lib/kuromoji/dict/unk_compat.dat.gz + - oxygen-webhelp/lib/kuromoji/dict/unk_invoke.dat.gz + - oxygen-webhelp/lib/kuromoji/dict/unk_map.dat.gz + - oxygen-webhelp/lib/kuromoji/dict/unk_pos.dat.gz + - oxygen-webhelp/lib/kuromoji/dict/unk.dat.gz + +maphilight v1.3.1 (https://github.com/kemayo/maphilight) MIT License (https://github.com/kemayo/maphilight/blob/1.3.1/MIT-LICENSE.txt) + - oxygen-webhelp/lib/maphighlight/jquery.maphilight.min.js + +RequireJS 2.3.5 (https://requirejs.org/) MIT License (https://github.com/requirejs/requirejs/blob/2.3.5/LICENSE) + - oxygen-webhelp/lib/requirejs/require.js + +DOMPurify 2.3.1 (https://github.com/cure53/DOMPurify) Apache License, Version 2.0 (http://www.apache.org/licenses/LICENSE-2.0) + - oxygen-webhelp/lib/dom-purify/purify.min.js + +rwdImageMaps v1.6 (https://github.com/stowball/jQuery-rwdImageMaps) MIT License (https://github.com/stowball/jQuery-rwdImageMaps/blob/1.6/LICENSE) + - oxygen-webhelp/lib/rwdImageMaps/jquery.rwdImageMaps.min.js + +Roboto Font (https://github.com/google/roboto/) Apache License, Version 2.0 (http://www.apache.org/licenses/LICENSE-2.0) + - templates/oxygen/resources/fonts/Roboto-Bold.ttf + - templates/oxygen/resources/fonts/Roboto-Light.ttf + - templates/oxygen/resources/fonts/Roboto-Regular.ttf + - templates/oxygen/resources/fonts/Roboto-Thin.ttf + + +Bootstrap v4.4.1 (https://getbootstrap.com/) MIT License (https://github.com/twbs/bootstrap/blob/v4.4.1/LICENSE) + - oxygen-webhelp/lib/bootstrap/css/bootstrap.min.css + - oxygen-webhelp/lib/bootstrap/js/bootstrap.bundle.min.js + +Additional Third Party Code in Oxygen WebHelp Plug-In (inside Oxygen XML) distribution: + +dtd/xhtml1-frameset.dtd W3C (the original at https://www.w3.org/TR/xhtml1/) +dtd/xhtml1-strict.dtd W3C (the original at https://www.w3.org/TR/xhtml1/) +dtd/xhtml1-transitional.dtd W3C (the original at https://www.w3.org/TR/xhtml1/) +dtd/xhtml1-lat1.ent W3C (the original at https://www.w3.org/TR/xhtml1/) +dtd/xhtml1-special.ent W3C (the original at https://www.w3.org/TR/xhtml1/) +dtd/xhtml1-symbol.ent W3C (the original at https://www.w3.org/TR/xhtml1/) + +lib/xhtml-indexer.jar BSD 3-Clause (see lib/xhtml-indexer.LICENSE.txt) + +xsl/dita/original/output-messages.xsl Apache-2.0 (part of DITA-OT, http://www.dita-ot.org/) +xsl/dita/original/relpath_util.xsl Apache-2.0 (part of DITA4Publishers, http://www.dita4publishers.org/) + +Additional Third Party Code in standalone Oxygen WebHelp distribution: + +../com.oxygenxml.common/lib/ant-contrib-1.0b3.jar Apache-2.0 (see ../com.oxygenxml.common/lib/ant.LICENSE.txt) +../com.oxygenxml.common/lib/lucene-analyzers-common-4.7.2.jar Apache-2.0 with additional 3rd party licenses (see ../com.oxygenxml.common/lib/lucene.LICENSE.txt) +../com.oxygenxml.common/lib/lucene-analyzers-kuromoji-4.7.2.jar Apache-2.0 with additional 3rd party licenses (see ../com.oxygenxml.common/lib/lucene.LICENSE.txt) +../com.oxygenxml.common/lib/lucene-core-4.7.2.jar Apache-2.0 with additional 3rd party license (see ../com.oxygenxml.common/lib/lucene.LICENSE.txt) +../com.oxygenxml.highlight/lib/xslthl-2.1.1.jar zlib/libpng License (see ../com.oxygenxml.highlight/lib/xslthl.LICENSE.txt) +../com.oxygenxml.common/lib/jakarta.activation-1.2.2.jar EDL 1.0 (see: ../com.oxygenxml.common/lib/jakarta.activation-1.2.2.jar/META-INF/LICENSE.md) +../com.oxygenxml.common/lib/jaxb-impl-2.3.3.jar EDL 1.0 (see: ../com.oxygenxml.common/lib/jaxb-impl-2.3.3/META-INF/LICENSE.md) +../com.oxygenxml.common/lib/jakarta.xml.bind-api-2.3.3.jar EDL 1.1 (see: ../com.oxygenxml.common/lib/jakarta.xml.bind-api-2.3.3.jar/META-INF/LICENSE.md) +../com.oxygenxml.common/lib/htmlcleaner-2.10.jar BSD License (http://htmlcleaner.sourceforge.net/license.php) + +========================= W3C ================================================== + +W3C(R) SOFTWARE NOTICE AND LICENSE + + +Copyright (c) 1994-2002 World Wide Web Consortium, (Massachusetts Institute of +Technology, Institut National de Recherche en Informatique et en Automatique, +Keio University). All Rights Reserved. http://www.w3.org/Consortium/Legal/ + +This W3C work (including software, documents, or other related items) is being +provided by the copyright holders under the following license. By obtaining, +using and/or copying this work, you (the licensee) agree that you have read, +understood, and will comply with the following terms and conditions: +Permission to use, copy, modify, and distribute this software and its +documentation, with or without modification, for any purpose and without fee or +royalty is hereby granted, provided that you include the following on ALL +copies of the software and documentation or portions thereof, including +modifications, that you make: + + 1. The full text of this NOTICE in a location viewable to users of the + redistributed or derivative work. + 2. Any pre-existing intellectual property disclaimers, notices, or terms and + conditions. If none exist, a short notice of the following form (hypertext + is preferred, text is permitted) should be used within the body of any + redistributed or derivative code: "Copyright (c) [$date-of-software] World + Wide Web Consortium, (Massachusetts Institute of Technology, Institut + National de Recherche en Informatique et en Automatique, Keio University). + All Rights Reserved. http://www.w3.org/Consortium/Legal/" + 3. Notice of any changes or modifications to the W3C files, including the + date changes were made. (We recommend you provide URIs to the location + from which the code is derived.) + +THIS SOFTWARE AND DOCUMENTATION IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS MAKE +NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED +TO, WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT +THE USE OF THE SOFTWARE OR DOCUMENTATION WILL NOT INFRINGE ANY THIRD PARTY +PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS. +COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR DOCUMENTATION. +The name and trademarks of copyright holders may NOT be used in advertising or +publicity pertaining to the software without specific, written prior +permission. Title to copyright in this software and any associated +documentation will at all times remain with copyright holders. +____________________________________ +This formulation of W3C's notice and license became active on August 14 1998 so +as to improve compatibility with GPL. This version ensures that W3C software +licensing terms are no more restrictive than GPL and consequently W3C software +may be distributed in GPL packages. See the older_formulation for the policy +prior to this date. Please see our Copyright_FAQ for common questions about +using materials from our site, including specific terms and conditions for +packages like libwww, Amaya, and Jigsaw. Other questions about this notice can +be directed to site-policy@w3.org. + + +========================= Apache-2.0 =========================================== + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +===================== BSD 3-Clause ================================================= + +http://www.opensource.org/licenses/BSD-3-Clause +Copyright (c) , +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, + are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, this +list of conditions and the following disclaimer in the documentation and/or other +materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its contributors may +be used to endorse or promote products derived from this software without specific +prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY + EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +===================== BSD 2-Clause ===================================================== +https://opensource.org/licenses/BSD-2-Clause +Copyright (c) , +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, this +list of conditions and the following disclaimer in the documentation and/or other +materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY +EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT +SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT +OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR +TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, +EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +===================== MIT License ================================================== + +The MIT License + +Copyright (c) __YEARS__, __NAMES__ + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +===================== CC BY 2.0 UK ================================================== +http://creativecommons.org/licenses/by/2.0/uk/legalcode + +Licence + +THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENCE +("CCPL" OR "LICENCE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF +THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENCE OR COPYRIGHT LAW IS PROHIBITED. BY +EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF +THIS LICENCE. THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR +ACCEPTANCE OF SUCH TERMS AND CONDITIONS. + +This Creative Commons England and Wales Public Licence enables You (all capitalised terms defined +below) to view, edit, modify, translate and distribute Works worldwide, provided that You credit +the Original Author. + +'The Licensor' [one or more legally recognised persons or entities offering the Work under the +terms and conditions of this Licence] + +and + +'You' + +agree as follows: + +1. Definitions + + "Attribution" means acknowledging all the parties who have contributed to and have rights in + the Work, Derivative Work or Collective Work under this Licence. + "Collective Work" means the Work in its entirety in unmodified form along with a number of + other separate and independent works, assembled into a collective whole. + "Derivative Work" means any work created by the editing, modification, adaptation or + translation of the Work in any media (however a work that constitutes a Collective Work will + not be considered a Derivative Work for the purpose of this Licence). For the avoidance of + doubt, where the Work is a musical composition or sound recording, the synchronization of + the Work in timed-relation with a moving image ("synching") will be considered a Derivative + Work for the purpose of this Licence. + "Licence" means this Creative Commons England and Wales Public Licence agreement. + "Original Author" means the individual (or entity) who created the Work. + "Work" means the work protected by copyright which is offered under the terms of this Licence. + For the purpose of this Licence, when not inconsistent with the context, words in the singular + number include the plural number. + +2. Licence Terms + +2.1 The Licensor hereby grants to You a worldwide, royalty-free, non-exclusive, Licence for use +and for the duration of copyright in the Work. + +You may: + + copy the Work; + create one or more Derivative Works; + incorporate the Work into one or more Collective Works; + copy Derivative Works or the Work as incorporated in any Collective Work; and + publish, distribute, archive, perform or otherwise disseminate the Work, Derivative Works + or the Work as incorporated in any Collective Work, to the public in any material form in any + media whether now known or hereafter created. + +HOWEVER, + +You must not: + + impose any terms on the use to be made of the Work, the Derivative Work or the Work as + incorporated in a Collective Work that alter or restrict the terms of this Licence or any + rights granted under it or has the effect or intent of restricting the ability to exercise + those rights; + impose any digital rights management technology on the Work, the Derivative Work or the Work + as incorporated in a Collective Work that alters or restricts the terms of this Licence or + any rights granted under it or has the effect or intent of restricting the ability to + exercise those rights; + sublicense the Work; + subject the Work to any derogatory treatment as defined in the Copyright, Designs and Patents + Act 1988. + +FINALLY, + +You must: + + make reference to this Licence (by Uniform Resource Identifier (URI), spoken word or as + appropriate to the media used) on all copies of the Work and Derivative Works and Collective + Works published, distributed, performed or otherwise disseminated or made available to the + public by You; + recognise the Licensor's / Original Author's right of attribution in any Work, Derivative Work + and Collective Work that You publish, distribute, perform or otherwise disseminate to the + public and ensure that You credit the Licensor / Original Author as appropriate to the media + used; and + to the extent reasonably practicable, keep intact all notices that refer to this Licence, in + particular the URI, if any, that the Licensor specifies to be associated with the Work, + unless such URI does not refer to the copyright notice or licensing information for the Work. + +Additional Provisions for third parties making use of the Work + +2.2. Further licence from the Licensor + +Each time You publish, distribute, perform or otherwise disseminate + + the Work; or + any Derivative Work; or + the Work as incorporated in a Collective Work + +the Licensor agrees to offer to the relevant third party making use of the Work (in any of the +alternatives set out above) a licence to use the Work on the same terms and conditions as granted +to You hereunder. + +2.3. This Licence does not affect any rights that the User may have under any applicable law, +including fair use, fair dealing or any other legally recognised limitation or exception to +copyright infringement. + +2.4. All rights not expressly granted by the Licensor are hereby reserved, including but not +limited to, the exclusive right to collect, whether individually or via a licensing body, such as +a collecting society, royalties for any use of the Work. + +3. Warranties and Disclaimer + +Except as required by law, the Work or any Derivative Work is licensed by the Licensor on an +"as is" and "as available" basis and without any warranty of any kind, either express or implied. + +4. Limit of Liability + +Subject to any liability which may not be excluded or limited by law the Licensor shall not be +liable and hereby expressly excludes all liability for loss or damage howsoever and whenever +caused to You. + +5. Termination + +The rights granted to You under this Licence shall terminate automatically upon any breach by +You of the terms of this Licence. Individuals or entities who have received Derivative Works or +Collective Works from You under this Licence, however, will not have their Licences terminated +provided such individuals or entities remain in full compliance with those Licences. + +6. General + +6.1. The validity or enforceability of the remaining terms of this agreement is not affected by +the holding of any provision of it to be invalid or unenforceable. + +6.2. This Licence constitutes the entire Licence Agreement between the parties with respect to +the Work licensed here. There are no understandings, agreements or representations with respect +to the Work not specified here. The Licensor shall not be bound by any additional provisions that +may appear in any communication in any form. + +6.3. A person who is not a party to this Licence shall have no rights under the Contracts +(Rights of Third Parties) Act 1999 to enforce any of its terms. + +6.4. This Licence shall be governed by the law of England and Wales and the parties irrevocably +submit to the exclusive jurisdiction of the Courts of England and Wales. + +7. On the role of Creative Commons + +7.1. Neither the Licensor nor the User may use the Creative Commons logo except to indicate that +the Work is licensed under a Creative Commons Licence. Any permitted use has to be in compliance +with the Creative Commons trade mark usage guidelines at the time of use of the Creative Commons +trade mark. These guidelines may be found on the Creative Commons website or be otherwise +available upon request from time to time. + +7.2. Creative Commons Corporation does not profit financially from its role in providing this +Licence and will not investigate the claims of any Licensor or user of the Licence. + +7.3. One of the conditions that Creative Commons Corporation requires of the Licensor and You +is an acknowledgement of its limited role and agreement by all who use the Licence that the +Corporation is not responsible to anyone for the statements and actions of You or the Licensor +or anyone else attempting to use or using this Licence. + +7.4. Creative Commons Corporation is not a party to this Licence, and makes no warranty +whatsoever in connection to the Work or in connection to the Licence, and in all events is not +liable for any loss or damage resulting from the Licensor's or Your reliance on this Licence +or on its enforceability. + +7.5. USE OF THIS LICENCE MEANS THAT YOU AND THE LICENSOR EACH ACCEPTS THESE CONDITIONS IN +SECTION 7.1, 7.2, 7.3, 7.4 AND EACH ACKNOWLEDGES CREATIVE COMMONS CORPORATION'S VERY LIMITED ROLE +AS A FACILITATOR OF THE LICENCE FROM THE LICENSOR TO YOU. \ No newline at end of file diff --git a/docs/grafana/rmf-app/manage_dashboards.html b/docs/grafana/rmf-app/manage_dashboards.html new file mode 100644 index 0000000..cd74542 --- /dev/null +++ b/docs/grafana/rmf-app/manage_dashboards.html @@ -0,0 +1,287 @@ + + + Managing dashboards + + + + + + + + + + + + + + + + + Jump to main content + + + + + + + + + + + + + +
+
+ + +
+ + + + +
+
+ + + + +
+ + + +
+

Managing dashboards

+

You can mange the dashboard to perform various tasks such as creating a folder or a + dashboard, moving dashboards into folders, deleting multiple dashboards, and navigating to a + folder page where you can assign folder and dashboard permissions.

+
+

Creating Folders

+ +

You can create folders to organize and group dashboards, which is helpful for + managing multiple dashboards on the same Grafana instance.

+

Before you begin

+
    +
  • You have been assigned the role of an Administrator of + Grafana.
  • +
+
+

Procedure

  1. + Navigate to the left-side menu, and then click + Dashboards. +
  2. + Click New, and then select New + Folder. +
  3. + Enter a name for the folder in the Folder name + field. +
  4. + Click Create. +
+

Results

You have created the Folder.
+

What to do next

You can use the folder that you created to save + dashboards.
+
+
+
+

Exporting dashboards

+ +

You can export dashboards from Grafana into a JSON file to reuse in the future + when required.

+

Before you begin

You must have completed the following tasks:
    +
  • Been assigned the role of an + Administrator of Grafana.
  • +
  • Created a dashboard. See Creating dashboards
  • +
+

Procedure

  1. + Navigate to the left-side menu, and then click + Dashboards. +
  2. + Open the dashboard that you want to export from the corresponding + Folder. +
  3. + Click the Share + icon, and then + click the Export tab. +
  4. + Click Save to file. +
+

Results

You have downloaded the dashboard as the JSON + file.
+

What to do next

You can import the dashboard to Grafana whenever you + need it in the future. See Importing dashboards.
+
+
+
+

Importing dashboards

+ +

You can import the dashboard saved in JSON format into Grafana for further + customization. Thereby, you can construct the dashboard based on your + requirements.

+

Before you begin

You must have completed the following tasks:
    +
  • Been assigned the role of an + Administrator of Grafana.
  • +
  • Dashboard saved in JSON format.
  • +
+

Procedure

  1. + Navigate to the left-side menu, and then click + Dashboards. +
  2. + Click New, and then select + Import. +
  3. + Click Upload dashboard JSON file and choose the + dashboard JSON file stored on your computer. +
    Alternatively, you can locate the dashboard JSON file and then drag and + drop it to the Upload dashboard JSON file + field.
    +
  4. + Select a location to save your dashboard from the Folder + list. +
    +
    Note: The default location for the + Folder is set as + General.
    +
    +
  5. + Click Import. +
+

Results

You have imported the dashboard to Grafana.
+

What to do next

You can apply visualization to the dashboard. See + Applying visualization to data.
+
+
+
+ + + + + + +
+ + + +
+
+ + + +
+
+ +
+ +
+ +
+ + + + + + + \ No newline at end of file diff --git a/docs/grafana/rmf-app/oxygen-webhelp/app/config.js b/docs/grafana/rmf-app/oxygen-webhelp/app/config.js new file mode 100644 index 0000000..ebebfc8 --- /dev/null +++ b/docs/grafana/rmf-app/oxygen-webhelp/app/config.js @@ -0,0 +1,144 @@ +define(function() { + + var modulePaths = { + // core + "webhelp" : "core/webhelp", + "codeblock": "core/wh-codeblock", + "top-menu": "core/wh-top-menu", + "expand": "core/expand", + "permalink": "core/permalink", + "polyfill": "core/polyfill", + "wh-sticky": "core/wh-sticky", + "dom-sanitizer": "core/wh-dom-sanitizer", + // context sensitive help + "context-help" : "context-help/context-help", + "context-help-map" : "context-help/context-help-map", + // navigation links + "menu" : "nav-links/menu-loader", + "toc" : "nav-links/toc-loader", + "nav" : "nav-links/nav", + // search + "search-init" : "search/search-init", + "search" : "search/search", + "searchAPI" : "search/searchAPI", + "searchEngine" : "search/searchEngine", + "searchPresenter" : "search/searchPresenter", + "nwSearchFnt" : "search/nwSearchFnt", + "searchAutocomplete" : "search/searchAutocomplete", + "searchHistoryItems" : "search/searchHistoryItems", + "webhelpSearchEngine" : "search/webhelpSearchEngine", + // search index + "index" : "search/index/index", + "link2parent" : "search/index/link-to-parent", + "stopwords" : "search/index/stopwords", + "index-1" : "search/index/index-1", + "index-2" : "search/index/index-2", + "index-3" : "search/index/index-3", + "htmlFileInfoList" : "search/index/htmlFileInfoList", + "keywords" : "search/index/keywords", + // stemmers + "stemmer" : "search/stemmers/stemmer", + "en_stemmer" : "search/stemmers/en_stemmer", + "de_stemmer" : "search/stemmers/de_stemmer", + "fr_stemmer" : "search/stemmers/fr_stemmer", + // options + "options" : "options/options", + "properties" : "options/properties", + // utilities + "util" : "util/util", + "parseuri" : "util/parseuri", + // i18n + "localization" : "localization/localization", + "strings" : "localization/strings", + // image maps + "image-map" : "image-map/image-map", + + // Publishing template JS module loader + "template-module-loader" : "template/template-module-loader", + // Publishing Template base directory + "template-base-dir" : "../template", + + // jquery-private + "jquery-private" : "jquery-private/jquery-private", + "jquery.highlight.amd" : "jquery-private/jquery.highlight.amd", + "jquery.bootpag.amd" : "jquery-private/jquery.bootpag.amd", + "jquery.rwdImageMaps.amd" : "jquery-private/jquery.rwdImageMaps.amd", + /******************************************************** + **************** 3rd Party Libraries ******************* + ********************************************************/ + + // JQuery + "jquery" : "../lib/jquery/jquery-3.5.1.min", + // JQuery UI + "jquery.ui" : "../lib/jquery-ui/jquery-ui.min", + // JQuery Highlight + "jquery.highlight" : "../lib/jquery-highlight/jquery.highlight-3", + // JQuery Image maps highlighter + "jquery.maphilight" : "../lib/maphighlight/jquery.maphilight.min", + // JQuery Responsive image maps + "jquery.rwdImageMaps" : "../lib/rwdImageMaps/jquery.rwdImageMaps.min", + // JQuery Bootpag + "jquery.bootpag" : "../lib/jquery-bootpag/jquery.bootpag.min", + // Popper + "bootstrap" : "../lib/bootstrap/js/bootstrap.bundle.min", + + "kuromoji" : "../lib/kuromoji/kuromoji", + + // DOM Purify + "dompurify" : "../lib/dom-purify/purify.min" + }; + + var shimConfig = { + // Responsive image maps + "jquery.rwdImageMaps" : { + deps: ["jquery"], + exports : "jQuery.fn.rwdImageMaps" + }, + // JQuery Highlight + "jquery.highlight" : { + deps: ["jquery"], + exports : "jQuery.fn.highlight" + }, + // JQuery Bootpag + "jquery.bootpag" : { + deps: ["jquery"], + exports : "jQuery.fn.bootpag" + }, + }; + + requirejs.config({ + paths : modulePaths, + shim : shimConfig, + urlArgs: function(id, url) { + var args = '2022110310'; + + if(id === 'index-1' || id === 'index-2' || id === 'index-3' || id === 'stopwords' + ||id === 'htmlFileInfoList' || id === 'keywords') { + args = '20231024115913'; + } + + return (url.indexOf('?') === -1 ? '?' : '&') + args; + }, + map: { + // @see http://requirejs.org/docs/jquery.html#noconflictmap + + // '*' means all modules will get 'jquery-private' + // for their 'jquery' dependency. + "*": { + "jquery": "jquery-private", + "jquery.rwdImageMaps" : "jquery.rwdImageMaps.amd", + "jquery.highlight" : "jquery.highlight.amd", + "jquery.bootpag" : "jquery.bootpag.amd" + }, + + // 'jquery-private' wants the real jQuery module + // though. If this line was not here, there would + // be an unresolvable cyclic dependency. + "jquery-private": { "jquery": "jquery" }, + "jquery.rwdImageMaps.amd" : {"jquery.rwdImageMaps" : "jquery.rwdImageMaps"}, + "jquery.highlight.amd" : {"jquery.highlight" : "jquery.highlight"}, + "jquery.bootpag.amd" : {"jquery.bootpag" : "jquery.bootpag"} + + } + }); +}); \ No newline at end of file diff --git a/docs/grafana/rmf-app/oxygen-webhelp/app/context-help/context-help-map.js b/docs/grafana/rmf-app/oxygen-webhelp/app/context-help/context-help-map.js new file mode 100644 index 0000000..7170d04 --- /dev/null +++ b/docs/grafana/rmf-app/oxygen-webhelp/app/context-help/context-help-map.js @@ -0,0 +1 @@ +define(function() { return [{"appname":"", "appid":"visual_grafana", "path":"visual_grafana.html"},{"appname":"", "appid":"rmf_plugin", "path":"rmf_plugin.html"},{"appname":"", "appid":"query_lang", "path":"query_lang.html"},{"appname":"", "appid":"rn", "path":"rn.html"},{"appname":"", "appid":"install_grafana_plugin", "path":"install_grafana_plugin.html"},{"appname":"", "appid":"create_datasources", "path":"create_datasources.html"},{"appname":"", "appid":"db_ovw", "path":"db_ovw.html"},{"appname":"", "appid":"create_dashboards", "path":"create_dashboards.html"},{"appname":"", "appid":"manage_dashboards", "path":"manage_dashboards.html"},{"appname":"", "appid":"apply_visualize", "path":"apply_visualize.html"},{"appname":"", "appid":"apply_transformation", "path":"apply_transformation.html"},{"appname":"", "appid":"variables", "path":"variables.html"},{"appname":"", "appid":"alerts", "path":"alerts.html"},{"appname":"", "appid":"creating_alert_rules", "path":"creating_alert_rules.html"},{"appname":"", "appid":"confi_contact_points", "path":"config_contact_points.html"},{"appname":"", "appid":"grafana_via_zosmf", "path":"grafana_via_zosmf.html"},{"appname":"", "appid":"define_grafana_zosmf", "path":"define_grafana_zosmf.html"},{"appname":"", "appid":"access_grafana_zosmf", "path":"access_grafana_zosmf.html"},{"appname":"", "appid":"historical_data", "path":"historical_data.html"},{"appname":"", "appid":"error_reports", "path":"error_reports.html"}]}); \ No newline at end of file diff --git a/docs/grafana/rmf-app/oxygen-webhelp/app/context-help/context-help.js b/docs/grafana/rmf-app/oxygen-webhelp/app/context-help/context-help.js new file mode 100644 index 0000000..3cfe9e5 --- /dev/null +++ b/docs/grafana/rmf-app/oxygen-webhelp/app/context-help/context-help.js @@ -0,0 +1,26 @@ +define(["require", "util", "dom-sanitizer"], function (require, util, domSanitizer) { + $(document).ready(function () { + // If we have a contextID, we must to redirect to the corresponding topic + var contextId = util.getParameter('contextId'); + var appname = util.getParameter('appname'); + + if (contextId != undefined && contextId != "") { + require(["context-help-map"], function (helpContext) { + if (helpContext != undefined) { + for (var i = 0; i < helpContext.length; i++) { + var ctxt = helpContext[i]; + if (contextId == ctxt["appid"] && (appname == undefined || appname == ctxt["appname"])) { + var path = ctxt["path"]; + if (path != undefined) { + var anchor = decodeURI(window.location.hash); + var sanitizedAnchor = domSanitizer.sanitize(anchor); + window.location = path + sanitizedAnchor; + } + break; + } + } + } + }); + } + }); +}); \ No newline at end of file diff --git a/docs/grafana/rmf-app/oxygen-webhelp/app/core/expand.css b/docs/grafana/rmf-app/oxygen-webhelp/app/core/expand.css new file mode 100644 index 0000000..1d81557 --- /dev/null +++ b/docs/grafana/rmf-app/oxygen-webhelp/app/core/expand.css @@ -0,0 +1,30 @@ +@media screen{ + +/* Expand / collapse */ + table > caption, +.topic > .title, +.sectiontitle:not(.tasklabel), +.wh_term_group > .wh_first_letter { + padding-left: .7em +} + +.wh_expand_btn.expanded:before { + content:"p"; +} + +.wh_expand_btn:before { + content:"q"; + font-family: "oXygen WebHelp", serif; + font-style: normal; + font-size: 0.6em; + font-weight: lighter; + display: inline-block; +} + +.wh_expand_btn { + cursor: pointer; + position: relative; + left: -0.6em; +} + +} \ No newline at end of file diff --git a/docs/grafana/rmf-app/oxygen-webhelp/app/core/expand.js b/docs/grafana/rmf-app/oxygen-webhelp/app/core/expand.js new file mode 100644 index 0000000..60f28c3 --- /dev/null +++ b/docs/grafana/rmf-app/oxygen-webhelp/app/core/expand.js @@ -0,0 +1,173 @@ +define(["options", "localization", "jquery"], function (options, i18n, $) { + + + var selectors = { + /* Selectors for the nodes that will contain an expand/collapse button. */ + "expand_buttons": [ + /* Table caption */ + "table > caption:not(:empty)", + /* Article title */ + ".topic > .title", + /* Section title. Exclude task labels generated by DITA-OT (EXM-37958 & EXM-38501).*/ + ".sectiontitle:not(.tasklabel)", + /* Index terms groups */ + ".wh_term_group > .wh_first_letter" + ], + }; + + var expandInitialState = options.get("webhelp.topic.collapsible.elements.initial.state"); + + /** + * Add expand-collapse support. + */ + $(document).ready(function () { + /* Add the expand/collapse buttons. */ + selectors.expand_buttons.forEach( + function (selector) { + var matchedNodes = $(document).find(selector); + // Add the expand/collapse support only if the title node has visible siblings. + var visibleSiblings = matchedNodes.siblings(':not(:hidden)'); + if (visibleSiblings.length > 0) { + // Add the element with expand/collapse capabilities + matchedNodes.prepend( + $("", { + "class": "wh_expand_btn expanded", + "role": "button", + "aria-expanded" : "true", + "tabindex" : 0, + "aria-label" : i18n.getLocalization("collapse") + + }) + ); + markHiddenSiblingsAsNotExpandable(matchedNodes); + } + } + ); + + /* + * Slide down when click on a letter from the indexterms bar + * */ + $('.wh-letters a').click(function (e) { + var id = $(this).attr('href').replace("#", ""); + e.preventDefault(); + history.replaceState({}, '', e.target.href); + + if ($("[id='" + id + "']").length > 0) { + $('html, body').animate({scrollTop: $("[id='" + id + "']").offset().top}, 1000); + } + }); + + /* Expand / collapse subtopic sections */ + function toggleSubtopics(state) { + var siblings = $(this).parent().siblings(':not(.wh_not_expandable)'); + + if (state !== undefined) { + // Will expand-collapse the siblings of the parent node, excepting the ones that were marked otherwise + if (state == 'collapsed') { + siblings.slideUp(0); + $('.webhelp_expand_collapse_sections').attr('data-next-state', 'expanded').attr('title', i18n.getLocalization('expandSections')); + $(this).removeClass('expanded'); + $(this).attr('aria-expanded', false); + $(this).attr('aria-label', i18n.getLocalization('expand')); + } else { + siblings.slideDown(0); + $('.webhelp_expand_collapse_sections').attr('data-next-state', 'collapsed').attr('title', i18n.getLocalization('collapseSections')); + $(this).addClass('expanded'); + $(this).attr('aria-expanded', true); + $(this).attr('aria-label', i18n.getLocalization("collapse")); + } + } else { + // Change the button state + $(this).toggleClass("expanded"); + var isExpanded = $(this).hasClass("expanded"); + $(this).attr('aria-expanded', isExpanded); + + if (isExpanded) { + $(this).attr('aria-label', i18n.getLocalization("collapse")); + } else { + $(this).attr('aria-label', i18n.getLocalization('expand')); + } + + var parent = $(this).parent(); + var tagName = parent.prop("tagName"); + // Will expand-collapse the siblings of the parent node, excepting the ones that were marked otherwise + if (tagName == "CAPTION" || parent.hasClass('wh_first_letter')) { + // The table does not have display:block, so it will not slide. + // In this case we'll just hide it + siblings.toggle(); + } else { + siblings.slideToggle("1000"); + } + } + } + + + /* + * WH-235 + * Sets the initial state of collapsible elements + */ + $.each($(document).find('.wh_expand_btn'), function () { + toggleSubtopics.call(this, expandInitialState); + }); + + + /* + * Toggle the subtopic sections + */ + $('.webhelp_expand_collapse_sections').click(function () { + var state = $('.webhelp_expand_collapse_sections').attr('data-next-state'); + + $.each($(document).find('.wh_expand_btn'), function () { + toggleSubtopics.call(this, state); + }); + + return false; + }); + + + /* + * WH-1750 - Handle topic TOC expand/collapse actions + */ + $('.wh_topic_toc a').click(function () { + var currentNode = $(this).attr("href"); + var contentNode = $(currentNode); + if(contentNode.length){ + $.each(contentNode.parents(), function () { + if ($(this).children(".title").length) { + toggleSubtopics.call($(this).children('.title').find('.wh_expand_btn'),'expanded'); + } + }); + toggleSubtopics.call(contentNode.children('.title').find('.wh_expand_btn'),'expanded'); + } + }); + + + /* Expand / collapse support for the marked content */ + var expandWidgets = $(document).find('.wh_expand_btn'); + expandWidgets.click(function (event) { + toggleSubtopics.call(this); + + return false; + }); + + /* Toggle expand/collapse on enter and space */ + expandWidgets.keypress(function( event ) { + // Enter & Spacebar events + if ( event.which === 13 || event.which === 32) { + event.preventDefault(); + toggleSubtopics.call(this); + } + }); + + }); + + /** + * Marks the hidden siblings of the matched nodes as being not expandable. + * + * @param nodes The matched nodes. + */ + function markHiddenSiblingsAsNotExpandable(nodes) { + var siblings = nodes.siblings(":hidden"); + siblings.addClass("wh_not_expandable"); + } +}); \ No newline at end of file diff --git a/docs/grafana/rmf-app/oxygen-webhelp/app/core/fonts.css b/docs/grafana/rmf-app/oxygen-webhelp/app/core/fonts.css new file mode 100644 index 0000000..22515a2 --- /dev/null +++ b/docs/grafana/rmf-app/oxygen-webhelp/app/core/fonts.css @@ -0,0 +1,4 @@ +@font-face { + font-family: 'oXygen WebHelp'; + src: url(oxygen-webhelp-icons.ttf); +} \ No newline at end of file diff --git a/docs/grafana/rmf-app/oxygen-webhelp/app/core/footer-fix.css b/docs/grafana/rmf-app/oxygen-webhelp/app/core/footer-fix.css new file mode 100644 index 0000000..1a711e0 --- /dev/null +++ b/docs/grafana/rmf-app/oxygen-webhelp/app/core/footer-fix.css @@ -0,0 +1,16 @@ +/* WH-2759 Pushes footer at the bottom of the page. */ +body { + display: flex; + flex-direction: column; + min-height: 100vh; +} + +.wh_main_page .wh_content_area { + margin-left: 0; + margin-right: 0; +} + +#wh_topic_container, +.wh_content_area { + flex-grow: 1; +} \ No newline at end of file diff --git a/docs/grafana/rmf-app/oxygen-webhelp/app/core/icons.css b/docs/grafana/rmf-app/oxygen-webhelp/app/core/icons.css new file mode 100644 index 0000000..46f7754 --- /dev/null +++ b/docs/grafana/rmf-app/oxygen-webhelp/app/core/icons.css @@ -0,0 +1,40 @@ +.glyphicon:before, +.glyphicon:after, +.oxy-icon:before, +.oxy-icon:after { + font-family: "oXygen WebHelp"; +} + +.glyphicon-chevron-up:before, +.oxy-icon-up:before { + content: "r"; +} + +.glyphicon-remove:before, +.oxy-icon-remove:before { + content: "g"; +} + +.glyphicon-print:before, +.oxy-icon-print:before { + content: "n"; +} + +.glyphicon-arrow-left:before, +.oxy-icon-arrow-left:before { + content: "u"; +} + +.glyphicon-arrow-right:before, +.oxy-icon-arrow-right:before { + content: "t"; +} + +.glyphicon-ok:before, +.oxy-icon-ok:before { + content: "i"; +} + +.home a:before { + font-family: "oXygen WebHelp", serif !important; +} \ No newline at end of file diff --git a/docs/grafana/rmf-app/oxygen-webhelp/app/core/oxygen-webhelp-icons.ttf b/docs/grafana/rmf-app/oxygen-webhelp/app/core/oxygen-webhelp-icons.ttf new file mode 100644 index 0000000..dd3b23d Binary files /dev/null and b/docs/grafana/rmf-app/oxygen-webhelp/app/core/oxygen-webhelp-icons.ttf differ diff --git a/docs/grafana/rmf-app/oxygen-webhelp/app/core/permalink.css b/docs/grafana/rmf-app/oxygen-webhelp/app/core/permalink.css new file mode 100644 index 0000000..7447bd3 --- /dev/null +++ b/docs/grafana/rmf-app/oxygen-webhelp/app/core/permalink.css @@ -0,0 +1,20 @@ +@media screen { + + /* WH-1613 */ + .permalink{ + padding: 0 0.4em; + margin:0 0.5em 0 0.5em; + opacity: 0.35; + transition: opacity .3s; + background: url(../img/link-icon.png) no-repeat; + background-size: contain; + background-position-y: 60%; + cursor:pointer + } + + /* WH-1613 */ + .permalink:hover{ + opacity: 1; + cursor:pointer + } +} \ No newline at end of file diff --git a/docs/grafana/rmf-app/oxygen-webhelp/app/core/permalink.js b/docs/grafana/rmf-app/oxygen-webhelp/app/core/permalink.js new file mode 100644 index 0000000..9631ce1 --- /dev/null +++ b/docs/grafana/rmf-app/oxygen-webhelp/app/core/permalink.js @@ -0,0 +1,47 @@ +define(["options", "jquery"], function (options, $) { + + + var selectors = { + /* WH-1613 - permalink selector */ + "permalinks": [ + ".dt[id]", + ".section[id] .sectiontitle", + ".title.topictitle2[id]", + "table[id] .tablecap" + ] + }; + + $(document).ready(function () { + /* + * WH-1613 + * Add the permalink icons + */ + selectors.permalinks.forEach( + function (selector) { + var matchedNodes = $(document).find(selector); + // Add the element for the permalink action + matchedNodes.append(""); + } + ); + + /* + * WH-1613 + * Permalink action + * */ + $('span.permalink').click(function (e) { + var id = $(this).closest('[id]').attr('id'); + var hash = '#' + id; + e.preventDefault(); + history.replaceState({}, '', hash); + if(options.getBoolean("webhelp.enable.sticky.header")) { + var toolsHeight = $(".wh_tools").parent().outerHeight(); + var headerHeight = $(".wh_header").outerHeight(); + + $('html, body').animate({scrollTop: $("[id='" + id + "']").offset().top - toolsHeight - headerHeight}, 1000); + } else { + $('html, body').animate({scrollTop: $("[id='" + id + "']").offset().top}, 1000); + } + + }); + }); +}); \ No newline at end of file diff --git a/docs/grafana/rmf-app/oxygen-webhelp/app/core/polyfill.js b/docs/grafana/rmf-app/oxygen-webhelp/app/core/polyfill.js new file mode 100644 index 0000000..571a6cd --- /dev/null +++ b/docs/grafana/rmf-app/oxygen-webhelp/app/core/polyfill.js @@ -0,0 +1,11 @@ +define(function() { + // IE: WH-2284 + if (!String.prototype.endsWith) { + String.prototype.endsWith = function (search, this_len) { + if (this_len === undefined || this_len > this.length) { + this_len = this.length; + } + return this.substring(this_len - search.length, this_len) === search; + }; + } +}); diff --git a/docs/grafana/rmf-app/oxygen-webhelp/app/core/webhelp.css b/docs/grafana/rmf-app/oxygen-webhelp/app/core/webhelp.css new file mode 100644 index 0000000..6969abe --- /dev/null +++ b/docs/grafana/rmf-app/oxygen-webhelp/app/core/webhelp.css @@ -0,0 +1,18 @@ +@import "fonts.css?buildId=2022110310"; +@import "icons.css?buildId=2022110310"; +@import "../indexterms/indexterms.css?buildId=2022110310"; +/* WH-2488 Refactoring */ +@import "wh-elements.css?buildId=2022110310"; +@import "wh-responsive-images.css?buildId=2022110310"; +@import "wh-modal.css?buildId=2022110310"; +@import "wh-bootstrap-fix.css?buildId=2022110310"; +@import "wh-publication-logo-and-title.css?buildId=2022110310"; +@import "wh-welcome-area.css?buildId=2022110310"; +@import "wh-breadcrumb.css?buildId=2022110310"; +@import "wh-tools-and-navigation.css?buildId=2022110310"; +@import "wh-index-link.css?buildId=2022110310"; +@import "wh-toc.css?buildId=2022110310"; +@import "wh-search.css?buildId=2022110310"; +@import "wh-common.css?buildId=2022110310"; +@import "wh-sticky.css?buildId=2022110310"; +@import "footer-fix.css?buildId=2022110310"; \ No newline at end of file diff --git a/docs/grafana/rmf-app/oxygen-webhelp/app/core/webhelp.js b/docs/grafana/rmf-app/oxygen-webhelp/app/core/webhelp.js new file mode 100644 index 0000000..eebbdeb --- /dev/null +++ b/docs/grafana/rmf-app/oxygen-webhelp/app/core/webhelp.js @@ -0,0 +1,558 @@ +define(["options", "dom-sanitizer", 'util', 'jquery', 'jquery.highlight'], function(options, domSanitizer, util, $) { + // Add some Bootstrap classes when document is ready + var highlighted = false; + + var DEFAULT_MARGIN_STICKY_HEADER_DISABLED = 20; + + /* WH-2521 - Mark the document when it was fully loaded. + * This will allow us, for example, to apply transitions only if the document has been fully loaded. + * Otherwise, there will be color transitions between styles from different CSS files noticeable during page loading. */ + $(document).ready(function () { + $('html > body').addClass('doc-ready'); + }); + + $(document).ready(function () { + var scrollPosition = $(window).scrollTop(); + handlePublicationTocPosition(scrollPosition); + handleTopicTocPosition(scrollPosition); + + $(window).scroll(function() { + scrollPosition = handlePublicationTocPosition(scrollPosition); + handleTopicTocPosition(scrollPosition); + }); + $(window).resize(function(){ + $("#wh_publication_toc").removeAttr('style'); + scrollPosition = handlePublicationTocPosition(scrollPosition); + handleTopicTocPosition(scrollPosition); + }); + + // WH-2740 Current topic should always be selected and visible in the publication toc + displayActiveTopicInPublicationToc(); + + // Show/hide the button which expands/collapse the subtopics + // if there are at least two subtopics in a topic + var countSubtopics = $('.topic.nested1').length; + var countSections = $('section.section .title').length; + if(countSubtopics > 1 || countSections >1){ + $('.webhelp_expand_collapse_sections').show(); + } + + // WH-231 + // Expanding the side-toc + $('.dots-before').click(function(){ + $(this).siblings('.hide-before').show(); + $(this).hide(); + }); + + $('.dots-after').click(function(){ + $(this).siblings('.hide-after').show(); + $(this).hide(); + }); + + // WH-2209 + var showZoomedImage = options.getBoolean("webhelp.show.full.size.image"); + if (showZoomedImage) { + // Get the image and insert it inside the modal - use its "alt" text as a caption + $.each( $('img.image:not([usemap])'), function (e) { + var parentElement = $(this).parent().get(0).tagName; + if(this.naturalWidth > this.width && parentElement.toLowerCase() != 'a'){ + $(this).addClass('zoom'); + } + }); + $('.zoom').click(function(){ + $('#modal_img_large').css("display","block"); + $('#modal_img_container').append("\"\""); + $("#modal-img").attr('src',$(this).attr('src') ); + $("#caption").text( domSanitizer.sanitize($(this).attr('alt')) ); + }); + } + + // When the user clicks on (x), close the modal + $(".modal .close").click(function(){ + $(".modal").css("display","none"); + }); + $(document).keyup(function(e) { + if (e.keyCode == 27 && $('#modal_img_large').is(":visible")) { // escape key maps to keycode `27` + $(".modal").css("display","none"); + } + }); + + // Navigational links and print + $('#topic_navigation_links .navprev>a').addClass("oxy-icon oxy-icon-arrow-left"); + $('#topic_navigation_links .navnext>a').addClass("oxy-icon oxy-icon-arrow-right"); + $('.wh_print_link button').addClass('oxy-icon oxy-icon-print'); + + // Hide sideTOC when it is empty + var sideToc = $('#wh_publication_toc'); + var pageToc = $('#wh_topic_toc'); + if (sideToc !== undefined) { + var sideTocChildren = sideToc.find('*'); + if (sideTocChildren.length == 0) { + sideToc.css('display', 'none'); + + // The topic content should span on all 12 columns + sideToc.removeClass('col-lg-4 col-md-4 col-sm-4 col-xs-12'); + var topicContentParent = $('.wh_topic_content').parent(); + if (topicContentParent !== undefined && pageToc == undefined) { + topicContentParent.removeClass(' col-lg-8 col-md-8 col-sm-8 col-xs-12 '); + topicContentParent.addClass(' col-lg-12 col-md-12 col-sm-12 col-xs-12 '); + } + } else { + /* WH-1518: Check if the tooltip has content. */ + var emptyShortDesc = sideToc.find('.topicref .wh-tooltip .shortdesc:empty'); + if (emptyShortDesc.length > 0) { + var tooltip = emptyShortDesc.closest('.wh-tooltip'); + tooltip.remove(); + } + } + } + + // Show the close topic toc button. + if(pageToc.length) { + $('#wh_close_topic_toc_button').removeClass("d-none"); + $('#wh_close_topic_toc_button').addClass("d-lg-block"); + } + + // Show the close publication toc button. + if(sideToc.length) { + $('#wh_close_publication_toc_button').removeClass("d-none"); + $('#wh_close_publication_toc_button').addClass("d-md-block"); + } + + // WH-2482 Handler for the button that closes the topic toc. + $('#wh_close_topic_toc_button').click(function() { + // Check page toc is in DOM. + if(pageToc.length) { + var topicContentColumn = 10; + var topicTocColumns = 2; + if(sideToc.length) { + topicContentColumn = 7; + if(sideToc.hasClass("d-md-none")) { + topicContentColumn = 10; + } + } + + // Check page toc is displayed to the user. + if(pageToc.hasClass("d-lg-block")) { + $(this).addClass("clicked"); + $(this).attr('aria-expanded', false); + pageToc.removeClass("d-lg-block"); + pageToc.addClass("d-lg-none"); + + var topicContentParent = $('.wh_topic_content').parent(); + if (topicContentParent !== undefined) { + topicContentParent.removeClass(`col-lg-${topicContentColumn}`); + topicContentParent.addClass(`col-lg-${topicContentColumn + topicTocColumns}`); + topicContentParent.addClass("closed-page-toc"); + } + } else { + $(this).removeClass("clicked"); + $(this).attr('aria-expanded', true); + pageToc.removeClass("d-lg-none"); + pageToc.addClass("d-lg-block"); + + var topicContentParent = $('.wh_topic_content').parent(); + if (topicContentParent !== undefined) { + topicContentParent.removeClass(`col-lg-${topicContentColumn + topicTocColumns}`); + topicContentParent.removeClass("closed-page-toc"); + topicContentParent.addClass(`col-lg-${topicContentColumn}`); + } + + var tocWidth = parseInt(pageToc.outerWidth()) - parseInt(pageToc.css("padding-left")) - parseInt(pageToc.css("padding-right")); + $("#wh_topic_toc_content").css("width", tocWidth); + } + + $(this).css('right', Math.round($("#wh_topic_toc").outerWidth()) * (-1) + 5); + } + }); + + // WH-2482 Handler for the button that closes the publication toc. + $('#wh_close_publication_toc_button').click(function () { + closePublicationToc(sideToc, pageToc); + }); + + $('#wh_toc_button').click(function () { + closePublicationToc(sideToc, pageToc); + }); + + // WH-1518: Hide the Breadcrumb tooltip if it is empty. + var breadcrumb = $('.wh_breadcrumb'); + var breadcrumbShortDesc = breadcrumb.find('.topicref .wh-tooltip .shortdesc:empty'); + if (breadcrumbShortDesc.length > 0) { + var tooltip = breadcrumbShortDesc.closest('.wh-tooltip'); + tooltip.remove(); + } + + var $allAccordionHeaders = $(".wh_main_page_toc .wh_main_page_toc_accordion_header"); + var $allAccordionButtons = $(".wh_main_page_toc .wh_main_page_toc_accordion_header .header-button"); + + $allAccordionHeaders.click(function(event) { + $headerButton = $(this).find('.header-button'); + if ($(this).hasClass('expanded')) { + $(this).removeClass("expanded"); + $headerButton.attr('aria-expanded', 'false'); + } else { + $allAccordionHeaders.removeClass("expanded"); + $(this).addClass("expanded"); + $allAccordionButtons.attr('aria-expanded', 'false'); + $headerButton.attr('aria-expanded', 'true'); + } + event.stopImmediatePropagation(); + return false; + + }); + /* Toggle expand/collapse on enter and space */ + $allAccordionButtons.keypress(function( event ) { + // Enter & Spacebar events + if ( event.which === 13 || event.which === 32) { + event.preventDefault(); + var $parentHeader = $(this).closest('.wh_main_page_toc_accordion_header'); + if ($parentHeader.hasClass('expanded')) { + $parentHeader.removeClass("expanded"); + $(this).attr('aria-expanded', 'false'); + } else { + $allAccordionHeaders.removeClass("expanded"); + $parentHeader.addClass("expanded"); + $allAccordionButtons.attr('aria-expanded', 'false'); + $(this).attr('aria-expanded', 'true'); + } + } + return false; + }); + + $(".wh_main_page_toc a").click(function(event) { + event.stopImmediatePropagation(); + }); + + highlightSearchTerm(); + + + + /** + * Check to see if the window is top if not then display button + */ + $(window).scroll(function(){ + if ($(this).scrollTop() > 5) { + $('#go2top').fadeIn('fast'); + } else { + $('#go2top').fadeOut('fast'); + } + }); + + /** + * Click event to scroll to top + */ + $('#go2top').click(function(){ + $('html, body').animate({scrollTop : 0},800); + + return false; + }); + }); + + +/* * + * @description Computes the position for the elements that are required to position the publication + * and topic toc. + */ +function computeStickyElementsPositions() { + var searchHeight = $('.wh_search_input').outerHeight(true); + var breadcrumbHeight = $(".wh_tools").parent().outerHeight(); + var headerHeight = $(".wh_header").outerHeight(); + var visibleSearchHeight = 0; + var topOffset = 0; + var visibleAreaHeight = 0; + var buttonOffset = 0; + + if(options.getBoolean("webhelp.enable.sticky.header")) { + buttonOffset = searchHeight; + if ($(window).scrollTop() > searchHeight) { + visibleSearchHeight = 0; + } else { + visibleSearchHeight = searchHeight - $(window).scrollTop(); + } + topOffset = breadcrumbHeight + headerHeight + visibleSearchHeight; + visibleAreaHeight = parseInt($(window).height()) - topOffset; + } else { + buttonOffset = breadcrumbHeight + headerHeight + searchHeight - DEFAULT_MARGIN_STICKY_HEADER_DISABLED; + var visibleHeader = breadcrumbHeight + headerHeight + searchHeight; + if($(window).scrollTop() > visibleHeader) { + visibleHeader = DEFAULT_MARGIN_STICKY_HEADER_DISABLED; + } else { + visibleHeader = visibleHeader - $(window).scrollTop(); + } + topOffset = visibleHeader; + visibleAreaHeight = parseInt($(window).height()) - topOffset; + } + + return { + topOffset: topOffset, + visibleAreaHeight: visibleAreaHeight, + buttonOffset: buttonOffset + } +} + +/* * + * @description Toggles the expand/collapse for the publication toc. + */ +function closePublicationToc(sideToc, pageToc) { + // Check publication toc is in DOM. + if(sideToc.length) { + var topicContentColumn = 9; + var publicationTocColumns = 3; + if(pageToc.length) { + topicContentColumn = 7; + if(pageToc.hasClass("d-lg-none")) { + topicContentColumn = 9; + } + } + + // Check publication toc is displayed to the user. + if(sideToc.hasClass("d-md-block") && sideToc.is(':visible')) { + $('#wh_close_publication_toc_button').attr('aria-expanded', false); + $('#wh_toc_button').attr('aria-expanded', false); + $('#wh_close_publication_toc_button').addClass("clicked"); + sideToc.removeClass(`col-lg-${publicationTocColumns} col-md-${publicationTocColumns}`); + sideToc.removeClass("d-block"); + sideToc.removeClass("d-md-block"); + sideToc.addClass("d-none"); + sideToc.addClass("d-md-none"); + + var topicContentParent = $('.wh_topic_content').parent(); + if (topicContentParent !== undefined) { + topicContentParent.removeClass(`col-lg-${topicContentColumn} col-md-9`); + topicContentParent.addClass(`col-lg-${topicContentColumn + publicationTocColumns} col-md-12`); + topicContentParent.addClass("closed-publication-toc"); + } + } else { + $('#wh_close_publication_toc_button').attr('aria-expanded', true); + $('#wh_toc_button').attr('aria-expanded', true); + $('#wh_close_publication_toc_button').removeClass("clicked"); + sideToc.addClass(`col-lg-${publicationTocColumns} col-md-${publicationTocColumns}`); + sideToc.removeClass("d-none"); + sideToc.removeClass("d-md-none"); + sideToc.addClass("d-block"); + sideToc.addClass("d-md-block"); + + var topicContentParent = $('.wh_topic_content').parent(); + if (topicContentParent !== undefined) { + topicContentParent.removeClass(`col-lg-${topicContentColumn + publicationTocColumns} col-md-12`); + topicContentParent.removeClass("closed-publication-toc"); + topicContentParent.addClass(`col-lg-${topicContentColumn} col-md-9`); + } + + var tocWidth = parseInt(sideToc.outerWidth()) - parseInt(sideToc.css("padding-left")) - parseInt(sideToc.css("padding-right")); + $("#wh_publication_toc_content").css("width", tocWidth); + } + + $('#wh_close_publication_toc_button').css('left', $("#wh_publication_toc").outerWidth() * (-1) + 5); + } +} + +/** + * @description Display the active topic in publication toc. + */ +function displayActiveTopicInPublicationToc() { + var $sideToc = $(".wh_publication_toc"); + var $slideSection = $('#wh_topic_body'); + if ($sideToc.length > 0 && $slideSection.length > 0) { + var sideTocTopPos = $(".wh_publication_toc").offset().top; + var sideTocBottomPos = sideTocTopPos + parseInt($(".wh_publication_toc").outerHeight()); + var activeElementPos = $('.wh_publication_toc .active > .topicref a').offset().top; + // Check if the selected topic is visibile in the top 80% of the publication toc. + if(activeElementPos > 0.8 * sideTocBottomPos) { + var sideTocMiddlePos = (sideTocTopPos + sideTocBottomPos) / 2; + $(".wh_publication_toc").animate({scrollTop: activeElementPos - sideTocMiddlePos}, 0); + } + } +} + +/** + * @description Handle the vertical position of the side toc + */ +function handlePublicationTocPosition(scrollPosition) { + var scrollPosition = scrollPosition !== undefined ? scrollPosition : 0; + var $publicationToc = $(".wh_publication_toc"); + var $navPublicationToc = $("#wh_publication_toc"); + var $topicBody = $('#wh_topic_body'); + var $publicationTocContent = $("#wh_publication_toc_content"); + + + if ($publicationToc.length > 0 && $topicBody.length > 0 && options.getBoolean("webhelp.enable.sticky.publication.toc")) { + var positions = computeStickyElementsPositions(); + var topOffset = positions.topOffset; + var visibleAreaHeight = positions.visibleAreaHeight; + var buttonOffset = positions.buttonOffset; + + var tocWidth = parseInt($navPublicationToc.outerWidth()) - parseInt($navPublicationToc.css("padding-left")) - parseInt($navPublicationToc.css("padding-right")); + + if(parseInt($(window).width()) > 767) { + $publicationTocContent.css("top", topOffset + "px").css("width", tocWidth + "px").css("position", "fixed").css("z-index", "997").css("display", "flex").css("flex-direction", "column"); + $publicationToc.css("overflow-y", "auto").css("overflow-x", "hidden"); + + // Adjust publication toc height when the footer apears in the viewport. + var footerPosition = $(".wh_footer")[0].getBoundingClientRect().top; + if(visibleAreaHeight + topOffset > footerPosition) { + $publicationTocContent.css("max-height", visibleAreaHeight - ($(window).height() - footerPosition) - 30); + } else { + $publicationTocContent.css("max-height", visibleAreaHeight - 30); + } + + // Find the position for the close publication toc button. + if($(window).scrollTop() > buttonOffset) { + $('#wh_close_publication_toc_button').css('top', $(window).scrollTop() - buttonOffset - 5); + } else { + $('#wh_close_publication_toc_button').css('top', '-5px'); + } + $('#wh_close_publication_toc_button').css('left', $navPublicationToc.outerWidth() * (-1) + 5); + } else { + $publicationTocContent.removeAttr('style'); + $publicationToc.removeAttr('style'); + } + } else { + $('#wh_close_publication_toc_button').css('top', '-5px'); + $('#wh_close_publication_toc_button').css('left', $navPublicationToc.outerWidth() * (-1) + 5); + } + + return $(window).scrollTop(); +} + +/** + * @description Highlight the current node in the page toc section on page scroll or clicking on Topic TOC items + */ +function pageTocHighlightNode(scrollPosition) { + var scrollPosition = scrollPosition !== undefined ? Math.round(scrollPosition) : 0; + + var searchHeight = $('.wh_search_input').outerHeight(true); + + var scrollMarginTop = $(".wh_tools").parent().outerHeight() + $(".wh_header").outerHeight(); + $('.wh_topic_content .title').parent().css("scroll-margin-top", scrollMarginTop); + + var topOffset = 33; + scrollPosition += scrollMarginTop; + + + var hash = location.hash != undefined ? location.hash : ""; + var hashOffTop = $(hash).offset() != undefined ? $(hash).offset().top : 0; + var elemHashTop = hash != "" ? Math.round(hashOffTop) : 0; + if( hash.substr(1) != '' && elemHashTop >= scrollPosition && (elemHashTop <= (scrollPosition + topOffset)) ){ + + $('#wh_topic_toc a').removeClass('current_node'); + $('#wh_topic_toc a[data-tocid = "'+ hash.substr(1) + '"]').addClass('current_node'); + } else { + $.each( $('.wh_topic_content .title'), function (e) { + var currentId = $(this).parent().attr('id'); + var elemTop = Math.round($(this).offset().top); + + if( elemTop >= scrollPosition && (elemTop <= (scrollPosition + topOffset)) ){ + + $('#wh_topic_toc a').removeClass('current_node'); + $('#wh_topic_toc a[data-tocid = "'+ currentId + '"]').addClass('current_node'); + } + }); + } + return $(window).scrollTop(); +} + + + +/** + * @description Handle the vertical position of the page toc + */ +function handleTopicTocPosition(scrollPosition) { + scrollPosition = scrollPosition !== undefined ? scrollPosition : 0; + var $navTopicToc = $("#wh_topic_toc"); + var $topicToc = $(".wh_topic_toc"); + var $topicTocContent = $("#wh_topic_toc_content"); + + if ($topicToc.length > 0 && options.getBoolean("webhelp.enable.sticky.topic.toc")) { + var positions = computeStickyElementsPositions(); + var topOffset = positions.topOffset; + var visibleAreaHeight = positions.visibleAreaHeight; + var buttonOffset = positions.buttonOffset; + + pageTocHighlightNode(scrollPosition); + + var tocHeight = parseInt($topicToc.height()) + parseInt($topicToc.css("padding-top")) + parseInt($topicToc.css("padding-bottom")) + parseInt($topicToc.css("margin-top")) + parseInt($topicToc.css("margin-bottom")); + var tocWidth = parseInt($navTopicToc.outerWidth()) - parseInt($navTopicToc.css("padding-left")) - parseInt($navTopicToc.css("padding-right")); + + if (tocHeight < visibleAreaHeight && parseInt($(window).width()) > 767) { + $topicTocContent.css("top", topOffset + "px").css("position", "fixed").css("width", tocWidth + "px"); + + // Find the position for the close publication toc button. + if($(window).scrollTop() > buttonOffset) { + $('#wh_close_topic_toc_button').css('top', $(window).scrollTop() - buttonOffset - 5); + } else { + $('#wh_close_topic_toc_button').css('top', '-5px'); + } + $('#wh_close_topic_toc_button').css('right', Math.round($navTopicToc.outerWidth()) * (-1) + 5); + } else { + $topicTocContent.removeAttr('style'); + $('#wh_close_topic_toc_button').css('top', '-5px'); + $('#wh_close_topic_toc_button').css('right', Math.round($navTopicToc.outerWidth()) * (-1) + 5); + } + } else { + $('#wh_close_topic_toc_button').css('top', '-5px'); + $('#wh_close_topic_toc_button').css('right', Math.round($navTopicToc.outerWidth()) * (-1) + 5); + } +} + + /** + * @description Highlight searched words + */ + function highlightSearchTerm() { + util.debug("highlightSearchTerm()"); + if (highlighted) { + return; + } + try { + var $body = $('.wh_topic_content'); + var $relatedLinks = $('.wh_related_links'); + var $childLinks = $('.wh_child_links'); + + // Test if highlighter library is available + if (typeof $body.removeHighlight != 'undefined') { + $body.removeHighlight(); + $relatedLinks.removeHighlight(); + + var hlParameter = util.getParameter('hl'); + if (hlParameter != undefined) { + var jsonString = decodeURIComponent(String(hlParameter)); + util.debug("jsonString: ", jsonString); + if (jsonString !== undefined && jsonString != "") { + var words = jsonString.split(','); + util.debug("words: ", words); + for (var i = 0; i < words.length; i++) { + util.debug('highlight(' + words[i] + ');'); + $body.highlight(words[i]); + $relatedLinks.highlight(words[i]); + $childLinks.highlight(words[i]); + } + } + } + } else { + // JQuery highlights library is not loaded + } + } + catch (e) { + util.debug (e); + } + highlighted = true; + } + + /* + * Hide the highlight of the search results + */ + $('.wh_hide_highlight').click(function(){ + $('.highlight').addClass('wh-h'); + $('.wh-h').toggleClass('highlight'); + $(this).toggleClass('hl-close'); + }); + + /* + * Show the highlight button only if 'hl' parameter is found + */ + if( util.getParameter('hl')!= undefined ){ + $('.wh_hide_highlight').show(); + } + +}); diff --git a/docs/grafana/rmf-app/oxygen-webhelp/app/core/wh-bootstrap-fix.css b/docs/grafana/rmf-app/oxygen-webhelp/app/core/wh-bootstrap-fix.css new file mode 100644 index 0000000..a5f763f --- /dev/null +++ b/docs/grafana/rmf-app/oxygen-webhelp/app/core/wh-bootstrap-fix.css @@ -0,0 +1,151 @@ +/* + * ------------------------------------------------------------------ + * + * Discard default rules from bootstrap. + * + */ + +/* + * Fix for: Default color is #212529. + */ +body { + color: #000; +} + +/* + * Fix for: All the LIs as marked with position:relative, so you cannot position an + * li:after or a li:before absolutely to a parent of your choice. + */ +.wh_publication_toc .nav > li { + position: inherit; +} + +/* + * Fix for: Compacting the side-toc (WH-231). + */ +li.hide-after, +li.hide-before { + display: none +} +.dots-before, +.dots-after { + cursor: pointer; + text-indent: 1.1em; + color: #ccc; + font-size: .8em +} +.dots-before span, +.dots-after span { + border: 1px solid #e1e1e1; + padding: 2px 7px; + border-radius: 14px; +} +.dots-before span:hover, +.dots-after span:hover { + border: 1px solid #bbb; + background-color: #fff +} + +/* Fix for: Default table width. */ +.table { + width: unset; +} + +/* Fix for: Light gray color to the table caption. Use a darker color. */ +caption { + color: inherit; + padding-top: unset; + caption-side: top; + white-space: nowrap; +} + +/* + * Fix for: Two pixels border bottom under the thead, + * with a light color and bottom alignement. + */ +.table > thead > tr > th, +.table > thead > tr > td, +.table > tfoot > tr > th, +.table > tfoot > tr > td, +.table > tbody > tr > th, +.table > tbody > tr > td, +.table > caption + thead > tr:first-child > td, +.table > caption + thead > tr:first-child > th, +.table > colgroup + thead > tr:first-child > td, +.table > colgroup + thead > tr:first-child > th, +.table > thead:first-child > tr:first-child > td, +.table > thead:first-child > tr:first-child > th { + /* + * WH-1947 In order for the default alignment to apply as it is defined + * in elements.css we need not to override it from this very specific rule. + */ + /* vertical-align:inherit ;*/ + border-color: inherit; +} +th { + text-align: center; +} +td, +th { + padding: 0.5em; +} +/* + * Fix for: Default valign for cells is top and override rules from commonltr. + */ +td.valign-top, +th.valign-top { + vertical-align: top; +} +td.valign-bottom, +th.valign-bottom { + vertical-align: bottom; +} +td.valign-middle, +th.valign-middle { + vertical-align: middle; +} + +/* Fix for: Dotted border-bottom for abbr elements rendered with a dotted underline in browsers. */ +abbr, +abbr[title] { + text-decoration: none; + border-bottom: none; +} + +/* Fix for: Line height on the titles and body. This is directly controlled from OSB or WH style-sheets. */ +body, +.h1, +.h2, +.h3, +.h4, +.h5, +.h6, +h1, +h2, +h3, +h4, +h5, +h6 { + line-height: inherit; +} +/* Fix for: Paddings on publication_toc, topic_body and topic_toc elements. */ +#wh_publication_toc { + padding: 0; +} + +#wh_topic_body { + padding: 0; +} + +#wh_topic_toc { + padding: 0; +} + +.navbar-nav.nav-list { + display: block; +} + +/* Fix for: Default bottom margin for paragraphs. */ +p { + margin-bottom: 1em; +} diff --git a/docs/grafana/rmf-app/oxygen-webhelp/app/core/wh-breadcrumb.css b/docs/grafana/rmf-app/oxygen-webhelp/app/core/wh-breadcrumb.css new file mode 100644 index 0000000..688828e --- /dev/null +++ b/docs/grafana/rmf-app/oxygen-webhelp/app/core/wh-breadcrumb.css @@ -0,0 +1,113 @@ +/* + * ------------------------------------------------------------------ + * + * Breadcrumb + * + */ + +/* Place the right tools in line with the breadcrumb. */ +.wh_tools{ + background-color: white; + position: relative; + display: flex; + justify-content: space-between; + flex: 1 0; + margin-bottom: 1em; + align-items: center; + padding: 4px 15px; +} + +@media only screen and (max-width: 767px) { + .wh_tools { + flex-wrap: wrap; + } +} + +.wh_right_tools { + display: flex; + align-items: center; +} + +.wh_right_tools > *:not(:last-child) { + margin-right: 8px; +} +/* When visible, the above style rule does apply to the Print Link because it has a hidden sibling, */ +.wh_right_tools > .wh_print_link { + margin-right:0; +} + +.wh_breadcrumb { + display:inline-block; +} + +/* Breadcrumb */ +.wh_breadcrumb ol { + margin:0; + border-radius: 0; + font-size: .9em; + padding: 0; + list-style: none; + background:none; +} +.wh_breadcrumb li{ + display:inline-block; +} +.wh_breadcrumb li:not(:last-of-type):after { + content: "/"; + padding: 0 5px; +} + +/* WH-1520 */ +.webhelp_expand_collapse_sections:after{font-family: "oXygen WebHelp"; display:inline-block;} +.webhelp_expand_collapse_sections[data-next-state='expanded']:after{content:'l'} +.webhelp_expand_collapse_sections[data-next-state='collapsed']:after{content:'k'} + +.wh_hide_highlight, .webhelp_expand_collapse_sections{background: transparent; border:0; display: none;padding:0;} +.wh_hide_highlight:after{font-family: "oXygen WebHelp"; content:'j'; display:inline-block; vertical-align: bottom;} +.wh_hide_highlight:focus {outline: none} +.wh_hide_highlight.hl-close:after{opacity:.7} + +@media screen { +#printlink:before { + display: inline-block; + width: 16px; + height: 16px; + padding: 0 3px 0 3px; + margin-right: 3px; + cursor: pointer; + content: ""; +} +#printlink:before { + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAC1QTFRFAwQEAwQEAwQEgICAYGBggICAk5OT2tra3t7e5eXl7Ozs9PT0+/v7/f39////qdjBqAAAAAV0Uk5TAAsmTWgvFGPAAAAAWElEQVQI12NgYA4FAgMGBgbWd0AQQBzDNBTECA1miHsK0p73lCHmejkQ1BxliN4NBlsZolaBwVKGyKkgNZFTGSIguloZXCGMEAYhVZBUkCIDA5MSECgwAACPPj1sb0KIdAAAAABJRU5ErkJggg=='); +} + +#printlink:hover:before { + opacity: 0.5; +} +} + +#trigger.active { + transition: all 0.75s ease-in-out; +} + +#trigger { + float:left; +} + +#wh_publication_toc { + margin-bottom: 1em; +} +.wh_publication_toc ul{ + list-style: none; + margin:0; + padding:0; + word-wrap: break-word; +} +.wh_publication_toc ul ul { + padding-left: 1em; +} + +.current_node { + font-weight: 700; + text-decoration: underline; +} \ No newline at end of file diff --git a/docs/grafana/rmf-app/oxygen-webhelp/app/core/wh-codeblock.js b/docs/grafana/rmf-app/oxygen-webhelp/app/core/wh-codeblock.js new file mode 100644 index 0000000..4bd8540 --- /dev/null +++ b/docs/grafana/rmf-app/oxygen-webhelp/app/core/wh-codeblock.js @@ -0,0 +1,72 @@ +define(['util', 'dom-sanitizer', 'jquery', 'jquery.highlight'], function(util, domSanitizer, $) { + $(document).ready(function () { + /* + * Codeblock copy to clipboard action + */ + $('.codeblock').mouseover(function(){ + // WH-1806 + var item = $(''); + if ( $(this).find('.copyTooltip').length == 0 ){ + $(this).prepend(item); + + $('.codeblock .copyTooltip').click(function(){ + var txt = $(this).closest(".codeblock").text(); + if(!txt || txt == ''){ + return; + } + copyTextToClipboard(txt, $(this)); + }); + } + }); + + $('.codeblock').mouseleave(function(){ + $(this).find('.copyTooltip').remove(); + }); + + /** + * @description Copy the text to the clipboard + */ + function copyTextToClipboard(text, copyTooltipSpan) { + var textArea = document.createElement("textarea"); + textArea.style.position = 'fixed'; + textArea.value = text; + textArea = domSanitizer.appendElementNodeToBody(textArea); + textArea.select(); + try { + var successful = document.execCommand('copy'); + + // WH-1806 + if (copyTooltipSpan.find('.wh-tooltip').length == 0) { + var tooltipContainer = $( + '' + + '

Copied to clipboard

' + + '
' + ); + copyTooltipSpan.prepend(tooltipContainer); + copyTooltipSpan.mouseleave(function() { + tooltipContainer.remove(); + }); + setTimeout(function(){ tooltipContainer.remove();}, 3000); + } + } catch (err) { + // Unable to copy + if (copyTooltipSpan.find('.wh-tooltip').length == 0) { + var tooltipContainer = $( + '' + + '

Oops, unable to copy

' + + '
' + ); + copyTooltipSpan.mouseleave(function() { + tooltipContainer.remove(); + }); + copyTooltipSpan.prepend(tooltipContainer); + setTimeout(function(){ tooltipContainer.remove(); }, 3000); + } + // WH-1806 + //$('.copyTooltip').tooltip({title: 'Oops, unable to copy', trigger: "click"}); + util.debug('Oops, unable to copy codeblock content!', err) + } + document.body.removeChild(textArea); + } + }); +}); \ No newline at end of file diff --git a/docs/grafana/rmf-app/oxygen-webhelp/app/core/wh-common.css b/docs/grafana/rmf-app/oxygen-webhelp/app/core/wh-common.css new file mode 100644 index 0000000..e793db5 --- /dev/null +++ b/docs/grafana/rmf-app/oxygen-webhelp/app/core/wh-common.css @@ -0,0 +1,144 @@ +/* + * Codeblock copy to clipboard action + */ +.codeblock .copyTooltip{ + background: #fafafa url("../img/Copy.png") no-repeat 85% 50%; + background-size: 15px; + width: 68px; + height: 32px; + margin-top: -7px; + color: #888; + border:1px solid #CCCCCC; + right: 15px; + position: absolute; + cursor: pointer; + opacity: 0.5; + font-size: 15px; + border-radius:0 7px 0 0px; +} + +.copyTooltip::before{ + content: " Copy "; + line-height: 2em; + text-indent: 0.5em; +} + +.codeblock .copyTooltip:hover{ + opacity: 1; +} + +.codeblock .tooltip.top .tooltip-arrow{ + border-top-color: #4f4f4f; +} + +.codeblock .tooltip-inner { + width: 200px; + padding: 0.7em 8px; + background-color: #4f4f4f; + font-size: 1.4em +} + +pre{ + margin-top: 0.5em; + border-radius: 7px; +} +.apiname{ + font-family: Menlo,Monaco,Consolas,"Courier New",monospace; +} +/* + * Go to top button + */ +#go2top { + display: none; + position: fixed; + z-index: 999; + height: 44px; + width: 44px; + bottom: 37px; + right: 25px; + border-radius: 0.25em; + border: 1px solid #999999; + cursor: pointer; + text-align: center; + padding: 4px 12px; + font-weight: bold; + color: #fff; + background-color: #444444; + white-space: nowrap; + overflow: hidden; + font-size: 1.5em; +} +/* + * Edit link + */ +div.edit-link-container { + display: inline; +} + +.edit-link { + float: right; + font-style: normal; +} + +@media print { + .edit-link { + display: none; + } + + #oxygen-feedback-frame-container { + display: none; + } +} + +/* + * Hide the figure numbers, not useful in the context of a small topic. + */ + + @media screen { + .fig--title-label-number, + .fig--title-label-punctuation { + display:none; + } + + .fig--title-label:after { + content:": "; + } + } + +/* + * WH-2114 Fix font size issues + */ +html { + font-size: 10px; +} + +body { + font-size: 14px; + line-height: 1.5; /* Moved here from bootstrap so it ca be applied on the styles basket preview area.*/ +} + +/* + * Custom toggler + */ +.custom-toggler .navbar-toggler-icon { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(52,123,183, 1)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 8h24M4 16h24M4 24h24'/%3E%3C/svg%3E"); +} +.custom-toggler { + border-color: #347bb7; +} + +.navbar { + background: white; +} + +@media screen { + .wh_topic_toc li, + .wh_publication_toc li, + .wh_main_page_toc_entry, + .wh_top_menu ul, + .wh_breadcrumb ol { + word-break: break-word; + overflow-wrap: break-word; + word-wrap: break-word; + } +} \ No newline at end of file diff --git a/docs/grafana/rmf-app/oxygen-webhelp/app/core/wh-dom-sanitizer.js b/docs/grafana/rmf-app/oxygen-webhelp/app/core/wh-dom-sanitizer.js new file mode 100644 index 0000000..f84472d --- /dev/null +++ b/docs/grafana/rmf-app/oxygen-webhelp/app/core/wh-dom-sanitizer.js @@ -0,0 +1,39 @@ +define(["dompurify"], function(DOMPurify) { + + /* * + * Appends the given source HTML node to the given destionation HTML node. + * + * @param $source The source HTML node to append. + * @param $dest The destination HTML node. + */ + function appendHtmlNode($source, $dest) { + var sanitizedSource = DOMPurify.sanitize($source[0]); + $dest.append(sanitizedSource); + } + + /* * + * Appends the given source HTML element to the body + * + * @source The souce HTML element to append. + * + * @returns the appended element. + */ + function appendElementNodeToBody(source) { + var sanitizedSource = DOMPurify.sanitize(source, {RETURN_DOM: true, RETURN_DOM_IMPORT: true}); + var appendedElement = document.body.appendChild(sanitizedSource.firstChild); + return appendedElement; + } + + /* * + * Sanitizes the given string. + */ + function sanitize(str) { + return DOMPurify.sanitize(str, {ALLOWED_TAGS: []}) + } + + return { + appendHtmlNode: appendHtmlNode, + appendElementNodeToBody: appendElementNodeToBody, + sanitize: sanitize + } +}) \ No newline at end of file diff --git a/docs/grafana/rmf-app/oxygen-webhelp/app/core/wh-elements.css b/docs/grafana/rmf-app/oxygen-webhelp/app/core/wh-elements.css new file mode 100644 index 0000000..40dbe78 --- /dev/null +++ b/docs/grafana/rmf-app/oxygen-webhelp/app/core/wh-elements.css @@ -0,0 +1,35 @@ +ul.linklist { + list-style: none; + padding: 0; +} + +li.linklist { + margin-bottom: 0; + padding: 0; +} + +.container-fluid { + margin-right: auto; + margin-left: auto; + max-width: 1600px; +} + +a.sr-only:focus { + display: block; + position: absolute; + top: 0; + left: 0; + width: 100vw; + height: 1.5em; + text-align: center; + background-color: #333; + z-index: 1; + line-height: 1.5em; + font-size: 1.5em; + font-weight: bold; + color: #fff; +} + +.embed-responsive { + background-color: #000; +} \ No newline at end of file diff --git a/docs/grafana/rmf-app/oxygen-webhelp/app/core/wh-index-link.css b/docs/grafana/rmf-app/oxygen-webhelp/app/core/wh-index-link.css new file mode 100644 index 0000000..8110675 --- /dev/null +++ b/docs/grafana/rmf-app/oxygen-webhelp/app/core/wh-index-link.css @@ -0,0 +1,37 @@ +/* + * ------------------------------------------------------------------ + * + * Link to the index. + * + */ +.wh_indexterms_link{ + display: inline-block; + vertical-align: middle; +} +.wh_indexterms_link a:before{ + content:"a"; /*The book symbol*/ + font-family: "oXygen WebHelp"; + display: inline-block; + position: relative; + bottom:0em; + font-size: 1.6em; + margin-left:0.8em; +} + +@media only screen and (max-width: 767px) { + + .wh_indexterms_link { + float: none; + } + + .wh_indexterms_link a:before{ + position: relative; + padding-bottom: 0 !important; + margin-left: 0; + } +} + +/* OSB-273 - Fix default look of Index link */ +.wh_indexterms_link a span { + display: none; +} diff --git a/docs/grafana/rmf-app/oxygen-webhelp/app/core/wh-modal.css b/docs/grafana/rmf-app/oxygen-webhelp/app/core/wh-modal.css new file mode 100644 index 0000000..b1b2df2 --- /dev/null +++ b/docs/grafana/rmf-app/oxygen-webhelp/app/core/wh-modal.css @@ -0,0 +1,127 @@ +/* The Modal background */ +#modal_img_large { + display: none; + position: fixed; + padding-top: 100px; + left: 0; + top: 0; + width: 100%; + height: 100%; + overflow: auto; + background-color: rgb(0, 0, 0); + background-color: rgba(0, 0, 0, 0.9); +} + +.modal-content { + margin: auto; + display: block; + width: 80%; +} + +#modal-img { + width: auto; + max-width: 95%; + max-height: 95%; +} + +.zoom { + cursor: pointer +} + +/* Caption of Modal Image (Image Text) */ +#caption { + margin: auto; + display: block; + width: 80%; + max-width: 700px; + text-align: center; + color: #ccc; + padding: 10px 0; + height: 150px; +} +/* Add Animation - Zoom in the Modal */ +.modal-content, #caption { + -webkit-animation-name: zoom; + -webkit-animation-duration: 0.6s; + animation-name: zoom; + animation-duration: 0.6s; +} + +@media screen { + @-webkit-keyframes zoom { + from { + -webkit-transform: scale(0) + } + to { + -webkit-transform: scale(1) + } + } + + @keyframes zoom { + from { + transform: scale(0) + } + to { + transform: scale(1) + } + } +} + +/* The Close button of the modal container*/ +.close { + position: absolute; + top: 15px; + right: 35px; + color: #f1f1f1; + font-size: 30px; + transition: 0.3s; + font-weight: 100; + opacity: .4; + text-shadow: none; +} +.close:hover, +.close:focus { + color: #ccc; + text-decoration: none; + cursor: pointer; + opacity:1; +} + +.wh_topic_toc{ + border-left: 1px solid #cfe2f5; + margin-left:0; + padding-left:1em; +} +.wh_topic_toc li, .wh_publication_toc li{ + line-height: 1.4em; + margin:.5em 0; +} + +.wh_topic_toc .wh_topic_label{ + font-weight:600; +} +.wh_topic_toc .wh_topic_label:after{ + content: ": " +} + +.wh_topic_toc ul ul li:last-of-type, .wh_publication_toc ul ul li:last-of-type{ + margin-bottom:0 +} + +#wh_topic_toc ul{ + padding-left:0; + margin-left:0; + list-style:none; +} + +#wh_topic_toc ul ul{ + padding-left:1em +} + +.wh_footer{ + margin-top: 2em; +} + +.wh_top_menu ul li a{ + line-height:1.3em +} \ No newline at end of file diff --git a/docs/grafana/rmf-app/oxygen-webhelp/app/core/wh-publication-logo-and-title.css b/docs/grafana/rmf-app/oxygen-webhelp/app/core/wh-publication-logo-and-title.css new file mode 100644 index 0000000..db75e2c --- /dev/null +++ b/docs/grafana/rmf-app/oxygen-webhelp/app/core/wh-publication-logo-and-title.css @@ -0,0 +1,244 @@ +/* + * ------------------------------------------------------------------ + * + * Publication logo and title + * + */ + +.wh_header_flex_container { + display: flex; + justify-content: space-between; + align-items: center; + align-content: center; + flex-wrap: wrap; + width:100%; +} + +.wh_header { + padding: 1em; +} + +.wh_logo_and_publication_title { + display: flex; + justify-content: space-between; + align-items: center; +} + +.wh_top_menu_and_indexterms_link { + padding: 0; +} + +#topic_navigation_links { + white-space: nowrap; +} + +@media only screen and (max-width: 767px) { + .wh_header_flex_container { + flex-direction: column; + align-items: stretch; + } + + .wh_logo_and_publication_title_container { + display: flex; + justify-content: space-between; + align-items: center; + align-content: center; + flex-wrap: wrap; + align-self: stretch; + width: 100%; + } + + .wh_indexterms_link a:before { + padding-left: .5em !important; + } +} + +.wh_publication_title a { + display: inline-block; + margin: 1em 0; +} + +@media only screen and (min-width: 768px) { + .wh_top_menu_and_indexterms_link.navbar-collapse { + float: none; + display: inline-block !important; + vertical-align: middle; + } + + .wh_top_menu { + line-height: 1em; + vertical-align: middle; + + } + + .wh_header { + text-align: right; + } +} + +@media only screen and (max-width: 767px) { + .wh_toggle_button { + float: none; + line-height: 1em; + margin: 0; + } + + .wh_header { + text-align: left; + } +} + +/*------------------------------------------------------*/ + +.wh_logo{ + display:inline-block; + vertical-align:baseline; +} +.wh_publication_title { + display:inline-block; +} +.wh_logo + .wh_publication_title { + margin-left: 1.5em; +} + +.wh_logo_and_publication_title.navbar-brand { + font-size: 1em; + line-height: 1em; +} + + + +/* Generic top_menu styles*/ +.wh_top_menu ul { + list-style: none; + padding-left:0; +} + +/* Render top_menu for devices larger than 767px */ +@media only screen and (min-width: 768px) { + .wh_top_menu { + display: inline-block; + } + + /* Menu activated on :HOVER */ + .wh_top_menu:not(.activated-on-click) ul ul { + display: block; + visibility: hidden; + transition: visibility 0.2s 1s; /* WH-2521 Delay menu hiding with 1 second on hover off */ + } + + .wh_top_menu:not(.activated-on-click) ul:hover li:not(:hover) > ul { + /* WH-2521 Imedaitelly hide submenus that are not hovered when at least one menu item (li) is hovered. */ + visibility: hidden; + transition: none; + } + + .wh_top_menu:not(.activated-on-click) ul li:hover > ul { + display: block; + visibility: visible; + transition: visibility 0.2s 1s; + } + + /* Menu activated on CLICK */ + .wh_top_menu.activated-on-click ul ul { + display: none; + } + + .wh_top_menu.activated-on-click ul li.active > ul{ + display: block; + } + + /* Common menu rules */ + + .wh_top_menu ul { + position: relative; + display: inline-table; + z-index: 999; + margin-bottom:0; + } + + .wh_top_menu ul:after { + content: ""; + clear: both; + display: block; + } + + .wh_top_menu > ul > li { + display: inline-block; + } + + + .wh_top_menu ul li a { + display: block; + padding: 0.5em 1em; + text-decoration: none; + } + + .wh_top_menu ul ul { + padding: 0; + position: absolute; + text-align: left; + } + + .wh_top_menu ul ul li { + float: none; + position: relative; + border-top: 1px solid; + min-width:210px; + } + + + .wh_top_menu ul ul ul { + position: absolute; + left: 100%; + top: 0; + } + + /* Mark the items that have a submenu with a small double arrow. */ + .wh_top_menu ul ul li.has-children{ + position:relative; + } + .wh_top_menu ul ul li.has-children > span > a{ + padding-right: 1em; + } + .wh_top_menu ul ul li.has-children:after{ + display:block; + content: "\00BB"; + color:silver; + position:absolute; + right:5px; + top:0; + line-height: 2.5em; + } + + .wh_top_menu ul ul { + background-color: #e6e6e6; /* OSB-273 - Fix default colors for menu items */ + } + .wh_top_menu ul ul li { + border-top-color: #ffffff; /* OSB-273 - Fix default colors for menu items */ + } + .wh_top_menu ul ul li.has-children:after{ + color:silver; + } + +} + +/* Render top_menu for devices smaller than 767px */ +@media only screen and (max-width: 767px) { + + .wh_top_menu ul { + margin-bottom: 0; + } + .wh_top_menu ul ul { + display: none; + } + .wh_top_menu ul li a { + display:block; + padding: .5em; + text-decoration: none; + } + .wh_top_menu ul li.active > ul { + display: block; + padding-left: .5em; + } +} diff --git a/docs/grafana/rmf-app/oxygen-webhelp/app/core/wh-responsive-images.css b/docs/grafana/rmf-app/oxygen-webhelp/app/core/wh-responsive-images.css new file mode 100644 index 0000000..cc5c506 --- /dev/null +++ b/docs/grafana/rmf-app/oxygen-webhelp/app/core/wh-responsive-images.css @@ -0,0 +1,16 @@ +/* + * Responsive images + */ +.image { + max-width: 100%; + background-repeat: no-repeat; +} +.image:not(img[height]) { + height: auto; +} +img.image.zoom:not(img[usemap]) { + cursor: pointer; + transition: 0.3s; +} + +img.image.zoom:not(img[usemap]):hover {opacity: 0.7;} \ No newline at end of file diff --git a/docs/grafana/rmf-app/oxygen-webhelp/app/core/wh-search.css b/docs/grafana/rmf-app/oxygen-webhelp/app/core/wh-search.css new file mode 100644 index 0000000..39c568c --- /dev/null +++ b/docs/grafana/rmf-app/oxygen-webhelp/app/core/wh-search.css @@ -0,0 +1,378 @@ +/* + * ------------------------------------------------------------------ + * + * Search area + * + */ +.wh_search_input{ + border: 0; +} +#searchForm{ + margin:0; +} +#searchForm > div { + position: relative; + margin:auto; + width: 65%; + max-width: 1000px; +} + +.wh_search_textfield { + display:inline-block; + width: 100%; + height:100%; + border:none; + margin: 0; +} +.wh_search_button{ + display: inline-block; + position:absolute; + right:0; + top:0; + float:right; + width:2.8em; + height:100%; + border:none; + cursor: pointer; +} +.wh_search_button>span{ + display: none; +} +.wh_search_button:after{ + font-family: "oXygen WebHelp", serif; + content:"f"; +} + +.ui-menu-item-wrapper > .search-autocomplete-proposal-icon { + font-family: "oXygen WebHelp", serif; + display: inline-block; + min-width: 1.5em; + font-size: 0.7em; +} + +/* + * ------------------------------------------------------------------ + * + * Search page + * + */ + +/* Render search area for devices smaller than 767px */ +@media only screen and (max-width: 767px) { + #searchForm > div { + width: 90%; + } + .wh_search_button { + display: none; + } +} + +/* + * Search results. + */ +.wh_search_results { + margin-top:10px; +} + +/** Remove left padding added by the browser for