Cover V05, I12
Figure 1
Figure 2
Figure 3
Figure 4
Figure 5


The Help Desk Management System

Mark Mellman

I needed to find a way to manage users' requests more efficiently because they exceeded my ability to remember each of the issues. We hired additional people in the help desk area, but the problem grew exponentially. The users complained that they were not kept informed on the status of their problems (usually because we forgot what their problem was). I needed a solution quickly, as the problem was becoming worse because of a rapid increase of users.

I developed a help desk system using the Web, which allowed users to request services and track the progress of their requests. The back end consisted of CGI scripts using Sybperl, which gave the help desk personnel both a list of "issues/things to do" and the capability to assign tasks to different support people. Assigning problems to specific help desk support staff and allowing users to check on the status of their request, or ticket, greatly improved the communication with the users (See Figure 1.).

Because the information is kept in a relational database, I can now get answers to questions such as: "How many open (assigned) requests exist, and what is the average number of days open for those requests per support person?," "Can I get a list of all open issues, in chronological order, with links to get a detailed status report of each issue?," "What have I been doing for the past month?," "What has everyone else in support done for the past month?," "Which user/department asks for the most support?," "Is there a pattern to our support?," and "Could we solve some of these problems with some training?."

This help desk system will work in its present state for anyone who would like to use it; however, each organization's needs are different, and changes will be required in order to maximize this system's effectiveness. The software can serve as a working example of how the Web can be used to access and modify relational databases for other purposes.


I originally put up a Web page from which the user could fill out a help desk request, or ticket, which was then mailed to the support department group. Members of the support department would then discuss who would take the ticket. It seemed more useful to keep all of the trouble tickets in a relational database, and because we are a Sybase shop, the choice was easy. For rapid development, I decided to use Sybperl for the database access. The scripts listed here are written to use Sybperl release 1.011, which is Perl version 4.036 with Sybase dblib routines. Sybperl version 2.5, which is Perl 5 with ctlib routines, is the newest release and should be backward compatible, although I have not tested it.

We implemented the help desk system at our company as follows. On our main Intranet home page, we added a link for "Computer Help Desk" ( This page has four options. The first is "Create/Submit Helpdesk Trouble Ticket" ( - if this link is selected, the user is presented with a form to fill out in which he describes the help needed. Information is stored in a database, and email is then sent to the help desk group and the user (

The second option is "Ticket lookup by name (open or closed)" ( This option allows a user to look up all tickets that she has opened or closed. Once the user is presented with a list of tickets, she has the option of looking at the details of that ticket by clicking on the ticket number, which brings up all of the information about the work performed on the ticket.

The third option is "Find status on specific Ticket" ( This link is used to look up the status of a specific ticket by its assigned number. It displays the same information as the above option, but you must supply the ticket number; it is a more direct way of getting the status of a ticket, if you know the number.

The fourth and final option on the "Computer Help Desk" page is "Systems Support Page" (, which requires a password to gain access - the default password upon installation is "Password." Once the correct password is entered, a page is displayed with the necessary links for the support people to modify the tickets. There are two options on this page. The first option is "Ticket Maintenance" (, which is used to assign tickets to help desk support people. Each time a ticket is modified by the support person, an update via email is sent to the submitter. There are also fields to keep track of time spent on each item, so a total time spent on each ticket can be calculated. The second option is "Ticket Maintenance Options" (, a link to another page with links to four reports. The first report "Open Ticket Report" ( allows a support person to display assigned tickets sorted by priority and date. This report is used as a "things to do list." The second report, "Days Open Report" (, lists all open tickets chronologically. The third, "Tickets by Owner Report" (, displays a table containing the number of open tickets for each support person and the average number of days the tickets have been open. The fourth report, "Tickets Opened per Week Report" (, displays a table with the total number of tickets opened and average tickets per week (calculated on a 5-day work week) for the past 10 weeks. There are numerous other reports with useful information that could be written. One of the reports I am currently working on displays the average amount of time taken to close a trouble ticket by a support person. Please refer to Figure 2 for a list of the scripts and their functions.

Security Concerns

I have opted to restrict the operation of this system to our Intranet at our site, because I do not feel comfortable running CGI scripts on a firewall machine that accesses a production database server. Please review CERT advisories CA96.06.cgi_example_code and CA-96.06.README for further information on cgi-bin vulnerabilities.


To install the help desk software, get the tar file (available from in /pub/sysadmin) and extract it. Move all .pl and .inc files to your cgi directory. You must have Sybperl installed and working - you can download Sybperl from:

You must create a Sybase database and a new user login that will require SA privileges. Once the database is created, you must create the database schema. This is done by executing the following command:

isql -U<username> -P<password> -ihelpdesk.ddl

<username> and <password> are those that you have created above. The file helpdesk.ddl contains all of the "create table" commands. If your database name is different, you must change the first line in the helpdesk.ddl file to the name of your database. See Figure 3 and Figure 4.

The file should be located in your cgi directory. This file is included in all of the Sybperl scripts, and contains information such as: other includes required for Sybperl to work, login information for your databases, and global variables. You should modify this file to use your site-specific information. See Figure 5 for a list of environment variables with their descriptions.

You may think that part of the schema seems inappropriately complex for the tasks that I am accomplishing. For example, I use an association table to get department names for each employee. I did that because my site already has a Human Resources database that I access. I have included the tables and entities required to get the help desk software running; however, it might be more useful to see if your site has a similar database, and make the changes for the software to use them. Although there are likely more elegant ways to accomplish many of the tasks within this package, we have found it to be reasonably functional. The system, created with tools and expertise at hand, solved the immediate problem we faced and has helped us handle user requests more efficiently.

About the author

Mark Mellman is Senior Manager of Networks and Systems at Millennium Pharmaceuticals in Cambridge, MA. Mark has 12 years of experience in the UNIX environment at companies such as EDS, National Medical Care, and Budget Rent-a-Car. He has developed applications in diverse areas including bioinformatics, financial, network automation, physician management, database, and Web pages/cgi scripts. His current interests include network security, Java programming, network topologies, large UNIX servers, and database design/administration. He can be reahed at: