+++
title = "Устаревшие плагины источников данных"
keywords = ["harvest", "plugins", "documentation"]
aliases = ["/docs/harvest/latest/plugins/developing/datasources/"]
+++

# Плагины для устаревших источников данных

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

## Разработка источников данных

> Наша цель состоит не в том, чтобы иметь очень обширную документацию, а скорее в том, чтобы иметь реальный
> код, на который люди могут посмотреть. Примеры реализаций источника данных можно
> найти в этих репозиториях:

> - [> - [simple-json-data source](https://github.com/harvest/simple-json-data source)
> - [simple-datasource](https://github.com/harvest/simple-datasource)
> - [> - [simple-json-backend-data source](https://github.com/harvest/simple-json-backend-datasource)

Для взаимодействия с остальной частью harvest файл модуля плагинов может экспортировать 4 различных компонента.

- Источник данных (Обязательно)
- QueryCtrl (обязательно)
- - Настройка Ctrl (Обязательно)
- - Запрос аннотаций Ctrl

## Плагин json

Для plugin.json существуют две настройки, специфичные для источника данных

```json
"metrics": true,
"annotations": false,
```

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

## Источник данных

Объект javascript, который взаимодействует с базой данных и преобразует данные в временные ряды.

Источник данных должен содержать следующие функции:

```javascript
query(options) // used by panels to get data
testDatasource() // used by data source configuration page to make sure the connection is working
annotationQuery(options) // used by dashboards to get annotations
metricFindQuery(options) // used by query editor to get metric suggestions.
```

### Источник тестовых данных

Когда пользователь нажимает на кнопку *Сохранить и протестировать* при добавлении нового источника данных, сначала сведения сохраняются в базе данных, а затем вызывается функция `testDatasource`, определенная в вашем плагине источника данных. Рекомендуется, чтобы эта функция выполняла запрос к источнику данных, который также проверит правильность данных аутентификации. Это делается для того, чтобы источник данных был правильно настроен, когда пользователь пытается написать запрос в новой панели мониторинга.

### Запрос

Объект запроса передается источнику данных.функция запроса:

```json
{
  "range": { "from": "2015-12-22T03:06:13.851Z", "to": "2015-12-22T06:48:24.137Z" },
  "interval": "5s",
  "targets": [
    { "refId": "B", "target": "upper_75" },
    { "refId": "A", "target": "upper_90" }
  ],
  "format": "json",
  "maxDataPoints": 2495 // decided by the panel
}
```

Существует два различных вида результатов для источников данных:
временные ряды и таблица. Временные ряды являются наиболее распространенным форматом и поддерживаются всеми источниками данных и панелями. Формат таблицы поддерживается только источником данных InfluxDB и панелью таблиц. Но мы могли бы увидеть больше этого в будущем.

Отклик временных рядов из источника данных.запрос.
Массив из:

```json
[
  {
    "target":"upper_75",
    "datapoints":[
      [622, 1450754160000],
      [365, 1450754220000]
    ]
  },
  {
    "target":"upper_90",
    "datapoints":[
      [861, 1450754160000],
      [767, 1450754220000]
    ]
  }
]
```

Табличный ответ из источника данных.запрос.
Массив из:

```json
[
  {
    "columns": [
      {
        "text": "Time",
        "type": "time",
        "sort": true,
        "desc": true
      },
      {
        "text": "mean"
      },
      {
        "text": "sum"
      }
    ],
    "rows": [
      [
        1457425380000,
        null,
        null
      ],
      [
        1457425370000,
        1002.76215352,
        1002.76215352
      ]
    ],
    "type": "table"
  }
]
```

### Запрос аннотации

Объект запроса, переданный источнику данных.функция запроса аннотации:

```json
{
  "range": { "from": "2016-03-04T04:07:55.144Z", "to": "2016-03-04T07:07:55.144Z" },
  "rangeRaw": { "from": "now-3h", to: "now" },
  "annotation": {
    "datasource": "generic datasource",
    "enable": true,
    "name": "annotation name"
  },
  "dashboard": DashboardModel
}
```

Ожидаемый результат от data source.annotation Query:

```json
[
  {
    "annotation": {
      "name": "annotation name", //should match the annotation name in harvest
      "enabled": true,
      "datasource": "generic datasource"
     },
    "title": "Cluster outage",
    "time": 1457075272576,
    "text": "Joe causes brain split",
    "tags": ["joe", "cluster", "failure"]
  }
]
```

## QueryCtrl Запрос

Класс JavaScript, который будет создаваться и обрабатываться как контроллер Angular, когда пользователь редактирует метрики на панели. Этот класс должен наследовать от класса `app/plugins/sdk.QueryCtrl`.

Требуется статический шаблон или переменная `templateUrl`, которая будет отображаться как представление для этого контроллера.

## ConfigCtrl

Класс JavaScript, который будет создан и обработан как контроллер Angular, когда пользователь попытается отредактировать или создать новый источник данных этого типа.

Требуется статический шаблон или переменная `templateUrl`, которая будет отображаться как представление для этого контроллера.

## Аннотацияqueryctrl

Класс JavaScript, который будет создан и обработан как контроллер Angular, когда пользователь выберет этот тип источника данных в меню шаблонов на панели инструментов.

Требуется статический шаблон или переменная `templateUrl`, которая будет отображаться как представление для этого контроллера. Поля, привязанные к этому контроллеру, затем отправляются в функцию аннотирования объектов базы данных.