query.editor.html 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265
  1. <div class="editor-row">
  2. <div ng-repeat="target in panel.targets"
  3. class="grafana-target"
  4. ng-class="{'grafana-target-hidden': target.hide}"
  5. ng-controller="InfluxQueryCtrl"
  6. ng-init="init()">
  7. <div class="grafana-target-inner">
  8. <ul class="grafana-segment-list pull-right">
  9. <li class="grafana-target-segment">
  10. <div class="dropdown">
  11. <a class="pointer dropdown-toggle"
  12. data-toggle="dropdown"
  13. tabindex="1">
  14. <i class="fa fa-bars"></i>
  15. </a>
  16. <ul class="dropdown-menu pull-right" role="menu">
  17. <li role="menuitem"><a tabindex="1" ng-click="duplicate()">Duplicate</a></li>
  18. <li role="menuitem"><a tabindex="1" ng-click="showQuery()" ng-hide="target.rawQuery">Raw query mode</a></li>
  19. <li role="menuitem"><a tabindex="1" ng-click="hideQuery()" ng-show="target.rawQuery">Query editor mode</a></li>
  20. <li role="menuitem"><a tabindex="1" ng-click="moveMetricQuery($index, $index-1)">Move up </a></li>
  21. <li role="menuitem"><a tabindex="1" ng-click="moveMetricQuery($index, $index+1)">Move down</a></li>
  22. </ul>
  23. </div>
  24. </li>
  25. <li class="grafana-target-segment last">
  26. <a class="pointer" tabindex="1" ng-click="removeDataQuery(target)">
  27. <i class="fa fa-remove"></i>
  28. </a>
  29. </li>
  30. </ul>
  31. <ul class="grafana-segment-list">
  32. <li>
  33. <a class="grafana-target-segment" ng-click="target.hide = !target.hide; get_data();" role="menuitem">
  34. <i class="fa fa-eye"></i>
  35. </a>
  36. </li>
  37. </ul>
  38. <!-- Raw Query mode -->
  39. <ul class="grafana-segment-list" ng-show="target.rawQuery">
  40. <li>
  41. <input type="text"
  42. class="grafana-target-segment-input span10"
  43. ng-model="target.query"
  44. placeholder="select ..."
  45. focus-me="target.rawQuery"
  46. spellcheck='false'
  47. data-min-length=0 data-items=100
  48. ng-model-onblur
  49. ng-blur="get_data()">
  50. </li>
  51. </ul>
  52. <!-- Query editor mode -->
  53. <ul class="grafana-segment-list" role="menu" ng-hide="target.rawQuery">
  54. <li class="grafana-target-segment">
  55. series
  56. </li>
  57. <li>
  58. <input type="text"
  59. class="grafana-target-segment-input span8"
  60. ng-model="target.series"
  61. spellcheck='false'
  62. bs-typeahead="listSeries"
  63. match-all="true"
  64. min-length="3"
  65. placeholder="series name"
  66. data-min-length=0 data-items=100
  67. ng-blur="seriesBlur()">
  68. </li>
  69. <li class="grafana-target-segment">
  70. alias
  71. </li>
  72. <li>
  73. <input type="text" class="input-medium grafana-target-segment-input" ng-model="target.alias"
  74. spellcheck='false' placeholder="alias" ng-blur="get_data()">
  75. </li>
  76. </ul>
  77. <div class="clearfix"></div>
  78. </div>
  79. <div class="grafana-target-inner">
  80. <!-- Raw Query mode -->
  81. <ul class="grafana-segment-list" ng-show="target.rawQuery">
  82. <li class="grafana-target-segment">
  83. <i class="fa fa-eye invisible"></i>
  84. </li>
  85. <li class="grafana-target-segment">
  86. alias
  87. </li>
  88. <li>
  89. <input type="text"
  90. class="input-medium grafana-target-segment-input"
  91. ng-model="target.alias"
  92. spellcheck='false'
  93. placeholder="alias"
  94. ng-blur="get_data()">
  95. </li>
  96. <li class="grafana-target-segment">
  97. group by time
  98. </li>
  99. <li>
  100. <input type="text" class="input-mini grafana-target-segment-input" ng-model="target.interval"
  101. spellcheck='false' placeholder="{{interval}}" data-placement="right"
  102. bs-tooltip="'Leave blank for auto handling based on time range and panel width'"
  103. ng-model-onblur ng-change="get_data()" >
  104. </li>
  105. </ul>
  106. <!-- Query editor mode -->
  107. <ul class="grafana-segment-list" role="menu" ng-hide="target.rawQuery">
  108. <li class="grafana-target-segment">
  109. <i class="fa fa-eye invisible"></i>
  110. </li>
  111. <li class="grafana-target-segment">
  112. select
  113. </li>
  114. <li class="dropdown">
  115. <span influxdb-func-editor class="grafana-target-segment grafana-target-function">
  116. </span>
  117. </li>
  118. <li class="grafana-target-segment">
  119. where
  120. </li>
  121. <li>
  122. <input type="text" class="input-medium grafana-target-segment-input" ng-model="target.condition"
  123. bs-tooltip="'Add a where clause'" data-placement="right" spellcheck='false' placeholder="column ~= value" ng-blur="get_data()">
  124. </li>
  125. <li class="grafana-target-segment">
  126. group by time
  127. </li>
  128. <li>
  129. <input type="text" class="input-mini grafana-target-segment-input" ng-model="target.interval"
  130. spellcheck='false' placeholder="{{interval}}" data-placement="right"
  131. bs-tooltip="'Leave blank for auto handling based on time range and panel width'"
  132. ng-model-onblur ng-change="get_data()" >
  133. </li>
  134. <li class="grafana-target-segment">
  135. and
  136. </li>
  137. <li>
  138. <input type="text" class="input-small grafana-target-segment-input" ng-model="target.groupby_field" bs-tooltip="'Add a group by column or leave blank'"
  139. placeholder="column" spellcheck="false" bs-typeahead="listColumns" data-min-length=0 ng-blur="get_data()">
  140. </li>
  141. <li class="dropdown">
  142. <a class="grafana-target-segment pointer" data-toggle="dropdown" bs-tooltip="'Insert missing values, important when stacking'" data-placement="right">
  143. <span ng-show="target.fill">
  144. fill ({{target.fill}})
  145. </span>
  146. <span ng-show="!target.fill">
  147. no fill
  148. </span>
  149. </a>
  150. <ul class="dropdown-menu">
  151. <li><a ng-click="target.fill = ''">no fill</a></li>
  152. <li><a ng-click="target.fill = 'null'">fill (null)</a></li>
  153. <li><a ng-click="target.fill = '0'">fill (0)</a></li>
  154. </ul>
  155. </li>
  156. </ul>
  157. <div class="clearfix"></div>
  158. </div>
  159. </div>
  160. </div>
  161. <section class="grafana-metric-options">
  162. <div class="grafana-target">
  163. <div class="grafana-target-inner">
  164. <ul class="grafana-segment-list">
  165. <li class="grafana-target-segment grafana-target-segment-icon">
  166. <i class="fa fa-wrench"></i>
  167. </li>
  168. <li class="grafana-target-segment">
  169. group by time
  170. </li>
  171. <li>
  172. <input type="text" class="input-medium grafana-target-segment-input" ng-model="panel.interval" ng-blur="get_data();"
  173. spellcheck='false' placeholder="example: >10s">
  174. </li>
  175. <li class="grafana-target-segment">
  176. <i class="fa fa-question-circle" bs-tooltip="'Set a low limit by having a greater sign: example: >60s'" data-placement="right"></i>
  177. </li>
  178. </ul>
  179. <div class="clearfix"></div>
  180. </div>
  181. <div class="grafana-target-inner">
  182. <ul class="grafana-segment-list">
  183. <li class="grafana-target-segment grafana-target-segment-icon">
  184. <i class="fa fa-info-circle"></i>
  185. </li>
  186. <li class="grafana-target-segment">
  187. <a ng-click="toggleEditorHelp(1);" bs-tooltip="'click to show helpful info'" data-placement="bottom">
  188. alias patterns
  189. </a>
  190. </li>
  191. <li class="grafana-target-segment">
  192. <a ng-click="toggleEditorHelp(2)" bs-tooltip="'click to show helpful info'" data-placement="bottom">
  193. stacking &amp; and fill
  194. </a>
  195. </li>
  196. <li class="grafana-target-segment">
  197. <a ng-click="toggleEditorHelp(3)" bs-tooltip="'click to show helpful info'" data-placement="bottom">
  198. group by time
  199. </a>
  200. </li>
  201. </ul>
  202. <div class="clearfix"></div>
  203. </div>
  204. </div>
  205. </section>
  206. <div class="editor-row">
  207. <div class="pull-left" style="margin-top: 30px;">
  208. <div class="grafana-info-box span6" ng-if="editorHelpIndex === 1">
  209. <h5>Alias patterns</h5>
  210. <ul>
  211. <li>$s = series name</li>
  212. <li>$g = group by</li>
  213. <li>$[0-9] part of series name for series names seperated by dots.</li>
  214. </ul>
  215. </div>
  216. <div class="grafana-info-box span6" ng-if="editorHelpIndex === 2">
  217. <h5>Stacking and fill</h5>
  218. <ul>
  219. <li>When stacking is enabled it important that points align</li>
  220. <li>If there are missing points for one series it can cause gaps or missing bars</li>
  221. <li>You must use fill(0), and select a group by time low limit</li>
  222. <li>Use the group by time option below your queries and specify for example &gt;10s if your metrics are written every 10 seconds</li>
  223. <li>This will insert zeros for series that are missing measurements and will make stacking work properly</li>
  224. </ul>
  225. </div>
  226. <div class="grafana-info-box span6" ng-if="editorHelpIndex === 3">
  227. <h5>Group by time</h5>
  228. <ul>
  229. <li>Group by time is important, otherwise the query could return many thousands of datapoints that will slow down Grafana</li>
  230. <li>Leave the group by time field empty for each query and it will be calculated based on time range and pixel width of the graph</li>
  231. <li>If you use fill(0) or fill(null) set a low limit for the auto group by time interval</li>
  232. <li>The low limit can only be set in the group by time option below your queries</li>
  233. <li>You set a low limit by adding a greater sign before the interval</li>
  234. <li>Example: &gt;60s if you write metrics to InfluxDB every 60 seconds</li>
  235. </ul>
  236. </div>
  237. </div>
  238. </div>