+++
title = "Устаревший режим моментальных снимков"
aliases = ["/docs/harvest/latest/plugins/developing/snapshot-mode/"]
+++

# Устаревший режим моментального снимка

{{< класс рисунка="float-right" src="/static/img/docs/Harvest-snapshot-example.png" подпись="Панель мониторинга, использующая данные моментального снимка, а не текущие данные" >}}

В Harvest есть отличная функция, с помощью которой вы можете [сохранить снимок вашей панели мониторинга] ({{< relref "../../../dashboards /json-model.md" >}}). Вместо того, чтобы отправлять кому-либо скриншот панели мониторинга, вы можете отправить им рабочую интерактивную панель мониторинга Harvest со встроенными в нее данными моментального снимка. Снимок может быть сохранен на вашем сервере Harvest и доступен всем вашим коллегам. В Raintank также размещен [сервер моментальных снимков](http://snapshot.raintank.io /) если вы хотите отправить снимок кому-то, у кого нет доступа к вашему серверу Harvest.

{{< класс рисунка="float-right" src="/static/img/docs/animated_gifs/snapshots.gif " подпись="Выбор моментального снимка" >}}

Все это работает, потому что Harvest сохраняет снимок текущих данных в json панели мониторинга вместо извлечения данных из источника данных. Однако, если вы создаете плагин пользовательской панели, это не будет работать прямо из коробки. Сначала вам нужно будет внести некоторые небольшие (и легкие!) изменения.

## Включение поддержки загрузки данных моментального снимка

Harvest автоматически сохраняет данные из источников данных в json панели инструментов при создании моментального снимка, поэтому нам не нужно писать для этого никакого кода. Включить поддержку моментальных снимков для чтения данных временных рядов очень просто. Сначала в конструкторе нам нужно добавить обработчик событий для `data-snapshot-load`. Это событие запускается Harvest, когда данные моментального снимка загружаются из json панели мониторинга.

```javascript
constructor($scope, $injector, contextSrv) {
    super($scope, $injector);
    ...
    this.events.on('init-edit-mode', this.onInitEditMode.bind(this));
    this.events.on('data-received', this.onDataReceived.bind(this));
    this.events.on('panel-teardown', this.onPanelTeardown.bind(this));
    this.events.on('data-snapshot-load', this.onDataSnapshotLoad.bind(this));
```

Затем нам нужно создать простой обработчик событий, который просто пересылает данные в ваш обычный обработчик "полученных данных":

```javascript
onDataSnapshotLoad(snapshotData) {
  this.onDataReceived(snapshotData);
}
```

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

## Сохранение пользовательских данных для моментальных снимков

Данные, которые не являются данными временных рядов из источника данных Harvest, не сохраняются автоматически Harvest. Сохранение пользовательских данных для режима моментального снимка должно выполняться вручную.

{{< класс рисунка="float-right" src="/static/img/docs/Harvest-save-snapshot.png" подпись="Сохранить снимок" >}}

Harvest дает нам возможность сохранять данные в json панели инструментов при создании моментального снимка. В обработчике событий "полученные данные" вы можете установить флажок моментального снимка на объекте панели мониторинга. Если это так, то Harvest создает моментальный снимок, и вы можете вручную сохранить пользовательские данные в panel json. В примере новое поле с именем snapshot Location Data в cpanel json инициализируется моментальным снимком пользовательских данных.

```javascript
onDataReceived(dataList) {
  if (!dataList) return;

  if (this.dashboard.snapshot && this.locations) {
    this.panel.snapshotLocationData = this.locations;
  }
```

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

## Загрузка пользовательских данных для моментальных снимков

В приведенном ниже примере показана функция, которая загружает пользовательские данные. Источник данных для пользовательских данных (в данном случае внешний API) недоступен в режиме моментального снимка, поэтому сначала выполняется защитная проверка, чтобы проверить, доступны ли какие-либо данные моментального снимка. Если есть, то вместо попытки загрузить данные из внешнего API используются данные моментального снимка.

```javascript
loadLocationDataFromFile(reload) {
  if (this.map && !reload) return;

  if (this.panel.snapshotLocationData) {
    this.locations = this.panel.snapshotLocationData;
    return;
  }
```

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

Если есть плагин панели, который вы хотели бы установить на сервере моментальных снимков Raintank, пожалуйста, свяжитесь с нами через [Slack](https://raintank.slack.com ) или [GitHub](https://github.com/harvest/harvest ).