Patent ID: 12223364

DETAILED DESCRIPTION

FIG.1depicts a block diagram of an infrastructure for implementing various embodiments disclosed herein. Various embodiments disclosed herein involve the identification retrieval of software capabilities on the basis of need.

A “host” is an environment in which one or more software programs can operate. For example, host103depicted inFIG.1may be a computer or server running an operating system. The host103may have a number of applications and programs running on itself such as monitoring agent105. The applications and programs running on host103may also interface with applications and programs across a network running on other computers or servers, e.g., control service101. A remote software agent is a program of instructions that runs on a device while being controlled by a remote application or service. A “monitoring agent” is a type of remove software agent. For example, monitoring agent105is a program running on host103under the control of control service101. The control module107is logic or code within the monitoring agent105that interfaces with control service101allowing communications, commands and data to flow between control service101and monitoring agent105. A “program of instructions” as this phrase is used herein is computer instructions, commands, software, code or other topic of logic that controls a computer, as is known by those of ordinary skill in the art.

Typically, an agent such as monitoring agent105is capable of performing a predefined set of behaviors, that is, capabilities. A “native capability” of an agent is a module, code, software, subroutines or other logic within the agent that performs the predefined task associated with that native capability without the need to work with or interface with another agent, web service or other logic outside of the agent. For example, monitoring agent105has native capability1123and native capability2125. In this example, native capability1123allows the monitoring agent105to access and manipulate files123—for example, read, write, modify and/or save files123. Native capability2125is the ability to perform a query, that is, to retrieve status data or other information from another system or web service. The monitoring agent105can perform these two capabilities—native capability1 and native capability2—using code or other logic within the monitoring agent105itself.

A given agent may also gain a dynamic capability by accessing a subcomponent outside itself. Turning toFIG.1, monitoring agent105can access subcomponent113labeled dynamic capability1 and subcomponent115labeled dynamic capability2. In this example, dynamic capability1 of subcomponent113involves accessing an encryption module117to encrypt data for storage or transmission or decipher encrypted data that has been received or retrieved from storage. Dynamic capability2 of subcomponent115involves accessing a remote server119. Monitoring agent105cannot by itself perform the capabilities associated with subcomponents113and115. Instead, monitoring agent105can accomplish these capabilities by discovering and accessing subcomponent113and subcomponent115.

In various embodiments novel monitoring agent105is designed with dynamic capabilities in mind. That is, monitoring agent105is capable of seeking out, downloading and installing subcomponents as needed to perform tasks beyond its existing native capabilities. These subcomponents may take the form of other agents, executables, libraries, modules, web services or other logic. Monitoring agent105provides a control interface between these subcomponents and the remote application by interpreting and routing commands sent from the remote application, and reporting on the status of the subcomponents.

FIG.2Ais a flowchart of activities involved in retrieving a task capability in accordance with various embodiments. The method begins in block201and proceeds to block203where a monitoring agent (e.g., monitoring agent105ofFIG.1), or other similar logic, monitors for a command received. The monitoring agent is typically operating (or running) on a host computer or server or other environment suitable for software programs or other logic to operate. A “command” as this term is used herein is a communication or received logic that includes some sort of request or order to perform a task. The task specified in the command could be any sort of activity that computers are known to handle or any computer-controlled activity. The method proceeds to block205where it is determined whether a command has been received. If it is determined in block205that no command has yet been received the method loops back along the “NO” path to continue monitoring for commands in block203. If it is determined in block205that a command has been received, then the method proceeds along the “YES” path to block207.

In block207the command is interpreted to determine what task is being requested. A task may be any activity that computers are known to handle or any sort of action that may be computer controlled (or otherwise electronically controlled). Some typical tasks include: to begin monitoring a switch (or router); performing an agent self-update to download and install a new version of the monitoring agent; monitoring some specified hardware or software (e.g., monitoring temperature levels in a building, monitoring bandwidth usage at a wireless node); querying the version of a software module; troubleshooting either the monitoring agent or another agent or specified hardware or software; and other like types of tasks as are known by those of ordinary skill in the art. Once the command has been interpreted and the task is known the method proceeds from block207to block209.

