Grafana подключает источник данных к настраиваемой панели - PullRequest
0 голосов
/ 05 мая 2020

Я работаю над очень простым c плагином панели, который делаю сам. Я использовал Angular одну из документации Grafana. Этакий пример "Hello world".

Но почему-то данные из источника данных не отображаются. Я читал, что функция handleDataFrame выполняет роль подключения данных из источника данных к панели. Но похоже, что функция никогда не вызывается.

Вот код:

import { MetricsPanelCtrl } from 'grafana/app/plugins/sdk';
import defaultsDeep from 'lodash/defaultsDeep';

import { DataFrame } from '@grafana/data';

interface KeyValue {
  key: string;
  value: any;
}

export default class SimpleCtrl extends MetricsPanelCtrl {
  static templateUrl = 'partials/module.html';

  panelDefaults = {
    text: 'Hello World',
  };

  // Simple example showing the last value of all data
  firstValues: KeyValue[] = [];

  /** @ngInject */
  constructor($scope, $injector) {
    super($scope, $injector);
    defaultsDeep(this.panel, this.panelDefaults);

    // Get results directly as DataFrames
    (this as any).dataFormat = 'series';

    this.events.on('init-edit-mode', this.onInitEditMode.bind(this));
    this.events.on('render', this.onRender.bind(this));
    this.events.on('data-error', this.onDataError.bind(this));
  }

  onInitEditMode() {
    this.addEditorTab('Options', `public/plugins/${this.pluginId}/partials/options.html`, 2);
  }

  onRender() {
    if (!this.firstValues || !this.firstValues.length) {
      return;
    }

    // Tells the screen capture system that you finished
    this.renderingCompleted();
  }

  onDataError(err: any) {
    console.log('onDataError', err);
  }

  // 6.3+ get typed DataFrame directly
  handleDataFrame(data: DataFrame[]) {
    const values: KeyValue[] = [];

    for (const frame of data) {
      for (let i = 0; i < frame.fields.length; i++) {
        values.push({
          key: frame.fields[i].name,
          value: frame.fields[i].values,
        });
      }
    }
    console.log(values);
    this.firstValues = values;
  }
}

export { SimpleCtrl as PanelCtrl };
<div>
  <h2>{{ctrl.panel.text}}</h2>
  <h2>{{ctrl.firstValues}}</h2>
  <div ng-repeat="first in ctrl.firstValues">
    <b>{{first.key}}:</b> {{first.value}}
  </div>
</div>

Из-за этого {{ctrl.firstValues}} пуст, а также следующий код.

Вы знаете, почему handleDataFrame не работает должным образом?

...