""" Apache Log Reader. """ # # Copyright (c) 2005 Satoshi Fukutomi . # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # # THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # import csv from time import time, localtime, strftime __all__ = ["read", "read_day", "read_today", "make_day"] class ApacheDialect(csv.Dialect): delimiter = " " quotechar = '"' lineterminator = "\n" doublequote = False skipinitialspace = False quoting = csv.QUOTE_MINIMAL def ssv_input(fp): for line in fp: yield line.replace("[", '"', 1).replace("]", '"', 1) def apache_log(fp): return csv.reader(ssv_input(fp), dialect=ApacheDialect()) def apache_log_day(csvin, day): for row in csvin: if row[3].startswith(day): yield row def read(fp): return apache_log(fp) def read_day(fp, day): return apache_log_day(read(fp), day) def read_today(fp): return read_day(fp, make_day(time())) def make_day(t): return strftime("%d/%b/%Y", localtime(t))