In block209it is determined whether or not the monitoring agent (e.g., monitoring agent105) has the capability to execute the command and perform the requested task. If the agent has the requisite capability the method proceeds along the “YES” path to block211where the task is performed. However, if it is determined in block209that the agent does not have the capability to perform the task the method proceeds along the “NO” path to block217to begin the process of obtaining the capability.

In block217a search is made for the capability. The search may be conducted in a library of executables that the agent has access to, from among a list of other agents associated with the monitoring agent, or elsewhere within the host (e.g., host103) where the monitoring agent resides. In some embodiments the search may be made outside the host—for example, on a network to which the monitoring agent has access, or the Internet. The search itself is a predefine routine specifying the places to be searched, and the order of the search. In some embodiments the search may entail executing the entire predefine routine of all potential places where a capability may possibly be found. In such embodiments it may be the case that multiple capabilities are found during the search. If this is the case the monitoring agent may select the most suitable source of capability from among the possible choices. In other embodiments the search may be specified such that the search ends upon finding a suitable capability. In yet other embodiments the search may continue until a predefined number of suitable capabilities are discovered. For example, upon finding three (or two, or four, five, ten, etc.) suitable capabilities, the search ends and the monitoring agent selects one of the discovered capabilities as described below in conjunction withFIG.2B.

The method proceeds from conducting the search in block217to block219. In some embodiments the search may be conducted in its entirety (through the entire predefine routine) before the method proceeds from block217to block219. In other embodiments the method proceeds to block219once a capability is discovered (or the required number of alternatives are discovered, e.g., two, three, ten, etc.). In yet other embodiments the monitoring agent maintains a timer or counter, and the method proceeds to block219once the timer or counter reaches a predefined limit. In block219it is determined whether a capability has been found. If it is determined in block219that no capability has been found, the method proceeds along the “NO” branch to block221. In block221it is determined whether the timeout (if any) for conducting the search has been completed. If the timeout has been completed and a capability was not found the method proceeds from block221to block223to report the negative result. The method then proceeds to block231, and ends. However, if it is determined back in block221that the timeout for the search has not yet been reached, the method proceeds along the “NO” path back to block217to continue searching for the capability.

Back in block219if it is determined that a capability was found, the method proceeds along the “YES” branch to block225. In block225it is determined whether the capability is readily obtainable. A capability is readily obtainable if the monitoring agent can download and install it with no need for permissions, outside approvals, or other actions required from outside the monitoring agent. In some embodiments the search may continue even after an acceptable capability has been found in order to discover whether additional similar capabilities can be discovered. The process for continuing the search for additional capabilities is described below in conjunction withFIG.2B.

Returning to block225if the identified capability is not readily available the method proceeds from block225via the “NO” path to block227to report the status and/or issue a request for the capability. A status may indicate that the capability is available but requires permission, a password, or other action from outside the monitoring agent. A request may request the needed permission, a password, etc. in order to obtain the capability. A request may also request modification of an existing capability that is available, but is not quite suitable for executing the command and completing the task. A request may also request the purchase of an identified capability which is known to be suitable. Once the status and/or request has been completed in block227, the method proceeds to block231and ends.

Back in block225, if the identified capability is readily available the method proceeds from block225via the “YES” path to block229. In block229the capability is obtained. That is, the capability is downloaded (or otherwise received), and installed. The capability may either be installed in the monitoring agent itself, or installed in a location or set of software that allows the monitoring agent to access and execute the capability, thus performing the task. Once the installation is complete in block229the method proceeds to block211to perform the task. Upon completion of the task the method proceeds to block213to determine whether the task has been completed properly. If the task has not been completed correctly the method proceeds from block213back to block209to again determine if the capability to perform the task is available, and start the search process again. If it is determined in block213that the task has been completed correctly the method proceeds from block213to block215to report the completion of the task. Once the task report has been completed in block215the method proceeds to block231and ends.

