syslog.html 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. <!DOCTYPE html>
  2. <html xmlns:th="http://www.thymeleaf.org">
  3. <head th:replace="/common/template :: header(~{::title},~{::link},~{::style})">
  4. <link rel="stylesheet" th:href="@{/lib/zTree_v3/css/zTreeStyle/zTreeStyle.css}" type="text/css">
  5. <link rel="stylesheet" th:href="@{/css/xterm.css}"/>
  6. </head>
  7. <body class="timo-layout-page">
  8. <div class="layui-card">
  9. <div class="layui-card-header">
  10. <span><i class="fa fa-table"></i> 系统实时日志</span>
  11. <span id="ws-status" style="background: red">离线</span>
  12. </div>
  13. <div class="layui-card-body" style="background: black">
  14. <ul id="applog" class="flow-default layui-timeline" style="height: 500px;overflow: auto">
  15. <!--<li id="li2">
  16. <div class="layui-text">
  17. <p>
  18. 1. 更新:重命名菜单类型为:目录、菜单、按钮<2. 更新:重写Shiro“记住我”系列化数据,减少cookie体积3. 新增:获取用户角色列表方法4. 修复:获取部门数据时延迟加载超时问题 5. 修复:将jq版本改为2.2.4,解决layui弹出窗口最大化问题 6. 新增:项目配置项,可直接通过yml文件配置Shiro和XSS防护忽略规则 7. 新增:ResultExceptionError和ResultExceptionSuccess异常类 8. 修复:若干页面显示问题,优化加载时提示<br>
  19. </p>
  20. </div>
  21. </li>-->
  22. </ul>
  23. </div>
  24. </div>
  25. </body>
  26. <script th:replace="/common/template :: script"></script>
  27. <script type="text/javascript" th:src="@{/js/plugins/jquery-3.4.1.min.js}"></script>
  28. <script type="text/javascript" th:inline="javascript">
  29. function add(text) {
  30. var p = document.createElement("p");
  31. p.innerHTML = text + '<br>'
  32. var div = document.createElement("div");
  33. div.className = 'layui-text'
  34. div.appendChild(p)
  35. var li = document.createElement("li");
  36. li.appendChild(div)
  37. var ul = document.getElementById("applog");
  38. //ul.prepend(li);
  39. ul.appendChild(li);
  40. }
  41. function setOnline() {
  42. var span = document.getElementById("ws-status")
  43. span.style = "background: green"
  44. span.innerHTML = '在线'
  45. }
  46. function setOffline() {
  47. var span = document.getElementById("ws-status")
  48. span.style = "background: red"
  49. span.innerHTML = '离线'
  50. }
  51. var connected = false
  52. var ws
  53. function initWebSocket() {
  54. if ("WebSocket" in window) {
  55. var token = '0123456789'
  56. var app = 'devops-manager'
  57. var host = 'devops.reghao.cn'
  58. var params = 'token=' + token + '&app=' + app + '&host=' + host;
  59. var url = "wss://devops.reghao.cn/ws/log/pull?" + params
  60. ws = new WebSocket(url);
  61. ws.onopen = function() {
  62. connected = true
  63. setOnline()
  64. // Web Socket 已连接上,使用 send() 方法发送数据
  65. console.log("websocket connected...");
  66. };
  67. ws.onclose = function() {
  68. connected = false
  69. setOffline()
  70. console.log("websocket connection closed...");
  71. reconnect()
  72. };
  73. ws.onerror = function () {
  74. connected = false
  75. setOffline()
  76. console.log("websocket connection error...");
  77. reconnect()
  78. };
  79. ws.onmessage = function (evt) {
  80. var payload = JSON.parse(evt.data)
  81. var app = '<span style="color: yellowgreen">' + payload.app + '</span>'
  82. var concat = '<span style="color: red">' + '@' + '</span>'
  83. var host = '<span style="color: yellowgreen">' + payload.host + ' ' + '</span>'
  84. var timestamp = payload.dateTimeStr
  85. var thread = payload.thread
  86. var level
  87. if (payload.level === 'INFO') {
  88. level = '<span style="color: green">' + payload.level + ' ' + '</span>'
  89. } else if (payload.level === 'ERROR') {
  90. level = '<span style="color: red">' + payload.level + ' ' + '</span>'
  91. } else {
  92. level = '<span style="color: yellow">' + payload.level + ' ' + '</span>'
  93. }
  94. var logger = '<span style="color: wheat">' + payload.logger + ' ' + '</span>'
  95. var message = '<span style="color: white">' + payload.message + ' ' + '</span>'
  96. var text = app + concat + host + ' ' + timestamp + ' ' + thread + ' ' + level + ' ' + logger + ' ' + message + '<br>'
  97. add(text)
  98. }
  99. } else {
  100. // 浏览器不支持 WebSocket
  101. alert("您的浏览器不支持 WebSocket!");
  102. }
  103. }
  104. function reconnect() {
  105. if (connected) return
  106. setTimeout(function () {
  107. console.log('websocket reconnecting...')
  108. initWebSocket()
  109. }, 5000)
  110. }
  111. initWebSocket()
  112. </script>
  113. </html>