Table of Contents


Section 1 - Introduction

 


Section 2 - System Requirements

Client Requirements

Server Requirements


Section 3 - Software Installation - Webserver

Included Files

Installation


Section 4 - Software Installation - Command line / Email

Overview of Operation Libraries and prerequisites Configuring Keystone.pm for your system Setting up for E-Mail interaction Using and Customizing keymail.pl

Section 5 - Post Installation Configuration


Section 6 - Keystone Basics

The Login Screen

So now you've got Keystone installed, and you can see your first login screen:

This is the start point for any Keystone session. The screen is divided up into 4 sections:

After a successful login, the main Keystone screen will appear. This is the general workspace for all functions. 98% of the work done in the system will be done within this framework. The screen has many functions available on it. Lets go through the basics.

Below is an example main screen. It is currently 'zoomed' in on a specific slip. Note that no matter where you are in Keystone, the 'outer' menus will remain the same, allowing you to jump quickly between functions:

On the left side of the screen is the Main Menu layout. The Main Menu is divided into four 'submenus' called "Slips" "Resources" "Contacts" and "Other".

Keystone menus let you view only the options you need. Normally these menus are 'collapsed' - the options underneath them are invisible. To the left of each menu item is a small character, called a Spinner, that shows whether a menu is 'collapsed' or 'expanded'. To "spin" a Spinner, click on it, and it will either show or hide the items below it.

Here's a summary:

Symbol Definition
Expand something. 'Collapsed' spinner, meaning there are more items available
Collapse something. 'Expanded' spinner, meaning the item is already expanded, but may be collapsed
Return all the way. Generally this is used to say "Go back to the beginning"
Go to the parent View the parent of this item, or, in another parlance "go up a level"
Go do something This generally takes the place of a button when doing a search or the like.

For example, if you've just logged into Keystone, you'll notice the Slips menu is 'Collapsed', and looks like this:

If you click on the 'Expand' spinner, the menu will expand, showing all the sub-options:

Clicking again on the spinner (now pointing down), will collapse the menu again.

Other controls on the standard Keystone screen:

Working with Slips

Working with Filters

Working with Contacts

Working with Resources


Appendix A - Glossary

Apache
A high performance publically available webserver. More information on Apache is available at http://www.apache.org. Apache is the suggested server software to use for hosting Keystone.

Child Slip
A slip which has a parent SID set to another slip. See 'Parent Slip' for more information on parent/children relationships in Keystone.

Contact
A person or organization within Keystone used when opening slips. The Contacts function within Keystone allows a user to enter in contact information such as name, address, company, phone extension, etc etc, and have them show up when viewing a slip. For small installations, the Contact could be individual users being supported by the Keystone installation. For larger ones, they could refer to an entire company or an installation. A Keystone user could use the Contact tag on slips to view a list, say, of all open slips for a certain Contact.

Cookie
A piece of information stored within the browser when accessing a web page. Cookies can contain any information, and are frequently used on the Internet to track an individual's use of the Web. Keystone uses a single cookie, stored in the browser, to identify that the user has logged in already - this avoids having to type a username and a password every time they want to hit a web page. Note that there is a general feeling on the Internet that cookies are bad terrible things that should be abolished. Like most technologies, cookies are only bad if they are misused. Keystone uses them for what they were intended for - uniquely identifying users whenever they access a Keystone web page, as opposed to what most people are objecting to - that being using cookies to track general use on the Internet.

Followup
A history entry on a slip. Whenever something happens that is associated to a slip, ranging from changing who the contact is for the slip, through commentary or updates, it is entered as a 'followup' to a slip. Slips can have any number of followups associated with them. The followups provide a complete 'audit trail' or history of what has happened to the slip since it's inception. An example would be a slip opened referring to a problem a user is having with a word processor. After the slip is opened, a dispatcher may reassign the slip to a certain technician. That reassignment would automatically be added as a followup showing who made the change, what was changed, and when. Later, the technician may call the contact on the slip back, and leave a message with some pertinent information. The technician would open the slip, add a followup, and type in a comment such as "called, left a message". In this way, slip history is kept up to date, and anyone looking up information on the slip can find out exactly what has happened when.

