在后端服务比较多的情况下,一般都会拆分为不同的子服务来提供服务,不同的子服务之间如果有一个 traceid 来串起来调用链条的话,我们可以通过本工具来实现整体链条调用日志的收集与提取,今天的分享共分为四个部分。
第一部分:前端代码(html部分)
<div?align="center">
????<pre>
????????<h4>
。-------------------------------------------------。
|?????????????????????????????????????????????????|
。-------get callLink by traceid of tools----------。
|??????????????????????????????????????????OS-QA??|
。-------------------------------------------------。
????????????</h4>
</pre>
????????????????<form?class="getData?active?"?action="/getCallLink"?method="GET"?>
????????????????????<div?class="input-group">
??????????????????????? Your seleced:<select?id="env">
??????????????????????????????<option?value?="test1">test1</option>
??????????????????????????????<option?value?="test2">test2</option>
????????????????????????????</select>
??????????????????????? please input the traceid:
????????????????????????<input?type="text"?class="form-control"?name="traceid"?id="traceid"?placeholder="please?enter?traceid"/>
????????????????????????<span?class="input-group-btn">
????????????????????????????<input?type="button"?value="get?callLink?by?traceid"??class="btn?btn-info"?onclick='getitbytraceid()'?/>
????????????????????????</span>
????????????????????</div>
????????????????????<div?align="center"?id="result"></div>
????????????????????<div?align="left"?id="response"></div>
????????????????</form>
</div>
第二部分:前端代码(js部分)
<script?type="application/javascript">
????function?getitbytraceid()?{
????????env?=?$('#env').val()/*?ws?=?new?WebSocket?创建WebSocket的实例??注意设置对以下的websocket的地址哦*/
????????traceid?=?$('#traceid').val()
????????if(env?===?'test1'){
????????????ws?=?new?WebSocket('ws://10.7.36.34:8088')
????????}else?if(env?===?'test2'){
????????????ws?=?new?WebSocket('ws://10.7.36.2:8088')
????????}
????????/*ws.onopen??握手完成并创建TCP/IP通道,当浏览器和WebSocketServer连接成功后,会触发onopen消息
?????????ws.onmessage?接收到WebSocketServer发送过来的数据时,就会触发onmessage消息,参数evt中包含server传输过来的数据;*/
????????ws.onopen?=?function?(evt)?{
????????????$('#result').append("<strong>============================================================</strong>")
????????????$('#result').append("<li>websocket 连接建立成功!!!-->traceid为:"+traceid+"</li>")
????????????ws.send(traceid)
????????}
????????ws.onmessage?=?function?(evt)?{
????????????var?response?=?evt.data
????????????$('#response').append("<li>"+response+"</li>")
????????}
????????ws.onclose?=?function?()?{
???????????$('#response').append("<li>websocket 连接断开!!!</li>")
????????}
????}
</script>
第三部分:后端代码(Python实现)
import?websockets
import?asyncio
import?os
async?def?entry(websocket,path):
????while?True:
????????traceid?=?await?websocket.recv()
????????print("the?path?is:",path)
????????print("the?traceid?is:",traceid)
????????cmd?=?'for?i?in?`grep?"'?+?traceid?+?'"?-rl?/home/q/www`;do?echo?$i;grep?-A5"'?+?traceid?+?'"?$i;done'
????????print(cmd)
????????response?=?os.popen(cmd)
????????try:
????????????for?resp?in?response.readlines():
????????????????if("provider.log"?in?resp):
????????????????????resp1?=?"<per?style='color:red'>"+resp+"</per>"
????????????????????await?websocket.send(str(resp1)?+?"<br>")
????????????????if("/home/q/www"?in?resp?and?"provider.log"?not?in?resp):
????????????????????await?websocket.send(str(resp)+"<br>")
????????????????if(traceid?in?resp):
????????????????????resp2?=?str(resp).replace("->","<per?style='color:green;font-size:30px'>---></per>").replace(str(traceid),"<per?style='color:blue'>"+str(traceid)+"</per>")
????????????????????await?websocket.send(str(resp2))
????????except?Exception?as?e:
????????????await?websocket.send("<span style='color:#FF0000;font-weight:bold;'>"+str("test")?+?"--->has?an?exception:{}</span>".format(e))
start_server?=?websockets.serve(entry,'10.7.36.34',8088)
asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()
第四部分:最终的效果图
欢迎关注【无量测试之道】公众号,回复【领取资源】 Python编程学习资源干货、 Python+Appium框架APP的UI自动化、 Python+Selenium框架Web的UI自动化、 Python+Unittest框架API自动化、 资源和代码 免费送啦~ 文章下方有公众号二维码,可直接微信扫一扫关注即可。
备注:我的个人公众号已正式开通,致力于测试技术的分享,包含:大数据测试、功能测试,测试开发,API接口自动化、测试运维、UI自动化测试等,微信搜索公众号:“无量测试之道”,或扫描下方二维码:
添加关注,让我们一起共同成长!?
|