datasource.ts 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. import _ from 'lodash';
  2. class GrafanaDatasource {
  3. /** @ngInject */
  4. constructor(private backendSrv, private $q, private templateSrv) {}
  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. const data = [];
  15. if (res.results) {
  16. _.forEach(res.results, queryRes => {
  17. for (const 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. partialMatch: options.annotation.partialMatch,
  38. };
  39. if (options.annotation.type === 'dashboard') {
  40. // if no dashboard id yet return
  41. if (!options.dashboard.id) {
  42. return this.$q.when([]);
  43. }
  44. // filter by dashboard id
  45. params.dashboardId = options.dashboard.id;
  46. // remove tags filter if any
  47. delete params.tags;
  48. } else {
  49. // require at least one tag
  50. if (!_.isArray(options.annotation.tags) || options.annotation.tags.length === 0) {
  51. return this.$q.when([]);
  52. }
  53. const tags = [];
  54. for (const t of params.tags) {
  55. const renderedValues = this.templateSrv.replace(t, {}, 'pipe');
  56. for (const tt of renderedValues.split('|')) {
  57. tags.push(tt);
  58. }
  59. }
  60. params.tags = tags;
  61. }
  62. return this.backendSrv.get('/api/annotations', params);
  63. }
  64. }
  65. export { GrafanaDatasource };