ProxiesHttp.vue 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. <template>
  2. <div>
  3. <el-table :data="proxies" :default-sort="{prop: 'name', order: 'ascending'}" style="width: 100%">
  4. <el-table-column type="expand">
  5. <template slot-scope="props">
  6. <el-popover
  7. ref="popover4"
  8. placement="right"
  9. width="600"
  10. style="margin-left:0px"
  11. trigger="click">
  12. <my-traffic-chart :proxy_name="props.row.name"></my-traffic-chart>
  13. </el-popover>
  14. <el-button v-popover:popover4 type="primary" size="small" icon="view" style="margin-bottom:10px">Traffic Statistics</el-button>
  15. <el-form label-position="left" inline class="demo-table-expand">
  16. <el-form-item label="Name">
  17. <span>{{ props.row.name }}</span>
  18. </el-form-item>
  19. <el-form-item label="Type">
  20. <span>{{ props.row.type }}</span>
  21. </el-form-item>
  22. <el-form-item label="Domains">
  23. <span>{{ props.row.custom_domains }}</span>
  24. </el-form-item>
  25. <el-form-item label="SubDomain">
  26. <span>{{ props.row.subdomain }}</span>
  27. </el-form-item>
  28. <el-form-item label="locations">
  29. <span>{{ props.row.locations }}</span>
  30. </el-form-item>
  31. <el-form-item label="HostRewrite">
  32. <span>{{ props.row.host_header_rewrite }}</span>
  33. </el-form-item>
  34. <el-form-item label="Encryption">
  35. <span>{{ props.row.encryption }}</span>
  36. </el-form-item>
  37. <el-form-item label="Compression">
  38. <span>{{ props.row.compression }}</span>
  39. </el-form-item>
  40. <el-form-item label="Last Start">
  41. <span>{{ props.row.last_start_time }}</span>
  42. </el-form-item>
  43. <el-form-item label="Last Close">
  44. <span>{{ props.row.last_close_time }}</span>
  45. </el-form-item>
  46. </el-form>
  47. </template>
  48. </el-table-column>
  49. <el-table-column
  50. label="Name"
  51. prop="name"
  52. sortable>
  53. </el-table-column>
  54. <el-table-column
  55. label="Port"
  56. prop="port"
  57. sortable>
  58. </el-table-column>
  59. <el-table-column
  60. label="Connections"
  61. prop="conns"
  62. sortable>
  63. </el-table-column>
  64. <el-table-column
  65. label="Traffic In"
  66. prop="traffic_in"
  67. :formatter="formatTrafficIn"
  68. sortable>
  69. </el-table-column>
  70. <el-table-column
  71. label="Traffic Out"
  72. prop="traffic_out"
  73. :formatter="formatTrafficOut"
  74. sortable>
  75. </el-table-column>
  76. <el-table-column
  77. label="status"
  78. prop="status"
  79. sortable>
  80. <template slot-scope="scope">
  81. <el-tag type="success" v-if="scope.row.status === 'online'">{{ scope.row.status }}</el-tag>
  82. <el-tag type="danger" v-else>{{ scope.row.status }}</el-tag>
  83. </template>
  84. </el-table-column>
  85. </el-table>
  86. </div>
  87. </template>
  88. <script>
  89. import Humanize from 'humanize-plus';
  90. import Traffic from './Traffic.vue'
  91. import {
  92. HttpProxy
  93. } from '../utils/proxy.js'
  94. export default {
  95. data() {
  96. return {
  97. proxies: null,
  98. vhost_http_port: "",
  99. subdomain_host: ""
  100. }
  101. },
  102. created() {
  103. this.fetchData()
  104. },
  105. watch: {
  106. '$route': 'fetchData'
  107. },
  108. methods: {
  109. formatTrafficIn(row, column) {
  110. return Humanize.fileSize(row.traffic_in)
  111. },
  112. formatTrafficOut(row, column) {
  113. return Humanize.fileSize(row.traffic_out)
  114. },
  115. fetchData() {
  116. fetch('/api/serverinfo', {credentials: 'include'})
  117. .then(res => {
  118. return res.json()
  119. }).then(json => {
  120. this.vhost_http_port = json.vhost_http_port
  121. this.subdomain_host = json.subdomain_host
  122. if (this.vhost_http_port == null || this.vhost_http_port == 0) {
  123. return
  124. } else {
  125. fetch('/api/proxy/http', {credentials: 'include'})
  126. .then(res => {
  127. return res.json()
  128. }).then(json => {
  129. this.proxies = new Array()
  130. for (let proxyStats of json.proxies) {
  131. this.proxies.push(new HttpProxy(proxyStats, this.vhost_http_port, this.subdomain_host))
  132. }
  133. })
  134. }
  135. })
  136. }
  137. },
  138. components: {
  139. 'my-traffic-chart': Traffic
  140. }
  141. }
  142. </script>
  143. <style>
  144. </style>