All Projects → grafana → grafana-plugin-examples

grafana / grafana-plugin-examples

Licence: other
No description, website, or topics provided.

Grafana plugin examples

This repository contains example plugins to showcase different use cases.

App plugins

Example Description
app-basic demonstrates how to build a basic app plugin that uses custom routing.

Panel plugins

Example Description
panel-flot demonstrates how to use the Flot plotting library in a panel plugin.
panel-frame-select demonstrates how to update panel options with values from a data query response.
panel-plotly demonstrates how to use the Plotly graphing library in a panel plugin.
panel-scatterplot demonstrates how to use D3 and SVG to create a scatter plot panel.
panel-visx demonstrates how to use visx to create a time series graph.
panel-basic demonstrates how to build a panel plugin that uses the time series graph from @grafana/ui to read and update the dashboard time range.
panel-datalinks demonstrates how to build a panel plugin that uses the datalinks functionality of Grafana.

Data source plugins

Example Description
datasource-http demonstrates how to query data from HTTP-based APIs. The HTTP call happens on the frontend.
datasource-http-backend demonstrates how to query data from HTTP-based APIs, where the HTTP calls happens on the backend. Supports alerting.
datasource-streaming-websocket demonstrates how to create an event-based data source plugin using RxJS and web sockets.
datasource-basic demonstrates how to build a basic data source plugin.

Integration tests

Some of the examples in this repository contain integration tests that make use of @grafana/e2e package. These tests can be run individually by navigating to the example plugin and running one of the following commands:

  • yarn e2e - run integration tests
  • yarn e2e:open - open cypress ui and run integration tests
  • yarn e2e:update - run integration tests and update any screenshots

Testing against latest versions of Grafana

There is a github workflow .github/workflows/integration-tests.yml which navigates all plugin examples looking for integration tests to run. For any example plugin that has a e2e npm script defined it will run the following:

  1. Build the plugin with the provided version of Grafana packages and test against the provided version of Grafana
    • asserting the plugin works with its expected versions
  2. Build the plugin with the provided version of Grafana packages and test against the latest version of Grafana
    • asserting the plugin can run with the packages provided by the latest Grafana core
  3. Upgrade all Grafana NPM packages to the latest version and test against latest version of Grafana
    • asserting the plugin can still build with the latest Grafana NPM packages

Using the examples as the base for your plugins

All of the examples use grafana/create-plugin instead of @grafana/toolkit.

You can read more about customizing and extending the base configuration here

API Compatibility

If your plugin uses typescript you can use @grafana/levitate to test if the Grafana APIs your plugin is using are compatible with a certain version of Grafana.

e.g. to see a compatibility report of your plugin code and the latest release of the grafana APIs

npx @grafana/levitate@latest is-compatible --path src/module.ts --target @grafana/data,@grafana/ui,@grafana/runtime

you may also specify a target version

npx @grafana/levitate@latest is-compatible --path src/module.ts --target @grafana/[email protected],@grafana/[email protected],@grafana/[email protected]

The following github workflow example can be used in your project to keep an eye on the compatibility of your plugin and the grafana API.

If you host your project in GitHub and want to use GitHub Actions. You could create a new file in your project in .github/workflows/levitate.yml and put the following content:

name: Compatibility check
on: [push]

jobs:
  compatibilitycheck:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-node@v3
        with:
          node-version: "16"
      - name: Install dependencies
        run: yarn install
      - name: Build plugin
        run: yarn build
      - name: Compatibility check
        uses: grafana/plugin-actions/is-compatible@v1
        with:
          module: "./src/module.ts"
          comment-pr: "yes"
          fail-if-incompatible: "no"

This will run a compatibility check for the latest release of grafana plugins API in your project everytime a new push or pull request is open. If it reports an error you will see a message indicating you have an incompatibility.

Sometimes incompatibilities are minor. e.g. a type changed but this doesn't affect your plugin. We advice you to upgrade your grafana dependencies if this is the case so you always use the latest API.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].