ResultProcessor.ts 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. import { TableData, LogsModel, TimeSeries, GraphSeriesXY, DataFrame } from '@grafana/data';
  2. import { ExploreItemState, ExploreMode } from 'app/types/explore';
  3. import TableModel, { mergeTablesIntoModel } from 'app/core/table_model';
  4. import { sortLogsResult, refreshIntervalToSortOrder } from 'app/core/utils/explore';
  5. import { dataFrameToLogsModel } from 'app/core/logs_model';
  6. import { getGraphSeriesModel } from 'app/plugins/panel/graph2/getGraphSeriesModel';
  7. export class ResultProcessor {
  8. constructor(
  9. private state: ExploreItemState,
  10. private replacePreviousResults: boolean,
  11. private dataFrames: DataFrame[]
  12. ) {}
  13. getGraphResult(): GraphSeriesXY[] {
  14. if (this.state.mode !== ExploreMode.Metrics) {
  15. return [];
  16. }
  17. const onlyTimeSeries = this.dataFrames.filter(series => series.fields.length === 2);
  18. return getGraphSeriesModel(
  19. onlyTimeSeries,
  20. {},
  21. { showBars: false, showLines: true, showPoints: false },
  22. { asTable: false, isVisible: true, placement: 'under' }
  23. );
  24. }
  25. getTableResult(): TableModel {
  26. if (this.state.mode !== ExploreMode.Metrics) {
  27. return new TableModel();
  28. }
  29. return new TableModel();
  30. // const tables = this.panelData.series.map(frame => {
  31. // });
  32. // const prevTableResults: any[] | TableModel = this.state.tableResult || [];
  33. // const tablesToMerge = this.replacePreviousResults ? this.tables : [].concat(prevTableResults, this.tables);
  34. //
  35. // return mergeTablesIntoModel(new TableModel(), ...tablesToMerge);
  36. }
  37. getLogsResult(): LogsModel {
  38. if (this.state.mode !== ExploreMode.Logs) {
  39. return null;
  40. }
  41. const graphInterval = this.state.queryIntervals.intervalMs;
  42. const newResults = dataFrameToLogsModel(this.dataFrames, graphInterval);
  43. const sortOrder = refreshIntervalToSortOrder(this.state.refreshInterval);
  44. const sortedNewResults = sortLogsResult(newResults, sortOrder);
  45. if (this.replacePreviousResults) {
  46. const slice = 1000;
  47. const rows = sortedNewResults.rows.slice(0, slice);
  48. const series = sortedNewResults.series;
  49. return { ...sortedNewResults, rows, series };
  50. }
  51. const prevLogsResult: LogsModel = this.state.logsResult || { hasUniqueLabels: false, rows: [] };
  52. const sortedLogResult = sortLogsResult(prevLogsResult, sortOrder);
  53. const rowsInState = sortedLogResult.rows;
  54. const processedRows = [];
  55. for (const row of rowsInState) {
  56. processedRows.push({ ...row, fresh: false });
  57. }
  58. for (const row of sortedNewResults.rows) {
  59. processedRows.push({ ...row, fresh: true });
  60. }
  61. const slice = -1000;
  62. const rows = processedRows.slice(slice);
  63. const series = sortedNewResults.series.slice(slice);
  64. return { ...sortedNewResults, rows, series };
  65. }
  66. // private isSameGraphSeries = (a: GraphSeriesXY, b: GraphSeriesXY) => {
  67. // if (a.hasOwnProperty('label') && b.hasOwnProperty('label')) {
  68. // const aValue = a.label;
  69. // const bValue = b.label;
  70. // if (aValue !== undefined && bValue !== undefined && aValue === bValue) {
  71. // return true;
  72. // }
  73. // }
  74. //
  75. // return false;
  76. // };
  77. //
  78. // private mergeGraphResults = (newResults: GraphSeriesXY[], prevResults: GraphSeriesXY[]): GraphSeriesXY[] => {
  79. // if (!prevResults || prevResults.length === 0 || this.replacePreviousResults) {
  80. // return newResults; // Hack before we use GraphSeriesXY instead
  81. // }
  82. //
  83. // const results: GraphSeriesXY[] = prevResults.slice() as GraphSeriesXY[];
  84. //
  85. // // update existing results
  86. // for (let index = 0; index < results.length; index++) {
  87. // const prevResult = results[index];
  88. // for (const newResult of newResults) {
  89. // const isSame = this.isSameGraphSeries(prevResult, newResult);
  90. //
  91. // if (isSame) {
  92. // prevResult.data = prevResult.data.concat(newResult.data);
  93. // break;
  94. // }
  95. // }
  96. // }
  97. //
  98. // // add new results
  99. // for (const newResult of newResults) {
  100. // let isNew = true;
  101. // for (const prevResult of results) {
  102. // const isSame = this.isSameGraphSeries(prevResult, newResult);
  103. // if (isSame) {
  104. // isNew = false;
  105. // break;
  106. // }
  107. // }
  108. //
  109. // if (isNew) {
  110. // results.push(newResult);
  111. // }
  112. // }
  113. // return results;
  114. // };
  115. }