2016-05-06 3 views
3

外部バックエンドに依存しないgrafanaデータソースプラグインを書きたいと思います。外部バックエンドを使用せずにgrafanaデータソースプラグインを作成することはできますか?

アイブ氏は、単純なJSONデータソースプラグインに基づいて、私のプラグインを建て:https://github.com/grafana/simple-json-datasource

を私は次のようにdatasource.jsにおけるクエリ機能を変更しよう:

元:

query(options) { 
    var query = this.buildQueryParameters(options); 

    if (query.targets.length <= 0) { 
     return this.q.when([]); 
    } 

    return this.backendSrv.datasourceRequest({ 
     url: this.url + '/query', 
     data: query, 
     method: 'POST', 
     headers: { 'Content-Type': 'application/json' } 
    }); 

私のクエリ機能:

query(options) { 
     return [ 
     { 
     "target":"upper_75", 
     "datapoints":[ 
      [622,1450754160000], 
      [365,1450754220000] 
     ] 
     }, 
     { 
     "target":"upper_90", 
     "datapoints":[ 
      [861,1450754160000], 
      [767,1450754220000] 
     ] 
     } 
    ]; 
    } 

I私のクエリ機能を実装し、私はエラーメッセージが表示されますgraphanaパネルでグラフを表示しよう:データフォーマットに関する

「未定義のオブジェクトではありません(評価 『dataList.map』)」

いけない心配私はすべてを試しましたが、グラファナはリターンとは異なる何かを期待しているようですが、どのようなフォーマットを理解できないのでしょうか。

元の実装が返すものをトレースして複製しましたが、動作しません。私は

this.backendSrv.datasourceRequest({ 
     url: this.url + '/query', 
     data: query, 
     method: 'POST', 
     headers: { 'Content-Type': 'application/json' } 
    }); 

信じる

は、HTTP応答のようなものを返すことになっているが、なぜ私は手動でそれを返すカント?

事前にお問い合わせいただきありがとうございます。

+0

あなたは、元のプラグインのバックエンドの作業を持っている場合は、ブラウザでの出力を見て慰めます にconsole.log(this.backendSrv.datasourceRequest({ URL:this.url + '/クエリ' データクエリ、 方法: 'POST'、 ヘッダー:{ 'のContent-Type':「アプリケーション/ json '} }))); returnの前に文が挿入されていれば、どんなquery()関数が返すのでしょうか? –

+0

このヒントありがとうございます! 私はそれを探して返します: オブジェクト{$$状態:オブジェクト} $$状態は何らかの角度のオブジェクトのようです。 これをさらに見て、ご協力いただきありがとうございます。 –

答えて

3

約束事に包まれる必要があり、直接返品することはできないようです。彼らは、角度の$ qコンポーネントを使用します。私はそれが戻って作業を行わ:

return this.q(function(resolve, reject) { 
    var result = { 
     data : [ 
     { 
      "target":"upper_75", 
      "datapoints":[ 
      [622,1450754160000], 
      [365,1450754220000] 
      ] 
     }, 
     { 
      "target":"upper_90", 
      "datapoints":[ 
      [861,1450754160000], 
      [767,1450754220000] 
      ] 
     } 
     ] 
    } 
    resolve(result) 
}); 

あなたはコンストラクタで依存性注入を経て$ qを取得します:

constructor(instanceSettings, $q, backendSrv) { 
this.type = instanceSettings.type; 
this.url = instanceSettings.url; 
this.name = instanceSettings.name; 
this.q = $q; 
this.backendSrv = backendSrv;} 
関連する問題