query.editor.html 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253
  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. checked="ctrl.target.disableDownsampling"
  80. on-change="ctrl.targetBlur()">
  81. </gf-form-switch>
  82. <div class="gf-form gf-form--grow">
  83. <div class="gf-form-label gf-form-label--grow"></div>
  84. </div>
  85. </div>
  86. <div class="gf-form-inline" ng-if="ctrl.tsdbVersion == 2">
  87. <div class="gf-form">
  88. <label class="gf-form-label query-keyword width-8">
  89. Filters
  90. <info-popover mode="right-normal">
  91. Filters does not work with tags, either of the two will work but not both.
  92. </info-popover>
  93. </label>
  94. <div ng-repeat="fil in ctrl.target.filters track by $index" class="gf-form-label">
  95. {{fil.tagk}}&nbsp;=&nbsp;{{fil.type}}&#40;{{fil.filter}}&#41;&nbsp;&#44&nbsp;groupBy&nbsp;=&nbsp;{{fil.groupBy}}
  96. <a ng-click="ctrl.editFilter(fil, $index)">
  97. <i class="fa fa-pencil"></i>
  98. </a>
  99. <a ng-click="ctrl.removeFilter($index)">
  100. <i class="fa fa-remove"></i>
  101. </a>
  102. </div>
  103. <label class="gf-form-label query-keyword" ng-hide="ctrl.addFilterMode">
  104. <a ng-click="ctrl.addFilter()">
  105. <i class="fa fa-plus"></i>
  106. </a>
  107. </label>
  108. </div>
  109. <div class="gf-form-inline" ng-show="ctrl.addFilterMode">
  110. <div class="gf-form">
  111. <input type="text" class="gf-form-input" spellcheck='false'
  112. bs-typeahead="ctrl.suggestTagKeys" data-min-length=0 data-items=100
  113. ng-model="ctrl.target.currentFilterKey" placeholder="key">
  114. </input>
  115. </div>
  116. <div class="gf-form">
  117. <label class="gf-form-label">Type</label>
  118. <div class="gf-form-select-wrapper">
  119. <select ng-model="ctrl.target.currentFilterType" class="gf-form-input" ng-options="filType for filType in ctrl.filterTypes">
  120. </select>
  121. </div>
  122. </div>
  123. <div class="gf-form">
  124. <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">
  125. </input>
  126. </div>
  127. <gf-form-switch class="gf-form" label="Group by" checked="ctrl.target.currentFilterGroupBy" on-change="ctrl.targetBlur()">
  128. </gf-form-switch>
  129. <div class="gf-form" ng-show="ctrl.addFilterMode">
  130. <label class="gf-form-label" ng-show="ctrl.errors.filters">
  131. <a bs-tooltip="ctrl.errors.filters" style="color: rgb(229, 189, 28)" >
  132. <i class="fa fa-warning"></i>
  133. </a>
  134. </label>
  135. <label class="gf-form-label">
  136. <a ng-click="ctrl.addFilter()" ng-hide="ctrl.errors.filters">add filter</a>
  137. <a ng-click="ctrl.closeAddFilterMode()">
  138. <i class="fa fa-remove"></i>
  139. </a>
  140. </label>
  141. </div>
  142. </div>
  143. <div class="gf-form gf-form--grow">
  144. <div class="gf-form-label gf-form-label--grow"></div>
  145. </div>
  146. </div>
  147. <div class="gf-form-inline">
  148. <div class="gf-form">
  149. <label class="gf-form-label query-keyword width-8">
  150. Tags
  151. <info-popover mode="right-normal" ng-if="ctrl.tsdbVersion == 2">
  152. Please use filters, tags are deprecated in opentsdb 2.2
  153. </info-popover>
  154. </label>
  155. </div>
  156. <div class="gf-form" ng-repeat="(key, value) in ctrl.target.tags track by $index" class="gf-form">
  157. <label class="gf-form-label">
  158. {{key}}&nbsp;=&nbsp;{{value}}
  159. <a ng-click="ctrl.editTag(key, value)">
  160. <i class="fa fa-pencil"></i>
  161. </a>
  162. <a ng-click="ctrl.removeTag(key)">
  163. <i class="fa fa-remove"></i>
  164. </a>
  165. </label>
  166. </div>
  167. <div class="gf-form" ng-hide="ctrl.addTagMode">
  168. <label class="gf-form-label query-keyword">
  169. <a ng-click="ctrl.addTag()"><i class="fa fa-plus"></i></a>
  170. </label>
  171. </div>
  172. <div class="gf-form" ng-show="ctrl.addTagMode">
  173. <input type="text"
  174. class="gf-form-input" spellcheck='false'
  175. bs-typeahead="ctrl.suggestTagKeys" data-min-length=0 data-items=100
  176. ng-model="ctrl.target.currentTagKey" placeholder="key">
  177. </input>
  178. <input type="text" class="gf-form-input"
  179. spellcheck='false' bs-typeahead="ctrl.suggestTagValues"
  180. data-min-length=0 data-items=100 ng-model="ctrl.target.currentTagValue" placeholder="value">
  181. </input>
  182. <label class="gf-form-label" ng-show="ctrl.errors.tags">
  183. <a bs-tooltip="ctrl.errors.tags" style="color: rgb(229, 189, 28)" >
  184. <i class="fa fa-warning"></i>
  185. </a>
  186. </label>
  187. <label class="gf-form-label" >
  188. <a ng-click="ctrl.addTag()" ng-hide="ctrl.errors.tags">add tag</a>
  189. <a ng-click="ctrl.closeAddTagMode()"><i class="fa fa-remove"></i></a>
  190. </label>
  191. </div>
  192. <div class="gf-form gf-form--grow">
  193. <div class="gf-form-label gf-form-label--grow"></div>
  194. </div>
  195. </div>
  196. <div class="gf-form-inline">
  197. <gf-form-switch class="gf-form" label="Rate" label-class="width-8" checked="ctrl.target.shouldComputeRate" on-change="ctrl.targetBlur()">
  198. </gf-form-switch>
  199. <gf-form-switch ng-hide="!ctrl.target.shouldComputeRate"
  200. class="gf-form" label="Counter" checked="ctrl.target.isCounter" on-change="ctrl.targetBlur()">
  201. </gf-form-switch>
  202. <div class="gf-form" ng-hide="!ctrl.target.isCounter || !ctrl.target.shouldComputeRate">
  203. <label class="gf-form-label">Counter Max</label>
  204. <input type="text" class="gf-form-input"
  205. ng-disabled="!ctrl.target.shouldComputeRate"
  206. ng-model="ctrl.target.counterMax" spellcheck='false'
  207. placeholder="max value" ng-model-onblur
  208. ng-blur="ctrl.targetBlur()">
  209. </input>
  210. <label class="gf-form-label">Reset Value</label>
  211. <input type="text" class="tight-form-input input-small"
  212. ng-disabled="!ctrl.target.shouldComputeRate"
  213. ng-model="ctrl.target.counterResetValue" spellcheck='false'
  214. placeholder="reset value" ng-model-onblur
  215. ng-blur="ctrl.targetBlur()">
  216. </input>
  217. </div>
  218. <div class="gf-form gf-form--grow">
  219. <div class="gf-form-label gf-form-label--grow"></div>
  220. </div>
  221. </div>
  222. </query-editor-row>