# !/usr/bin/env python
# -*- coding:utf8 -*-
import sys
import re
import time
import os
def main():
months ={
"jan": 1, "Feb": 2, "Mar": 3, "Apr": 4, "May": 5, "Jun": 6,
"Jul": 07, "Aug": 8, "Sep": 9, "Oct": 10, "Nov": 11, "Dec": 12}
error = '請輸入正確的時間格式,例如 2016-08-03 10:00:00'
start = raw_input("請輸入要查詢的開始時間段如:2016-08-03 10:00:00")
#start = '2016-08-03 10:37:00'
pattern = re.compile("^201[3-6]-(0[0-9]|1[0-2])-([0-2][0-9]|3[0-1])\s([0-1][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]$")
i_start = re.match(pattern, start)
if i_start == None:
print error
sys.exit(0)
end = raw_input("請輸入要查詢的結束時間段如:2016-08-03 10:01:00")
#end = '2016-08-03 10:38:00'
i_end = re.match(pattern, end)
if i_end == None:
print error
sys.exit(0)
print "time format is true !"
## 獲取格式的時間的定時間戳 ##
start_stamp = time.mktime(time.strptime(start, "%Y-%m-%d %H:%M:%S"))
end_stamp = time.mktime(time.strptime(end, "%Y-%m-%d %H:%M:%S"))
## 處理文件 ###
log_abpath = raw_input("請輸入log文件的絕對路徑 例如:/var/log/apache2/access.log")
filepath = os.path.exists(log_abpath)
if not filepath:
raise "對不起該目錄文件不存在!!"
sys.exit(0)
print "文件存在!!"
f = open(log_abpath, 'r')
#f = open("/var/log/apache2/access.log", "r")
logs = f.readlines()
position = 0
t_logs = []
for log in logs:
position += 1
log = log.split(" ")
log.insert(0, position)
t_logs.append(log)
for t_log in t_logs:
#print type(t_log)
tim = str(t_log[4][1:])
mon = tim[3:6]
#print mon
#print tim
#print type(tim)
#print months[mon]
tim_f = tim.replace(mon, str(months[mon]))
#print tim_f
d = time.strptime(tim_f, "%d/%m/%Y:%H:%M:%S")
stamp = time.mktime(d)
t_log.insert(1, stamp)
# print t_logs
count = 0
for t_log in t_logs:
if t_log[1] > start_stamp < end_stamp:
print "該時間段內的請求日誌出現在,"+str(t_log[0])+"行"
count += 1
if count != 0:
print "該段時間內一共出現了%d次請求"%(count)
else:
print "對不起,我已經努力幫你找了,可是找到該段時間的日誌信息"
if __name__ == '__main__':
main()