FIG.2Bis a flowchart of activities involved in retrieving multiple similar task capabilities in accordance with various embodiments. Some implementations may include the option to continue searching even after an acceptable capability has been found in order to discover whether additional similar capabilities can be discovered. In such implementations the method proceeds from block209ofFIG.2Aalong the “YES” path to block217ofFIG.2B. Blocks217,219,221and223ofFIG.2Bare similar to the like numbered blocksFIG.2A. In block217a search is made for the capability in a library of executables that the agent has access to, from among a list of other agents associated with the monitoring agent, or elsewhere within the host (e.g., host103) where the monitoring agent resides or even outside the host—for example, on a network to which the monitoring agent has access, or the Internet. The search may be a predefine routine specifying the places to be searched, and the order of the search.

The method proceeds from block217to block219to determine whether a capability has been found. If it is determined in block219that no capability has been found, the method proceeds along the “NO” branch to block221. In block221it is determined whether the timeout (if any) for conducting the search has been completed. If the timeout has been completed and a capability was not found the method proceeds from block221to block223to report the negative result. The method then proceeds to block231, and ends. However, if it is determined back in block221that the timeout for the search has not yet been reached, the method proceeds along the “NO” path back to block217to continue searching for the capability.

Back in block219if it is determined that a capability was found, the method proceeds along the “YES” branch to block233. In block233the capability attributes are determined. The capability attributes may be used to evaluate and select the optimal capability from among multiple found capabilities. The capability attributes may include attributes specific to the type of capability being sought or attributes standard to all (or most) capabilities, including for example: revision number and date of the capability, compatibility with multiple systems/platforms, cost (e.g., licensing fees per unit), execution speed, required memory, and/or other like types of capability attributes known to those of ordinary skill in the art.

Upon determining the capability attributes in block233the method proceeds to block235to determine whether or not the search limit has been reached. In various embodiments the search may be limited by the number of capabilities found, by a timer, by the number of locations searched, by the number of instructions performed in the search, by the found capability meeting certain predefined parameters (e.g., an exact match), or by any other constraint known to those of ordinary skill in the art. For example, if the search is limited to finding three capabilities and the capability obtained in block219is the second capability then block235will determine that the limit has not been reached and loop back via the “NO” path to block217to search for more capabilities. However, if the capability is the third found capability then block235will determine that the search limit has been reached. Upon reaching the search limit the method proceeds from block235along the “YES” path to block237to determine whether multiple capabilities have been found. If the search resulted in only a single found capability the method proceeds from block237along the “NO” path to block243. However, if block237reveals that multiple capabilities were found then the method proceeds along the “YES” path to block241.

In block241the optimal capability is selected from among the multiple capabilities found. The selection process may be based on the capability attributes determined in block233. The selection may be made by weighting the capability attributes, calculating a score for each capability, and making the selection based on the highest score. One or more of the capability attributes may be designated as crucial. If a candidate capability lacks a crucial capability attribute it will be eliminated from consideration. Other methods of selecting the optimal capability known to those of ordinary skill in the art may be employed to make the selection in block241.

Upon selecting the optimal capability in block241the method proceeds to block243. (Block243is similar to the elements performed in blocks225/229ofFIG.2A.) Once the capability of obtained in block243the method proceeds to block239to perform the task and report the results. (Block239is similar to the elements performed in blocks211/213/215ofFIG.2A.) Upon performing the task and reporting the results in block239the method proceeds to block231and ends.

FIG.3is a flowchart of activities involved in identifying and tagging information and data within the host, in accordance with various embodiments. The tagging allows capabilities to be more easily discovered. The host (e.g., host103ofFIG.1) is the environment in which the monitoring agent resides and operates. The monitoring agent's search for a desired capability within the host depends largely upon the capabilities that are in the host being identified and tagged. This is achieved through a distributed annotation pattern that is implemented across the host. For example, the annotation pattern may be implemented across data providers available with the observIQ™ (formerly Blue Medora™) BindPlane solution. Doing this organizes the relationships between entities monitored through the software. Information that may be used to identify an entity is tagged with a direction (e.g., toward parent, toward child, toward self).

When data from multiple sources passes through BindPlane, these tagged data are cross-referenced, and matches register as directional relationships. For example, a SQL Server database may provide the hostname on which it is running. This datum would be marked as a relationship indicator, pointing to its parent. Likewise, a virtualization technology such as VMware vCenter, would provide a list of hosts, each of which has its hostname marked as a relationship indicator, pointing to itself. BindPlane would detect these two tags, and create a directed relationship where the VMware Virtual Machine is the parent, and the SQL Server database is the child.

