2016-05-06 4 views
3

Ich möchte ein Grafana-Datenquellen-Plugin schreiben, das nicht auf ein externes Backend angewiesen ist.Ist es möglich, ein Grafana-Datenquellen-Plugin ohne externes Backend zu schreiben?

Ive gebaut mein Plugin basiert auf der einfachen-json Datenquelle Plugin: https://github.com/grafana/simple-json-datasource

Ich versuche, die Abfrage-Funktion in den datasource.js wie folgt zu ändern:

original:

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' } 
    }); 

Meine Abfragefunktion:

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

Wann Ich meine Abfrage-Funktion implementieren und versuchen, die Grafik im graphana Panel ich die Fehlermeldung angezeigt werden:

Sorgen Sie sich nicht über das Datenformat „undefiniert ist kein Objekt (‚dataList.map‘Bewertung)“ Ich habe alles versucht, aber es scheint, dass Grafana etwas anderes als eine Rückkehr erwartet, aber ich kann nicht herausfinden, welches Format.

Ich verfolgt, was die ursprüngliche Implementierung zurückgibt und es dupliziert, aber es funktioniert nicht.

I

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

soll so etwas wie eine HTTP-Antwort zurück, aber warum kann ich nur, dass manuell zurückgeben?

Vielen Dank für jede Hilfe im Voraus!

+0

Wenn Sie Original-Plugin Backend Arbeits haben, dann in Browser-Konsole einen Blick auf die Ausgabe von console.log (this.backendSrv.datasourceRequest ({ url: this.Url + '/ query', Daten: Abfrage, Methode: 'POST', Header: { 'Content-Type': ‚application/json '} })); Anweisung eingefügt vor der Rückkehr ..... muss genau zeigen, welche Abfrage() Funktion sollte zurückgeben. –

+0

danke für diesen Tipp! Ich sah nach oben und es gibt zurück: Objekt {$$ state: Object} $$ Zustand scheint eine Art von eckigen Objekt sein. Ich schaue weiter, danke für Ihre Hilfe! –

Antwort

3

Es sieht so aus, als ob es in ein Versprechen eingehüllt werden muss und nicht direkt zurückgegeben werden kann. Sie verwenden die eckige $ q-Komponente. Ich habe es die Arbeit mit der Rückkehr:

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) 
}); 

Sie $ q über Dependency Injection in den Konstruktor erhalten:

constructor(instanceSettings, $q, backendSrv) { 
this.type = instanceSettings.type; 
this.url = instanceSettings.url; 
this.name = instanceSettings.name; 
this.q = $q; 
this.backendSrv = backendSrv;} 
Verwandte Themen