Monitor.vue 3.3 KB

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