주어진 방문자에 대해 "세션"을 근사하기 위해 Apache의 액세스 로그에서 ip와 timestamp를 어떻게 사용합니까? 세션에는 주어진 기간 (예 : 60 초) 내의 모든 연속 요청이 포함됩니다.아파치에서 대략적인 세션 데이터 access.log - python
로그 파일을 구문 분석하고이를 통해 IP 주소를 따르는 클래스가 있습니다 (로그는 타임 스탬프 순서대로 다행히 있습니다). 이 클래스는 다양한 로그 필드와 액세스 타임 스탬프에 대한 파이썬 datetime 객체를 포함하는 튜플을 만듭니다.
class ApacheLogParser(object):
def __init__(self, file):
self.lines = __parse(file)
def __parse(self, file):
""" use a regex to parse the file
return a tuple of dictionaries
"""
def follow_ip(self, ip):
""" all entries for a given ip, in order of appearance in the log """
return (line for line in self.lines if re.search(ip, line['ip']))
log = ApacheLogParser('access.log')
for line in log.follow_ip('1.2.3.4'):
print "%s %s" % (line['path'], line['datetime'].date())
이러한 대략적인 "세션"을 반복 할 수 있도록이 클래스에 기능을 어떻게 추가 할 수 있습니까?
감사합니다.
는 편집 : 내 편집을 형성하는 동안 , 나는이 함께했다 :
ip = '1.2.3.4'
ipdata = list(log.track_ip(ip))
initial_dt = ipdata[0]['datetime']
sess = [x for x in ipdata if x['datetime'] < initial_dt + datetime.timedelta(0,60)]
이 작동하는 것 같다, 당신이 어떤 의견이 있습니까?
괜찮 으면, 그것은 다소 느린 것보다 (당신은 한 번만 고유 한 IP마다 전체 로그를 반복하고 있습니다.) ' 한 번에 할 수 있습니다. 그러나 그것이 당신의 요구에 충분히 빠르다면 괜찮을 것입니다! 도움을 청하는 – katrielalex