ServerOverview.vue 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. <template>
  2. <div>
  3. <el-row>
  4. <el-col :md="12">
  5. <div class="source">
  6. <el-form
  7. label-position="left"
  8. label-width="220px"
  9. class="server_info"
  10. >
  11. <el-form-item label="Version">
  12. <span>{{ data.version }}</span>
  13. </el-form-item>
  14. <el-form-item label="BindPort">
  15. <span>{{ data.bindPort }}</span>
  16. </el-form-item>
  17. <el-form-item label="KCP Bind Port" v-if="data.kcpBindPort != 0">
  18. <span>{{ data.kcpBindPort }}</span>
  19. </el-form-item>
  20. <el-form-item label="QUIC Bind Port" v-if="data.quicBindPort != 0">
  21. <span>{{ data.quicBindPort }}</span>
  22. </el-form-item>
  23. <el-form-item label="Http Port" v-if="data.vhostHTTPPort != 0">
  24. <span>{{ data.vhostHTTPPort }}</span>
  25. </el-form-item>
  26. <el-form-item label="Https Port" v-if="data.vhostHTTPSPort != 0">
  27. <span>{{ data.vhostHTTPSPort }}</span>
  28. </el-form-item>
  29. <el-form-item
  30. label="TCPMux HTTPConnect Port"
  31. v-if="data.tcpmuxHTTPConnectPort != 0"
  32. >
  33. <span>{{ data.tcpmuxHTTPConnectPort }}</span>
  34. </el-form-item>
  35. <el-form-item
  36. label="Subdomain Host"
  37. v-if="data.subdomainHost != ''"
  38. >
  39. <LongSpan :content="data.subdomainHost" :length="30"></LongSpan>
  40. </el-form-item>
  41. <el-form-item label="Max PoolCount">
  42. <span>{{ data.maxPoolCount }}</span>
  43. </el-form-item>
  44. <el-form-item label="Max Ports Per Client">
  45. <span>{{ data.maxPortsPerClient }}</span>
  46. </el-form-item>
  47. <el-form-item label="Allow Ports" v-if="data.allowPortsStr != ''">
  48. <LongSpan :content="data.allowPortsStr" :length="30"></LongSpan>
  49. </el-form-item>
  50. <el-form-item label="TLS Force" v-if="data.tlsForce === true">
  51. <span>{{ data.tlsForce }}</span>
  52. </el-form-item>
  53. <el-form-item label="HeartBeat Timeout">
  54. <span>{{ data.heartbeatTimeout }}</span>
  55. </el-form-item>
  56. <el-form-item label="Client Counts">
  57. <span>{{ data.clientCounts }}</span>
  58. </el-form-item>
  59. <el-form-item label="Current Connections">
  60. <span>{{ data.curConns }}</span>
  61. </el-form-item>
  62. <el-form-item label="Proxy Counts">
  63. <span>{{ data.proxyCounts }}</span>
  64. </el-form-item>
  65. </el-form>
  66. </div>
  67. </el-col>
  68. <el-col :md="12">
  69. <div
  70. id="traffic"
  71. style="width: 400px; height: 250px; margin-bottom: 30px"
  72. ></div>
  73. <div id="proxies" style="width: 400px; height: 250px"></div>
  74. </el-col>
  75. </el-row>
  76. </div>
  77. </template>
  78. <script setup lang="ts">
  79. import { ref } from 'vue'
  80. import { ElMessage } from 'element-plus'
  81. import { DrawTrafficChart, DrawProxyChart } from '../utils/chart'
  82. import LongSpan from './LongSpan.vue'
  83. let data = ref({
  84. version: '',
  85. bindPort: 0,
  86. kcpBindPort: 0,
  87. quicBindPort: 0,
  88. vhostHTTPPort: 0,
  89. vhostHTTPSPort: 0,
  90. tcpmuxHTTPConnectPort: 0,
  91. subdomainHost: '',
  92. maxPoolCount: 0,
  93. maxPortsPerClient: '',
  94. allowPortsStr: '',
  95. tlsForce: false,
  96. heartbeatTimeout: 0,
  97. clientCounts: 0,
  98. curConns: 0,
  99. proxyCounts: 0,
  100. })
  101. const fetchData = () => {
  102. fetch('../api/serverinfo', { credentials: 'include' })
  103. .then((res) => res.json())
  104. .then((json) => {
  105. data.value.version = json.version
  106. data.value.bindPort = json.bindPort
  107. data.value.kcpBindPort = json.kcpBindPort
  108. data.value.quicBindPort = json.quicBindPort
  109. data.value.vhostHTTPPort = json.vhostHTTPPort
  110. data.value.vhostHTTPSPort = json.vhostHTTPSPort
  111. data.value.tcpmuxHTTPConnectPort = json.tcpmuxHTTPConnectPort
  112. data.value.subdomainHost = json.subdomainHost
  113. data.value.maxPoolCount = json.maxPoolCount
  114. data.value.maxPortsPerClient = json.maxPortsPerClient
  115. if (data.value.maxPortsPerClient == '0') {
  116. data.value.maxPortsPerClient = 'no limit'
  117. }
  118. data.value.allowPortsStr = json.allowPortsStr
  119. data.value.tlsForce = json.tlsForce
  120. data.value.heartbeatTimeout = json.heartbeatTimeout
  121. data.value.clientCounts = json.clientCounts
  122. data.value.curConns = json.curConns
  123. data.value.proxyCounts = 0
  124. if (json.proxyTypeCount != null) {
  125. if (json.proxyTypeCount.tcp != null) {
  126. data.value.proxyCounts += json.proxyTypeCount.tcp
  127. }
  128. if (json.proxyTypeCount.udp != null) {
  129. data.value.proxyCounts += json.proxyTypeCount.udp
  130. }
  131. if (json.proxyTypeCount.http != null) {
  132. data.value.proxyCounts += json.proxyTypeCount.http
  133. }
  134. if (json.proxyTypeCount.https != null) {
  135. data.value.proxyCounts += json.proxyTypeCount.https
  136. }
  137. if (json.proxyTypeCount.stcp != null) {
  138. data.value.proxyCounts += json.proxyTypeCount.stcp
  139. }
  140. if (json.proxyTypeCount.sudp != null) {
  141. data.value.proxyCounts += json.proxyTypeCount.sudp
  142. }
  143. if (json.proxyTypeCount.xtcp != null) {
  144. data.value.proxyCounts += json.proxyTypeCount.xtcp
  145. }
  146. }
  147. // draw chart
  148. DrawTrafficChart('traffic', json.totalTrafficIn, json.totalTrafficOut)
  149. DrawProxyChart('proxies', json)
  150. })
  151. .catch(() => {
  152. ElMessage({
  153. showClose: true,
  154. message: 'Get server info from frps failed!',
  155. type: 'warning',
  156. })
  157. })
  158. }
  159. fetchData()
  160. </script>
  161. <style>
  162. .source {
  163. border-radius: 4px;
  164. transition: 0.2s;
  165. padding-left: 24px;
  166. padding-right: 24px;
  167. }
  168. .server_info {
  169. margin-left: 40px;
  170. font-size: 0px;
  171. }
  172. .server_info .el-form-item__label {
  173. color: #99a9bf;
  174. height: 40px;
  175. line-height: 40px;
  176. }
  177. .server_info .el-form-item__content {
  178. height: 40px;
  179. line-height: 40px;
  180. }
  181. .server_info .el-form-item {
  182. margin-right: 0;
  183. margin-bottom: 0;
  184. width: 100%;
  185. }
  186. </style>