The Agent is the "Brain" of the Node, the unknown Man-in-black responsible to monitor, control and convey tasks and data between the Grid ecosystem and the interacting program. Each AGE Node has only one Agent controller, however, the concept behind AGE stipulates number of rules that allow the Agent to represent the entire Gird as a shared resource. In other words, you are interacting locally from your application with your Agent and actually you can interact with other Agents of distant nodes from the Grid. The Agent is commencing three major activities: 1)Task management - Allows you to send requests for executing one or more tasks locally or over the Grid, and respectively to gather responses and resulting data via low-level API. Please refer to functions request/3 and response/2 to get better understanding about the task types and task management. 2)Guardian activities - These are automated activities for continuous monitoring and sustaining the life-cycle of your tasks, the heartbeat signal of the Grid, and to gather statistical information about the utilization of Node's resources spread around the Grid. 3)Carrier activities - Agent is responsible for the transportation of any data related to task requests and responses between your applications and other Agents (nodes) currently available on the Grid. This transportation and routing is managed by the Agent and handled by internal processes called Data Carriers using proprietary application-level data exchange protocol. Take into consideration that the Agent's carrier activities have nothing to do with the Gateway communication functionality - the Gateway is responsible to secure the transport environment and the Node's connectivity where the Agent is routing and executing tasks, and summarizing the results using the Grid's environment. The Agent is interacting with the Service controller of the AGE's node. Read more about that on page "Make Services". The Agent is coordinating also all Notifications related to the current node. |
% @type age_uid() = integer() -type age_uid() :: integer(). % @type age_time_stamp() = {integer(), integer(), integer()} -type age_time_stamp() :: {integer(), integer(), integer()}. % @type age_proc() = pid() | atom() -type age_proc() :: pid() | atom(). % @type age_node() = integer() -type age_node() :: integer(). |