Skip to content

Commit

Permalink
feat: datasource v2 (#37)
Browse files Browse the repository at this point in the history
* refactor: v2

Signed-off-by: Yue Yang <[email protected]>

* fix: annotation variable

Signed-off-by: Yue Yang <[email protected]>

* chore: update README

Signed-off-by: Yue Yang <[email protected]>

* chore: update imgs

Signed-off-by: Yue Yang <[email protected]>

* fix: support grafana 7.0

Signed-off-by: Yue Yang <[email protected]>

* fix: parse range to UTC

Signed-off-by: Yue Yang <[email protected]>

* chore: require grafana minimum 7.0

Signed-off-by: Yue Yang <[email protected]>

* fix: lint

Signed-off-by: Yue Yang <[email protected]>

* fix: filename case

Signed-off-by: Yue Yang <[email protected]>

* chore: update

Signed-off-by: Yue Yang <[email protected]>

* chore: update plugin info

Signed-off-by: Yue Yang <[email protected]>

* fix: timeformat

Signed-off-by: Yue Yang <[email protected]>
  • Loading branch information
g1eny0ung authored Oct 15, 2021
1 parent 9bd84f2 commit 74776ba
Show file tree
Hide file tree
Showing 29 changed files with 4,166 additions and 2,786 deletions.
9 changes: 4 additions & 5 deletions .editorconfig
Original file line number Diff line number Diff line change
@@ -1,13 +1,12 @@
# http://editorconfig.org
# EditorConfig is awesome: https://EditorConfig.org

# top-most EditorConfig file
root = true

[*]
indent_style = space
indent_size = 2
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
max_line_length = 120

[*.{js,ts,tsx,scss}]
quote_type = single
75 changes: 75 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
name: CI

on:
push:
branches:
- master
pull_request:
branches:
- master
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2

- name: Setup Node.js environment
uses: actions/[email protected]
with:
node-version: "14.x"

- name: Get yarn cache directory path
id: yarn-cache-dir-path
run: echo "::set-output name=dir::$(yarn cache dir)"

- name: Cache yarn cache
uses: actions/cache@v2
id: cache-yarn-cache
with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
restore-keys: |
${{ runner.os }}-yarn-
- name: Cache node_modules
id: cache-node-modules
uses: actions/cache@v2
with:
path: node_modules
key: ${{ runner.os }}-${{ matrix.node-version }}-nodemodules-${{ hashFiles('**/yarn.lock') }}
restore-keys: |
${{ runner.os }}-${{ matrix.node-version }}-nodemodules-
- name: Install dependencies
run: yarn install --frozen-lockfile

- name: Build and test frontend
run: yarn build

- name: Check for backend
id: check-for-backend
run: |
if [ -f "Magefile.go" ]
then
echo "::set-output name=has-backend::true"
fi
- name: Setup Go environment
if: steps.check-for-backend.outputs.has-backend == 'true'
uses: actions/setup-go@v2
with:
go-version: "1.15"

- name: Test backend
if: steps.check-for-backend.outputs.has-backend == 'true'
uses: magefile/mage-action@v1
with:
version: latest
args: coverage

- name: Build backend
if: steps.check-for-backend.outputs.has-backend == 'true'
uses: magefile/mage-action@v1
with:
version: latest
args: buildAll
164 changes: 164 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,164 @@
name: Release

on:
push:
tags:
- "v*.*.*" # Run workflow on version tags, e.g. v1.0.0.

jobs:
release:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v2

- name: Setup Node.js environment
uses: actions/[email protected]
with:
node-version: "14.x"

- name: Setup Go environment
uses: actions/setup-go@v2
with:
go-version: "1.15"

- name: Get yarn cache directory path
id: yarn-cache-dir-path
run: echo "::set-output name=dir::$(yarn cache dir)"

- name: Cache yarn cache
uses: actions/cache@v2
id: cache-yarn-cache
with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
restore-keys: |
${{ runner.os }}-yarn-
- name: Cache node_modules
id: cache-node-modules
uses: actions/cache@v2
with:
path: node_modules
key: ${{ runner.os }}-${{ matrix.node-version }}-nodemodules-${{ hashFiles('**/yarn.lock') }}
restore-keys: |
${{ runner.os }}-${{ matrix.node-version }}-nodemodules-
- name: Install dependencies
run: yarn install --frozen-lockfile;
if: |
steps.cache-yarn-cache.outputs.cache-hit != 'true' ||
steps.cache-node-modules.outputs.cache-hit != 'true'
- name: Build and test frontend
run: yarn build

- name: Check for backend
id: check-for-backend
run: |
if [ -f "Magefile.go" ]
then
echo "::set-output name=has-backend::true"
fi
- name: Test backend
if: steps.check-for-backend.outputs.has-backend == 'true'
uses: magefile/mage-action@v1
with:
version: latest
args: coverage

- name: Build backend
if: steps.check-for-backend.outputs.has-backend == 'true'
uses: magefile/mage-action@v1
with:
version: latest
args: buildAll

- name: Sign plugin
run: yarn sign
env:
GRAFANA_API_KEY: ${{ secrets.GRAFANA_API_KEY }} # Requires a Grafana API key from Grafana.com.

- name: Get plugin metadata
id: metadata
run: |
sudo apt-get install jq
export GRAFANA_PLUGIN_ID=$(cat dist/plugin.json | jq -r .id)
export GRAFANA_PLUGIN_VERSION=$(cat dist/plugin.json | jq -r .info.version)
export GRAFANA_PLUGIN_TYPE=$(cat dist/plugin.json | jq -r .type)
export GRAFANA_PLUGIN_ARTIFACT=${GRAFANA_PLUGIN_ID}-${GRAFANA_PLUGIN_VERSION}.zip
export GRAFANA_PLUGIN_ARTIFACT_CHECKSUM=${GRAFANA_PLUGIN_ARTIFACT}.md5
echo "::set-output name=plugin-id::${GRAFANA_PLUGIN_ID}"
echo "::set-output name=plugin-version::${GRAFANA_PLUGIN_VERSION}"
echo "::set-output name=plugin-type::${GRAFANA_PLUGIN_TYPE}"
echo "::set-output name=archive::${GRAFANA_PLUGIN_ARTIFACT}"
echo "::set-output name=archive-checksum::${GRAFANA_PLUGIN_ARTIFACT_CHECKSUM}"
echo ::set-output name=github-tag::${GITHUB_REF#refs/*/}
- name: Read changelog
id: changelog
run: |
awk '/^## / {s++} s == 1 {print}' CHANGELOG.md > release_notes.md
echo "::set-output name=path::release_notes.md"
- name: Check package version
run: if [ "v${{ steps.metadata.outputs.plugin-version }}" != "${{ steps.metadata.outputs.github-tag }}" ]; then printf "\033[0;31mPlugin version doesn't match tag name\033[0m\n"; exit 1; fi

- name: Package plugin
id: package-plugin
run: |
mv dist ${{ steps.metadata.outputs.plugin-id }}
zip ${{ steps.metadata.outputs.archive }} ${{ steps.metadata.outputs.plugin-id }} -r
md5sum ${{ steps.metadata.outputs.archive }} > ${{ steps.metadata.outputs.archive-checksum }}
echo "::set-output name=checksum::$(cat ./${{ steps.metadata.outputs.archive-checksum }} | cut -d' ' -f1)"
- name: Lint plugin
run: |
git clone https://github.com/grafana/plugin-validator
pushd ./plugin-validator/cmd/plugincheck
go install
popd
plugincheck ${{ steps.metadata.outputs.archive }}
- name: Create release
id: create_release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GH_TOKEN }}
with:
tag_name: ${{ github.ref }}
release_name: Release ${{ github.ref }}
body_path: ${{ steps.changelog.outputs.path }}
draft: true

