Help.tsx 3.9 KB

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