Turning toFIG.3, the method begins at block301and proceeds to block303to monitor for data, and then on to block305to determine whether data or other information is available. If it is determined in block305that no data is available the method proceeds along the “NO” path to block321for a decision as to whether or not to continue monitoring for data. However, if it is determined in block305that there is data available the method proceeds via the “YES” path to block307. In block307the data is evaluated to determine whether there are any relationship indicators to other data, e.g, pointing to parent/child/self.

If no data relationships are discovered in block307the method proceeds via the “NO” path to block321for a decision as to whether or not to continue monitoring for data. However, if there is an indication in block307of a data relationship the method proceeds from block307along the “YES” path to block309. Block309interprets the data relationship indicator to arrive at a direction. If block309discovers a data relationship indicator pointing toward the data's child the method proceeds along the “CHILD” path to block311. If block309discovers a data relationship indicator pointing toward the data's parent the method proceeds along the “PARENT” path to block313. If block309discovers a data relationship indicator pointing toward the data itself the method proceeds along the “SELF” path to block315.

Once the data has been tagged as toward child, parent or self in blocks311-315the method proceeds to block317to index the tags in a database or other searchable, organized listing. Once the tags have been indexed in block317the method proceeds to block319to release the newly tagged data for its intended purpose. The data tags allow the capabilities of the various executables to be more easily discovered. Upon completing block319the method proceeds to block321to determine whether or not to continue monitoring for data. To continue monitoring for data the method proceeds from block321along the “YES” path back to block303. If data monitoring is to cease the method proceeds from block321along the “NO” path to block323where the method ends.

FIG.4depicts a computer system400and various components suitable for implementing the various embodiments disclosed herein. The computer system400may be configured in the form of a desktop computer, a laptop computer, a mainframe computer, or any other hardware or logic arrangement capable of being programmed or configured to carry out instructions. The computer system400may be embodied as an admin server that performs various functions, activities and methods described above. In some embodiments the computer system400may act as a server, accepting inputs from a remote user over a local area network (LAN)427, the Internet429, or an intranet431. In other embodiments, the computer system400may function as a smart user interface device for a server on the LAN427or over the Internet429. The computer system400may be located and interconnected in one location, or may be distributed in various locations and interconnected via communication links such as a LAN427or a wide area network (WAN), via the Internet429, via the public switched telephone network (PSTN), a switching network, a cellular telephone network, a wireless link, or other such communication links. Other devices may also be suitable for implementing or practicing the embodiments, or a portion of the embodiments. Such devices include personal digital assistants (PDA), wireless handsets (e.g., a cellular telephone or pager), and other such electronic devices preferably capable of being programmed to carry out instructions or routines. Those of ordinary skill in the art may recognize that many different architectures may be suitable for the computer system400, although only one typical architecture is depicted inFIG.4.

Computer system400may include a processor401which may be embodied as a microprocessor, two or more parallel processors as shown inFIG.4, a central processing unit (CPU) or other such control logic or circuitry. The processor401may be configured to access a local cache memory403, and send requests for data that are not found in the local cache memory403across a cache bus to a second level cache memory405. Some embodiments may integrate the processor401, and the local cache403onto a single integrated circuit and other embodiments may utilize a single level cache memory or no cache memory at all. Other embodiments may integrate multiple processors401onto a single die and/or into a single package. Yet other embodiments may integrate multiple processors401with multiple local cache memories403with a second level cache memory405into a single package410with a front side bus407to communicate to a memory/bus controller411. The memory/bus controller411may accept accesses from the processor(s)401and direct them to either the internal memory413or to the various input/output (I/O) busses409. Some embodiments of the computer system400may include multiple processor packages410sharing the front-side bus407to the memory/bus controller. Other embodiments may have multiple processor packages410with independent front-side bus connections to the memory/bus controller. The memory bus controller may communicate with the internal memory413using a memory bus409.

