Monitor.vue 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. <template>
  2. <div>
  3. <div v-if="hadMonitor">
  4. <dashboard-cards ref="dashboardCards" useLocalPanels :extraParams="extraParams" :localPanels="localPanels" />
  5. </div>
  6. <template v-else>
  7. <a-alert
  8. :message="$t('db.text_183')"
  9. class="mb-2"
  10. type="warning" />
  11. </template>
  12. </div>
  13. </template>
  14. <script>
  15. import * as R from 'ramda'
  16. import { LB_MONITOR_OPTS } from '@Network/constants/lb'
  17. import DashboardCards from '@Monitor/components/MonitorCard/DashboardCards'
  18. import WindowsMixin from '@/mixins/windows'
  19. import { HYPERVISORS_MAP } from '@/constants'
  20. export default {
  21. name: 'LbMnitorSidepage',
  22. components: {
  23. DashboardCards,
  24. },
  25. mixins: [WindowsMixin],
  26. props: {
  27. data: { // listItemData
  28. type: Object,
  29. required: true,
  30. },
  31. },
  32. data () {
  33. return {
  34. }
  35. },
  36. computed: {
  37. brand () {
  38. if (this.data.brand) {
  39. return this.data.brand.toLowerCase()
  40. }
  41. return ''
  42. },
  43. hadMonitor () {
  44. const brand = this.data.brand.toLowerCase()
  45. const surportBrand = [HYPERVISORS_MAP.azure.key, HYPERVISORS_MAP.apsara.key, HYPERVISORS_MAP.hcso.key]
  46. return surportBrand.includes(brand)
  47. },
  48. monitorConstants () {
  49. const brand = this.brand
  50. return LB_MONITOR_OPTS[brand] || []
  51. },
  52. dbId () {
  53. return this.data.id
  54. },
  55. localPanels () {
  56. return this.monitorConstants.map(item => {
  57. return {
  58. panel_name: `${item.label}${item.metric ? `(${item.metric})` : `(${item.fromItem}.${item.seleteItem})`}`,
  59. constants: item,
  60. queryData: this.genQueryData(item),
  61. }
  62. })
  63. },
  64. },
  65. created () {
  66. },
  67. methods: {
  68. genQueryData (val) {
  69. const opt = val
  70. let select = []
  71. if (val.as) {
  72. const asItems = val.as.split(',')
  73. select = val.seleteItem.split(',').map((val, i) => {
  74. return [
  75. {
  76. type: 'field',
  77. params: [val],
  78. },
  79. { // 对应 mean(val.seleteItem)
  80. type: opt.groupFunc || val.selectType || 'mean',
  81. params: [],
  82. },
  83. { // 确保后端返回columns有 val.label 的别名
  84. type: 'alias',
  85. params: [asItems[i]],
  86. },
  87. ]
  88. })
  89. } else {
  90. select = val.seleteItem.split(',').map((val, i) => {
  91. return [
  92. {
  93. type: 'field',
  94. params: [val],
  95. },
  96. { // 对应 mean(val.seleteItem)
  97. type: opt.groupFunc || 'mean',
  98. params: [],
  99. },
  100. { // 确保后端返回columns有 val.label 的别名
  101. type: 'alias',
  102. params: [val],
  103. },
  104. ]
  105. })
  106. }
  107. const tags = [
  108. {
  109. key: 'elb_id',
  110. value: this.dbId,
  111. operator: '=',
  112. },
  113. ]
  114. if (R.is(Object, val.tags)) {
  115. R.forEachObjIndexed((value, key) => {
  116. tags.push({
  117. condition: 'AND',
  118. key,
  119. value,
  120. operator: '=',
  121. })
  122. }, val.tags)
  123. }
  124. const data = {
  125. metric_query: [
  126. {
  127. model: {
  128. measurement: val.fromItem,
  129. select,
  130. tags,
  131. },
  132. },
  133. ],
  134. scope: this.$store.getters.scope,
  135. unit: true,
  136. }
  137. return data
  138. },
  139. },
  140. }
  141. </script>