Help.tsx 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. import React from 'react';
  2. import { Project } from './Project';
  3. import StackdriverDatasource from '../datasource';
  4. import { MetricDescriptor } from '../types';
  5. export interface Props {
  6. datasource: StackdriverDatasource;
  7. rawQuery: string;
  8. lastQueryError: string;
  9. metricDescriptor?: MetricDescriptor;
  10. }
  11. interface State {
  12. displayHelp: boolean;
  13. displaRawQuery: boolean;
  14. }
  15. export class Help extends React.Component<Props, State> {
  16. state: State = {
  17. displayHelp: false,
  18. displaRawQuery: false,
  19. };
  20. onHelpClicked = () => {
  21. this.setState({ displayHelp: !this.state.displayHelp });
  22. };
  23. onRawQueryClicked = () => {
  24. this.setState({ displaRawQuery: !this.state.displaRawQuery });
  25. };
  26. shouldComponentUpdate(nextProps: Props) {
  27. return nextProps.metricDescriptor !== null;
  28. }
  29. render() {
  30. const { displayHelp, displaRawQuery } = this.state;
  31. const { datasource, rawQuery, lastQueryError } = this.props;
  32. return (
  33. <>
  34. <div className="gf-form-inline">
  35. <Project datasource={datasource} />
  36. <div className="gf-form" onClick={this.onHelpClicked}>
  37. <label className="gf-form-label query-keyword pointer">
  38. Show Help <i className={`fa fa-caret-${displayHelp ? 'down' : 'right'}`} />
  39. </label>
  40. </div>
  41. {rawQuery && (
  42. <div className="gf-form" onClick={this.onRawQueryClicked}>
  43. <label className="gf-form-label query-keyword">
  44. Raw Query <i className={`fa fa-caret-${displaRawQuery ? 'down' : 'right'}`} ng-show="ctrl.showHelp" />
  45. </label>
  46. </div>
  47. )}
  48. <div className="gf-form gf-form--grow">
  49. <div className="gf-form-label gf-form-label--grow" />
  50. </div>
  51. </div>
  52. {rawQuery && displaRawQuery && (
  53. <div className="gf-form">
  54. <pre className="gf-form-pre">{rawQuery}</pre>
  55. </div>
  56. )}
  57. {displayHelp && (
  58. <div className="gf-form grafana-info-box" style={{ padding: 0 }}>
  59. <pre className="gf-form-pre alert alert-info" style={{ marginRight: 0 }}>
  60. <h5>Alias Patterns</h5>Format the legend keys any way you want by using alias patterns. Format the legend
  61. keys any way you want by using alias patterns.
  62. <br /> <br />
  63. Example:
  64. <code>{`${'{{metricDescriptor.name}} - {{metricDescriptor.label.instance_name}}'}`}</code>
  65. <br />
  66. Result: &nbsp;&nbsp;<code>cpu/usage_time - server1-europe-west-1</code>
  67. <br />
  68. <br />
  69. <strong>Patterns</strong>
  70. <br />
  71. <ul>
  72. <li>
  73. <code>{`${'{{metricDescriptor.type}}'}`}</code> = metric type e.g.
  74. compute.googleapis.com/instance/cpu/usage_time
  75. </li>
  76. <li>
  77. <code>{`${'{{metricDescriptor.name}}'}`}</code> = name part of metric e.g. instance/cpu/usage_time
  78. </li>
  79. <li>
  80. <code>{`${'{{metricDescriptor.service}}'}`}</code> = service part of metric e.g. compute
  81. </li>
  82. <li>
  83. <code>{`${'{{metricDescriptor.label.label_name}}'}`}</code> = Metric label metadata e.g.
  84. metricDescriptor.label.instance_name
  85. </li>
  86. <li>
  87. <code>{`${'{{resource.label.label_name}}'}`}</code> = Resource label metadata e.g. resource.label.zone
  88. </li>
  89. <li>
  90. <code>{`${'{{bucket}}'}`}</code> = bucket boundary for distribution metrics when using a heatmap in
  91. Grafana
  92. </li>
  93. </ul>
  94. </pre>
  95. </div>
  96. )}
  97. {lastQueryError && (
  98. <div className="gf-form">
  99. <pre className="gf-form-pre alert alert-error">{lastQueryError}</pre>
  100. </div>
  101. )}
  102. </>
  103. );
  104. }
  105. }