NISWUP:
Novell Info System Web Update Package
Status of
enterprise-wide
Novell servers
on a
Web page
name of servers currently down name of servers currently up login ID of users logged into each server full name of users logged into each server amount of total user disk space on each server can block out: selected servers, selected users interfaces to: email to user, finger info of user
The package consists of four applications: the Collector, the Client, the Server, and the Applet:
| NISWUP Collector: | reads information from Novell bindary and stores info in a text file |
| NISWUP Client: | retrieves text file, filters out server and user names and sends info to NISWUP server, line by line |
| NISWUP Server: | receives information from Client, stores server information in one summary file, and user info in one file per server. |
| NISWUP Applet: | reads information from file and displays interactively on Web page. Interfaces to mail and finger, if possible. |
Collector and Client run on Windows 95 or NT machine, every XX minutes. Server is a stand-alone program, running on Web server continuously waiting for client connection. Applet is part of a Web page and runs 'on demand'
![]()
The collector is program that reads information from the Novell bindary and writes it to a text file in the following line-by-line format:
Type Description
----------------------------------------------
String Current day, month, and year
String Current hour and minute
int Number of file servers up
String First file server name
long maxDisk = max. number of bytes on user-accessible volume
long actDisk = number of bytes used on user-accessible volume
int maxUsers = max. possible users on server
int actUsers = number of currently logged in users
String user name 1
String full name of user1
String ethernet address of user1
... ... repeat for all users ...
String Second file server name
long maxDisk = max. number of bytes on user-accessible volume
long actDisk = number of bytes used on user-accessible volume
int maxUsers = max. possible users on server
int actUsers = number of currently logged in users
String user name 1
String full name of user1
String ethernet address of user1
... ... repeat for all users ......
... ..................................................
... repeat for all file servers and users ...
The Collector should have a 'timing' option so that it repeats creating this file every XX minutes. Note that this timing option is not important, as there are plenty of 'scheduling' programs around for Windows 95 and/or Windows NT. However, it would be nice if the Collector had that feature built in. The collector does not need to worry about blocking out any server or user names.
![]()
The client is a Java program that runs on the same machine that the Collector runs on. It reads the data file created by the Collector, filters out names of servers and users, if necessary, and sends the remaining information through a socket to the server. It also adds the information about any servers currently down.
The client needs to handle four files; the first three are configuration files and will remain relatively static. They can be created with any text editor; the last file is the one created by the Collector every XX minutes.
| Server Names | The name of the host where the Server runs The port through which client and server should communicate A list of all Novell file servers on the entire system |
| Blocked Server | A list of server names that should not appear on the list of UP or DOWN servers. Information for these servers is not to be transmitted, and the number of servers up and down is to be adjusted accordingly. |
| Blocked Users | A list of user login ID's that should not appear on the list of users logged in to a system, whether they are actually logged in or not. Information for these users is not to be transmitted to the server, and the number of users on each server must be adjusted accordingly. |
| Server Info | This is the file generated by the Collector. All information is to be sent to the client, with the appropriate servers and users filtered out and the numbers adjusted accordingly. |
The Client has to agree with the server on the format in which the information will be transmitted. As a minimum, client and server should exchange some identification strings. Here is a suggestion:
client: establishes connection to server
server: sends server ID string
client: if unknown ID string, client closes. Else, send password
server: if unknown password, server closes. Else, send 'ok'
client: send number of servers (blocked servers subtracted)
client: send server name
client: send server info (disk space, users, and user info)
.........
client: send 'bye'
server: closes
The Client and Server should strive to make data transmission as fast as possible. However, as a beginning, a line-by-line transmission is good enough.
![]()
The Server is a Java program running on the same Unix machine where the Web server is installed. It listens on a particular port for a client connection, and then handles the client information according to a protocol (see above for a sample protocol). The port to listen on should be a command line option.
All information received from the client should be stored first in memory. Once transmission is over, the server should create the following files, named exactly as indicated. Note that the server should try to generate each of these files as fast as possible. Maybe a 'buffered output stream' would be useful, that is not flushed too often.
The server should run as a restricted user with few rights on the system. In particular, the only area where that user has 'read/write' access should be the directory of the data file location.
The server must create the following files, in a directory named ServerData. That directory must be within the DocumentRoot of the server, but only the restricted user that the server pretends to be should have write access to it. Of course, the wmaster user need read access to those files - but not write access.
| File Name | File Format By Line |
| 00Servers.dat |
String date
String time
int number of DOWN servers (could be 0)
String name of DOWN server1 (none if all are up)
... all remaining names of down servers ...
int number of UP servers (could be 0)
String name of UP server1
long max. disk space (no leading blanks)
long act. disk space (no leading blanks)
int max. users (no leading blanks)
int act. users (no leading blanks)
... repeat for all servers ...
|
| SERVERNAME name of server in capital letters, no extension |
int number of users String user1 ID String user1 full name String user1 ethernet address ... repeat for each user ... |
Note that the server should also reset every file for each down server by setting placing a zero in the first (and only) line.
For now, don't worry about which user name the server runs under, as long as you have write access to the ServerInfo directory.
![]()
Already written - which is why it is essential that the above specifications are met exactly !
The applet consists of several objects, of which only one is essential. We will discuss all details of this applet during our next class.
![]()