ProxiesStcp.vue 3.3 KB

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