An event manager is an application that holds and manages a centralized repository of events published by users subscribed to the application. Based on various criteria, various users are notified of various events. This is a project that I got an idea around July, 2003.
An event is a time-based item that notifies an activity. Each event is identified by a name that is given to it. An event has a time span associated with it. Events can exist for a few minutes (like a meeting), can last for a whole day (like a Birthday), or can span multiple days (like a conference). Events can be one-time or may recur in periodic time intervals. An event is also associate with a place. The place is where the event is expected to occur. This is optional in some events like Birthdays, whereas mandatory in events like meetings. Events can be grouped into categories. Examples of categories include Birthday, Anniversary, Status Update, etc. Events can also be pre-defined. An example for a pre-defined event is a national holiday.
Users are individuals who use the events. Users can perform CRUD (Create, Read, Update, Delete) operations on an event based on their permissions. Each user is associated with one or more roles. There are two roles defined initially - Manager and Member. Roles can be added and removed by the user who has the role "System Administrator". The role defines the permissions that a user possesses to perform an operation on an event.
Users can be classified into groups according to their area of interest. Each group will be interested in a specific set of events that are governed by the event manager. For example, a GUI group will be interested only in events pertaining to that group like a "GUI Status Update". A group is created for every user with the same name as that of the user. This group will be the personal group for the user which can be used by the user to store personal events. A user can be a member of multiple groups.
Each user or group may subscribe to one or more events. In such cases, a notification will be sent via a communication device (like an e-mail, cell phone) etc. prior to the occurrence of the event. To facilitate this, each event is associated with one or more reminders. If a group subscribes to an event, all members of the group will be notified of the subscribed events.
The application should provide a number of views that various users can use to view the events. The mandatory views are listed below.
- Upcoming events view
- Events that occur from current time till a specified time in the future.
- Timeline event view
- Events based on day, month, and year. Each view should display only the events subscribed by the user.
All the events for a user should be exportable and importable in a standard XML format. Also pre-defined events should be importable in a standard XML format.
All information in the event manager should be persistent. The events should not get lost if the application crashes. Also, the notification engine should not be affected if the application goes down and comes up.
The response time of a view should be reasonable according to the general standards of human-computer interaction. The response time should be no greater than 1 second per query.
Since events are time-based, it is expected that the system should be up almost continuously. However, considering a maintenance window, it is required that the system should be up for 24x6.5 per week.
The following scenarios depict how the system will be used.
A calendar is created for a project. Each group in the project (GUI, DB, etc.) will log all the meeting events and other deadlines in this calendar. Respective members of each group will be notified of the events as and when they occur. The manager or the team-leader for each group will manage the events.
A calendar is created for a family. There are sub-groups in the family (Mother-side, Father-side, Frank's Family, Jane's Family, etc.). The respective family member should be notified of family events of the group that he/she belongs to.
A calendar is created for a single person. Events that are logged in this calendar will be of a personal nature (like a hair appointment, credit-card payment due, etc.).