#!/usr/bin/python
import urllib2, base64, re, struct, time, socket, sys, datetime, os.path
try:
import json
except:
import simplejson as json
time_delta = 1 # grep interval in minutes
# Nginx log file path
nginx_log_file_path = '/usr/local/nginx/logs/access.log'
# Optional Basic Auth
username = 'user'
password = 'pass'
# Temp file, with log file cursor position
seek_file = '/usr/local/zabbix/script/nginx_log_stat'
def read_seek(file):
if os.path.isfile(file):
f = open(file, 'r')
try:
result = int(f.readline())
f.close()
return result
except:
return 0
else:
return 0
def write_seek(file, value):
f = open(file, 'w')
f.write(value)
f.close()
#print '[12/Mar/2014:03:21:13 +0400]'
d = datetime.datetime.now()-datetime.timedelta(minutes=time_delta)
minute = int(time.mktime(d.timetuple()) / 60)*60
d = d.strftime('%d/%b/%Y:%H:%M')
total_rps = 0
flagm = 0
rps = [0]*60
tps = [0]*60
res_code = {}
nf = open(nginx_log_file_path, 'r')
new_seek = seek = read_seek(seek_file)
# if new log file, don't do seek
if os.path.getsize(nginx_log_file_path) > seek:
nf.seek(seek)
line = nf.readline()
while line:
if d in line:
new_seek = nf.tell()
total_rps += 1
flagm = 1
sec = int(re.match('(.*):(\d+):(\d+):(\d+)\s', line).group(4))
code = re.match(r'(.*)"\s(\d*)\s', line).group(2)
if code in res_code:
res_code[code] += 1
else:
res_code[code] = 1
rps[sec] += 1
line = nf.readline()
if flagm == 0:
new_seek = os.SEEK_END
write_seek(seek_file, str(new_seek))
nf.close()
if sys.argv[1] in res_code:
print res_code[sys.argv[1]]
else:
print 0