- name: Add plugin to release
id: upload-plugin-asset
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GH_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: ./${{ steps.metadata.outputs.archive }}
asset_name: ${{ steps.metadata.outputs.archive }}
asset_content_type: application/zip

- name: Add checksum to release
id: upload-checksum-asset
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GH_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: ./${{ steps.metadata.outputs.archive-checksum }}
asset_name: ${{ steps.metadata.outputs.archive-checksum }}
asset_content_type: text/plain

- name: Publish to Grafana.com
run: |
echo A draft release has been created for your plugin. Please review and publish it. Then submit your plugin to grafana.com/plugins by opening a PR to https://github.com/grafana/grafana-plugin-repository with the following entry:
echo
echo '{ "id": "${{ steps.metadata.outputs.plugin-id }}", "type": "${{ steps.metadata.outputs.plugin-type }}", "url": "https://github.com/${{ github.repository }}", "versions": [ { "version": "${{ steps.metadata.outputs.plugin-version }}", "commit": "${{ github.sha }}", "url": "https://github.com/${{ github.repository }}", "download": { "any": { "url": "https://github.com/${{ github.repository }}/releases/download/v${{ steps.metadata.outputs.plugin-version }}/${{ steps.metadata.outputs.archive }}", "md5": "${{ steps.package-plugin.outputs.checksum }}" } } } ] }' | jq .
6 changes: 3 additions & 3 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,9 @@ e2e-results/
# Editor
.idea

