datasource.ts 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. import _ from 'lodash';
  2. import { BackendSrv } from 'app/core/services/backend_srv';
  3. import { IQService } from 'angular';
  4. import { TemplateSrv } from 'app/features/templating/template_srv';
  5. class GrafanaDatasource {
  6. /** @ngInject */
  7. constructor(private backendSrv: BackendSrv, private $q: IQService, private templateSrv: TemplateSrv) {}
  8. query(options: any) {
  9. return this.backendSrv
  10. .get('/api/tsdb/testdata/random-walk', {
  11. from: options.range.from.valueOf(),
  12. to: options.range.to.valueOf(),
  13. intervalMs: options.intervalMs,
  14. maxDataPoints: options.maxDataPoints,
  15. })
  16. .then((res: any) => {
  17. const data: any[] = [];
  18. if (res.results) {
  19. _.forEach(res.results, queryRes => {
  20. for (const series of queryRes.series) {
  21. data.push({
  22. target: series.name,
  23. datapoints: series.points,
  24. });
  25. }
  26. });
  27. }
  28. return { data: data };
  29. });
  30. }
  31. metricFindQuery(options: any) {
  32. return this.$q.when({ data: [] });
  33. }
  34. annotationQuery(options: any) {
  35. const params: any = {
  36. from: options.range.from.valueOf(),
  37. to: options.range.to.valueOf(),
  38. limit: options.annotation.limit,
  39. tags: options.annotation.tags,
  40. matchAny: options.annotation.matchAny,
  41. };
  42. if (options.annotation.type === 'dashboard') {
  43. // if no dashboard id yet return
  44. if (!options.dashboard.id) {
  45. return this.$q.when([]);
  46. }
  47. // filter by dashboard id
  48. params.dashboardId = options.dashboard.id;
  49. // remove tags filter if any
  50. delete params.tags;
  51. } else {
  52. // require at least one tag
  53. if (!_.isArray(options.annotation.tags) || options.annotation.tags.length === 0) {
  54. return this.$q.when([]);
  55. }
  56. const delimiter = '__delimiter__';
  57. const tags = [];
  58. for (const t of params.tags) {
  59. const renderedValues = this.templateSrv.replace(t, {}, (value: any) => {
  60. if (typeof value === 'string') {
  61. return value;
  62. }
  63. return value.join(delimiter);
  64. });
  65. for (const tt of renderedValues.split(delimiter)) {
  66. tags.push(tt);
  67. }
  68. }
  69. params.tags = tags;
  70. }
  71. return this.backendSrv.get('/api/annotations', params);
  72. }
  73. }
  74. export { GrafanaDatasource };