#!/usr/bin/python
#
#  Copyright (c) 2001, Sean Reifschneider, tummy.com, ltd.  
#  All Rights Reserved.
#
#  Generate an HTML list of the last time each user has connected.
#
#  http://www.tummy.com/radiusContext/
#  ftp://ftp.tummy.com/pub/tummy/radiusContext/

import string, re, time, sys, getopt, shelve
try:
	import gdbm
	usedbm = gdbm
except ImportError:
	import anydbm
	usedbm = anydbm

revision = "$Revision: 1.3 $"
rcsid = "$Id: latestlist,v 1.3 2001/12/14 23:26:40 jafo Exp $"

#################################
#  process command-line arguments
shortArgs = "d:hv?"
longArgs = [
		"database=",
		"help",
		"version",
		]
databaseName = "SessionData"

#  process options, retaining program name and non-option arguments
optlist, sys.argv[1:] = getopt.getopt(sys.argv[1:], shortArgs, longArgs)
for arg in optlist:
	if arg[0] == "-d" or arg[0] == "--database":
		databaseName = arg[1]

	if arg[0] == "-h" or arg[0] == "-?" or arg[0] == "--help":
		print "usage: latestlist [<arguments>] <detail file> [...]"
		print
		print "\t[ -d | --database <file> ]       Specify database file name."
		print "\t[ -v | --version  ]              Display program version."
		print "\t[ -h | -? | --help  ]            Display this usage message."
		sys.exit(0)

	if arg[0] == "-v" or arg[0] == "--version":
		print "Version", string.split(revision)[1]
		sys.exit(0)

################################################
#  main code body, read records and process them
sessionData = shelve.open(databaseName)

list = sessionData.keys()
list.sort()
users = {}
times = {}

#  get a list of the latest users
for key in list:
	user, when = string.split(key, ":", 1)
	if len(user) < 1: user = '00-EmptyUserName'

	users[user] = ( when, sessionData[key] )

#  get a the list of times
for user in users.keys():
	when = users[user][0]
	l = times.get(when, [])
	l.append(user)
	times[when] = l

#  start writing the output file
fpCsv = open('index-lru.csv', 'w')
fp = open('index-lru.html', 'w')
title = "Least Recently Used Dial-In Report generated %s" % (
		time.strftime("%A, %B %d, %Y", time.localtime(time.time())) )
fp.write("<HTML>\n<HEAD>\n<TITLE>%s</TITLE>\n</HEAD>\n" % title)
fp.write("<BODY><H1>%s</H1>\n" % title)
fp.write("<TABLE BORDER=1>\n")
fp.write("<TR><TH>User Name</TH><TH>Latest Session<BR>End Time</TH></TR>\n")
fpCsv.write('"User Name","Latest Session End Time"\n')

#  generate the report of users
t = times.keys()
t.sort()
for key in t:
	for user in times[key]:
		userLink = '<A HREF="%s.html">%s</A>' % ( user, user )
		fp.write('<TR><TD>%s</TD><TD>%s</TD></TR>\n'
				% ( userLink, users[user][1]['Session-End-Date'] ))
		fpCsv.write('"%s","%s"\n'
				% ( user, users[user][1]['Session-End-Date'] ))

fp.write("</TABLE>\n")
fp.write("\n<P>Generated by <A HREF=\"http://www.tummy.com/radiusContext/\">"
		"radiusContext</A>\n")
fp.write("</BODY></HTML>\n")
fp.close()
fpCsv.close()
