query.editor.html 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262
  1. <query-editor-row query-ctrl="ctrl" can-collapse="false">
  2. <div class="gf-form-inline">
  3. <div class="gf-form max-width-25">
  4. <label class="gf-form-label query-keyword width-8">
  5. Metric
  6. <label class="gf-form-label" bs-tooltip="ctrl.errors.metric" style="color: rgb(229, 189, 28)" ng-show="ctrl.errors.metric">
  7. <i class="fa fa-warning"></i>
  8. </label>
  9. </label>
  10. <input type="text" class="gf-form-input" ng-model="ctrl.target.metric"
  11. spellcheck='false' bs-typeahead="ctrl.suggestMetrics" placeholder="metric name" data-min-length=0 data-items=100
  12. ng-blur="ctrl.targetBlur()">
  13. </input>
  14. </div>
  15. <div class="gf-form">
  16. <label class="gf-form-label query-keyword">
  17. Aggregator
  18. <a bs-tooltip="ctrl.errors.aggregator" style="color: rgb(229, 189, 28)" ng-show="ctrl.errors.aggregator">
  19. <i class="fa fa-warning"></i>
  20. </a>
  21. </label>
  22. <div class="gf-form-select-wrapper max-width-15">
  23. <select ng-model="ctrl.target.aggregator" class="gf-form-input"
  24. ng-options="agg for agg in ctrl.aggregators"
  25. ng-change="ctrl.targetBlur()">
  26. </select>
  27. </div>
  28. </div>
  29. <div class="gf-form max-width-20">
  30. <label class="gf-form-label query-keyword width-6">
  31. Alias:
  32. <info-popover mode="right-normal">
  33. Use patterns like $tag_tagname to replace part of the alias for a tag value
  34. </info-popover>
  35. </label>
  36. <input type="text" class="gf-form-input"
  37. ng-model="ctrl.target.alias"
  38. spellcheck='false'
  39. placeholder="series alias"
  40. data-min-length=0 data-items=100
  41. ng-blur="ctrl.targetBlur()"></input>
  42. </div>
  43. <div class="gf-form gf-form--grow">
  44. <div class="gf-form-label gf-form-label--grow"></div>
  45. </div>
  46. </div>
  47. <div class="gf-form-inline">
  48. <div class="gf-form max-width-25">
  49. <label class="gf-form-label query-keyword width-8">Down sample</label>
  50. <input type="text" class="gf-form-input"
  51. ng-model="ctrl.target.downsampleInterval"
  52. ng-model-onblur
  53. ng-change="ctrl.targetBlur()"
  54. placeholder="interval"></input>
  55. <info-popover mode="right-absolute">
  56. blank for auto, or for example <code>1m</code>
  57. </info-popover>
  58. </div>
  59. <div class="gf-form">
  60. <label class="gf-form-label query-keyword">Aggregator</label>
  61. <div class="gf-form-select-wrapper">
  62. <select ng-model="ctrl.target.downsampleAggregator" class="gf-form-input"
  63. ng-options="agg for agg in ctrl.aggregators"
  64. ng-change="ctrl.targetBlur()">
  65. </select>
  66. </div>
  67. </div>
  68. <div class="gf-form" ng-if="ctrl.tsdbVersion >= 2">
  69. <label class="gf-form-label query-keyword width-6">Fill</label>
  70. <div class="gf-form-select-wrapper">
  71. <select ng-model="ctrl.target.downsampleFillPolicy" class="gf-form-input"
  72. ng-options="agg for agg in ctrl.fillPolicies"
  73. ng-change="ctrl.targetBlur()">
  74. </select>
  75. </div>
  76. </div>
  77. <gf-form-switch class="gf-form"
  78. label="Disable downsampling"
  79. label-class="query-keyword"
  80. checked="ctrl.target.disableDownsampling"
  81. on-change="ctrl.targetBlur()">
  82. </gf-form-switch>
  83. <div class="gf-form gf-form--grow">
  84. <div class="gf-form-label gf-form-label--grow"></div>
  85. </div>
  86. </div>
  87. <div class="gf-form-inline" ng-if="ctrl.tsdbVersion >= 2">
  88. <div class="gf-form">
  89. <label class="gf-form-label query-keyword width-8">
  90. Filters
  91. <info-popover mode="right-normal">
  92. Filters does not work with tags, either of the two will work but not both.
  93. </info-popover>
  94. </label>
  95. <div ng-repeat="fil in ctrl.target.filters track by $index" class="gf-form-label">
  96. {{fil.tagk}}&nbsp;=&nbsp;{{fil.type}}&#40;{{fil.filter}}&#41;&nbsp;&#44&nbsp;groupBy&nbsp;=&nbsp;{{fil.groupBy}}
  97. <a ng-click="ctrl.editFilter(fil, $index)">
  98. <i class="fa fa-pencil"></i>
  99. </a>
  100. <a ng-click="ctrl.removeFilter($index)">
  101. <i class="fa fa-remove"></i>
  102. </a>
  103. </div>
  104. <label class="gf-form-label query-keyword" ng-hide="ctrl.addFilterMode">
  105. <a ng-click="ctrl.addFilter()">
  106. <i class="fa fa-plus"></i>
  107. </a>
  108. </label>
  109. </div>
  110. <div class="gf-form-inline" ng-show="ctrl.addFilterMode">
  111. <div class="gf-form">
  112. <input type="text" class="gf-form-input" spellcheck='false'
  113. bs-typeahead="ctrl.suggestTagKeys" data-min-length=0 data-items=100
  114. ng-model="ctrl.target.currentFilterKey" placeholder="key">
  115. </input>
  116. </div>
  117. <div class="gf-form">
  118. <label class="gf-form-label query-keyword">Type</label>
  119. <div class="gf-form-select-wrapper">
  120. <select ng-model="ctrl.target.currentFilterType" class="gf-form-input" ng-options="filType for filType in ctrl.filterTypes">
  121. </select>
  122. </div>
  123. </div>
  124. <div class="gf-form">
  125. <input type="text" class="gf-form-input" spellcheck='false' bs-typeahead="ctrl.suggestTagValues" data-min-length=0 data-items=100 ng-model="ctrl.target.currentFilterValue" placeholder="filter">
  126. </input>
  127. </div>
  128. <gf-form-switch class="gf-form"
  129. label="Group by"
  130. label-class="query-keyword"
  131. checked="ctrl.target.currentFilterGroupBy"
  132. on-change="ctrl.targetBlur()">
  133. </gf-form-switch>
  134. <div class="gf-form" ng-show="ctrl.addFilterMode">
  135. <label class="gf-form-label" ng-show="ctrl.errors.filters">
  136. <a bs-tooltip="ctrl.errors.filters" style="color: rgb(229, 189, 28)" >
  137. <i class="fa fa-warning"></i>
  138. </a>
  139. </label>
  140. <label class="gf-form-label">
  141. <a ng-click="ctrl.addFilter()" ng-hide="ctrl.errors.filters">add filter</a>
  142. <a ng-click="ctrl.closeAddFilterMode()">
  143. <i class="fa fa-remove"></i>
  144. </a>
  145. </label>
  146. </div>
  147. </div>
  148. <div class="gf-form gf-form--grow">
  149. <div class="gf-form-label gf-form-label--grow"></div>
  150. </div>
  151. </div>
  152. <div class="gf-form-inline">
  153. <div class="gf-form">
  154. <label class="gf-form-label query-keyword width-8">
  155. Tags
  156. <info-popover mode="right-normal" ng-if="ctrl.tsdbVersion >= 2">
  157. Please use filters, tags are deprecated in opentsdb 2.2
  158. </info-popover>
  159. </label>
  160. </div>
  161. <div class="gf-form" ng-repeat="(key, value) in ctrl.target.tags track by $index" class="gf-form">
  162. <label class="gf-form-label">
  163. {{key}}&nbsp;=&nbsp;{{value}}
  164. <a ng-click="ctrl.editTag(key, value)">
  165. <i class="fa fa-pencil"></i>
  166. </a>
  167. <a ng-click="ctrl.removeTag(key)">
  168. <i class="fa fa-remove"></i>
  169. </a>
  170. </label>
  171. </div>
  172. <div class="gf-form" ng-hide="ctrl.addTagMode">
  173. <label class="gf-form-label query-keyword">
  174. <a ng-click="ctrl.addTag()"><i class="fa fa-plus"></i></a>
  175. </label>
  176. </div>
  177. <div class="gf-form" ng-show="ctrl.addTagMode">
  178. <input type="text"
  179. class="gf-form-input" spellcheck='false'
  180. bs-typeahead="ctrl.suggestTagKeys" data-min-length=0 data-items=100
  181. ng-model="ctrl.target.currentTagKey" placeholder="key">
  182. </input>
  183. <input type="text" class="gf-form-input"
  184. spellcheck='false' bs-typeahead="ctrl.suggestTagValues"
  185. data-min-length=0 data-items=100 ng-model="ctrl.target.currentTagValue" placeholder="value">
  186. </input>
  187. <label class="gf-form-label" ng-show="ctrl.errors.tags">
  188. <a bs-tooltip="ctrl.errors.tags" style="color: rgb(229, 189, 28)" >
  189. <i class="fa fa-warning"></i>
  190. </a>
  191. </label>
  192. <label class="gf-form-label" >
  193. <a ng-click="ctrl.addTag()" ng-hide="ctrl.errors.tags">add tag</a>
  194. <a ng-click="ctrl.closeAddTagMode()"><i class="fa fa-remove"></i></a>
  195. </label>
  196. </div>
  197. <div class="gf-form gf-form--grow">
  198. <div class="gf-form-label gf-form-label--grow"></div>
  199. </div>
  200. </div>
  201. <div class="gf-form-inline">
  202. <gf-form-switch class="gf-form" label="Rate" label-class="width-8 query-keyword" checked="ctrl.target.shouldComputeRate" on-change="ctrl.targetBlur()">
  203. </gf-form-switch>
  204. <gf-form-switch ng-hide="!ctrl.target.shouldComputeRate"
  205. class="gf-form" label="Counter" label-class="query-keyword" checked="ctrl.target.isCounter" on-change="ctrl.targetBlur()">
  206. </gf-form-switch>
  207. <div class="gf-form" ng-hide="!ctrl.target.isCounter || !ctrl.target.shouldComputeRate">
  208. <label class="gf-form-label query-keyword">Counter Max</label>
  209. <input type="text" class="gf-form-input"
  210. ng-disabled="!ctrl.target.shouldComputeRate"
  211. ng-model="ctrl.target.counterMax" spellcheck='false'
  212. placeholder="max value" ng-model-onblur
  213. ng-blur="ctrl.targetBlur()">
  214. </input>
  215. <label class="gf-form-label query-keyword">Reset Value</label>
  216. <input type="text" class="tight-form-input input-small"
  217. ng-disabled="!ctrl.target.shouldComputeRate"
  218. ng-model="ctrl.target.counterResetValue" spellcheck='false'
  219. placeholder="reset value" ng-model-onblur
  220. ng-blur="ctrl.targetBlur()">
  221. </input>
  222. </div>
  223. <div class="gf-form" ng-if="ctrl.tsdbVersion > 2">
  224. <gf-form-switch class="gf-form" label="Explicit tags" label-class="width-8 query-keyword" checked="ctrl.target.explicitTags" on-change="ctrl.targetBlur()">
  225. </gf-form-switch>
  226. </div>
  227. <div class="gf-form gf-form--grow">
  228. <div class="gf-form-label gf-form-label--grow"></div>
  229. </div>
  230. </div>
  231. </query-editor-row>