• 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自动化测试等,微信搜索公众号:“无量测试之道”,或扫描下方二维码:

    添加关注,让我们一起共同成长!

  • 相关阅读:
    xml和web Server以及Remoting
    web窗体的基本控件
    迭代器
    .net 细节问题
    Linq笔记
    .net基础概念理解
    Gridview 和DetailsView FormView细节注意
    .net 基础学习(vs2008 3.5框架)
    一、多线程基础
    CentOS 7和SpringBoot下的Redis配置
  • 原文地址:https://www.cnblogs.com/Wu13241454771/p/15157929.html
Copyright © 2020-2023  润新知