GraphPanel.tsx 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. // Libraries
  2. import _ from 'lodash';
  3. import React, { PureComponent } from 'react';
  4. import {
  5. Graph,
  6. PanelProps,
  7. NullValueMode,
  8. colors,
  9. TimeSeriesVMs,
  10. ColumnType,
  11. guessColumnTypes,
  12. getFirstTimeColumn,
  13. processTimeSeries,
  14. } from '@grafana/ui';
  15. import { Options } from './types';
  16. interface Props extends PanelProps<Options> {}
  17. export class GraphPanel extends PureComponent<Props> {
  18. render() {
  19. const { data, timeRange, width, height } = this.props;
  20. const { showLines, showBars, showPoints } = this.props.options;
  21. const vmSeries: TimeSeriesVMs = [];
  22. for (let t = 0; t < data.length; t++) {
  23. const table = guessColumnTypes(data[t]);
  24. const timeColumn = getFirstTimeColumn(table);
  25. if (timeColumn >= 0) {
  26. for (let i = 0; i < table.columns.length; i++) {
  27. const column = table.columns[i];
  28. // Show all numeric columns
  29. if (column.type === ColumnType.number) {
  30. const tsvm = processTimeSeries({
  31. data: [table],
  32. xColumn: timeColumn,
  33. yColumn: i,
  34. nullValueMode: NullValueMode.Null,
  35. })[0];
  36. const colorIndex = vmSeries.length % colors.length;
  37. tsvm.color = colors[colorIndex];
  38. vmSeries.push(tsvm);
  39. }
  40. }
  41. }
  42. }
  43. return (
  44. <Graph
  45. timeSeries={vmSeries}
  46. timeRange={timeRange}
  47. showLines={showLines}
  48. showPoints={showPoints}
  49. showBars={showBars}
  50. width={width}
  51. height={height}
  52. />
  53. );
  54. }
  55. }