ProxiesHttps.vue 3.8 KB

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