Welcome, guest | Sign In | My Account | Store | Cart
from operator import itemgetter
from socket import gethostbyaddr, herror
import time

accessLog
= "/var/log/apache2/access_log"

def track(filename, logFile=accessLog):
   
"""Retrieve request statistics for a specific file in an access log."""
    log
= open(logFile)
    filename
= '/' + filename.lstrip('/')
    access
= {}
   
for line in log:
        parts
= line.split()
       
if parts[6] == filename:
            timeStr
= parts[3]
            accessTime
= time.strptime(timeStr, "[%d/%b/%Y:%H:%M:%S")
            access
[parts[0]] = (accessTime, access.get(parts[0], ('', 0))[1] + 1)
   
print '%s has been requested by %d people and hit %d times.' % \
         
(filename, len(access), sum(map(itemgetter(1), access.itervalues())))
   
    accessTuple
= sorted(access.iteritems(), key=itemgetter(1))
    hitWidth
= len(str(max([data[1] for user, data in accessTuple])))

   
for user, data in accessTuple:
        lastAccess
, hits = data
       
print 'User: %s Last Access: %s Hits: %s' % \
             
((user+",").ljust(16),
               time
.strftime("%a %d-%b-%Y %I:%M:%S %p,", lastAccess),
               str
(hits).rjust(hitWidth))

   
return accessTuple

def resolve(*args):
   
"""Resolve a sequence of IP addresses to their hostnames, if possible."""
   
if len(args) > 1:
        addrList
= args
   
else:
        addrList
= args[0]
   
for addr in addrList:
       
if isinstance(addr, tuple):
            addr
= addr[0]
       
try:
            host
= gethostbyaddr(addr)[0]
       
except (herror, IndexError):
            host
= addr
       
print 'Addr: %s Hostname: %s' % ((addr+',').ljust(16), host)

if __name__ == "__main__":
   
import sys
   
if len(sys.argv) < 2:
       
print "Usage: python track_access.py filename access_log"
   
else:
       
if len(sys.argv) > 2:
            accessLog
= sys.argv[2]
        resolve
(track(sys.argv[1], accessLog))

History