# macOS
.DS_Store
# npm
package-lock.json

jest.config.js
.DS_Store
yeya24-chaosmesh-datasource
*.zip
1 change: 0 additions & 1 deletion .husky/.gitignore

This file was deleted.

8 changes: 8 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,14 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [2.1.0] - 2021-09-16

### Changed

- Compatible with chaos mesh 2.x. **(After 2.0.x, will start with 2.1.x)**
- Bump the minimal grafana version to 7.0.0
- Bump grafana/toolkit to 8.x

## [0.2.2] - 2021-04-15

### Changed
Expand Down
61 changes: 26 additions & 35 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
# Chaos Mesh Data Source
# Data Source

Grafana data source plugin for Chaos Mesh.

> Require: Chaos Mesh >= **2.1.0**, Grafana >= **7.0.0**
## Features

- Visualize Chaos Events on the table
Expand All @@ -14,11 +16,13 @@ Grafana data source plugin for Chaos Mesh.
grafana-cli plugins install yeya24-chaosmesh-datasource
```

For more installation options, refer: <https://grafana.com/docs/grafana/latest/plugins/installation>.

## Setup

After installed, you can add this data source in **Configuration -> Data Sources**, then you will enter the settings page:
After installed, you can add it in **Configuration -> Data sources**, then you will enter the settings page:

![Data Source settings](https://raw.githubusercontent.com/chaos-mesh/chaos-mesh-datasource/master/src/img/settings.jpg)
![Settings](https://raw.githubusercontent.com/chaos-mesh/datasource/master/src/img/settings.png)

Only the `URL` field needs to be filled in and the others can be ignored.

Expand All @@ -32,59 +36,46 @@ kubectl port-forward -n chaos-testing svc/chaos-dashboard 2333:2333

Finally, click **Save & Test** to test the connection. If it shows that the connection is successful, then the setup work has been completed.

### Options

Except for the `url`, this data source plugin has such options as below:

| Name | Description |
| ----- | --------------------------------------------------------------------------------------------------------------------- |
| Limit | Limit the number of returned Chaos Events. The default is 25. If you want to display more events, please increase it. |

## Query

Mostly, there will be three options to be responsible for filtering events:

- **Experiment** - Filter by the experiment name. Must be a full name.
- **Namespace** - Filter by different namespaces
- **Kind** - Filter by Chaos kinds
There will be several options to be responsible for filtering events:

For real world usage, normally you will use these options in two situations:

- Specify all fields to locate an experiment more precisely.
- Let **Experiment** be empty to reduce the constraints of events filtering.
- Pass a variable like `$experiment` to query to control the events displaying.
- **Object ID** - Filter by object uuid
- **Namespace** - Filter by different namespace
- **Name** - Filter by object name
- **Kind** - Filter by kind (PodChaos, Schedule...)
- **Limit** - Limit the number of events

## Annotations

Edit example:

![Data Source annotations](https://raw.githubusercontent.com/chaos-mesh/chaos-mesh-datasource/master/src/img/annotations.png)
![Annotations](https://raw.githubusercontent.com/chaos-mesh/datasource/master/src/img/annotations.png)

For usage, you can refer to the content described by [Query](#query).

## Variables

If you choose the Variables type to query and select the data source to Chaos Mesh, You can get three different kind values.

Specify by choosing different **metric**:
If you choose the type to `Query` and select the data source to `Chaos Mesh`, You can retrieve
the variables by four different metrics:

- Experiment

After selection, a text input field will occur, fill in the value of the experiment name you want to settle. Usually, you will fill in the **partial** name of some experiments to get the related experiment names.

> For example, you have two experiments:
>
> random-pod-kill and random-pod-failure
>
> Then you can fill **random** in the text field to get these experiments.
![Variables](https://raw.githubusercontent.com/chaos-mesh/datasource/master/src/img/variables.png)

- Namespace

After selection, all available namespaces will show in **Preview of values** directly. Without other operations.

- Kind

Same as **Namespace**.
Same as **Namespace**. Get all kinds.

- Experiment

Same as **Namespace**. Get the names of all experiments.

- Schedule

Same as **Namespace**. Get the names of all schedules.

## How to contribute

Expand Down
Loading

0 comments on commit 74776ba

Please sign in to comment.