Abstract:
A method and apparatus for monitoring at least one network connected device (monitored device) using a controller is disclosed. More specifically, a method of modifying monitored devices supported by the monitoring system includes updating information stored in a system support database (SSD) if the information stored in the SSD is insufficient to support the monitored device. The updating step is performed without reprogramming the monitoring system, thereby allowing flexibility in modifying the monitored devices supported by the monitoring system.

Description:
CROSS REFERENCES TO RELATED APPLICATIONS  
       [0001]    This application is related to the following commonly owned co-pending applications: U.S. patent application Ser. No. 10/068,861, filed Feb. 11, 2002, entitled “Method and Apparatus Utilizing Communication Means Hierarchy to Configure or Monitor an Interface Device”, U.S. patent application Ser. No. 10/142,989, filed May 13, 2002, entitled “Verification Scheme for Email Message Containing Information About Remotely Monitored Devices”; U.S. patent application Ser. No. 09/756,120, filed Jan. 9, 2001, entitled “Method and System of Remote Support of Device Using Email,” the disclosures of which are herein incorporated by reference in their entirety. The present utility application also claims the benefit of U.S. Patent Application Serial No. 60/359,648 filed Feb. 27, 2002 entitled “Architecture of the Remote Monitoring of Devices Through the Local Monitoring Station and Sending to the Central Station in Which the Multiple Vendors Are Supported” the disclosure of which is also incorporated herein by reference in its entirety. 
     
    
     
       BACKGROUND OF INVENTION  
         [0002]    1. Field of Invention  
           [0003]    The present invention relates to monitoring, configuration or installation of hardware on a computer system.  
           [0004]    2. Discussion of the Background  
           [0005]    In general, computer systems include hardware and software. Hardware is the actual physical computing machinery, while software is the list of instructions to operate the hardware. Typically, computer systems will include a variety of hardware devices that interface with one another. When hardware devices interface with one another, it is necessary for the software which operates the hardware to be configured to allow communication between the hardware devices, so that the hardware devices can operate cooperatively. It is also desirable for hardware devices to be monitored. For the purposes of discussion, a hardware device that is configuring or monitoring will be referred to as a controlling device. Likewise, for the purposes of discussion, the hardware device that is being configured to operate cooperatively or being monitored by the controlling device will be referred to as an interfacing device.  
           [0006]    When hardware devices initially interface with one another, it is common for the software that operates the devices to remain unconfigured to allow cooperative operation. Accordingly, a significant part of installing computer hardware devices collectively configure the software. In some arrangements, a user must configure the computer hardware manually by opening the computer hardware and physically setting jumpers or dip switches. In still some further arrangements, the installation process includes a user loading software from a floppy disk to configure the hardware devices. There have also been attempts for computer hardware devices to include software that can automatically configures hardware devices. There are, however, some apparent disadvantages and deficiencies with respect to the above-identified approaches.  
           [0007]    One disadvantage is that automatic hardware installation software is limiting in its ability to adapt to new devices or to new manufacturers that were not specifically programmed into the software. In the prior art, if the controlling device does not recognize the specific model of the interfacing device, automatic configuration is not possible. In other words if the controlling device is not programmed to anticipate the model of an interfacing device, then automatic hardware configuration will not be successful. In such a circumstance, a user will have to manually install the configuration communication means to the hardware devices.  
           [0008]    Another disadvantage of the prior art is that the controlling device is unable to partially configure hardware devices if the particular model of the interfacing device cannot be identified. In other words, if a controlling device cannot identify a specific model of the interfacing device, then the interfacing device will not be configured to function cooperatively. This results in the unconfigured interfacing device being inoperable and essentially useless.  
           [0009]    It is desirable for hardware devices located on a network to be monitored for maintenance, usage, or other purposes. However, it has been difficult for a controlling device to communicate with various interfacing devices on a network given the different communication means between manufacturers and models of interfacing devices. These disadvantages prevent network administrators from obtaining crucial information about the performance and efficiency of interfacing devices on a network.  
         SUMMARY OF THE INVENTION  
         [0010]    The present invention relates to a method and apparatus for modifying devices supported by a monitoring system using a system support database. More specifically, a method of modifying monitored devices supported by the monitoring system includes updating information stored in a system support database (SSD) if the information stored in the SSD is insufficient to support the monitored device. The updating step is performed without reprogramming the monitoring system, thereby allowing flexibility in modifying the monitored devices supported by the monitoring system.  
           [0011]    In exemplary embodiments of the present invention, a plurality of databases are used to configure devices with systems. These embodiments are advantageous, as valuable computer resources are used during the initialization of the devices with a system while preserving the computer resources during system operation. For example, a system may utilize two separate databases when a device is being configured. The first database (i.e. a System Configuration Database) stores device information for devices that have already been configured to the system and wherein operational status information of the devices is stored as the devices are being monitored by the system. Such device information may include the manufacturer name, and model name while operational status information may include the page count and toner level.  
           [0012]    The device information stored in the first database is utilized during the initialization of the system while the status information stored in the first database is accumulated during the system operation. The first database, therefore, will be large since it will contain status information. Consumption of computer resources is, however, minor since the device information is used during initialization while status information is only added when the system is in operation.  
           [0013]    In an exemplary embodiment of the present invention, the system of the present invention also utilizes a second database (i.e. a System Support Database). This second database may be relatively large as it would include data pertaining to a plurality of devices. When a device is initialized with a system, and the system is not yet configured to interface with the device, then the first database (i.e. System Configuration Database) can be updated using the information from the second database (i.e. System Support Database) so that the device can interface with the system. Due to the large amount of information stored, querying the second database is not only time consuming but also uses a large amount of valuable computer resources. Once, the critical information (i.e. protocol) relating the device is updated in the first database with information from the second database, only the first database is utilized.  
           [0014]    In one aspect, the present invention provides in a network based system having a monitoring system and a plurality of monitored devices communicatively coupled via a network, the monitoring system communicatively coupled to first and second databases, a method of modifying monitored devices supported by the monitoring system. The method includes determining if the monitoring system is configured to interface with a monitored device among said plurality of monitored devices; obtaining configuration information from the monitored device if the monitoring system is not configured to interface with the monitored device; determining if the monitored device is supported by the monitoring system using information stored in the second database; and updating information stored in the second database if said information is insufficient to support the monitored device, the updating step is performed without reprogramming the monitoring system, thereby allowing flexibility in modifying the monitored devices supported by the monitoring system.  
           [0015]    The method further includes updating configuration information, for the monitored device, stored in the first database with information from the second database to enable the monitoring system to interface with the monitored device. The step of updating information stored in the second database includes updating manufacturer information for monitored devices, the manufacturer information stored in a first table of the second database; updating model information for the monitored devices, the model information stored in a second table of the second database. The step of determining if the monitored device is supported by the monitoring system is performed by reading information stored in the first and second tables.  
           [0016]    The method further includes storing in the first table information related to an enterprise object identifier for a manufacturer of a monitored device; an object identifier used for determining a model name of the monitored device; and an object identifier for determining a unique identifier of the monitored device. The second table is preferably stored with model information in association with corresponding manufacturer information for a monitored device. The second database is a system support database.  
           [0017]    The step of obtaining configuration information from the monitored device includes identifying at least one of (i) manufacturer, (ii) model, and (iii) unique identifier of the monitored device. The configuration information is preferably only used during initialization of the monitoring system to identify a monitored device that requires monitoring. The step of determining if the monitoring system is configured to interface with the monitored device includes querying the first database with at least one of manufacturer, model, and unique identifier of the monitored device.  
           [0018]    The step of determining if the monitoring system is configured to interface with the monitored device comprises querying the monitored device with data stored in the first database. The first database is a system configuration database and comprises information for enabling communication between the monitoring system and the monitored device; and status information related to the monitored device, the status information being added after initialization of the monitoring system.  
           [0019]    The step of determining if the monitored device is supported by the monitoring system includes obtaining status information of the monitored device if the manufacturer and model of the monitored device are supported by the monitoring system. The monitored device includes hardware or software components.  
           [0020]    In another aspect, the present invention provides in a network based system having a monitoring system and a plurality of monitored devices communicatively coupled via a network, the monitoring system communicatively coupled to first and second databases, an apparatus for modifying monitored devices supported by the monitoring system includes means for determining if the monitoring system is configured to interface with a monitored device among said plurality of monitored devices; means for obtaining configuration information from the monitored device if the monitoring system is not configured to interface with the monitored device; means for determining if the monitored device is supported by the monitoring system using information stored in the second database; and means for updating information stored in the second database if said information is insufficient to support the monitored device, the updating step is performed without reprogramming the monitoring system, thereby allowing flexibility in modifying the monitored devices supported by the monitoring system.  
           [0021]    In yet another aspect, the present invention provides in a network based system having a monitoring system and a plurality of monitored devices communicatively coupled via a network, the monitoring system communicatively coupled to first and second databases, a computer program within a computer useable medium comprising instructions for determining if the monitoring system is configured to interface with a monitored device among said plurality of monitored devices; instructions for obtaining configuration information from the monitored device if the monitoring system is not configured to interface with the monitored device; instructions for determining if the monitored device is supported by the monitoring system using information stored in the second database; and instructions for updating information stored in the second database if said information is insufficient to support the monitored device, the updating step is performed without reprogramming the monitoring system, thereby allowing flexibility in modifying the monitored devices supported by the monitoring system.  
           [0022]    In a further aspect, the present invention provides a network based system having one or more devices communicatively connected to a network, the system comprising a monitoring system connected to the network for monitoring said one or more devices; first and second databases communicatively coupled to the monitoring system, wherein information stored in said second database is updated if said information is insufficient to support the at least one device; and wherein configuration information in said first database is updated with information stored in the second database for enabling the monitoring system to interface with the at least one device, thereby allowing flexibility in modifying the devices supported by the monitoring system.  
           [0023]    In yet another aspect, the present invention provides in a network based system, a method of modifying monitored devices supported by a monitoring system, comprising providing first and second databases, said first and second databases communicatively coupled to the monitoring system; updating information stored in the second database if said information is insufficient to support a monitored device, the updating step is performed without reprogramming the monitoring system, thereby allowing flexibility in modifying the monitored devices supported by the monitoring system.  
           [0024]    An advantage of the present invention includes the ease with which to change the devices that the system supports by modifying the database rather than the system. 
       
    
    
     BRIEF DESCRIPTION OF THE DRAWINGS  
       [0025]    A more complete appreciation of the present invention and many of the attendant advantages thereof will be readily obtained as the same becomes better understood by reference of the following detailed description when considered in connection with the accompanying drawings.  
         [0026]    [0026]FIG. 1 is a diagram illustrating the network relationship of device  2  and system  8 , in an exemplary embodiment of the present invention.  
         [0027]    [0027]FIG. 2 is an exemplary flowchart illustrating the steps involved to determine if system  8  is configured to interface with device  2 ;  
         [0028]    [0028]FIG. 3 is an exemplary flow chart illustrating the steps involved to determine if system  8  is configured to interface with device  2  using the System Configuration Database  6 ;  
         [0029]    [0029]FIG. 4 is an exemplary illustration of a hierarchical approach to determine if device  2  is supported by system  8 ;  
         [0030]    [0030]FIG. 5 illustrates software objects in an exemplary embodiment of the present invention;  
         [0031]    [0031]FIG. 6 illustrates an exemplary sequence diagram when the system is initialized to obtain information about object identifiers used to identify the manufacturer, model, and unique identifier, and to obtain information about the manufacturers and models supported by the system;  
         [0032]    [0032]FIG. 7 illustrates an exemplary sequence diagram for creating device objects to represent the monitored devices during initialization;  
         [0033]    [0033]FIG. 8 shows the sequence diagram for executing the setAgent( )  122  function of VendorModel  118 ;  
         [0034]    [0034]FIG. 9 is an exemplary flowchart for the setAgent( ) function of VendorModel;  
         [0035]    [0035]FIG. 10 exemplifies a sequence diagram when the system obtains information used to obtain the status information for the specific manufacturer and model of the monitored devices;  
         [0036]    [0036]FIG. 11 shows the flowchart for the createDevice( ) function of DeviceFactory;  
         [0037]    [0037]FIG. 12 shows the sequence diagram for executing the monitorStatus( ) function;  
         [0038]    [0038]FIG. 13 shows the sequence diagram for executing the getStatus( )  214  function of Device  210 ;  
         [0039]    [0039]FIG. 14 shows the tables of a database having information about the manufacturers and models supported by the system;  
         [0040]    [0040]FIG. 15 shows an example of the contents in the tables of the database as described in FIG. 14; and  
         [0041]    [0041]FIG. 16 shows the class diagram for the ODBC2 package. 
     
    
     DETAILED DESCRIPTION OF THE PREFERRED EMBODIMENTS  
       [0042]    [0042]FIG. 1 is a diagram illustrating the network relationship of device  2  and system  8 . Device  2  interfaces with system  8  through network  4 . System  8  is coupled to System Configuration Database (SCD)  6  and System Support Database (SSD)  10 . Network  4  can be any type of communication structure that allows device  2  and system  8  to exchange data. For example, network  4  could be either a Wide Area Network (WAN), Local Area Network (LAN), or a simple cable physically connecting the device  2  and system  8 . It will be appreciated that the present invention is not limiting of the type of networks, and that other networks may be used to enable communication between device  2  and system  8 .  
         [0043]    System Configuration Database  6  includes information of first and second types. The first type of information is configuration or device information, such as, for example, manufacturer name, model name, IP address, company name, contact person&#39;s name, and contact person&#39;s e-mail address to name a few. The configuration information is used only during the initialization of system  8  in order to determine which devices need to be monitored. The System Configuration Database  6 , however, does not include information about what protocol to use to communicate with the device  2 . The SCD  6 , however, includes information necessary for communication, such as for example, the IP address. Therefore, SCD  6  contains information that is used to determine if system  8  is configured to interface with device  2 . The second type of information stored in SCD  6  is status information. Examples of status information include page count, error status, and toner level. Status information is added to the database (SCD  6 ) after the initialization of the system  8  when the system  8  is monitoring devices connected to the network  4 . The System Configuration Database (SCD  6 ) is not directly dependent on the System Support Database (SSD  10 ).  
         [0044]    The SSD  10  includes information about manufacturers and models that are supported by the system  8 . Though this system can support all devices irrespective of manufacturer or model, the amount of status information obtained from the device  2  depends upon manufacturers and models that are supported by the SSD  10 . If the manufacturer and model are supported by SSD  10 , then detailed status information may be obtained from the device  2 . Thus, the SSD  10  determines what type of status information is stored in the System Configuration Database (SCD  6 ).  
         [0045]    Information from both SCD  6  and SSD  10  are used to create device objects to represent the devices being monitored. Although a single device  2  is shown to be connected to the network  4 , it will be appreciated that a plurality of devices, that need to be monitored, may be connected to network  4 . The device objects allow the system  8  to communicate with the device  2  and determine what information to obtain from the devices.  
         [0046]    [0046]FIG. 2 is an exemplary flowchart illustrating how it is determined if system  8  is configured to interface with device  2 . In block  12 , the system  8  or some other device that is part of the network  4  determines if the system  8  is configured to interface with device  2 . For example, it is determined whether the system  8  is programmed with software that allows the system  8  to communicate with device  2 . In other words, system  8  uses a protocol that is compatible with device  2 , such that system  8  and device  2  can exchange data and operate cooperatively. In determining if the system  8  is configured to interface with device  2 , the system  8  also obtained configuration information from the device  2  and determines if device  2  is supported by the system  8 .  
         [0047]    In block  14 , if it is determined that system  8  is configured to interface with device  2 , then in block  20 , a communication protocol is established between system  8  and device  2 , based on information stored in System Support Database  10 . In block  22 , the System Configuration Database (SCD  6 ) is updated with the configuration data obtained when determining if the system  8  was configured to interface with the device  2 . However, if it is determined that the system  8  is not configured to interface with device  2  in block  14 , then the process ends and device  2  will not interface with system  8 .  
         [0048]    [0048]FIG. 3 is an exemplary flow chart illustrating how it is determined if system  8  is configured to interface with device  2  using the System Configuration Database (SCD  6 ). In block  24 , the device  2  is queried using a standard communication protocol to determine its manufacturer, model, and/or the unique identification.  
         [0049]    In block  26 , if the manufacturer, model, or unique identification of the device is determined then the process proceeds to block  36 , otherwise, the process proceeds to block  28 . In block  36 , it is determined that the system is configured to interface with the device  2 .  
         [0050]    In block  28 , the device  2  is queried using data stored in the System Configuration Database  6  to determine the manufacturer, model, and/or unique identification of device  2 . In block  34 , it is determined if the manufacturer, model, and/or unique identification of the device  2  was identified in block  28 . If the determination of block  34  is positive, then it is determined in block  36  that the system is configured to interface with the device  2 . If the determination of block  34  is negative, then it is determined in block  38  that the system is not configured to interface with device  2 .  
         [0051]    In querying the device  2  for the manufacturer and model information in blocks  24  and  28 , the manufacturer and model of the device is checked with the System Support Database  10  to determine if the manufacturer and model is supported by the system  8 . However, it does not affect whether or not the system  8  is configured to interface with the device  2 .  
         [0052]    The System Support Database  10  is used to determine what status information is to be obtained from the device  2  when it is being monitored by the system  8 . A device object for the device  2  includes information from SSD  10  about what status information to obtain. If the manufacturer and model of the device is not supported in the SSD  10 , then the device object will obtain status information that is available to all devices connected to the network  4 . If the manufacturer is supported in the SSD  10  but the model of the device is not supported, then the device object will obtain status information that is available for all devices of a manufacturer. If the manufacturer and the model are supported, then the device object will obtain status information that is available for all devices of the model.  
         [0053]    [0053]FIG. 4 is an exemplary illustration of a hierarchical approach to determining if device  2  is supported by system  8 . In blocks  56  and  58 , it is determined if the manufacturer of the device  2  is supported by the system  8 . If the manufacturer is not supported, then in block  60  it is determined that the device is to be configured to use a generic protocol. If the manufacturer is supported, then the process proceeds to block  62 .  
         [0054]    In blocks  62  and  64 , it is determined if the model of device  2  is supported by the system  8 . If the model is not supported, then it is determined in block  66  that the device  2  is to be configured using a manufacturer specific protocol. If the model is supported, then it is determined in block  68  that the device  2  is to be configured using a model specific protocol.  
         [0055]    [0055]FIG. 5 illustrates software object in an exemplary embodiment of the present invention. The software object Send Interface Manager  70  interfaces directly or indirectly with software objects DataTransfer  74 , ODBC-1  72 , DeviceFactory  76 , VenderModel  78 , ODBC-2  84 , SNMP  80 , and Device  82 .  
         [0056]    Table 1 illustrates the functions of the ODBC-1  72 .  
                   TABLE 1                            updateConfig   Before this function is called, the calling function should not replace the           manufacturer and model entries if get functions return null string from           VendorModel package. This function updates the device information           database of the current record in the ODBC. This function is most           efficient when the getConfig below is called initially. First, this function           checks if IP address is same at the 0DBC. If IP addresses are not the           same, the record with correct IP address is obtained from the database.           Then, the other fields are copied and the record is updated.       getConfig   This function obtains a map from ODBC for the device information in a           given format. The function returns true if there is data returned, false if           there is no more data.       saveStatus   This function saves the status information into the ODBC. The function           returns true when saving is successful, false otherwise.                  
 
         [0057]    Table 2 illustrates the functions of DeviceFactory  76 .  
                   TABLE 2                            createDevice   This function creates the device of the specification in the           Device Factory. The function returns a pointer to the           created device if the creation is successful, 0 otherwise.                  
 
         [0058]    Table 3 illustrates the functions of DataTransfer  74 .  
                   TABLE 3                            startSend   This function triggers the Data Transfer to prepare for sending           the data specified in the infoType. The functionreturns the           EerrorCode.       dataSend   This function in the Data Transfer sends the received data to           the appropriate destination after properly formatting,           encrypting and encoding. The function returns the           EerrorCode.endSend This function in the Data Transfer ends           the data sendin The function returns the EerrorCode.                  
 
         [0059]    Table 4 illustrates the functions of Device  82 .  
                   TABLE 4                            getStatus   This function obtains status information from a device.           The function returns true when the status is returned,           false when status could not be obtained. This function           resets the variable that keeps the error status before           returning.       checkErrorStatus   This function triggers the device to check the error           status to be saved internally.                  
 
         [0060]    Table 5 illustrates the functions of ODBC-2  84 .  
                   TABLE 5                           getManuflnfo   This function obtains the name of the manufacturer,           its vendor OID,the OID where the model information is stored,           and the OID where the unique ID can be obtained. This function           returns true when the data is returned, false when no more data is           available and all the strings are set to null strings.       getSupportedModel   This function obtains the Manufacturer and supported           model.There may be more than one instances of the same           manufacturer,but the model is unique for the given manufacturer.           This function returns true when the data is returned, false when no           more data is available and all the strings are set to null strings.       getManufStatusInfo   This function obtains the infoType and OID associated with the           infoType for the given Manufacturer. The obtained infoType           and OID pair is supported by all the devices from the given           manufacture.This function returns true when the data is returned,           false when no more data is available and all the strings are           set to null strings.       getModelStatuslnfo   This function obtains the infoType and OID           associated with the infoType for the given Manufacturer and model.           This function returns true when the data is returned, false           when no more data is available and all the strings are set to           null strings.                  
 
         [0061]    Table 6 illustrates the functions of SNMP  80 .  
                   TABLE 6                           setAgent   This function sets the IP address of the device to be contacted.       getManufacturer   This function gets the manufacturer at the IP address. If the manufacturer           is obtained, the function returns true. If the error is detected in the           process, the function returns false.       getModel   This function gets the model of the device. If the model is obtained,           including the null string, the function returns true. If the error is detected           in the process, the function returns false.       getUniqueId   This function returns the unique ID from device. If the unique ID is           obtained, including the null string, the function returns true. If the error is           detected in the process, the function returns false.                  
 
         [0062]    VendorModel  78  is responsible for obtaining information about the manufacturer and model of the monitored device. This software object obtains the manufacturer, model, and unique identifier of the monitored device. The class CVendorModel of VendorModel  78  uses information from the database to determine the manufacturers and models supported by the system. The class also uses information from the database needed to obtain the model and unique identifier from the monitored device. The public and private functions of CVendorModel are shown in Table 7 below.  
                       TABLE 7                           Function Name   Description                   Public   CVendorModel( )   Constructor           ˜CVendorModel( )   Destructor           bool setAgent(std::string&amp; in_sIP)   Creates an SNMP session for the               monitored device and obtains the               manufacturer, model, and unique               identifier of the device           bool getManufacturer(std::string&amp;   Returns the manufacturer of the device           out_sManufacturer)           bool getModel(std::string&amp; out_sModel)   Returns the model of the device           bool getUniqueID(std::string &amp; out_sID)   Returns the unique identifier of the               device       Private   void setVectorAndMapAttributes( )   Constructs a vector containing               information needed to determine               manufacturer, model, and unique               identifier of the device and a map               containing information about               manufacturers and models supported by               the system           void obtainManufacturer( )   Obtains information about the               manufacturer from the device           void obtainModel( )   Obtains information about the model               from the device           void obtainUniqueID( )   Obtains information about the unique               identifier from the device           void convertToAllUpper(std::string&amp;   Converts the input string to all upper           inOut_sString)   case           std::string convertToHex(std::string&amp;   Converts the input string to a           in_sString)   hexadecimal string                  
 
         [0063]    Table 8 below shows the attributes of the CVendorModel class that are used in the above functions.  
                       TABLE 8                       Type   Attribute Name   Description                   CSNMP   m_SNMP   This attribute member is used to implement               an SNMP session for the monitored               devices.       std::vector&lt;Manufacturer   m_ManufacturerAndModelInfo   This attribute member is a vector that       AndModelInfo&gt;   Vector   contains information about the object               identifiers used to identify the               manufacturer, model, and unique identifier               of the monitored devices.       std::map&lt;std::string,   m_ManufacturerModelMap   This attribute member is a map that lists all       std::vector&lt;std::string       the models of a given manufacturer in the       &gt;&gt;       vector that the system supports.       std::string   m_sManufacturer   This attribute member represents the               Manufacturer of the monitored device.       std::string   m_sModel   This attribute member represents the Model               of the monitored device.       std::string   m_sUniqueID   This attribute member represents the unique               identifier of the monitored device.       bool   m_bReturn   This attribute is set to true if SNMP session               is successful in the setAgent( ) function;               false otherwise.       std::string   m_sCurrentModelOID   This attribute member represents the object               identifier used to find information about the               model of the monitored device.       std::string   m_sCurrentUniqueOID   This attribute member represents the object               identifier used to find information about the               unique ID such as a serial number of the               monitored device.                  
 
         [0064]    ManufacturerAndModelInfo in m_ManufacturerAndModelInfoVector has the following structure:  
                                                   struct ManufacturerAndModelInfo {            std::string m_sManufacturer;            std::string m_sEnterpriseOID;            std::string m_sModelOID;            std::string m_sUniqueOID;           };                      
 
         [0065]    m_sManufacturer is the name of the manufacturer. m_sEnterpriseOID is the enterprise object identifier associated with the manufacturer. The enterprise object identifier is unique to a manufacturer. m_sModelOID is the object identifier that can be used to find the model name of the device. m_sUniqueOID is the object identifier that can be used to find the unique identifier of the device. The unique identifier can be the serial number or the MAC address of the device.  
         [0066]    DeviceFactory  76  is responsible for creating a device object representing the monitored device. DeviceFactory  76  makes sure the device object knows what status information it needs to obtain. CDeviceFactory is the only class in DeviceFactory  76  package. The public and private functions of CDeviceFactory are shown in Table 9 below.  
                       TABLE 9                           Function Name   Description                   Public   CDeviceFactory( )   Constructor           ˜CDeviceFactory( )   Destructor           virtual CDevice* createDevice(std::string&amp;   This function creates a device object           in_sIP, CSNMP &amp; in_SNMP, std::string &amp;    representing the monitored device           in_sManufacturer, std::string &amp; in_sModel,   and passes into it a vector containing           std::string &amp; in_sUniqueID)   information about what status               information to obtain.       Private   void setGenericDeviceVector( )   This function sets a vector to contain               information used to obtain status               information that is obtainable from               all monitored devices.           void setManufacturerVectorMap( )   This function sets a map to contain               information used to obtain status               information that is obtainable from               all monitored devices of the specific               manufacturers.                  
 
         [0067]    Table 10 below shows the attributes of the CDeviceFactory class that are used in the above functions.  
                       TABLE 10                        Type   Attribute Name   Description                   CSupportODBC   m_SupportODBC   This attribute               member               represents an               object used               to access information               in the               database that is needed to obtain               status information of the monitored devices.       std::vector&lt;std::pair&lt;info   m_GenericDeviceVector   This attribute               member contains information       Type, std::string&gt;&gt;       used to obtain status               information               for monitored               devices of all manufacturer and model.       std::map&lt;std::string,   m_ManufacturerVectorMap   This attribute member               contains information       std::vector&lt;std::pair&lt;info       used to obtain status information for       Type, std::string&gt;&gt;       monitored devices of a given manufacturer.       &gt;                  
 
         [0068]    infoType is a number used in m_GenericDeviceVector and m_ManufacturerVectorMap used to represent a specific type of status information. For example,  503  represents a NoPaper condition for the monitored device and  601  represents the page life count of the monitored device.  
         [0069]    Device  82  represents a monitored device. It accesses status information of the monitored device. Status information includes information such as error status, page count, toner cartridge level, and alerts. CDevice is the only class in Device  82  package. The public functions of CDevice are shown in Table 11 below.  
                       TABLE 11                           Function Name   Description                   Public   CDevice (std::string&amp; in_sIPaddress, CSNMP&amp;   Constructor           in_SNMP, std::string&amp; in_sManufacturer,           std::string&amp; in_sModel, std::string&amp;           in_sUniqueID)           ˜CDevice ( )   Destructor           bool getStatus(std::map&lt;infoType, std::string&gt; &amp;   This function obtains the status           out_StatusInformation)   information of the monitored device           bool checkErrorStatus( )   This function gets the error status of               the monitored device           bool setNumOID Vector   This function sets the vector that will           (std::vector&lt;std::pair&lt;infoType, std::string&gt;&gt; &amp;    be used to obtain the status           in_Vector)   information from the monitored               device via SNMP.                  
 
         [0070]    Table 12 below shows the attributes of the CDevice class that are used in the above functions.  
                       TABLE 12                       Type   Attribute Name   Description                   std::string   m_sIPAddress   This attribute member is the IP address of               the monitored device       CSNMP &amp;   m_SNMP   This attribute member is used to implement               an SNMP session for the monitored devices.       std::string   m_sManufacturer   This attribute member is the manufacturer of               the monitored device.       std::string   m_sModel   This attribute member is the model of the               monitored device.       std::string   m_sUniqueID   This attribute member is the unique ID) for               the monitored device.       char   m_cError   This attribute member is to keep the error               bits representing the error status of the               monitored device       std::vector&lt;std::pair&lt;i   m_NumOIDVector   This vector stores information that will be       nfoType, std::string&gt;&gt;       used to obtain the status information from               the monitored device via SNMP.                  
 
         [0071]    [0071]FIG. 6 illustrates an exemplary sequence diagram when the system is initialized to obtain information about the object identifiers used to identify the manufacturer, model, and unique identifier and to obtain information about the manufacturers and models supported by the system. VendorModel  86  interacts with ODBC2  88  to obtain this information. ODBC2  88  provides an interface to the database to obtain information requested of it by VendorModel  86 . VendorModel  86  calls the function getManufInfo( )  90  of ODBC2  88  to obtain the object identifiers used to identify the manufacturer, model, and unique identifier of the monitored devices from the database. This information is stored in the vector m_ManufacturerAndModelInfoVector described in Table 8 above. getManufInfo( )  90  is called multiple times until all the object identifiers for all manufacturers supported by the system are read in from the database. Then VendorModel  86  calls the function getSupportedModel( )  92  of ODBC2  88  to obtain the manufacturer and model supported by the system from the database. This information is stored in the map m_ManufacturerModelMap described in Table 8 above. getSupportedModel( ) is called multiple times until all the models supported by the system are read in from the database. To remove, modify, or add the manufacturers and models supported by the system, the only change necessary is in the database which stores information about the supported manufacturers and models. No change needs to be done to the system when the manufacturers and models supported by the system changes. The information is read in from the database during initialization.  
         [0072]    [0072]FIG. 7 illustrates an exemplary sequence diagram for creating device objects to represent the monitored devices during initialization. Initially, the system  8  (FIG. 1) attempts to establish communication with device  2 . If the system  8  cannot be configured to interface with device  2 , configuration information, such as manufacturer, model, and a unique identifier from device  2  is obtained. In the process of determining the configuration information, a determination is made to find out if the device  2  is supported by the system  8  using information from System Support Database (SSD  10 ). A device object is created using information from the SSD  10 , thus establishing a communication protocol between the system  8  and the device  2 —irrespective of whether or not the device is supported by the system  8 . Subsequently, configuration information for the device  2  is updated in the System Configuration Database (SCD  6 ). SendInterfaceManager  94  calls getConfig( )  102  of ODBC  96 . ODBC  96  provides an interface to the database to obtain configuration information of the monitored devices. The configuration information includes manufacturer name, model name, and IP address of the monitored device, the name, phone number, and email address of the contact person who is responsible for the monitored device. The database contains the configuration information of all devices that are to be monitored. However, not all of the devices in this database may be supported by the system as specified in the database associated with ODBC2  84  of FIG. 5.  
         [0073]    SendInterfaceManager  94  calls setAgent( )  104 , creating an SNMP session with the monitored device to obtain the manufacturer, model, and unique identifier of the device. More details of this function are provided in FIG. 8. SendInterfaceManager  94  calls getManufacturer( )  106 , getModel( )  108 , and getUniqueID( )  110  of VendorModel  98  to get the manufacturer name, model name, and unique identifier of the monitored device. SendInterfaceManager  94  calls createDevice( )  112  of DeviceFactory  100  to create a device object for the monitored device. The device object will be used by SendInterfaceManager  94  to obtain status information of the monitored device. SendInterfaceManager  94  calls updateConfig( ) of ODBC  96  to update the configuration information in the database.  
         [0074]    All the steps in the sequence are repeated until all the monitored devices in the database are obtained. A device object will be created for each of the monitored devices. SendInterfaceManager  94  will maintain each of the device objects.  
         [0075]    [0075]FIG. 8 shows the sequence diagram for executing the setAgent( )  122  function of VendorModel  118 . SendInterfaceManager  116  calls setAgent( )  122  of VendorModel  118 . VendorModel  118  calls setAgent( )  124  of SNMP  120 . This function sets up an SNMP session between the system and the monitored device. VendorModel  118  calls its own function obtainManufacturer( )  126  to obtain the manufacturer name of the monitored device. In the function obtainManufacturer( )  126 , VendorModel  118  calls getNextStringValueForOID( )  128  of SNMP  120  to obtain the enterprise object identifier via SNMP from the monitored device. The enterprise object identifier is used to identify the manufacturer of the monitored device. VendorModel  118  calls its own function obtainModel( )  130  to obtain the model name of the monitored device. In the function obtainModel( )  130 , VendorModel  118  calls getNextStringValueForOID( )  132  of SNMP  120  to obtain the model name of the monitored device via SNMP. VendorModel  118  calls its own function obtainUniqueID( )  134  to obtain the unique identifier of the monitored device. In the function obtainUniqueID( )  134 , VendorModel  118  calls getNextStringValueForOID( )  136  of SNMP  120  to obtain the unique identifier of the monitored device via SNMP.  
         [0076]    [0076]FIG. 9 is an exemplary flowchart for the setAgent( ) function of VendorModel. In step  140  the variables representing the manufacturer name, model name, and unique identifier are set to an empty string. These variables are m_sManufacturer, m_sModel, and m_sUniqueID as exemplified in Table 8. In step  142  the enterprise object identifier of the monitored device is obtained via SNMP. In step  144  the enterprise object identifier obtained from the monitored device is compared to those supported by the system. The enterprise object identifier and its corresponding manufacturer supported by the system are stored in the vector m_ManufacturerAndModelInfoVector as described in Table 8. The vector is searched to determine if the enterprise object identifier of the monitored device is found. If the enterprise object identifier cannot be found in the vector, then step  156  will be processed next. If the enterprise object identifier is found in the vector, then the manufacturer of the monitored device is supported by the system and step  146  is processed next. In step  146  the variable for the manufacturer name m_sManufacturer is set to the manufacturer name corresponding to the enterprise object identifier in the vector. In step  148  the variables m_sCurrentModelOID and m_sCurrentUniqueOID for the object identifier used to find the model name and the unique identifier of the monitored device is set to the object identifiers corresponding to the enterprise object identifier in the vector. In step  150  the model name is obtained from the monitored device via SNMP using the object identifier m_sCurrentModelOID.  
         [0077]    In step  152  the model name obtained from the monitored device is compared to those supported by the system. The manufacturer and model supported by the system are stored in the map m ManufacturerModelMap as described in Table 8. The map is searched to determine if the model is found in the map. If the model cannot be found in the map, then step  156  will be processed next. If the model can be found in the map, then the model of the monitored device is supported by the system and step  154  is processed next. In step  154  the variable for the model name m_sModel is set to the model name obtained from the monitored device. In step  156  the unique identifier is obtained from the monitored device via SNMP using the object identifier m_sCurrentUniqueOID. Then set the variable for the unique identifier m_sUniqueID to the unique identifier obtained from the monitored device.  
         [0078]    The functions setAgent( ) of VendorModel allows the system to obtain the manufacturer name and model name of the monitored device via SNMP to determine if it is supported by the system. Also, it allows the system to verify the manufacturer name and model name.  
         [0079]    [0079]FIG. 10 exemplifies a sequence diagram when the system obtains information used to obtain the status information for the specific manufacturer and model of the monitored devices. DeviceFactory  160  interacts with ODBC2  162  to obtain this information. ODBC2  162  provides an interface to the database to obtain information requested of it by DeviceFactory  160 . DeviceFactory  160  calls the function getManufStatusInfo( )  164  of ODBC2  162  to obtain information needed to obtain the status information from monitored devices for a specific manufacturer via SNMP. The information includes a number (infoType) representing some type of status information and an object identifier used to obtain the status information via SNMP. getManufStatusInfo( )  166  is called multiple times until the information needed to obtain all the status information for a specific manufacturer are read in from the database. Then DeviceFactory  160  calls the function getModelStatusInfo( )  168  of ODBC2  162  to obtain information needed to obtain status information from monitored devices for a specific model via SNMP. The information includes a number (infoType) representing some type of status information and an object identifier used to obtain the status information via SNMP. getModelStatusInfo( )  170  is called multiple times until the information needed to obtain all the status information for a specific model are read in from the database. This sequence is called within the createDevice( ) function of DeviceFactory when a device object is created for the monitored device. This information will be added to the device object as described in FIG. 11.  
         [0080]    By using the database to store information used to obtain the status information pertaining to the manufacturer and the status information pertaining to the model, status information to be obtained from the monitored devices can be easily modify, remove, or add to the database without any changes to the system.  
         [0081]    [0081]FIG. 11 shows the flowchart for the createDevice( ) function of DeviceFactory. In step  174  a device object is created to represent the monitored devices. In step  176  a vector containing information needed to obtain status information from devices of all manufacturers is assigned to a local vector. This vector corresponds to m_GenericDeviceVector described in Table 10. In step  178  the manufacturer name of the monitored device is checked to see if it is supported by the system (the manufacturer name is an empty string if it is not supported by the system). If the manufacturer name is not supported, then step  186  will be processed next. If the manufacturer name is supported, then step  180  will be processed next.  
         [0082]    In step  180  information needed to obtain status information from the monitored device of a specific manufacturer is obtained from a map and added to the local vector. The map corresponds to m_ManufacturerVectorMap described in Table 10. In step  182  the model name of the monitored device is checked to see if it is supported by the system (the model name is an empty string if it is not supported by the system). If the model name is not supported, then step  186  will be processed next. If the model name is supported, then step  184  will be processed next.  
         [0083]    In step  184  information needed to obtain status information from the monitored device of a specific model is obtained from the database and added to the local vector. In step  186  the local vector containing the information needed to obtain all the status information of the monitored device is set in the device object. The device object will have information about what status information it must get from the monitored device.  
         [0084]    DeviceFactory creates and initializes all the device objects so that it knows what status information it must obtain.  
         [0085]    [0085]FIG. 12 shows the sequence diagram for executing the monitorStatus( ) function. The process sends the status information of the monitored devices to a desired location. SendInterfaceManager  190  calls startSend( )  198  of DataTransfer  196  to prepare the system to send the status information of the monitored devices via email (SMTP). SendInterfaceManager  190  calls getStatus( )  200  of Device  194  to obtain the status information of the monitored device. Device  194  corresponds to the monitored device and it knows what status information it must obtain. SendInterfaceManager  190  calls saveStatus( )  202  of ODBC  192  to store the status information of the monitored device in the database. SendInterfaceManager  190  calls dataSend( )  204  of DataTransfer  196  to send the status information of the monitored device via email (SMTP). The steps of calling getStatus( )  200 , saveStatus( )  202 , and dataSend( )  204  are repeated for each monitored device. There is a device object for each monitored device. SendInterfaceManager  190  calls endSend( )  206  of DataTransfer  196  to complete the sending of the status information via email.  
         [0086]    [0086]FIG. 13 shows the sequence diagram for executing the getStatus( )  214  function of Device  210 . SendInterfaceManager  208  calls getStatus( )  214  of Device  210  to obtain the status information of the monitored device. Device  210  represents a monitored device of a specific manufacturer and model. The status information will be obtained from the monitored devices via SNMP. If the monitored device is not supported by the system, then the status information obtained from the monitored device is the status information obtainable for all monitored devices (all-system status information) such as error status. If the manufacturer but not the model of the monitored device is supported by the system, then the status information obtained from the monitored device is the all-system status information and the status information obtainable for all monitored devices of the specific manufacturer (manufacturer-specific status information). If the manufacturer and model of the monitored device is supported by the system, then the status information obtained from the monitored device is the all-system status information, the manufacturer-specific status information, and the status information obtainable for all monitored devices of the specific model (model-specific status information). Device  210  contains a vector so that it knows which information it needs to obtain. Device  210  calls getNextStringValueForOID( ) of Snmp  212  so the system can obtain the status information from the monitored device via SNMP. getNextStringValueForOID( )  218  is called multiple times to obtain all the status information from the monitored device.  
         [0087]    [0087]FIG. 14 shows the tables of a database that contains information about the manufacturers and models supported by the system. The table also includes information about what information is to be obtained for each manufacturer and model. Manufacturer  230  is the table that contains information about the manufacturers supported by the system. Manufacturer  230  also contains the following information-enterprise object identifier for the manufacturer, object identifier used to find the model name of the monitored device, and object identifier used to find the unique identifier of the monitored device. SupportedModelByManufacturer  220  is the table that contains the models with its corresponding manufacturer that are supported by the system. To add or remove manufacturers and models supported by the system, only the tables Manufacturer  230  and SupportedModelByManufacturer  220  need to be modified. No modification needs to be made to the code of the system. The system will read the information from these tables of the database.  
         [0088]    ComManufStatus  226  is the table that contains information about what information will be obtained from the monitored device based on its manufacturer name. The table contains the manufacturer name and a number representing the type of information. ModelStatus  222  is the table that contains information about what information will be obtained from the monitored device based on its model name. The table contains the manufacturer name, the model name, and a number representing the type of information. To add or remove information to obtained from the monitored device, only the tables ComManufStatus  226  and ModelStatus  222  need to be modified. No modification needs to be made to the code of the system. The system will read the information from these tables of the database.  
         [0089]    EnumOID  224  is the table that contains information about the object identifier used to find the information corresponding to the number. The object identifier will be used by the system to find a specific type of information from the monitored device via SNMP. EnumCorrespondence  228  is the table that contains a description of the numbers used to represent a type of information. This table is not used by the system but will provide the user of the system information about what the numbers represent.  
         [0090]    [0090]FIG. 15 shows an example of the contents in the tables of the database as described in FIG. 14. Microsoft Access is the database used to store information about the manufacturers and models supported by the system.  
         [0091]    [0091]FIG. 16 shows the class diagram for the ODBC2 package. The CSupportODBC  232  class is the interface for this package to access information in the database. The CManufacturerData  240  class accesses information from the database needed to obtain the manufacturer, model, and unique ID of the monitored device. The CSupportedModelData  234  class accesses information from the database about the manufacturer and model of monitored device supported by the system. The CComManufStatusData  236  class accesses information from the database needed to obtain manufacturer status information associated with the monitored device. The CModelStatusData  238  class accesses information from the database needed to obtain model status information associated with the monitored device. The CManufacturerDatabase  242  class provides an interface to the table in the database that contains the manufacturer information. The CSupportedModelDatabase  244  class provides an interface to the table in the database that contains information about supported models. The CComManufStatusDatabase  246  class provides an interface to the table in the database that contains the manufacturer status information. The CModelStatusDatabase  250  class provides an interface to the table in the database that contains the model status information. The CInfoTypeOIDDatabase  248  class provides an interface to the table in the database that contains the correspondence between the infoType enumeration and the object identifier.  
         [0092]    CManufacturerDatabase  242 , CSupportedModelDatabase  244 , CComManufStatusDatabase  246 , CModelStatusDatabase  250 , and CInfoTypeOIDDatabase  248  are all classes derived from CRecordset  252  of the Microsoft Foundation Class (MFC) library.  
         [0093]    The foregoing description of the preferred embodiment of the present invention has been presented for purposes of illustration and description. It is not intended to be exhaustive or to limit the invention to the precise form disclosed, and many modifications or variations are possible in light of the above teaching. For example, any one or more of the concepts described or shown herein may be applied to the system and/or method disclosed in related Application No. Ser. No. 09/756,120, filed Jan.  9 ,  2001 , entitled “Method and System of Remote Support of Device Using Email.” Moreover, any concept or feature described in related application Ser. No. 09/756,120 may be applied to the systems or methods disclosed herein. The embodiments were chosen and described to best explain the principles of the invention and its practical applications thereby enable others skilled in the art to utilize the invention and various embodiments and with various modifications as are suited to the particular use contemplated. It is intended that the scope of the present invention be defined only by the claims appended hereto.