ProxiesTcp.vue 3.5 KB

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