第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定

如何實現(xiàn)類似“jenkins”的滾動日志功能?

標簽:
Java

https://img1.sycdn.imooc.com//5d5666f50001244606780323.png

本文实现了一个类似jenkins滚动日志的小功能,如果你正在做发布系统类似的东西,这个功能会非常有用。

滚动日志

jenkins的日志能够滚动显示,关闭后重新进入依然能够继续滚动,非常棒。做这种效果,直接想到的有两种方式:
1) Websocket
2) 轮询获取

可是我太笨了,websocket代码对我来说有点复杂。另外我还没想清楚如果关了日志窗口重新进入,ws会有什么样的反应。所以我们还是轮询吧。

通过chrome的Inspect功能去偷窥jenkins。可以看到,每隔1秒钟会发送一次请求到服务器,进行增量日志的获取。传入的参数只有一个,就是文件偏移量。

https://img1.sycdn.imooc.com//5d56670c0001681606830199.png

我觉得我们可能想一块儿去了。

整个过程还是比较简单的,下面简短的描述下,并附上最主要功能的代码块。

服务端

开启一个新的线程执行构建

https://img1.sycdn.imooc.com//5d56674c00015d3906140426.png

两点说明:
1) 终止条件成功的判断需要进行约定。比如,读到”BUILD-OK”字样,证明Build成功
2) 服务可能异常终止。所以需要有定时清理进程,去更新长时间没有相应的线程状态
3) 通过添加一个内存Map,可以很容易实现正在执行的JOB功能

根据提供的偏移量读取文件内容

String logPath = "tmp.log";
BufferedReader reader = new BufferedReader(    new FileReader(new File(logPath)));/* 跳过已经读取过的日志 */long realSkip = reader.skip(start);/* 从跳过的地址开始读取下面的日志 */String line;
StringBuilder sb = new StringBuilder();while ((line = reader.readLine()) != null) {
    sb.append(line);
    sb.append("\n");    /* 将读取的长度追加到变量中 */
    realSkip +=sb.length();
}
reader.close();/* 查询build的状态,用来给前端滚动日志一个截止状态 */int status = this.queryBuildStatus(buildId);/*
返回三个值
1)本次读取的内容
2)下次读取的偏移量
3)项目状态
*/return new ChunkLog(sb.toString(),realSkip ,status);

本段代码试图通过传入的文件偏移量,读取当前文件剩余的内容返回给用户。如果文件持续写入,通过不断的轮询,就可以达到滚动日志的效果。
不多说,看注释即可。

前端

设置几个全局变量

//起始便宜量
var Start = 0
//轮询
var timer = null

主要的轮询接口

id为log的<pre>标签,用来接收、显示日志。

function appendData(hash) {
    $.ajax({
        url: '/chunk/' + hash + '/' + Start,
        type: 'GET',
        dataType: 'json',
        success: function(res) {            var log = res.log;
            $("#log").append(log)
            Start = res.start
            End = res.end            if (End) {                if(typeof timer !== 'undefined' ){
                    clearInterval(timer)
                }
            }
        }
    })}

按钮触发事件

//重置$("#log").html("")
Start = 0;
timer = setInterval(function() {
        appendData(hash)
},1000);

当点击查看日志时,触发此函数,就可以随时随地看到最新的滚动日志了。


點擊查看更多內(nèi)容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優(yōu)質(zhì)文章

正在加載中
JAVA開發(fā)工程師
手記
粉絲
4552
獲贊與收藏
3234

關(guān)注作者,訂閱最新文章

閱讀免費教程

  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優(yōu)惠券免費領(lǐng)

立即參與 放棄機會
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號

舉報

0/150
提交
取消