query.editor.html 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331
  1. <div class="tight-form">
  2. <ul class="tight-form-list pull-right">
  3. <li class="tight-form-item small" ng-show="target.datasource">
  4. <em>{{target.datasource}}</em>
  5. </li>
  6. <li class="tight-form-item">
  7. <div class="dropdown">
  8. <a class="pointer dropdown-toggle" data-toggle="dropdown" tabindex="1">
  9. <i class="fa fa-bars"></i>
  10. </a>
  11. <ul class="dropdown-menu pull-right" role="menu">
  12. <li role="menuitem"><a tabindex="1" ng-click="duplicateDataQuery(target)">Duplicate</a></li>
  13. <li role="menuitem"><a tabindex="1" ng-click="moveDataQuery($index, $index-1)">Move up</a></li>
  14. <li role="menuitem"><a tabindex="1" ng-click="moveDataQuery($index, $index+1)">Move down</a></li>
  15. </ul>
  16. </div>
  17. </li>
  18. <li class="tight-form-item last">
  19. <a class="pointer" tabindex="1" ng-click="removeDataQuery(target)">
  20. <i class="fa fa-remove"></i>
  21. </a>
  22. </li>
  23. </ul>
  24. <ul class="tight-form-list">
  25. <li class="tight-form-item" style="min-width: 15px; text-align: center">
  26. {{target.refId}}
  27. </li>
  28. <li>
  29. <a class="tight-form-item" ng-click="target.hide = !target.hide; targetBlur();" role="menuitem">
  30. <i class="fa fa-eye"></i>
  31. </a>
  32. </li>
  33. <li class="tight-form-item">
  34. Metric
  35. </li>
  36. <li>
  37. <input type="text" class="input-large tight-form-input"
  38. ng-model="target.metric"
  39. spellcheck="false"
  40. bs-typeahead="suggestMetrics"
  41. placeholder="metric name"
  42. data-min-length=0 data-items=100
  43. ng-blur="targetBlur()">
  44. <a bs-tooltip="target.errors.metric"
  45. style="color: rgb(229, 189, 28)"
  46. ng-show="target.errors.metric">
  47. <i class="fa fa-warning"></i>
  48. </a>
  49. </li>
  50. <li class="tight-form-item">
  51. Alias
  52. </li>
  53. <li>
  54. <input type="text" class="input-medium tight-form-input" ng-model="target.alias"
  55. spellcheck='false' placeholder="alias" ng-blur="targetBlur()">
  56. </li>
  57. <li class="tight-form-item">
  58. &nbsp;Peak filter
  59. <input class="input-medium" type="checkbox" ng-model="target.exOuter" ng-change="targetBlur()">
  60. </li>
  61. </ul>
  62. <div class="clearfix"></div>
  63. </div>
  64. <!-- TAGS -->
  65. <div class="tight-form">
  66. <ul class="tight-form-list" role="menu">
  67. <li class="tight-form-item tight-form-align">
  68. Tags
  69. </li>
  70. <li ng-repeat="(key, value) in target.tags track by $index" class="tight-form-item">
  71. {{key}}&nbsp;=&nbsp;{{value}}
  72. <a ng-click="removeFilterTag(key)">
  73. <i class="fa fa-remove"></i>
  74. </a>
  75. </li>
  76. <li class="tight-form-item" ng-hide="addFilterTagMode">
  77. <a ng-click="addFilterTag()">
  78. <i class="fa fa-plus"></i>
  79. </a>
  80. </li>
  81. <li ng-show="addFilterTagMode">
  82. <input type="text"
  83. class="input-small tight-form-input"
  84. spellcheck='false'
  85. bs-typeahead="suggestTagKeys"
  86. ng-change="validateFilterTag()"
  87. data-min-length=0 data-items=100
  88. ng-model="target.currentTagKey"
  89. placeholder="key">
  90. </li>
  91. <li ng-show="addFilterTagMode">
  92. <input type="text"
  93. class="input-small tight-form-input"
  94. spellcheck='false'
  95. bs-typeahead="suggestTagValues"
  96. ng-change="validateFilterTag()"
  97. data-min-length=0 data-items=100
  98. ng-model="target.currentTagValue"
  99. placeholder="value">
  100. <a bs-tooltip="target.errors.tags"
  101. style="color: rgb(229, 189, 28)"
  102. ng-show="target.errors.tags">
  103. <i class="fa fa-warning"></i>
  104. </a>
  105. <li class="tight-form-item" ng-show="addFilterTagMode">
  106. <a ng-click="addFilterTag()">
  107. <i ng-show="target.errors.tags" class="fa fa-remove"></i>
  108. <i ng-hide="target.errors.tags" class="fa fa-plus-circle"></i>
  109. </a>
  110. </li>
  111. </li>
  112. </ul>
  113. <div class="clearfix"></div>
  114. </div>
  115. <!-- GROUP BY -->
  116. <div class="tight-form">
  117. <ul class="tight-form-list" role="menu">
  118. <li class="tight-form-item tight-form-align">
  119. Group By
  120. </li>
  121. <li class="tight-form-item" ng-show="target.groupByTags">
  122. tags:
  123. </li>
  124. <li ng-repeat="key in target.groupByTags track by $index" class="tight-form-item">
  125. {{key}}
  126. <a ng-click="removeGroupByTag($index)">
  127. <i class="fa fa-remove"></i>
  128. </a>
  129. </li>
  130. <li class="tight-form-item" ng-show="target.groupByTags && target.nonTagGroupBys">
  131. and by:
  132. </li>
  133. <li ng-repeat="groupByObject in target.nonTagGroupBys track by $index" class="tight-form-item">
  134. {{_.values(groupByObject)}}
  135. <a ng-click="removeNonTagGroupBy($index)">
  136. <i class="fa fa-remove"></i>
  137. </a>
  138. </li>
  139. <li class="tight-form-item" ng-hide="addGroupByMode">
  140. <a ng-click="addGroupBy()">
  141. <i class="fa fa-plus"></i>
  142. </a>
  143. </li>
  144. <li ng-show="addGroupByMode">
  145. <select class="input-small tight-form-input"
  146. ng-change="changeGroupByInput()"
  147. ng-model="target.currentGroupByType"
  148. ng-options="f for f in ['tag','value','time']"></select>
  149. </li>
  150. <li ng-show="isTagGroupBy">
  151. <input type="text"
  152. class="input-small tight-form-input"
  153. spellcheck='false'
  154. bs-typeahead="suggestTagKeys"
  155. ng-change = "validateGroupBy()"
  156. data-min-length=0 data-items=100
  157. ng-model="target.groupBy.tagKey"
  158. placeholder="key">
  159. <a bs-tooltip="target.errors.groupBy.tagKey"
  160. style="color: rgb(229, 189, 28)"
  161. ng-show="target.errors.groupBy.tagKey">
  162. <i class="fa fa-warning"></i>
  163. </a>
  164. </li>
  165. <li ng-show="isValueGroupBy">
  166. <input type="text"
  167. class="input-mini tight-form-input"
  168. spellcheck='false'
  169. ng-model="target.groupBy.valueRange"
  170. placeholder="range"
  171. bs-tooltip="'Range on which values are considered in the same group'"
  172. ng-change = "validateGroupBy()" >
  173. <a bs-tooltip="target.errors.groupBy.valueRange"
  174. style="color: rgb(229, 189, 28)"
  175. ng-show="target.errors.groupBy.valueRange">
  176. <i class="fa fa-warning"></i>
  177. </a>
  178. </li>
  179. <li ng-show="isTimeGroupBy">
  180. <input type="text"
  181. class="input-mini tight-form-input"
  182. ng-model="target.groupBy.timeInterval"
  183. ng-init="target.groupBy.timeInterval='1s'"
  184. placeholder="interval"
  185. bs-tooltip="'Duration of time groups'"
  186. spellcheck='false'
  187. ng-change="validateGroupBy()">
  188. <a bs-tooltip="target.errors.groupBy.timeInterval"
  189. style="color: rgb(229, 189, 28)"
  190. ng-show="target.errors.groupBy.timeInterval">
  191. <i class="fa fa-warning"></i>
  192. </a>
  193. </li>
  194. <li ng-show="isTimeGroupBy">
  195. <input type="text"
  196. class="input-mini tight-form-input"
  197. ng-model="target.groupBy.groupCount"
  198. placeholder="Count"
  199. bs-tooltip="'Number of time groups to be formed'"
  200. spellcheck='false'
  201. ng-change="validateGroupBy()">
  202. <a bs-tooltip="target.errors.groupBy.groupCount"
  203. style="color: rgb(229, 189, 28)"
  204. ng-show="target.errors.groupBy.groupCount">
  205. <i class="fa fa-warning"></i>
  206. </a>
  207. </li>
  208. <li class="tight-form-item" ng-show="addGroupByMode">
  209. <a ng-click="addGroupBy()">
  210. <i ng-hide="isGroupByValid" class="fa fa-remove"></i>
  211. <i ng-show="isGroupByValid" class="fa fa-plus-circle"></i>
  212. </a>
  213. </li>
  214. </ul>
  215. <div class="clearfix"></div>
  216. </div>
  217. <!-- HORIZONTAL AGGREGATION -->
  218. <div class="tight-form">
  219. <ul class="tight-form-list" role="menu">
  220. <li class="tight-form-item tight-form-align">
  221. Aggregators
  222. </li>
  223. <li ng-repeat="aggregatorObject in target.horizontalAggregators track by $index" class="tight-form-item">
  224. {{aggregatorObject.name}}&#40;
  225. <span ng-repeat="aggKey in _.keys(_.omit(aggregatorObject,'name'))" bs-tooltip="aggKey">
  226. {{$last?aggregatorObject[aggKey]:aggregatorObject[aggKey]+","}}
  227. </span>
  228. &#41;
  229. <a ng-click="removeHorizontalAggregator($index)">
  230. <i class="fa fa-remove"></i>
  231. </a>
  232. </li>
  233. <li class="tight-form-item" ng-hide="addHorizontalAggregatorMode">
  234. <a ng-click="addHorizontalAggregator()">
  235. <i class="fa fa-plus"></i>
  236. </a>
  237. </li>
  238. <li ng-show="addHorizontalAggregatorMode">
  239. <select class="input-medium tight-form-input"
  240. ng-change="changeHorAggregationInput()"
  241. ng-model="target.currentHorizontalAggregatorName"
  242. ng-options="f for f in ['avg','dev','max','min','rate','sampler','count','sum','least_squares','percentile','scale','div']"></select>
  243. </li>
  244. <!-- Different parameters -->
  245. <li ng-show="hasSamplingRate" class="tight-form-item">
  246. every
  247. </li>
  248. <li ng-show="hasSamplingRate">
  249. <input type="text"
  250. class="input-mini tight-form-input"
  251. ng-model="target.horAggregator.samplingRate"
  252. ng-init="target.horAggregator.samplingRate='1s'"
  253. spellcheck='false'
  254. ng-change="validateHorizontalAggregator()" >
  255. <a bs-tooltip="target.errors.horAggregator.samplingRate"
  256. style="color: rgb(229, 189, 28)"
  257. ng-show="target.errors.horAggregator.samplingRate">
  258. <i class="fa fa-warning"></i>
  259. </a>
  260. </li>
  261. <li ng-show="hasUnit" class="tight-form-item">
  262. every
  263. </li>
  264. <li ng-show="hasUnit">
  265. <select class="input-medium tight-form-input"
  266. ng-model="target.horAggregator.unit"
  267. ng-init="target.horAggregator.unit='millisecond'"
  268. ng-options="f for f in ['millisecond','second','minute','hour','day','week','month','year']"></select>
  269. </li>
  270. <li ng-show="hasFactor" class="tight-form-item">
  271. by
  272. </li>
  273. <li ng-show="hasFactor">
  274. <input type="text"
  275. class="input-mini tight-form-input"
  276. ng-model="target.horAggregator.factor"
  277. ng-init="target.horAggregator.factor='1'"
  278. spellcheck='false'
  279. ng-change="validateHorizontalAggregator()" >
  280. <a bs-tooltip="target.errors.horAggregator.factor"
  281. style="color: rgb(229, 189, 28)"
  282. ng-show="target.errors.horAggregator.factor">
  283. <i class="fa fa-warning"></i>
  284. </a>
  285. </li>
  286. <li ng-show="hasPercentile" class="tight-form-item">
  287. percentile
  288. </li>
  289. <li ng-show="hasPercentile">
  290. <input type="text"
  291. class="input-mini tight-form-input"
  292. ng-model="target.horAggregator.percentile"
  293. ng-init="target.horAggregator.percentile='0.75'"
  294. spellcheck='false'
  295. ng-change="validateHorizontalAggregator()" >
  296. <a bs-tooltip="target.errors.horAggregator.percentile"
  297. style="color: rgb(229, 189, 28)"
  298. ng-show="target.errors.horAggregator.percentile">
  299. <i class="fa fa-warning"></i>
  300. </a>
  301. </li>
  302. <li class="tight-form-item" ng-show="addHorizontalAggregatorMode">
  303. <a ng-click="addHorizontalAggregator()">
  304. <i ng-hide="isAggregatorValid" class="fa fa-remove"></i>
  305. <i ng-show="isAggregatorValid" class="fa fa-plus-circle"></i>
  306. </a>
  307. </li>
  308. </ul>
  309. <div class="clearfix"></div>
  310. </div>