Big Ideas:
- Drink Debit
- More config stuff [externalization of port #'s, etc]
- Log Levels
- Prefs
- HA mode
- SundayProtocol Errocodes
- SundayProtocol revamp
- Server options [done]
Docs, v2:
- Sunday Protocol. [done]
- SP Error code specification + error indexes. [done]
- Client Server [done]
- Finger Server [done]
- Account Server [done]
- UML [done]
- Quick class run down/summary.
Todo:
- Proof read Javadocs. They can be found here
- Tail command in java (Delegated to tomp as of 10-mar-2003)
- Edit command (already in TINI source, just enable)
- change telnet port to 50, telnet client to 23 - requires OS recompile. OS file must be less than 64k
- Write log parser (alternatively, stats collection?)
- ClientServer: Random user is poor strings (or some other easter egg =)
- DrinkMachine.lockSlot(int slot)
- DrinkMachine.lockMachine()/.unlockMachine()
- Test Mode
- Preferences(?)
- Change DrinkLogger to an interface, Write BasicDrinkLogger, NetDrinkLogger
- Implement log levels for logging.
- Write in HA mode for NetAcctServer (see bottom of page)
- (?) Add shutdown command in NetAcctServer
- Drink debit - if you've spent more than x dollars in drink, the account manager will let your account go y amount negative for z time before locking your account
- Record how much each person has spent.
- Put in iButton interface - person walks up, puts in their iButton key and presses a button.
- User prefs - let people authorize certain AIM names. Auth is skipped in lue of the authorized aim name.
- Sql backend for the account manager. Write a tool to dump out a account file.
- generic login tokens - iButton, aim, kiosk
- Kiosk login: md5 hashed ssns.
- Write a ConfigMgr class - on hold, may not be neccesary.
- Stats collection - see stats webpage layout
- Initialization manager - a class that each major sub-component reports to, specifying if it successfully initialized itself. Also would contain filenames for the config file, the slots data file, it would contain the ports for each of the services. If a sub-component fails to init, the initialization manager reports it (email? command line? log?), and if the sub-component says it was a fatel error, the system stops.
- Drop by email: you email the drink account with a specific header and drop information. Chris Conlon volunteered to write the backend python script as of 5-may-2003.
- Add ^A, ^E, ^D support to the telnet interface.
- Write a generic Telnet server interface from scratch, for fun
- Write a caching system for the temperatures and slot printouts.
- -----------
-
Externalize to config: [done]
- ClientServer port [done]
- FingerServer port [done]
- SundayServer port [done]
- NetAcctClient destination IP and port. [done]
- Logfile name [done]
- slot data filename [done]
- Max users per client. Also, max users for entire program? requires a bit of archetecture change. [done]
- max drop delay [done]
- disconnect after drop. [done]
- Enable/disable flags for ClientServer, FingerServer, SundayServer [done]
- Develope error-code specification for sunday protocol - 'ERR 203 Access Denied', et cetera [done]
- Add to sunday protocol - command 'setoption' for changing various config params from outside. Also add equivelent to ClientServer.
- In addition to 'setoption' command - 'queryoption', 'listoptions'.
Bugs:
- Drop - any slot - wait any substantial time (say, 60) -, another user tries to log in, auth doesnt come through until the drop completes.
- When the littledrink software first comes up, it does not drop correctly until 2 drops have been executed. - fixed? 5-may-2003
- noticing random '..Exception: null' in the logs for the accounting daemon. Will look into places this could be happening.
- Passwords get tokenized in NetAcctServer. [fixed]
- acct client -> acct server reconnection doenst always work. [fixed]
Website:
- Clients - SundayServer/protocol, Fury client, web client, telnet client, FingerServer. Basic howto + manual(?) [done]
- Drink background + history - kukester, grahams, candice, marius, antiduh, jt, sunday, trevor . Delegated to ruceves [done]
- FAQ - Maybe a basic summary of the website?
- Section on little drink
- Docs:
- Javadocs [done]
- Circuits + explainations
- Software overview
- Hardware overview + extensive
- Common problems } also link in admin section
- Loading slots }
- SundayProtocol [done]
- admin section
- References ( links to the tini website, etc )
- CentralProtocol (?)
- IntraProtocol (?)
- UML [done]
- Pictures
Stats website
- use MRTG-style graphs.
- Overal stats:
- aggregate cans per day/week/total.
- cans per week/day/total, broken up by slot
- money spent for aggregate and by slot.
- personal stats:
- aggregate cans per day/week/total.
- cans per week/day/total, broken up by slot.
- money spent for aggregate and by slot.
Completed:
- ClientServer: fixed for putty telnet negotiation
- Talk to marius about the new client
- Admin notes: implemented as a file in perforce
- (Temp solution) Account changes are logged by ClientServer to DrinkLogger
- IP filtering for NetAcctServer
- Split NetAcctMgr into NetAcctServer, NetAcctClient, deprecated NetAcctMgr
- BasicAcctMgr now prints better account change information.
- ClientServer now automatically fails authentication if the username or password is blank.
- Fixed bug in client server: add credits to user -> user does not exist, add? y -> <blank default password> -> NetAcctServer fails.
- Drink-specific passwords ARE NOT GOING TO BE IMPLEMENTED for the simple fact that encryption would render them pointless.
- Improved the Makefile and directory structure.
- ClientServer prints at most 5 decimal points for the temperature readings.
- FingerServer prints the IP of the host connecting in the log.
- NetAcctServer has two more commands 'bye-' and 'nop-' for disconnecting and pinging. Read documentation (ie code comments) on the reason for the extra dash.
- New webdrink client. Thanks go to Scott Douglas.
- Fix web client - does not show costs (shows counts), intermitantly skips a row - scott (uberska) is working on a new web client in php.
- forgot to call file.close() in NetAcctServer
- If the user enters a blank username, just reprompt for their username until they enter something (Bug report thanks to joe) - Fixed: If the username is blank, the client prompts again. If the password is blank, the client loops back to prompting for the username again.
- Bug: During user admin, add to a users balance. Do not enter anything, just hit return: still prompts "not a valid user"
- The NetAcctClient now monitors its connection to the NetAcctServer. It checks every 90 seconds to make sure the connection is still valid. If the connection fails it will try to reconnect it, waiting 30 seconds between attempts.
- (See above) If the underlying account manager is not ready, the ClientServer will display an error saying so and refuse logins.
- Webdrink client for littledrink - thanks again Scott.
- Little drink is satisfactorly stable and usable now. Thanks go to Bill Kuker, Lucas Morris, and Adam Coyne for their help.
- If a user enters any numeric input that is larger than 2^32, ClientServer will simply print that that number is not valid.
- Switched to StringBuffer in ClientServer.TelnetInputReader.readLine(). This should allieviate the buffer overflow if a key is held down. If it doesnt, there's not much else that can be done.
- Had to switch back to concatenating strings instead of using a StringBuffer (see above). TINI JDK 1.4 does not support StringBuffer.deleteCharAt(int) which is needed to implement CLI backspace functionality
- Gave Lucas Morris (cow) admin on drink.
- Was accidently .toLowerCase'ing passwords in SundayServerThread.
- Fixed the way slot objects are handled. When the *DrinkMachine class starts, it loads a Slot array from a SlotDataMgr instantiation. This array is used to pass out data to anybody requesting it. Also, to store the slot data, the SlotDataMgr class stores in a proprietary binary format.
- wrote a conversion utility for the old Config stuff to the new SlotDataMgr.
- Revamped slot printing in FingerServer
- Wrote up BasicDrinkMachine, put it in each of the DrinkMachine implementations and cut out all the unneccesary crap.
- Reworked how each of the client side sub-systems reports data, made use of StringBuffer instead of String concatenation.
- Refactored a large amount of extrenuous code in the various Server and DrinkMachine classes.
- Revamped the makefile.
- Cleaned NetAcctClient and NetAcctServer
- mpawl wrote a script to get the number of account debits from the accounting log file.
- Wrote a script to get the number of cans dropped total. Gets the stats from the finger server and then reads the benchmarks from the log files
- ClientServer now handles ^U to clear the line.
- Wrote yearbook article.
HA (High availabilty) mode:
As described by Joe Sunday, this is how to have the NetAcctServer operate much like a high availabilty service would run on a server.
When the service starts, it writes a PID file. Conversely, when the service is shutdown through normal methods, the PID file is removed.
Next, a small script runs, say every 5 minutes, from cron. This script checks two files:
- A nostart file: If this file exists, the script does nothing. This is useful for when the software needs to be worked on temporarily.
- The PID file: if the PID file is not there, then the service is restarted. If the PID file is there, but does not point toward the correct process, then the service is restarted.
Last updated: 24-July-2003