经常使用基调网络的同学,可能对基调网络对页面元素的性能展示感觉很好。它可以做到对一条URL做详细的检测,包括:阻塞时间、DNS解析时间、建立连接时间、SSL握手时间、发出请求时间、首包时间等。

    wKiom1Psec_iceBrAAGpCF7Ygqw296.jpg

    其实,我们也可以做到。比如Python pycurl 库就可以做到对数据的收集,然后可以对收集的数据写入redis或者Mysql。最后前端使用echars通过图形的形式进行展示出来。

    

wKioL1PsfN7Dk1JqAAGGmOAYRYc068.jpg

wKiom1Pse8bg6o5mAADIBgSmR6g461.jpg

    echars是百度一个开源项目,功能很强大(项目URL:http://echarts.baidu.com)可以将数据通过各种图形的形式展现出来。

    

使用Pycurl 监测指定站点相关系能

    Pycurl是个用C语言实现的python库,Pycurl可以用来获取指定URL的响应对象。它支持的协议很多,如:FTP、FTPS、HTTP、HTTPS、TELNET等。

    可以使用Pycurl库编写的脚本放到不同地区的CDN节点上,通过Crond Job或者守护进程的方式,在该节点测试指定站点,然后将测试结果通过RPC或者Http方式发送到服务端写入redis或Mysql,最后通过前端页面展现出来。

#!/usr/bin/env python

import pycurl
import sys
import json

WEB_SITES = sys.argv[1]

def main():
    c = pycurl.Curl()
    c.setopt(pycurl.URL, WEB_SITES)                                #设置session
    c.setopt(pycurl.FOLLOWLOCATION, 1)
    content = c.perform()                                           #执行传输动作
    dns_time = c.getinfo(pycurl.NAMELOOKUP_TIME)                    #DNS 建连时间
    conn_time = c.getinfo(pycurl.CONNECT_TIME)                      #TCP/IP 三次握手时间
    starttransfer_time = c.getinfo(pycurl.STARTTRANSFER_TIME)       #首包时间
    total_time = c.getinfo(pycurl.TOTAL_TIME)                       #上一请求的总时间
    http_code = c.getinfo(pycurl.HTTP_CODE)                         #HTTP响应代码
    redirect_count = c.getinfo(pycurl.REDIRECT_COUNT)               #重定向次数
    size_upload = c.getinfo(pycurl.SIZE_UPLOAD)                     #上传字节大小
    size_download = c.getinfo(pycurl.SIZE_DOWNLOAD)                 #下载字节大小
    header_size = c.getinfo(pycurl.HEADER_SIZE)                     #头部大小
    request_size = c.getinfo(pycurl.REQUEST_SIZE)                   #请求大小
    content_type = c.getinfo(pycurl.CONTENT_TYPE)                   #请求内容类型
    c.close()                                                      #关闭处理Curl的session
    data = json.dumps({'dns_time':dns_time,         
                      'conn_time':conn_time,        
                      'starttransfer_time':starttransfer_time,    
                      'total_time':total_time,
                      'http_code':http_code,
                      'redirect_count':redirect_count,
                      'size_upload':size_upload,
                      'size_download':size_download,
                      'header_size':header_size,
                      'request_size':request_size,
                      'content_type':content_type})
    return data

if __name__ == "__main__":
    print main()

 

该脚本执行结果如下:

       wKioL1Psg5OCHEy1AAFTfFKX0cY435.jpg    

除了上面脚本使用的一些相应信息外,Pycurl还支持很多响应信息:

    pycurl.PRETRANSFER_TIME           #建立连接后到开始传输的时间

    pycurl.REDIRECT_TIME              #如果存在跳转,所花费的时间

    pycurl.SPEED_UPLOAD               #上传速度

    pycurl.CONTENT_LENGTH_DOWNLOAD    #下载内容长度

    pycurl.CONTENT_LENGTH_UPLOAD      #上传内容的长度

    pycurl.SPEED_DOWNLOAD             #下载速度

    pycurl.INFO_FILETIME              #文件的时间信息

    Pycurl.HTTP_CONNECTCODE           #HTTP连接代码

    

    这样,各地区Cache节点就可以跑起来了,可以通过RPC或者其他方式将获取的数据传到服务端。最后通过前端页面渲染出来就ok了。由于我们单位买了基调的服务,所以我就没有写前端的页面,如果哪位需要的话,可以搞一下。