index.vue 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. <template>
  2. <a-form-model :model="formData" size="small" ref="formRef" class="w-75" :label-col="labelCol" :wrapper-col="wrapperCol" :rules="rules">
  3. <a-divider content-position="left">Grafana</a-divider>
  4. <a-form-model-item :label="$t('k8s.text_272')" prop="grafana.adminUser">
  5. <a-input v-model="formData.grafana.adminUser" :placeholder="$t('k8s.text_273')" />
  6. </a-form-model-item>
  7. <a-form-model-item :label="$t('k8s.text_274')" prop="grafana.adminPassword">
  8. <a-input-password v-model="formData.grafana.adminPassword" :placeholder="$t('k8s.text_275')" />
  9. </a-form-model-item>
  10. <a-form-model-item :label="$t('k8s.text_405')" prop="grafana.publicAddress">
  11. <a-input v-model="formData.grafana.publicAddress" addon-before="https://" addon-after="/grafana" :placeholder="$t('k8s.text_404')" />
  12. </a-form-model-item>
  13. <storage v-model="formData.grafana.storage" prop="grafana.storage" />
  14. <a-divider content-position="left">Loki</a-divider>
  15. <storage v-model="formData.loki.storage" prop="loki.storage" />
  16. <a-divider content-position="left">Prometheus</a-divider>
  17. <storage v-model="formData.prometheus.storage" prop="prometheus.storage" />
  18. <a-form-model-item :wrapper-col="{ span: 20, offset: 3 }">
  19. <a-button class="mr-2" type="primary" @click="submitForm('formRef')">{{$t('k8s.text_260')}}</a-button>
  20. <a-button @click="cancel">{{$t('k8s.text_162')}}</a-button>
  21. </a-form-model-item>
  22. </a-form-model>
  23. </template>
  24. <script>
  25. import * as R from 'ramda'
  26. import mixin from '../../mixins'
  27. import Storage from './Storage'
  28. import { validate } from '@/utils/validate'
  29. export default {
  30. name: 'KubeComponentMonitor',
  31. components: {
  32. Storage,
  33. },
  34. mixins: [mixin],
  35. data () {
  36. const { host } = window.location
  37. const checkPublicAddress = (rule, value, callback) => {
  38. const arr = value.split(':')
  39. if (arr.length > 1) {
  40. const ip = arr[0]
  41. const port = arr[1]
  42. if (validate(ip, 'IPv4') === false || validate(ip, 'IPv4').result === false ||
  43. validate(port, 'ports') === false || validate(port, 'ports').result === false) {
  44. callback(new Error(this.$t('k8s.text_406')))
  45. } else {
  46. callback()
  47. }
  48. } else {
  49. if ((validate(value, 'IPv4') === false || validate(value, 'IPv4').result === false) &&
  50. (validate(value, 'domain') === false || validate(value, 'domain').result === false)) {
  51. callback(new Error(this.$t('k8s.text_406')))
  52. } else {
  53. callback()
  54. }
  55. }
  56. }
  57. let formData = {
  58. grafana: {
  59. adminUser: 'admin',
  60. adminPassword: 'prom-operator',
  61. publicAddress: host,
  62. storage: {
  63. enabled: false,
  64. sizeMB: 1,
  65. storageClassName: '',
  66. },
  67. },
  68. loki: {
  69. storage: {
  70. enabled: false,
  71. sizeMB: 50,
  72. storageClassName: '',
  73. },
  74. },
  75. prometheus: {
  76. storage: {
  77. enabled: false,
  78. sizeMB: 50,
  79. storageClassName: '',
  80. },
  81. },
  82. }
  83. if (this.isUpdate) {
  84. formData = this.updateData
  85. formData.grafana.storage.sizeMB = this.updateData.grafana.storage.sizeMB ? this.updateData.grafana.storage.sizeMB / 1024 : 1
  86. formData.loki.storage.sizeMB = this.updateData.loki.storage.sizeMB ? this.updateData.loki.storage.sizeMB / 1024 : 1
  87. formData.prometheus.storage.sizeMB = this.updateData.prometheus.storage.sizeMB ? this.updateData.prometheus.storage.sizeMB / 1024 : 1
  88. }
  89. return {
  90. rules: {
  91. 'grafana.adminUser': [
  92. { required: true, message: this.$t('k8s.text_276'), trigger: 'blur' },
  93. ],
  94. 'grafana.adminPassword': [
  95. { required: true, message: this.$t('k8s.text_277'), trigger: 'blur' },
  96. ],
  97. 'grafana.publicAddress': [
  98. { required: true, message: this.$t('k8s.text_404'), trigger: 'blur' },
  99. { validator: checkPublicAddress },
  100. ],
  101. 'grafana.storage': [
  102. { required: true, message: this.$t('k8s.text_278'), trigger: 'blur' },
  103. ],
  104. },
  105. labelCol: { span: 5 },
  106. wrapperCol: { span: 13 },
  107. formData,
  108. }
  109. },
  110. methods: {
  111. submitForm (formName) {
  112. this.$refs[formName].validate((valid) => {
  113. if (valid) {
  114. const data = R.clone(this.formData)
  115. data.grafana.storage.sizeMB = this.formData.grafana.storage.sizeMB * 1024
  116. data.loki.storage.sizeMB = this.formData.loki.storage.sizeMB * 1024
  117. data.prometheus.storage.sizeMB = this.formData.prometheus.storage.sizeMB * 1024
  118. this.$emit('submit', data)
  119. }
  120. })
  121. },
  122. cancel () {
  123. this.$router.push('/k8s-kubecomponent')
  124. },
  125. },
  126. }
  127. </script>