2016-10-18 7 views
6

Я тестирую Grafana для чтения и графического отображения данных из системы Graphite.swap Графит вернул временную метку и значение в Grafana

Это как графана ожидает JSon данные из графита:

{ 
    "data": [ 
    { 
     "target": "test-series-0", 
     "datapoints": [ 
     [ 
      22.504392773143504, 
      1.476693264195e+12 
     ], 
     [ 
      22.719552781746028, 
      1.476693301825e+12 
     ] 
     ] 
    } 
    ] 
} 

Система, которую я хочу прочитать данные, обменивает метку времени и значение метрики, например,

{ 
    "data": [ 
    { 
     "target": "test-series-0", 
     "datapoints": [ 
     [ 
      1.476693264195e+12 
      22.504392773143504, 
     ], 
     [ 
      1.476693301825e+12 
      22.719552781746028, 
     ] 
     ] 
    } 
    ] 
} 

screenshot Можно ли создать новый источник данные (копию из графитового источника данных по умолчанию), что либо обменивает значения обратно перед обработкой или работать со значениями, как есть?

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

EDIT: Я пробовал это: я сделал копию плагина Graphite по умолчанию и переименовал его в графитированную копию и скорректировал идентификатор в plugin.json.

Тогда я редактировал datasource.js и datasource.ts вроде этого:

var e = { 
    method: "POST", 
    url: "/render", 
    data: d.join("&"), 
    headers: { 
    "Content-Type": "application/x-www-form-urlencoded" 
    } 
    }; 
    return a.panelId && (e.requestId = this.name + ".panelId." + a.panelId), this.doGraphiteRequest(e).then(this.convertDataPointsToMs) 
    }, this.convertDataPointsToMs = function(a) { 
    if (!a || !a.data) return []; 
    for (var b = 0; b < a.data.length; b++) 
    for (var c = a.data[b], d = 0; d < c.datapoints.length; d++) { 
     var t = c.datapoints[d][0]; 
     c.datapoints[d][0] = c.datapoints[d][1]; 
     c.datapoints[d][0] = t; 
     c.datapoints[d][1] *= 1e3; 
    } 

С изменением является следующее:

var t = c.datapoints[d][0]; 
    c.datapoints[d][0] = c.datapoints[d][1]; 
    c.datapoints[d][0] = t; 

Я сделал это для обоих GET и POST методов в datasource.js/ts, но это дает мне то же самое результат (отметка времени и метрика).

ответ

0

Вы можете сделать это что-то вроде этого в angular используя angular.factory

var module = angular.module(grafana.services); 

module.factory('Datasrc',function($q, backendsrv, templatesrv){ 

//$q,backendsrv templatesrv supported by grafana 

function Datasrc(datasource){ 
    this.type =// the datasource type; 

    this.url = datasource.url; 

    this.auth = datasource.basicAuth; 

    this.timestamp = true; 

    this.supportMetrics = true; 
} 

AtsdDatasource.prototype.query = function (options) { 


var queries = _.compact(qs); 

if (_.isEmpty(queries)) { 
      var d = $q.defer(); 
      d.resolve({ data: [] }); 
      return d.promise; 
} 

Datasrc.prototype._performQuery = function (queries) { 
    var query = []; 
    query.push( 
    { 
     data :[ 
       objecttype = query.type, 
       datapoints = query.//swap the values here 
       //enter the other necessary fields or declare more in the factory 

       ] 
      }); 

if (query.length === 0) { 
      var d = $q.defer(); 
      d.resolve({ data: undefined }); 
      return d.promise;   //promise called here 
} 



var options = { 
      method: 'POST', 
      url: this.url + '/api/v1/series', 
      data: { 
      queries: tsQueries 
      }, 
      headers: { 
      Authorization: this.basicAuth 
      } 
     }; 

     return backendSrv.datasourceRequest(options).then(function (result) { 
      return result; 
     }); 
}; 

    } 
}); 

Полный приписывание к author и GitHub link

+0

протестирует завтра, где поставить это? – Remko

+0

То же самое в datasource.js, я также получил ссылку github, вы можете изменить переменные в соответствии с вашим кодом, и вам нужно обернуть его в * обещание –

+0

. Мне кажется, мне нужно больше информации о том, как реализовать предлагаемое решение, оно кажется, что вы предлагаете полностью переписать datasource.js, но я просто хочу сделать обмен поля в массиве datapoints – Remko

 Смежные вопросы

  • Нет связанных вопросов^_^