需要测量HTTP请求延迟并将结果发送到石墨,具体取决于Akamai标头的内容

时间:2014-08-22 21:28:33

标签: python httplib

我不是程序员。

我一直在寻找一种方法来编写一个python脚本来测量Web请求到Akamai URL的延迟,并通过statsd将此数据发送到石墨,具体取决于Akamai缓存是否报告HIT或MISS以便我可以随着时间的推移,可以看到HIT和MISS的潜伏期差异。

到目前为止我所拥有的:

向包含自定义标题的网址发送请求:

headers = {"Pragma": "akamai-x-cache-on,akamai-x-cache-remote-on", "Accept": "text/plain"}

发出HTTP请求:

conn = httplib.HTTPConnection("api.example.com", 80)
conn.request("GET", "/example.json?app=app1,key=keytext", '', headers)

然后,根据响应的标题,Header x-cache是否是一组可能的答案之一,如TCP_MEM_HIT,TCP_HIT等,将其发送到statsd计数器,以便我可以发送到石墨和HIT和MISS的图形延迟。

这是我离开联盟的地方。我可以看到我的回答是200 OK:

r1 = conn.getresponse()
print(r1.status, r1.reason)

我可以看到我正在寻找的标题:

print r1.getheaders()

解析内容是我难倒的地方。我确信我可以从网络上获得可以拼凑的示例代码,我可以学习python。也许有人可以告诉我,如果我走错方向,或者是否有一个简单的答案。

更新

我脚本的当前标头输出示例:

[('content-length', '27397'), ('x-cache', 'TCP_REFRESH_MISS from a23-220-148-154.deploy.akamaitechnologies.com (AkamaiGHost/6.16.4.2-13281669) (S)'), ('content-language', 'en-US'), ('expires', 'Mon, 25 Aug 2014 15:50:41 GMT'), ('vary', 'Accept-Encoding'), ('connection', 'keep-alive'), ('cache-control', 'public, max-age=297'), ('date', 'Mon, 25 Aug 2014 15:45:44 GMT'), ('content-type', 'application/json;charset=UTF-8'), ('x-cache-remote', 'TCP_REFRESH_MISS from a23-220-148-152.deploy.akamaitechnologies.com (AkamaiGHost/6.16.4.2-13281669) (S)')]

' x-cache'和' x-cache-remote'很有意思现在,我只对x-cache'在这种情况下,' TCP_REFRESH_MISS'是结果。我需要向statsd发送一个点击计数器,以便将其计为' TCP_REFRESH_MISS'。例如,如果它是“TCP_HIT”,我需要将其发送到statsd。对于每个&#x;缓存'响应,我还需要将呼叫的延迟时间发送给Akamai。一旦我在statsd中有这个,我将统计数据发送到石墨,以便我可以在图表上看到每种类型的HIT和MISS的延迟。这将允许我们的开发团队评估我们所做的任何更改是否会影响延迟。

1 个答案:

答案 0 :(得分:0)

这样的事情应该有效:

import statsd
HEADERS_OF_INTEREST = ("TCP_REFRESH_MISS", "TCP_HIT")
statsd_client = statsd.StatsClient('YOUR_STATSD_SERVER', 8125)

def process_x_cache_header(value):
    for header in HEADERS_OF_INTEREST:
        if value.startswith(header):
            statsd_client.incr("akami.{}".format(header))

for header, value in r1.getheaders():
    if header == "x-cache":
        process_x_cache_header(value)

为了实际向statsd发送数据,这两个软件包中的任何一个都可能是您想要的: