ProxiesHttp.vue 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  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 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>
  41. </template>
  42. </el-table-column>
  43. <el-table-column
  44. label="Name"
  45. prop="name"
  46. sortable>
  47. </el-table-column>
  48. <el-table-column
  49. label="Port"
  50. prop="port"
  51. sortable>
  52. </el-table-column>
  53. <el-table-column
  54. label="Connections"
  55. prop="conns"
  56. sortable>
  57. </el-table-column>
  58. <el-table-column
  59. label="Traffic In"
  60. prop="traffic_in"
  61. :formatter="formatTrafficIn"
  62. sortable>
  63. </el-table-column>
  64. <el-table-column
  65. label="Traffic Out"
  66. prop="traffic_out"
  67. :formatter="formatTrafficOut"
  68. sortable>
  69. </el-table-column>
  70. <el-table-column
  71. label="status"
  72. prop="status"
  73. sortable>
  74. <template scope="scope">
  75. <el-tag type="success" v-if="scope.row.status === 'online'">{{ scope.row.status }}</el-tag>
  76. <el-tag type="danger" v-else>{{ scope.row.status }}</el-tag>
  77. </template>
  78. </el-table-column>
  79. </el-table>
  80. </div>
  81. </template>
  82. <script>
  83. import Humanize from "humanize-plus";
  84. import Traffic from './Traffic.vue'
  85. import {
  86. HttpProxy
  87. } from "../utils/proxy.js"
  88. export default {
  89. data() {
  90. return {
  91. proxies: null,
  92. vhost_http_port: "",
  93. subdomain_host: ""
  94. }
  95. },
  96. created() {
  97. this.fetchData()
  98. },
  99. watch: {
  100. '$route': 'fetchData'
  101. },
  102. methods: {
  103. formatTrafficIn(row, column) {
  104. return Humanize.fileSize(row.traffic_in)
  105. },
  106. formatTrafficOut(row, column) {
  107. return Humanize.fileSize(row.traffic_out)
  108. },
  109. fetchData() {
  110. fetch('/api/serverinfo')
  111. .then(res => {
  112. return res.json()
  113. }).then(json => {
  114. this.vhost_http_port = json.vhost_http_port
  115. this.subdomain_host = json.subdomain_host
  116. if (this.vhost_http_port == null || this.vhost_http_port == 0) {
  117. return
  118. } else {
  119. fetch('/api/proxy/http')
  120. .then(res => {
  121. return res.json()
  122. }).then(json => {
  123. this.proxies = new Array()
  124. for (let proxyStats of json.proxies) {
  125. this.proxies.push(new HttpProxy(proxyStats, this.vhost_http_port, this.subdomain_host))
  126. }
  127. })
  128. }
  129. })
  130. }
  131. },
  132. components: {
  133. 'my-traffic-chart': Traffic
  134. }
  135. }
  136. </script>
  137. <style>
  138. </style>