Введение в разработку плагинов для Grafana

Grafana — популярный инструмент для визуализации и мониторинга данных, который сильно эволюционировал за последние годы. Особенно это стало заметно после перехода с AngularJS на React. Такой переход открывает разработчикам новые пути для создания мощных и гибких плагинов, используя современные технологии, такие как React и TypeScript. В этой статье мы подробно рассмотрим процесс разработки плагинов для Grafana с использованием React и TypeScript, предоставляя вам полное руководство с примерами кода и пошаговыми инструкциями.

Настройка среды разработки

Прежде чем приступить к разработке плагина, убедитесь, что у вас есть необходимые инструменты и среда.

  • Установка Grafana: вы можете скачать и установить Grafana с официального сайта или использовать менеджер пакетов, такой как Docker.

    docker run -d -p 3000:3000 --name grafana grafana/grafana
    
  • Создание проекта плагина: для начала разработки плагина можно использовать grafana-toolkit, который упрощает создание, сборку и тестирование ваших плагинов.

    npm install -g @grafana/toolkit
    grafana-toolkit plugin:create my-react-plugin
    cd my-react-project
    

Структура проекта

Типичный проект плагина для Grafana, использующий React и TypeScript, будет иметь следующую структуру:

my-react-plugin/ ├── src/ │ ├── components/ │ │ ├── MyPanel.tsx │ │ ├── MyPanelEditor.tsx │ ├── types/ │ │ ├── defaults.ts │ │ ├── MyPanelOptions.ts │ ├── module.tsx │ ├── plugin.json ├── tsconfig.json ├── package.json └── README.md

plugin.json

Этот файл содержит метаданные о вашем плагине, такие как его имя, ID и тип.

{
  "type": "panel",
  "name": "My React Plugin",
  "id": "my-react-plugin",
  "info": {
    "author": {
      "name": "Maxim Zhirnov",
      "url": "https://example.com"
    },
    "description": "A React-based plugin for Grafana",
    "version": "1.0.0"
  },
  "dependencies": {
    "grafana": ">=8.0.0"
  },
  "includes": ["css/style.css"],
  "module": "module",
  "partials": ["partials/template.html"]
}

module.tsx

Это основная точка входа вашего плагина, где вы определяете компоненты React и настраиваете плагин.

import { PanelPlugin } from '@grafana/ui';
import { MyPanel } from './components/MyPanel';
import { MyPanelEditor } from './components/MyPanelEditor';
import { defaults, MyPanelOptions } from './types';

export const myReactPanel = new PanelPlugin<MyPanelOptions>(MyPanel);
myReactPanel.setEditor(MyPanelEditor);
myReactPanel.setDefaults(defaults);

MyPanel.tsx и MyPanelEditor.tsx

Эти файлы содержат ваши компоненты React для панели и её редактора.

// MyPanel.tsx
import React from 'react';
import { PanelProps } from '@grafana/ui';

interface MyPanelOptions {
  someText: string;
}

export class MyPanel extends React.PureComponent<PanelProps<MyPanelOptions>> {
  render() {
    const { options } = this.props;
    return (
      <div>
        Text from editor: {options.someText}
      </div>
    );
  }
}

// MyPanelEditor.tsx
import React from 'react';
import { EditorProps } from '@grafana/ui';

export class MyPanelEditor extends React.PureComponent<EditorProps<MyPanelOptions>> {
  render() {
    const { options, onOptionsChange } = this.props;
    return (
      <div>
        <input
          type="text"
          value={options.someText}
          onChange={(e) => onOptionsChange({ ...options, someText: e.target.value })}
        />
      </div>
    );
  }
}

Сборка и запуск плагина

Для сборки и запуска плагина вы можете использовать команды, предоставленные grafana-toolkit.

grafana-toolkit plugin:build
grafana-toolkit plugin:dev

Команда plugin:dev запустит сервер разработки, который будет следить за изменениями и автоматически перестраивать ваш плагин.

Мы надеемся, этот перевод будет полезен для вас.