The internal memory413may include one or more of random access memory (RAM) devices such as synchronous dynamic random access memories (SDRAM), double data rate (DDR) memories, or other volatile random access memories. The internal memory413may also include non-volatile memories such as electrically erasable/programmable read-only memory (EEPROM), NAND flash memory, NOR flash memory, programmable read-only memory (PROM), read-only memory (ROM), battery backed-up RAM, or other non-volatile memories. In some embodiments, the computer system400may also include 3rdlevel cache memory or a combination of these or other like types of circuitry configured to store information in a retrievable format. In some implementations the internal memory413may be configured as part of the processor401, or alternatively, may be configured separate from it but within the same package410. The processor401may be able to access internal memory413via a different bus or control lines than is used to access the other components of computer system400.

The computer system400may also include, or have access to, one or more hard drives415(or other types of storage memory) and optical disk drives417. Hard drives415and the optical disks for optical disk drives417are examples of machine readable (also called computer readable) mediums suitable for storing the final or interim results of the various embodiments. The optical disk drives417may include a combination of several disc drives of various formats that can read and/or write to removable storage media (e.g., CD-R, CD-RW, DVD, DVD-R, DVD-W, DVD-RW, HD-DVD, Blu-Ray, and the like). Other forms or computer readable media that may be included in some embodiments of computer system400include, but are not limited to, floppy disk drives, 9-track tape drives, tape cartridge drives, solid-state drives, cassette tape recorders, paper tape readers, bubble memory devices, magnetic strip readers, punch card readers or any other type or computer useable or machine-readable storage medium.

The computer system400may either include the hard drives415and optical disk drives417as an integral part of the computer system400(e.g., within the same cabinet or enclosure and/or using the same power supply), as connected peripherals, or may access the hard drives415and optical disk drives415over a network, or a combination of these. The hard drive415often includes a rotating magnetic medium configured for the storage and retrieval of data, computer programs or other information. In some embodiments, the hard drive415may be a solid-state drive using semiconductor memories. In other embodiments, some other type of computer useable medium may be used. The hard drive415need not necessarily be contained within the computer system400. For example, in some embodiments the hard drive415may be server storage space within a network that is accessible to the computer system400for the storage and retrieval of data, computer programs or other information. In some instances, the computer system400may use storage space at a server storage farm, or like type of storage facility, that is accessible by the Internet429or other communications lines. The hard drive415is often used to store the software, instructions and programs executed by the computer system400, including for example, all or parts of the computer application program for carrying out activities of the various embodiments.

The communication link409may be used to access the contents of the hard drives415and optical disk drives417. The communication links409may be point-to-point links such as Serial Advanced Technology Attachment (SATA) or a bus type connection such as Parallel Advanced Technology Attachment (PATA) or Small Computer System Interface (SCSI), a daisy chained topology such as IEEE-1394, a link supporting various topologies such as Fibre Channel, or any other computer communication protocol, standard or proprietary, that may be used for communication to computer readable medium. The memory/bus controller may also provide other I/O communication links409. In some embodiments, the links409may be a shared bus architecture such as peripheral component interface (PCI), microchannel, industry standard architecture (ISA) bus, extended industry standard architecture (EISA) bus, VERSAmoduleEurocard (VME) bus, or any other shared computer bus. In other embodiments, the links409may be a point-to-point link such as PCI-Express, HyperTransport, or any other point-to-point I/O link. Various I/O devices may be configured as a part of the computer system400.

In many embodiments, a network interface419may be included to allow the computer system400to connect to a network427or431. Either of the networks427and431may operate in accordance with standards for an IEEE 802.3 ethernet network, an IEEE 802.11 Wi-Fi wireless network, or any other type of computer network including, but not limited to, LANs, WAN, personal area networks (PAN), wired networks, radio frequency networks, powerline networks, and optical networks. A network gateway433or router, which may be a separate component from the computer system400or may be included as an integral part of the computer system400, may be connected to the networks427and/or431to allow the computer system400to communicate with the Internet429over an internet connection such as an asymmetric digital subscriber line (ADSL), data over cable service interface specification (DOCSIS) link, T1 or other internet connection mechanism. In other embodiments, the computer system400may have a direct connection to the Internet429. The computer system400may be connected to one or more other computers such as desktop computer441or laptop computer443via the Internet429, an intranet431, and/or a wireless node445. In some embodiments, an expansion slot421may be included to allow a user to add additional functionality to the computer system400.

