AdminBackendLog.vue 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. <template>
  2. <el-container>
  3. <el-header height="220">
  4. <el-row style="margin-top: 10px">
  5. <span>
  6. <span v-if="wsStatus" style="color: green">WebSocket 已连接</span>
  7. <span v-if="!wsStatus" style="color: red">WebSocket 未连接</span>
  8. </span>
  9. <el-select
  10. v-model="queryInfo.logType"
  11. placeholder="选择日志类型"
  12. style="margin-left: 5px"
  13. @change="onSelectChange"
  14. >
  15. <el-option label="访问日志" value="1" />
  16. <el-option label="运行日志" value="2" />
  17. </el-select>
  18. <el-select
  19. v-model="queryInfo.logType"
  20. placeholder="选择应用"
  21. style="margin-left: 5px"
  22. @change="onSelectChange"
  23. >
  24. <el-option label="content-192.168.0.111" value="1" />
  25. <el-option label="content-192.168.0.112" value="2" />
  26. </el-select>
  27. </el-row>
  28. </el-header>
  29. <el-main>
  30. <div style="height: 60vh;">
  31. <el-scrollbar ref="myScrollbar" style="width: 100%; height: 100%;">
  32. <div v-for="(item, index) in dataList" :key="index">
  33. <el-row>
  34. <span>{{ item.timestamp }}</span>
  35. <span>{{ item.message }}</span>
  36. </el-row>
  37. </div>
  38. </el-scrollbar>
  39. </div>
  40. </el-main>
  41. </el-container>
  42. </template>
  43. <script>
  44. export default {
  45. name: 'AdminBackendLog',
  46. data() {
  47. return {
  48. queryInfo: {
  49. logType: '1',
  50. pn: 1
  51. },
  52. dataList: [],
  53. logFormat: {
  54. timestamp: null,
  55. message: ''
  56. },
  57. ws: null,
  58. wsStatus: false,
  59. reconnectLock: false
  60. }
  61. },
  62. created() {
  63. this.initWebSocket()
  64. document.title = 'BackendLog'
  65. // this.addData()
  66. },
  67. methods: {
  68. onSelectChange() {
  69. this.$message.info(this.queryInfo.logType)
  70. },
  71. addData() {
  72. const that = this
  73. setInterval(function() {
  74. that.dataList.push({
  75. timestamp: new Date(),
  76. message: 'abcdefg'
  77. })
  78. // 滚动条始终保持在底部
  79. that.$nextTick(() => {
  80. that.$refs['myScrollbar'].wrap.scrollTop = that.$refs['myScrollbar'].wrap.scrollHeight
  81. })
  82. }, 500)
  83. },
  84. initWebSocket() {
  85. if ('WebSocket' in window) {
  86. const wsUrl = 'ws://localhost:6007/logws/pull/runtime?app=tnb&host=localhost'
  87. const wsUrl1 = 'ws://localhost:6007/logws/pull/access?app=tnb&host=localhost'
  88. this.ws = new WebSocket(wsUrl1)
  89. const that = this
  90. this.ws.onopen = function() {
  91. that.setOnline()
  92. console.log('websocket connected...')
  93. }
  94. this.ws.onclose = function() {
  95. that.setOffline()
  96. console.log('websocket connection closed...')
  97. that.reconnect()
  98. }
  99. this.ws.onerror = function() {
  100. that.setOffline()
  101. console.log('websocket connection error...')
  102. that.reconnect()
  103. }
  104. this.ws.onmessage = function(evt) {
  105. const message = JSON.parse(evt.data)
  106. that.processMessage(message)
  107. }
  108. } else {
  109. // 浏览器不支持 WebSocket
  110. this.$message.error('您的浏览器不支持 WebSocket!')
  111. }
  112. },
  113. setOnline() {
  114. this.wsStatus = true
  115. },
  116. setOffline() {
  117. this.wsStatus = false
  118. },
  119. sendMessage(message) {
  120. this.ws.send(message)
  121. },
  122. processMessage(message) {
  123. const requestId = message.requestId
  124. const requestTime = message.requestTime
  125. const remoteAddr = message.remoteAddr
  126. const requestMethod = message.requestMethod
  127. const requestUrl = message.requestUrl
  128. const statusCode = message.statusCode
  129. const executeTime = message.consumeTime
  130. const targetRoute = message.targetRoute
  131. const targetService = message.targetService
  132. this.dataList.push({
  133. timestamp: requestTime,
  134. message: requestUrl
  135. })
  136. },
  137. reconnect() {
  138. if (this.reconnectLock) return
  139. this.reconnectLock = true
  140. const that = this
  141. setTimeout(function() {
  142. console.log('websocket reconnecting...')
  143. that.initWebSocket()
  144. that.reconnectLock = false
  145. }, 5000)
  146. }
  147. }
  148. }
  149. </script>
  150. <style>
  151. /deep/ .el-scrollbar__wrap {
  152. overflow: scroll;
  153. height: 100% !important;
  154. overflow-x: hidden !important;
  155. }
  156. </style>