Keystone
The general term for all the software components and designs in this package. This includes all the scripts, data structures, documentation, etc.

MySQL
A public domain database server available from http://www.tcx.se. MySQL is the preferred database server software to use with Keystone.

ODBC
Open Data Base Connectivity. This is a definition written by Microsoft for a 'standard' methodology for accessing databases. PHP has support for ODBC resources within it, but the ODBC links for Keystone are just beginning to be written. If you must use an ODBC resource for your data (such as a Microsoft SQL server from an NT server), be prepared to do some work.

example, a project may be to be bringing up a new server. This project may consist of many different tasks that need to be completed, before the project can be considered done. The Keystone user would set up a slip with a title of 'Set up new server', and then make many child slips with the individual tasks, possibly all assigned to different technicians. In this way, someone could go to the parent slip and see all the child slips associated with it, and their status.

Perl
Probably the most popular public domain scripting language. Perl is primarily used on Unix systems to do a variety of tasks, from web scripts to system maintenance. Some of the support utilities for Keystone are written in Perl, and the upcoming command line / email interface will be completely written in Perl. More information is available on the newsgroup news://comp.lang.perl or on the website http://www.perl.org.

PHP
A free server-side scripting language written by the PHP Development Team. More detail on credits for PHP is available here. More information on PHP in general is at http://www.php.net. Keystone is written entirely in this language.

PTS
The predecessor to Keystone, written by Dave Belfer-Shevett starting around January, 1996. All development on PTS has stopped in favor of Keystone.

PostgreSQL
A public domainm database server available at http://www.postgresql.org. PostgreSQL is a favorite for many C programmers, but is more complex to install and maintain than MySQL. Keystone does, however, support it.

Resource
A physical item, such as a computer, monitor, etc, that has been entered into Keystone for tracking purposes. Resources have unique inventory identifiers, much like slips do. They can be 'associated' with other resources to help track movement of the item. An example would be inventories components making up a particular computer system, and associating them together. When the system is moved, all the components move as well.

SID
Slip ID. A unique number identifying a particular slip.