The computer system400may include an I/O controller423providing access to external communication interfaces such as universal serial bus (USB) connections, serial ports such as RS-232, parallel ports, audio in and audio out connections, the high performance serial bus IEEE-1394 and/or other communication links. These connections may also have separate circuitry in some embodiments, or may be connected through a bridge to another computer communication link provided by the I/O controller423. A graphics controller425may also be provided to allow applications running on the processor401to display information to a user. The graphics controller425may output video through a video port that may utilize a standard or proprietary format such as an analog video graphic array (VGA) connection, a digital video interface (DVI), a digital high definition multimedia interface (HDMI) connection, or any other video connection. The video connection may connect to display437to present the video information to the user.

The display437may be any of several types of displays or computer monitors, including a liquid crystal display (LCD), a cathode ray tube (CRT) monitor, on organic light emitting diode (OLED) array, or other type of display suitable for displaying information for the user. The display437may include one or more light emitting diode (LED) indicator lights, or other such display devices. Typically, the computer system400includes one or more user input/output (I/O) devices such as a keyboard and mouse439, and/or other means of controlling the cursor represented including but not limited to a touchscreen, touchpad, joystick, trackball, tablet, or other device. The user I/O devices435may connect to the computer system400using USB interfaces or other connections such as RS-232, PS/2 connector or other interfaces. Various embodiments include input devices configured to accept an input from a user and/or provide an output to a user. For example, some embodiments may include a webcam (e.g., connect via USB), a microphone (e.g., connected to an audio input connection), and/or speakers (e.g., connected to an audio output connection). The computer system400typically has a keyboard and mouse439, a monitor437, and may be configured to include speakers, microphone, and a webcam. These input/output devices may be used in various combinations, or separately, as means for presenting information to the user and/or receiving information and other inputs from a user to be used in carrying out various programs and calculations. Speech recognition software may be used in conjunction with the microphone to receive and interpret user speech commands.

The computer system400may be suitable for use in identifying critical web services and dynamically relocating them to a new server. For example, the processor401may be embodied as a microprocessor, microcontroller, DSP, RISC processor, two or more parallel processors, or any other type of processing unit that one of ordinary skill would recognize as being capable of performing or controlling the functions, steps, activities and methods described herein. A processing unit in accordance with at least one of the various embodiments can operate computer software programs stored (embodied) on computer-readable medium such those compatible with the disk drives415, the optical disk drive417or any other type of hard disk drive, floppy disk, flash memory, ram, or other computer readable medium as recognized by those of ordinary skill in the art.

As will be appreciated by those of ordinary skill in the art, aspects of the various embodiments may be embodied as a system, method or computer program product. Accordingly, aspects of the present invention may take the form of an entirely hardware embodiment, an entirely software embodiment (including firmware, resident software, micro-code, or the like) or an embodiment combining software and hardware aspects that may all generally be referred to herein as a “circuit,” “module,” “logic” or “system.” Furthermore, aspects of the various embodiments may take the form of a computer program product embodied in one or more computer readable medium(s) having computer readable program code stored thereon.

Any combination of one or more non-transitory computer readable medium(s) may be utilized. The computer readable medium is typically a computer readable storage medium. A computer readable storage medium may be embodied as, for example, an electronic, magnetic, optical, electromagnetic, infrared, or semiconductor system, apparatus, or device, or other like storage devices known to those of ordinary skill in the art, or any suitable combination of the foregoing. Examples of such computer readable storage medium include the following: an electrical connection having one or more wires, a portable computer diskette, a hard disk, a random access memory (RAM), a read-only memory (ROM), an erasable programmable read-only memory (EPROM or Flash memory), a portable compact disc read-only memory (CD-ROM), an optical storage device, a magnetic storage device, or any suitable combination of the foregoing. In the context of this document, a computer readable storage medium may be any tangible medium that can contain, or store a program for use by or in connection with an instruction execution system, apparatus, or device.

