Webサイトのメンテナンス:apkダウンロード量の正確な統計


ダウンロードされたログのリターンコードが206であることがよく見られますが、206は何ですか.
サーバの一部が正常に処理されました GET お願いします.に似ている FlashGet あるいは雷のような HTTP ダウンロードツールは、このような応答を使用してブレークポイントの継続を実現するか、1つの大きなドキュメントを複数のダウンロードセグメントに分解して同時にダウンロードします.
206はダウンロードパケットが複数分割されたことを意味し、単純な統計200の個数がはるかに足りない場合、206を兼ね備えている場合があり、各206の要求はパケットの一部であり、統計206のエントリも正確ではないことがわかる.
スクリプトを作成します.
次のようになります.
1:同じipで、要求された戻りコード200と206の要求サイズの合計を、単一のapkパケットのサイズ(整数倍数、小数位を切り捨てる)で割って、そのipダウンロードパケットの個数とする.
2:すべてのipダウンロードパケットの個数を加算すると、ダウンロードパケットの合計回数となります.
スクリプト:
#!/bin/env python
import os,sys,re,datetime
passt = datetime.datetime.now() - datetime.timedelta(minutes=60)
curtime2 = passt.strftime('%Y%m%d')
print curtime2
"""
192.168.100.8 - - [20/May/2015:16:17:14 +0800] "GET /images/icon_app_sq.png HTTP/1.0" 206 35899
192.168.100.8 - - [20/May/2015:16:17:14 +0800] "GET /images/icon_app_sq.png HTTP/1.0" 200 135899
192.168.100.48 - - [20/May/2015:16:13:32 +0800] "GET /apk/test/20001/test_20001.apk HTTP/1.0" 200 3245652
192.168.100.48 - - [20/May/2015:12:51:46 +0800] "GET /apk/test/20001/test_20001.apk HTTP/1.0" 206 65536
"""
f=open('/backup/nginxlog/aggday/access.log.'+curtime2)
#p=re.compile('([0-9.]+) .*20/Mar/2015:16:[0-2][0-9]+:.*test_20001.apk HTTP/1.[0-1]" (200) ([0-9]+) .*')
p=re.compile('([0-9.]+) .*test_20001.apk HTTP/1.[0-1]" (20[0-9]) ([0-9]+) .*')
d={}
dir={}
for line in f:
	if re.match(p,line) is not None:
		ip=re.match(p,line).group(1)
        	big=int(re.match(p,line).group(3))
		total=d.get(ip,0)
		total+=big
		d[ip]=total
for ip,total in d.iteritems():
	num=dir.get(ip,0)
	num= total/3245000       #3245000      
	dir[ip]=num
#print d
print sum(dir.values())