Slip
The basic component of data within the Keystone system. A slip can be considered an 'action item', or 'something that needs to be done'. Slips have Slip identification numbers (SID's), which are unique throughout the system. A slip contains all the information regarding itself, such as who opened it, when it was opened, who it's currently assigned to, etc. A slip can have any number of 'child slips' associated with it, as well as being a child itself (ala, having a 'parent'). Child slips and Parent slips are defined elsewhere in the Glossary.

SQL
Structured Query Language. Initially developed at IBM, SQL has become the standard way to access data within a relational database. There are many resources on the Internet for more information on how to use SQL.


Appendix B - Writing Reports

Keystone includes a powerful reporting system that is highly customizable. Reports are stored in the 'reports' directory under Keystone's install dir (eg ./keystone/reports/)

Reports are stored as '.rep' files, and contain definitions on how the report should look, including prompting the user for information, formatting output, and running PHP code before, during, and after the report.

A very simple .rep file may look like this (this is 'slipsbytech.rep', distributed with Keystone) :

	TITLE: Open slips by Technician
	VERSION: 1.1
	REQUIRES: 0.40.01
	DATASET: slips
	SQL:
	{
		select count(slips.sid), slips.currtech, status.label, status.flag
			from slips, status
			where slips.status = status.flag
			group by slips.currtech, status.label, status.flag
	}
	
	COL1:
	{
		label = Current Tech
		display = currtech
	}

	COL2:
	{
		label = Status Code
		display = label
	}
	COL3:
	{
		label = Number of slips
		display = count(slips.sid)
	}	
Field definitions

Appendix C - Keystone Internals

Keystone's internal database structure has grown in complexity since it's inception in 1998. This section attempts to document the database structures and other internals that Keystone uses.

Database Schema
Keystone uses several tables stored in a SQL server. The structures are loaded from definition files stored in the ./struct/ directory distributed with the system. The tables and their uses are:

Table nameTitleDescription of Contents
acclistAccessories List Defines how Accessories are related to parents in the Resources system.
ColumnDefRelationDescription
al_parentchar(10) -->resources.r_tag The resource this entry is desribing.
al_acctagchar(20) -->resources.r_tag The tag of the accessory associated with the 'al_parent' resource.
addressesAddresses Every contact within Keystone can have multiple Addresses assocaited with it. This table lists the addresses associated with a specific contact.
ColumnDefRelationDescription
tag char(10) -->contacts.tag The contact this entry is associated with
label char(10) A text string describing this address. 'HOME' 'WORK' etc
main char(1) A flag specifying if this Address entry is considered the 'main' one, ala will be used by default when viewing slips for this contact. (1 = yes)
address1char(40) First line of address
address2char(40) Second line of address
city char(20) City
state char(30) State
pcode char(15) Postal code
attachmentsAttachments This table is in it's infancy, but it will describe how attachments to slips are stored on the filesystem, showing who uploaded what attachment when.
ColumnDefRelationDescription
_rowid int(10) Internal counter (autoincrement)
at_sid int(10) -->slips.sid The slip that this attachment is associated with.
at_fname varchar(45) the Filename
at_tech varchar(10) -->people.login The technician who uploaded the attachment.
at_date int(11) The date of the upload
at_commentvarchar(100) Any comments
classesResource classes A list of classes a resource can be classified into.
ColumnDefDescription
cl_tag char(2) A text 'shortcut' for the class (eg MD)
cl_labelchar(15) Description of the class (eg Modem)
contactsContacts This is the master table for Contacts. It is keyed on 'tag', a unique identifier for each Contact within the system.
ColumnDefDescription
tag varchar(10) The contact tag (unique, key)
name varchar(40) The full name of the contact
companyvarchar(50) Company name
phone varchar(20) Phone number (unused?)
email varchar(50) Email address (unused?)
passwd varchar(15) A password that the contact can use to view their slips on the public interface. (not yet implemented)
ctype char(1) Contact Type. C = Customer, M = Manufacturer
commentblob A freehand comment
dictionaryTable Dictionary Occasionally the system needs more information about columns within tables in the system, such as when doing edits on raw tables in Maintenance, etc. This table contains descriptions and additional information for some of the tables and columns within Keystone. It is primarily used by 'properties' (to get english readable column names), and during edits in 'mbrowse'. It is keyed on 'dtable' (the name of the table) and 'dcolumn' (the column within that able).
ColumnDefDescription
_rowid int(10) Internal counter (autoincrement, key)
dtable varchar(15) Table name
dcolumn varchar(15) Column name
dflags varchar(80) 'Primary key'
dlabel varchar(20) The label to show to the user for this column
dheadingvarchar(10) The short heading for this
dtype char(1) Type handler. C = Char, D=Date,
ebulkBulk Data Storage Keystone allows extensions of the basic data using 'eschema' Extended Schema) definitions. This table stores the data defined in the extended schema.
ColumnDefDescription
_rowid int(10) Internal counter (autoincrement)
btable varchar(15) The table this piece of data is associated with
belementvarchar(15) The new 'column' name from eschema
bvalue varchar(80) The actual datum
browref int(10) a 'reference' pointer back to the associated table
bkeyref varchar(80) the text version of 'browref'
eschemaBulk Data Schema This table contains the extended schema definitions for the data stored in the ebulk table (qv).
ColumnDefDescription
_rowid int(10) Internal counter (autoincrement)
etable varchar(15) The table to associate with
element varchar(15) The name of the new element
etype char(1) Type data type (I = Integer, C = Char, etc)
eflags varchar(80) Any processing flags
esequenceint(2) A 'sequence' number - used to choose what order to show new fields.
elength int(2) The field size of the new element
elabel varchar(20) The text label to show the user for this element.
filtersSystem Filters Users and admins can create customized 'filters' that are applied against the current dataset (slips / resources / contacts). All filters are stored in this table.
ColumnDefRelationDescription
_rowid int(10) Internal counter (autoincrement)
uid varchar(20) -->people.loginThe user who owns this filter
fdesc varchar(40) A short description
ftable varchar(10) The table this filter is to apply to (slips, resources, etc)
fpublicint(1) Can other users other than the owner use this slip? (1=yes)
fselectvarchar(200) The actual filter statement. It is in the form of a SQL command, past the field list. Ala from the 'where...' forward
followupsSlip History Any activity on a slip creates a 'followups' entry that describes what happened. Followups can be generated by user input (someone adding a comment) or automatically (some action caused a slip to change). The followups table is keyed on f_sid, which is a relation to the 'slips' table, on the slip ID.
ColumnDefRelationDescription
_rowid int(10) Internal counter (autoincrement)
f_sid int(11) -->slips.sidThe Slip this followup is associated with
f_date int(11) The date the followup was added
f_tech varchar(10) -->people.loginThe technician responsible
f_text blob The text of the followup
f_seq int(11) A sequence number (unused)
f_public int(1) Is this followup public? (1=yes)
f_usergenint(1) Was this followup user generated (ala, not an automatic followupgenerated by the system) (1=yes)
f_time int(4) How much time was spent for this activity?
groupsGroups definitions Keystone has a concept of 'groups' where tickets can be categorized to different workgroups or topics. This file defines the groups within the system.
Note that much of the 'groups' functionality has been replaced by the 'members' table.
ColumnDefDescription
g_id varchar(10) The group ID
g_assignchar(1) Is this group 'assignable', IE should it show up in the pulldown when users are adding slips as a potential 'assignment'?
g_peoplevarchar(50) Unused
libraryFile Library Keystone allows many attachments to be uplaoded into the system. The 'library' keeps track of those attachments that should be in the public download section, such as patches, updated software, and the like. The library is not fully functional (yet. :)
ColumnDefDescription
li_fname varchar(45) Filename
li_fsize int(10) File size
li_update int(11) Date of last update
li_uptech varchar(10) Technician last updating it
li_title varchar(80) A short title
li_descripblob A description
li_public int(1) Is this item 'public', and accessible by anyone? (1=yes)
li_oname varchar(25) *** unknown? ***
membersGeneral purpose groups This table holds grouped data, using an 'id' and an 'element'. It's used for things like 'members of the admin group', where a single group 'admin' has multiple entries 'bob','frank','harry','dave'.
ColumnDefDescription
id char(10)
elementchar(20)
modulesBugtracking Modules When tracking bugs in Keystone, this table contains the modules that bugs can be assigned to.
ColumnDefDescription
mod_namevarchar(40)
mod_descvarchar(80)
peopleUser table This table contains all the users that can log in to Keystone and manipulate tables. It is the equivelent of a unix '/etc/passwd' file.
ColumnDefDescription
login char(10) The login name (key)
fullnamechar(40) Full username
passwd char(50) The users password
email char(60) the users' email address
grp char(10) The default group (deprecated)
company char(20) Company name (if appropriate)
lastlog int(11) Last time the user logged in
phonesContact Phone numbers A contact in Keystone can have multiple phone numbers associated with it. This table contains those entries.
ColumnDefRelationDescription
tag char(10) -->contacts.tagThe contact this phone number is associated with
label char(10) The label for this entry (ie HOME, CAR, CELL)
main char(1) Is this the 'main' entry? (see Addresses for details)
numberchar(50) The phone number
platformsBugtracking Platforms When using bugtracking, this table defines the platforms that show up in the pulldown menu for the bug.
ColumnDefDescription
plat_namevarchar(40)
plat_descvarchar(80)
policy
policy_grp
policy_login
Policy tables These tables are used to control the ACL system, documented elsewhere in this page.
ColumnDefDescription
pid int(11)
fullnamechar(40)
preferencesUser preferences This table is updated via the 'properties' function within Keystone. It contains things such as current display settings, etc.
ColumnDefRelationDescription
_rowid int(10) Internal counter (autoincrement)
pr_uid varchar(15) -->people.loginThe username
pr_tag varchar(30) An internal text tag identifying the property
pr_operatorvarchar(5) The operation for the tag (ie '=')
pr_value varchar(100) The value to be compared (ie 'fred')
pr_table varchar(15) The table associated with this property
productsBugtracking products A listing of products that is available when doing bugtracking. This table populates that pulldown.
ColumnDefDescription
prod_namevarchar(40)
prod_descvarchar(80)
propdispDisplay properties This table contains the information set up in the Slips->Properties pick for what columns are displayed where. It's structure is complex, but is similar to 'preferences' above. Note also that this table can contain a wide variety of data.
ColumnDefRelationDescription
_rowid int(10) Internal counter (autoincrement)
p_uid varchar(15) -->people.loginThe username these properties work with
p_flags varchar(10)
p_dataset varchar(10) Which dataset this property applies to
p_column varchar(15) Column name
p_order int(2) A 'sequence' - where in the column order should this column appear on the screen?
p_active int(1) Display this column or not? (1=yes)
p_subtablevarchar(15) Is this column in a JOIN'ed table?
rescodesBugtracking resolution codes Codes that can be used when setting how a bug was resolved
ColumnDefDescription
res_codechar(1)
res_descvarchar(40)
resourcesResources The Resources master table, keyed on 'r_tag' (a unique character identifier). Note that Resources contains Resources and Accessories. They are seperated via 'r_multi' (meaning there can be more than one Accessory in a sytem for a given resource tag.)
ColumnDefRelationDescription
r_tag varchar(10) The resource tag (unique) eg "DA-213"
r_ptag varchar(10) The parent for this resource
r_multi int(1) Can there be many of these? Ala, is this an accessory?
r_serno varchar(25) Serial number
r_mctag varchar(20) -->contacts.tagManufacturers Contact Tag
r_mcphone varchar(10) -->phones.tagManufacturers phone number for the abovecontact?
r_mcadd varchar(10) -->addresses.tagManufacturers Address for this contact
r_model varchar(20) Model
r_class char(2) -->classes.cl_tagClass
r_loc varchar(10) Location of this item
r_qoh int(5) Quantity on hand
r_desc varchar(80) Description
r_status char(1) Status
r_currtechvarchar(10) -->people.loginCurrent technician (can be used for anything, really
r_ctag varchar(20) -->contacts.tagContact tag
r_cphone varchar(10) -->phones.Contact phone
r_cadd varchar(10) Contact addresse
r_u1val varchar(50) User defined field 1
r_u2val varchar(50) User defined field 2
r_u3val varchar(50) User defined field 2
r_u4val varchar(50) User defined field 2
r_u5val varchar(50) User defined field 2
severityBugtracking severity This populates the pulldown describing the severity of a bug entered into the bugtracking section of Keystone
ColumnDefDescription
flag char(1)
labelchar(15)
slipsSlips The Slips master table. Virtually everything in the system keys back to this table, using the slip ID (sid) as the key.
ColumnDefDescription
sid int(11) slip ID (unique)
spid int(11) -->slips.sidthis slips parent ID
depend int(11) Dependent on (not used)
o_date int(11) Open date (unix timestamp)
o_tech varchar(50) -->people.loginOpen tech
c_date int(11) Close date (unix timestamp
c_tech varchar(10) -->people.loginClose tech
currtech varchar(10) -->people.loginCurrent tech
state char(1) Unused
status char(1) -->status.flagCurrent status
priority int(11) Priority
ctag varchar(20) -->contacts.tagContact name
problem varchar(80) One line description of the problem
summary blob Full text problem description
so_date int(11) Scheduled open date (unix timestamp) - used only if 'scheduling' is enabled
sc_date int(11) Scheduled close date (unix timestamp) - used only if 'scheduling' is enabled
grp varchar(10) -->groups.g_idGroup belonged to
is_public char(1) Is this slip public? (1=yes)
l_activity int(11) Last activity (unix timestamp)
l_tech varchar(50) -->people.loginLast activity tech
num_childrenint(2) Number of children (calculated column)
num_follows int(2) Number of followups (calculated column)
timespent int(5) Total time spent (calculated)
spolicy int(2) -->policy.pidAccess policy
caddlabel varchar(10) -->addresses.tagContact address
cphonelabel varchar(10) -->phones.tagContact phone number
severity char(1) -->severity.flagTicket severity
slipverBugtracking versions This table contains the bugtracking information for a specific slip. Note it's only accessed if bugtracking is enabled.
ColumnDefDescription
v_id int(11) -->slips.sidAssociated slip
v_prod varchar(40) -->products.prod_nameWhich product?
v_mod varchar(40) -->modules.mod_nameWhich module?
v_plat varchar(40) -->platforms.plat_nameWhich platform
v_foundinvarchar(20) -->versions.ver_nameWhat version was this found in?
v_target varchar(20) -->versions.ver_nameWhat version will this probably be fixed in.
v_verify varchar(20) -->versions.ver_nameWhat version was this verified fixed in?
v_resolvechar(1) -->rescodes.rescodeWhat was the final resolutioin?
stateState maintenance This table contains the information on the 'state' of the users last view. This is how Keystone 'remembers' what slip you were looking at, or how your screen was configured from the last time you logged in.
ColumnDefDescription
_rowid int(10) a unique row identifier (auto_increment)
uid varchar(20) -->people.loginThe userid (unique)
mslip int(1) Is the 'slip' menu expanded? (1=yes)
mcont int(1) Is the 'contacts' menu expanded? (1=yes)
mresource int(1) Is the 'resources' menu expanded? (1=yes)
mdataset varchar(10) Which dataset are we working with? (slips, resources, library, maint, or contacts)
mother int(11) Is the 'other' menu expanded? (1=yes)
slipzoom int(8) -->slips.sidThe slip we're zoomed in on (0 = none)
resazoom varchar(10) -->resources.r_tagThe Resource Accessory we're zoomed in on (0=none)
filters int(1) -->filters._rowidWhich filter? (0=none)
filtlist varchar(200) Unused
propertiesvarchar(200) Unused
contzoom varchar(10) -->contacts.tagWhich contact are we zoomed to? (0=none)
mlibrary int(1) Is the 'library' menu expanded? (1=yes)
libzoom varchar(30) -->library.li_fnameWhich library entry are we looking at? (blank=none)
cbgn int(4) Contacts Begin - which number contact should we start displaying? (0=beginning) (used in 'prev/next' screens)
sbgn int(4) Slips Begin - which number contact should we start displaying? (0=beginning) (used in 'prev/next' screens)
resrzoom varchar(10) -->resources.r_tagWhich resource are we zoomed on? (blank=none)
resset varchar(10) Which resource set? (res or acc)
rabgn int(4) Resources Accessory Begin - which number contact should we start displaying? (0=beginning) (used in 'prev/next' screens)
rrbgn int(4) Resources Begin - which number contact should we start displaying? (0=beginning) (used in 'prev/next' screens)
statelistList information This table has listed information for the state for the user. Examples woudl be a list of slips that are expanded.
ColumnDefRelationDescription
sl_login varchar(10) -->people.loginThe username
sl_table varchar(10) The value in 'sl_column' refers to what table?
sl_flags varchar(10) What is this entry for? ('this' refers to the entry in 'sl_column')
F = This slips followups are expanded
M = This slip is expanded in the Main view
C = This slips children are expanded
O = This slips contacts are expanded
V = This slips bugtrack versions are expanded P = This contacts phone numbers are expanded
S = This contacts slip view is expanded
A = This contacts addresses are expanded
FILT = This tables filter is this
sl_columnvarchar(10) The value being referenced (hard to explain)
statusSlip Status tags The data that goes into the 'status' pulldown.
ColumnDefDescription
flag char(1)
labelchar(15)
versionsBugtracking versions This contains information for the 'versions' pulldown for bugtracking versions.
ColumnDefDescription
ver_namevarchar(40)
ver_descvarchar(80)