Computer program code for carrying out operations and aspects of the various embodiments may be written in any combination of one or more programming languages, including an object oriented programming language such as Java, Smalltalk, C++, or the like, and conventional procedural programming languages, such as the “C” programming language or similar programming languages. In accordance with various implementations, the program code may execute entirely on the user's computer, partly on the user's computer, as a stand-alone software package, partly on the user's computer and partly on a remote computer or entirely on the remote computer or server. In the latter scenario, the remote computer may be connected to the user's computer through any type of network, including a local area network (LAN) or a wide area network (WAN), or the connection may be made to an external computer (for example, through the Internet using an Internet Service Provider).

Aspects of the present invention are described with reference to flowchart illustrations and/or block diagrams of methods, apparatus, systems, and computer program products according to various embodiments disclosed herein. It will be understood that blocks of the flowchart illustrations and/or block diagrams, and combinations of blocks in the flowchart illustrations and/or block diagrams, can be implemented by computer program instructions. These computer program instructions may be provided to a processor of a general purpose computer, special purpose computer, or other programmable data processing apparatus to produce a machine, such that the instructions, which execute via the processor of the computer or other programmable data processing apparatus, create means for implementing the functions/acts specified in the flowchart and/or block diagram block or blocks.

These computer program instructions may also be stored in a computer readable medium that can direct a computer, a programmable data processing apparatus, or other such devices to function in a particular manner, such that the instructions stored in the computer readable medium produce an article of manufacture including instructions which implement the function/act specified in the flowchart and/or block diagram block or blocks. The computer program instructions may also be loaded onto a computer, other programmable data processing apparatus, or other devices to cause a series of operational steps to be performed on the computer, other programmable apparatus or other devices to produce a computer implemented process such that the instructions which execute on the computer or other programmable apparatus provide processes for implementing the functions/acts specified in the flowchart and/or block diagram block or blocks. The flowchart and/or block diagrams in the figures help to illustrate the architecture, functionality, and operation of possible implementations of systems, methods and computer program products according to various embodiments. In this regard, each block in the flowchart or block diagrams may represent a module, segment, or portion of a program of instructions, code or other logic, which comprises one or more executable instructions for implementing the specified logical function(s).

It should also be noted that, in some alternative implementations, the functions noted in the block may occur in an order other that that depicted in the figures. For example, two blocks shown in succession may, in fact, be executed substantially concurrently, or the blocks and activities of the figures may sometimes be executed in reverse order or in a different order, depending upon the functionality involved. For example, the monitoring block203ofFIG.2Amay go on continuously to detect other commands while the rest of the steps of the method are performed to search for a capability of a previously received command. It will also be noted that each block of the block diagrams and/or flowchart illustration, and combinations of blocks in the block diagrams and/or flowchart illustration, can be implemented by special purpose hardware-based systems that perform the specified functions or acts, or combinations of special purpose hardware and computer instructions.

The terminology used herein is for the purpose of describing particular embodiments only and is not intended to be limiting of the invention. As used herein, the singular forms “a”, “an” and “the” are intended to include the plural forms as well, unless the context clearly indicates otherwise. It will be further understood that the terms “comprises,” “comprising,” “includes,” and/or “including” used in this specification specify the presence of stated features, integers, steps, operations, elements, and/or components, but do not preclude the presence or addition of one or more other features, integers, steps, operations, elements, components, and/or groups thereof. The term “obtaining”, as used herein and in the claims, may mean either retrieving from a computer readable storage medium, receiving from another computer program, receiving from a user, calculating based on other input, or any other means of obtaining a datum or set of data. The term “plurality”, as used herein and in the claims, means two or more of a named element. It should not, however, be interpreted to necessarily refer to every instance of the named element in the entire device. Particularly, if there is a reference to “each” element of a “plurality” of elements. There may be additional elements in the entire device that are not be included in the “plurality” and are not, therefore, referred to by “each.”

The corresponding structures, materials, acts, and equivalents of all means or step plus function elements in the claims below are intended to include any structure, material, or act for performing the function in combination with other claimed elements as specifically claimed. The description of the present invention has been presented for purposes of illustration and description, but is not intended to be exhaustive or limited to the invention in the form disclosed. Many modifications and variations will be apparent to those of ordinary skill in the art without departing from the scope and gist of the invention. The various embodiments included herein were chosen and described in order to best explain the principles of the invention and the practical application, and to enable others of ordinary skill in the art to understand the invention for various embodiments with various modifications as are suited to the particular use contemplated.