IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> Python + Websocket + Shell 获取调用链 -> 正文阅读

[开发测试]Python + Websocket + Shell 获取调用链

在后端服务比较多的情况下,一般都会拆分为不同的子服务来提供服务,不同的子服务之间如果有一个 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自动化测试等,微信搜索公众号:“无量测试之道”,或扫描下方二维码:

在这里插入图片描述
添加关注,让我们一起共同成长!?

  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2021-08-21 15:46:10  更:2021-08-21 15:46:36 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/17 20:49:23-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码