本文主要內容
前置知識
如果你對以上基礎技術很陌生,本篇文章內容可能不適合你!
在這個過程中:
在我我司的內網測試環境,檢視紀錄檔
那麼,有沒有辦法把這一過程自動化呢?答案是肯定的。這便是本專案的設計初衷與目的!
功能特性列表
後續將會支援的功能
支援開啟多個的前端頁面,分別抓取紀錄檔資料渲染到頁面,但只能抓取一個紀錄檔檔案的資料
可檢視該紀錄檔檔案的歷史資料
可實時抓取紀錄檔檔案中新產生的紀錄檔資料
Start:開始抓取紀錄檔檔案中的歷史記錄,然後實時獲取新產生的紀錄檔
Stop:停止抓取
Clean:清除當前頁面上的所有紀錄檔資料,但不會斷開連線,還是會實時地呈現後端推播過來的紀錄檔資訊
對當前頁面上的紀錄檔資料進行關鍵字查詢
後端技術
前端技術
Step1:環境準備或檢查
Step2:克隆專案到本地,從IDEA中開啟,等待Maven自動設定完畢
Step3:填寫專案的組態檔(application.yml)
Step4:執行啟動類:src/main/java/com/hackyle/log/viewer/RemoteLogViewerApp.java
Step5:進入Chrome,在位址列輸入:http://localhost:8989/,進入紀錄檔檢視首頁
主要流程
主要步驟
@Override
public Session buildConnect() {
Session sshSession = null;
try {
JSch jSch = new JSch();
sshSession = jSch.getSession(username, host, port);
Properties config = new Properties();
config.put("StrictHostKeyChecking","no");
sshSession.setPassword(password);
sshSession.setConfig(config);
sshSession.connect();
if(sshSession.isConnected()) {
System.out.println("SSH連線成功:" + sshSession.getHost() + ":" + sshSession.getPort() +" "+ sshSession);
} else {
throw new RuntimeException("SSH連線失敗");
}
} catch (Exception e) {
System.out.println("SSH連線出現異常:" + e);
}
return sshSession;
}
@Override
public void destroyConnect(Session sshSession) {
if(sshSession != null) {
sshSession.disconnect();
if(!sshSession.isConnected()) {
System.out.println("SSH已斷開連線:" + sshSession.getHost()+":"+ sshSession.getPort() +" "+ sshSession);
}
}
}
com/hackyle/log/viewer/service/impl/LogServiceImpl.java
主要邏輯
主要步驟
com/hackyle/log/viewer/handler/LogWebSocketHandler.java
afterConnectionEstablished方法:連線建立成功時呼叫
afterConnectionClosed方法:關閉連線後呼叫
com/hackyle/log/viewer/interceptor/WebSocketInterceptor.java
com/hackyle/log/viewer/config/WebSocketConfig.java
WebSocket使用者端
src/main/resources/static/js/index.js
Start:開始抓取紀錄檔檔案中的歷史記錄,然後實時獲取新產生的紀錄檔
Stop:停止抓取
Clean:清除當前頁面上的所有紀錄檔資料,但不會斷開連線,還是會實時地呈現後端推播過來的紀錄檔資訊
為三個按鈕分別新增一個Click事件,定義動作函數
Start:建立WebSocket範例,將後端發來的資料,不斷追加到某個標籤下
Stop:前端手動關閉WebSocket,請求後端介面,關閉WebSocket Server
src/main/resources/static/js/index.js
在本個頁面內,進行關鍵字搜尋。本質是模擬瀏覽器的Ctrl+F,進行HTML內容搜尋
呼叫window.find()方法
單擊搜尋方塊,將貼上板上的資料複製到此個搜尋方塊內
使用第三方庫clipboard接管貼上板
function copyHandle(content){
let copy = (e)=>{
e.preventDefault()
e.clipboardData.setData('text/plain',content)
document.removeEventListener('copy',copy)
}
document.addEventListener('copy',copy)
document.execCommand("Copy");
}
雙擊搜尋方塊,清除此個搜尋方塊內的資料
背景
設計思想
接收前端請求:com/hackyle/log/viewer/controller/LogController.java
業務:com/hackyle/log/viewer/service/impl/LogServiceImpl.java#closeWebSocketServer
實現:com/hackyle/log/viewer/handler/LogWebSocketHandler.java#closeWebSocketServer
存入sessionStorage:src/main/resources/static/js/index.js
關閉WebSocket連線時,攜帶sessionId:src/main/resources/static/js/index.js
背景
Step1:在POM.xml中新增打包外掛
Step2:執行打包命令
Step3:將Jar放在合適的位置
Step4:寫個啟動指令碼。本專案基於JDK11,建議手動設定臨時的JDK環境變數,再啟動Jar
set JAVA_HOME=D:\ProgramFilesKS\Java\JDK11
set path=%JAVA_HOME%\bin;%path%
java -jar D:\D-Project\DevelopTools\remote-log-viewer-0.6.0.jar
pause