datasource.ts 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. import _ from 'lodash';
  2. class GrafanaDatasource {
  3. /** @ngInject */
  4. constructor(private backendSrv, private $q) {}
  5. query(options) {
  6. return this.backendSrv
  7. .get('/api/tsdb/testdata/random-walk', {
  8. from: options.range.from.valueOf(),
  9. to: options.range.to.valueOf(),
  10. intervalMs: options.intervalMs,
  11. maxDataPoints: options.maxDataPoints,
  12. })
  13. .then(res => {
  14. var data = [];
  15. if (res.results) {
  16. _.forEach(res.results, queryRes => {
  17. for (let series of queryRes.series) {
  18. data.push({
  19. target: series.name,
  20. datapoints: series.points,
  21. });
  22. }
  23. });
  24. }
  25. return {data: data};
  26. });
  27. }
  28. metricFindQuery(options) {
  29. return this.$q.when({data: []});
  30. }
  31. annotationQuery(options) {
  32. const params: any = {
  33. from: options.range.from.valueOf(),
  34. to: options.range.to.valueOf(),
  35. limit: options.annotation.limit,
  36. tags: options.annotation.tags,
  37. };
  38. if (options.annotation.type === 'dashboard') {
  39. // if no dashboard id yet return
  40. if (!options.dashboard.id) {
  41. return this.$q.when([]);
  42. }
  43. // filter by dashboard id
  44. params.dashboardId = options.dashboard.id;
  45. // remove tags filter if any
  46. delete params.tags;
  47. } else {
  48. // require at least one tag
  49. if (!_.isArray(options.annotation.tags) || options.annotation.tags.length === 0) {
  50. return this.$q.when([]);
  51. }
  52. }
  53. return this.backendSrv.get('/api/annotations', params);
  54. }
  55. }
  56. export {GrafanaDatasource};