
This document describes the functionality and design of the Administrative eXtension Tool (AXT).
This also provides a summary of tools that have been designed to work with the AXT server.
The AXT server performs persistent transfers, distributed commands and distributed messages on demand and provides error reporting to central Monitoring systems through SNMP alerts, syslog messages and system logs.

This document addresses the programs, utilities and configuration of the AXT server.
Utilities for transfers, distributed commands and process control are included in this documentation.
This document provides examples for use of the AXT server for file transfers, the function of performing commands on distributed systems, relaying messages through the AXT server and the management of the actions in the AXT server.

The actions will be triggered by the client initiators (Documented in section 2.1) to perform tasks such as file transfers, command execution and messaging.
These actions will be preformed against one or more remote nodes (eg: Transfer a file from system A to system B)
To achieve the guaranteed delivery of actions, the AXT server will be required to manage the actions and report on errors in the action.
The client will also be responsible for reporting errors in the initiation of the action.
At the client, this error reporting will be done through error messages and exit codes (optional error messaging can be specified in the command flags).
The central server will be built around JBoss Application Server, JBoss Messaging, JBoss Rules and Hibernate.
Standard connectors include code from jSCH and Apache Commons:Net.
The central system also allows requeueing of complete or failed actions providing recovery ability to the administrative team.
The central server will provide the management of the actions through queuing an action message, validating the request syntax, checking access rights and initiating the action type manager.
The action managers will perform retries and alert on issues.

Figure 1
The remote node can communicate to the AXT server through standard tcp sockets or SSL sockets.
An action is initiated by the remote node through a message to the AXT server.
On initiation, the message is staged at the remote node by the axt-daemon for message persistency.
One acknowledgement is provided by the client daemon to the message initiator:LCL - Locally Staged by the axt-daemon (Client persistency will ensure ACK Response)
For transfer actions (and if specified) the file to be transferred is staged on the remote node to prevent breakage of the file integrity before the staging completes.
This staged file is removed (1) after a staged acknowledgement message has been received from the AXT server or (2) when the axt-daemon determines that (a) no messages are left outstanding and (b) a pre-determined time has passed for staging to complete.

Figure 2
When the AXT server receives the action from the remote node, it performs the specified actions and sends acknowledgments to the remote node during the different processing stages.
Response messages sent from the AXT server are:ACK - AXT Server Received the Request APR - AXT Server Approved the Request STG - AXT Server Staged the File LOG - Action Log END - Action Ended Successfully DIE - Action Died
Upon receiving a raw message and writing it to the audit log, an acknowledgment is sent to the remote node (ACK).
The actions are validated against defined rules to determine access. If accepted, an approval acknowledgment is sent to the remote node (APR).
If the action is a transformation, the transformation is processed and the new action generated by the transformation moves forward.
Action control is transferred to the action managers (eg: Command Manager, Control Manager, Message Manager and Transfer Manager).
The managers perform the defined action by determining the best connector to call for the action (e.g.: SSH File Pull, SNMP Message Push, etc).
The best method is determined by examining the connectors available to the remote node and ordered by the connector priority.
During the action, action-specific responses may be sent (eg: STG for transfers) and relevant output is logged.
On completion of the entire message, the log is updated and the full log is sent to the remote node (LOG).

Figure 3

The following documentation on design will provide an understanding of the AXT "engine".
You will find development details on everything from the client to the database.
The client initiator uses standard tcp sockets for sending the messages to the AXT server.
A socket-to-jms bridge accepts the messages and injects them into AXT.
The socket bridge maintains the connection to the client during the life of the message.
Initiators are available in C, Perl and Java.
The initiator sends the message into a local daemon (axt-daemon) which maintains the message persistency and manages stale staged files.
When the message acknowledgement (ACK) is received, the responsibility for the file transfer is assigned to the AXT server and persistency files are purged.
The client can maintain a connection after the ACK to receive information from AXT on the actions taken.
For more detail on initiators, refer to chapter 4.

Message bridges are used when the initiator is not capable of injecting a message through JMS (eg: non-java clients).
The message bridges are responsible for injecting the message into the AXT server and for returning acknowledgement messages to the initiator.
Current available message bridges are:
SocketBridge - provides tcp socket bridging
SpreadBridge - provides bridging to spread clients (depricated)
Basic throttling can be configured in the bridges if desired.
See the server configuration in section 3.1 for details.
The AXT queue is a JMS queue provided by the JBoss Application Server.
When a message has been received by the AXT JMS message queue, an action flow is triggered.
The Message Parser validates the initiator message and splits the message into chained individual actions that can be managed by the AXT server.
If the message does not parse properly, the message will be rejected and notification (DIE) sent to the initiator.
Message element requirements are verified and default tags are populated where needed.
If the message does not supply the required components, the request message will be rejected and notification sent to the client.
Rule verification is performed on messages that are sent to the system to determine if the message is allowed to be processed.
Rules management is provided through JBoss Rules.
Rules are based on a "deny all" policy.
"Natural Language" rules can be used such as the following test transfer rule:
The Destination defines
- the name as "utsadmd01"
- the file as "/tmp/testfile"
then
Allow the whole transfer
end
These are dynamically read from a rule file in the Rules Directory defined in the server configuration.
The rules can be updated dynamically with a regular file editor by a user with physical file access to the rule file.
After the message has passed through the Rules, an approval notification (APR) is sent to the initiator.
If the message does not pass the rules, the request message will be rejected and a failure notification (DIE) sent to the client.
Action transformers are defined on the AXT Server to simplify the rule setup for actions and to increase the security for requests from the initiating nodes.
Using the message transformer, new actions will be created based on the tags specified in the transformer definition. An example of this would be a definition “SETTLECREDIT†converting into a transformation tags:
Tags that are not specified for transformation are left as is in the action: eg: leaving the source node as "nodeA" in the above example
The action managers are called based on the type of action that has been defined.
Action managers have to manage searching for the correct action connector based on the nodes preferences.
When a connector has been found that is prefered by the node, the connector threaded off to perform the action.
The thread(s) are managed by the action manager and are analyzed for errors.
The result of the connectors (success OR fail) are filtered through the reaction manager to determine what the next step should be for the initiated message.
These reactions are defined in the initiated message by the client and default to "END on Failure" and "CONTINUE on Success".
The connectors are called by the Managers based on the nodes preferred connector.
Connectors perform the action task and return success or fail to the managers.
Some connectors do return values to the client (command connector).
The connector method is determined by the manager from the connectors available for the node and ordered by the connector priority.
If there is an action connector failure on the preferred method, the manager will choose the next method available for the node.
The manager will continue to cycle through the available connectors until the retry_count_max value is hit or until the action succeeds.
The command manager executes the command using the determined remote command execution connector (e.g.: SSH, RSH, etc).
During command execution, the action log is updated and the log is sent to the initiator.
The control manager processes the control on the AXT server directly, updates the action log returns the log with a completion acknowledgement to the requestor.
Controls are all central to administration and maintenance of AXT.
The message manager delivers the message to the destination node using the determined message connector (e.g.: SNMP, HTTP POST, etc).
The action log is updated with the result of sending the message and the log is sent to the initiator.
The transfer manager is broken into two managers.
There is a Transfer Pull Manager and a Transfer Push Manager.
The push manager transfers the staged file (decrypted on the fly) to one or more destination nodes.
Transfers are initially pulled to a staging area on the AXT server by the Transfer Pull Manager.
During the staging, an MD5 checksum is performed and the file is written out encrypted.
After the pull completes and if an md5 tag is present in the initiated message, the file is md5 checksum verified.
After the file validation, file staging acknowledgement (STG) is then sent to the store system.
Push transfers are pushed to the destination from the AXT server staging area with on the fly decryption.
All data files are held in the central staging area until the job is removed by the AXT purging process.

Note: Authentication is based on user specified credentials or credentials specified in the node values (as ftpUser and ftpPassword attributes)
Note: Authentication is based on key exchange using the central server private key, user specified credentials or credentials specified in the node values (as sshUser and sshPassword attributes)

Messages must be in the XML 1.0 recommendation format and must include the proper validation line.
The header must be:
The full xml must be wrapped in an "axt" root tag.
The root element <axt> accepts one or more of the command, control, message, transfer or transform elements.
This format allows nesting of tasks within the <axt> element.
The requirements on the tags as well as defaults are defined in the AXT dtd file located in
/usr/local/axt/etc/schedule.dtd
The command element accepts the following element attributes:
| Attribute Name | Description | Default | Tag Type | Note |
| dest_retry_count_max | Number of times to retry command on destination | Forever | Integer | |
| dest_retry_count_warn | Warn of failure after X attempts | 10 | Integer | Warnings are sent to the SNMP server defined in the configuration file |
| dest_retry_delay | Seconds to wait between retries | 60 | Integer | |
| react_on_success | Reaction to take on a successful action | continue | String | |
| react_on_fail | Reaction to take on a failed action | halt | String |
The command element defines the following tag elements:
| Tag Name | Description | Default | Tag Type | Note |
| src_name | Source System Name | null | String | Required |
| dest_name | Destination System Name | null | String | One of dest_name or dest_group is required |
| dest_group | Destination System Group | null | String | One of dest_name or dest_group is required |
| dest_user | Destination System Username | Connector Defined | String | Optional |
| dest_password | Destination System Password | Connector Defined | String | Optional |
| exec_string | Destination Execution String | null | String | Required |
Example:
The control element accepts no attributes.
The command element defines the following tag elements:
| Tag Name | Description | Default | Tag Type | Note |
| src_name | Source System Name | null | String | Required |
| control_name | Name of control action | null | String | Required |
| control_value | Control action value | null | String | Optional |
Example:
The message element accepts the following element attributes:
| Attribute Name | Description | Default | Tag Type | Note |
| dest_retry_count_max | Number of times to retry command on destination | Forever | Integer | |
| dest_retry_count_warn | Warn of failure after X attempts | 10 | Integer | Warnings are sent to the SNMP server defined in the configuration file |
| dest_retry_delay | Seconds to wait between retries | 60 | Integer | |
| react_on_success | Reaction to take on a successful action | continue | String | |
| react_on_fail | Reaction to take on a failed action | halt | String |
The message element defines the following tag elements:
| Tag Name | Description | Default | Tag Type | Note |
| src_name | Source System Name | null | String | Required |
| dest_name | Destination System Name | null | String | One of dest_name or dest_group is required |
| dest_group | Destination System Group | null | String | One of dest_name or dest_group is required |
| dest_port | Destination System Message Port | Connector Defined | Integer | Optional |
| dest_post_form | Destination System POST Form URL | Connector Defined | String | Optional |
| dest_get_form | Destination System GET Form URL | Connector Defined | String | Optional |
| msg_severity | Message Severity | Connector Defined | String | Optional |
| msg_application | Messaging Application Name | Connector Defined | String | Optional |
| msg_object | Messaging Application Object ID | Connector Defined | String | Optional |
| msg_text | Message Text | Connector Defined | String | Optional |
| msg_group | Message Group | Connector Defined | String | Optional |
| msg_service_id | Messaging Application Service ID | Connector Defined | String | Optional |
| msg_option | Message Optional Values | Connector Defined | String | Optional |
Example:
The transfer element accepts the following element attributes:
| Attribute Name | Description | Default | Tag Type | Note |
| dest_retry_count_max | Number of times to retry command on destination | Forever | Integer | |
| dest_retry_count_warn | Warn of failure after X attempts | 10 | Integer | Warnings are sent to the SNMP server defined in the configuration file |
| dest_retry_delay | Seconds to wait between retries | 60 | Integer | |
| react_on_success | Reaction to take on a successful action | continue | String | |
| react_on_fail | Reaction to take on a failed action | halt | String |
The transfer element defines the following tag elements:
| Tag Name | Description | Default | Tag Type | Note |
| src_name | Source System Name | null | String | Required |
| src_port | Source System Port | Connector Defined | Integer | Optional |
| src_user | Source System User Name | Connector Defined | String | Optional |
| src_password | Source System Password | Connector Defined | String | Optional |
| src_file | Source System File Name | null | String | Required |
| src_md5 | Source System File MD5 Checksum | null | String | Optional |
| dest_name | Destination System Name | null | String | One of dest_name or dest_group is required |
| dest_group | Destination System Group | null | String | One of dest_name or dest_group is required |
| dest_port | Destination System Port | Connector Defined | Integer | Optional |
| dest_user | Destination System Username | Connector Defined | String | Optional |
| dest_password | Destination System Password | Connector Defined | String | Optional |
| dest_file | Destination System File Name | null | String | Optional. src_file element value is used if the dest_file is not provided. |
The src_file element defines the following tag attributes:
| Tag Name | Description | Default | Tag Type | Note |
| src_file_type | Source System File Type | A | String |
Accepted Values are: "A" = ASCII "B" = Binary "E" = EBCDIC |
The dest_file element defines the following tag attributes:
| Tag Name | Description | Default | Tag Type | Note |
| dest_file_type | Destination System File Type | A | String |
Accepted Values are: "A" = ASCII "B" = Binary "E" = EBCDIC |
Example:
The transformation element accepts no attributes.
The transformation element defines the following tag elements:
| Tag Name | Description | Default | Tag Type | Note |
| src_name | Source System Name | null | String | Required |
| transformation | Transformation Name | null | String | Required |
Example:


Columns
| Name | Datatype | Comment |
| messageid | char(50) | Primary Key |
| time | Timestamp | |
| action | Text |
Columns
| Name | Datatype | Comment |
| connector | char(50) | Primary Key |
| classname | char(255) | |
| active | tinyint(1) | |
| function | char(50) |
References
| Source | Destination |
| (function) | CADM_CONNECTORFUNCTION (function) |
Columns
| Name | Datatype | Comment |
| function | char(50) | Primary Key |
Columns
| Name | Datatype | Comment |
| messageid | char(50) | Indexed |
| time | timestamp | |
| log | text | |
| pkey | int(11) | Primary Key |
Columns
| Name | Datatype | Comment |
| node | char(50) | Primary Key |
| active | tinyint |
Columns
| Name | Datatype | Comment |
| node | char(50) | |
| connector | char(50) | |
| priority | int(11) | |
| pkey | int(11) | Primary Key |
References
| Source | Destination |
| (node) | CADM_NODE (node) |
| (connector) | CADM_CONNECTOR (connector) |
Columns
| Name | Datatype | Comment |
| node | char(50) | Indexed |
| attribute | char(50) | |
| value | char(255) | |
| pkey | int(11) | Primary Key |
References
| Source | Destination |
| (node) | CADM_NODE (node) |
Columns
| Name | Datatype | Comment |
| fileid | int(11) | Primary Key |
| messageid | char(50) | |
| digest | char(64) | |
| filesize | bigint(11) |
Columns
| Name | Datatype | Comment |
| transformation | char(50) | Indexed |
| newvalue | char(255) | |
| tag | char(255) | |
| pkey | int(11) | Primary Key |

Required Components:
Supported Databases:
Start the database and create the database "axt".
Load the axt.<database_platform> file.
Download and Install JBoss5
Add the database jdbc driver to the jboss "server/default/lib" directory.
Update hibernate properties to match the database values.
Install JBoss Drools
Install JBoss Drools Guvnor
AXT Server
Socket Bridge
Client
JBoss Guvnor Rules

The client initiator uses standard tcp sockets for sending the messages to the AXT server.
A socket-to-jms bridge accepts the messages and injects them into AXT.
The socket bridge maintains the connection to the client during the life of the message.
Initiators are available in C, Perl and Java.
The initiator sends the message into a local daemon (axt-daemon) which maintains the message persistency and manages stale staged files.
When the message acknowledgement (ACK) is received, the responsibility for the file transfer is assigned to the AXT server and persistency files are purged.
The client can maintain a connection after the ACK to receive information from AXT on the actions taken.
The initiators and their functions are:
axt-exec - Perform a command on a destination system or group
axt-control - Perform an AXT control action (eg: GetLog, Ping, etc.)
axt-message - Perform messaging to a destination system (eg: HP OpenView opcmsg command) for alerting
axt-transfer - Perform a file transfer to a destination or group
The axt-daemon tool is used to manage the relay of messages from the client initiators to the AXT server.
The axt-daemon tool also manages the staging stoage space and the persistency of messages.
Syntax:
Flags:
| -c | Define a configuration file different from the default for axt-daemon options |
| -h | Print the command help text |
| -v | Perform control verbosely (Multiple to increase verbosity) |
Message Relaying:
axt-daemon will accept messages from the client initiator and establish the connection to the AXT server for sending the messages.
All responses will be written to the client.
Persistency Management:
When the AXT Daemon receives an actoin, it will persist the action and send a LCL (Local) message to the client.
If an ACK message is received from the AXT server, the persisted message is removed.
If no acknowledgement is received from the AXT server, the message will remain persisted and will retry at the interval defined in the configuration file.
The retry of the action will continue until an ACK is received from the AXT server.
Staging Management:
The axt-daemon will monitor the staging area for staging messages that have been left behind due to transfers that exit before removal of the staging file (eg: transfers with a LCL response threshold).
Staged files are removed if they remain in the staging area past the age defined in the configuration file.
Configuration:
The AXT Daemon reads the axt_client.cfg file for operating defaults.
axt_client.cfg file values are:
| DAEMONHOST | AXT Daemon listening interface |
| DAEMONPORT | AXT Daemon listening port number |
| AXTHOST | AXT server ip address or hostname |
| AXTPORT | AXT server port number |
| ERR_OUT_DEST | Destination for error messages (using AXT message) |
| STAGE_DIR | Location of staging files |
| STAGE_AGE | Age of stale staging files before removal (in seconds) |
| PERSIST_DIR | Location for persistency files |
| PERSIST_AGE | Time between retry of the sending of persistent messages (in seconds) |
By default, ACK, WRN and DIE messages are printed. Use the -v (verbose) flag to obtain more information.
The axt-exec tool is used to initiate a command on an AXT node.
Syntax:
Flags:
| -D Destination_Node |
Destination to perform command on. Destination group names must be preceeded by an asterisk(*). |
| -h | Print the command help text |
| -R Response_Level |
Perform transfer until the response defined is received (See response levels in section 1.3) |
| -v | Perform control verbosely (Multiple to increase verbosity) |
By default, ACK, LOG, WRN and DIE are returned.For more messages, use the -v (verbose) flag.
axt-exec does not exit until an error (DIE) or completion (END) message is received from the AXT server by default.
This can be overridden by the -R flag.
e.g.: axt-exec -R LCL -D *Prod hostname
The client sends messages to the axt-daemon which manages the persistence of the action.
NOTE: For testing commands from a new client installation, run "axt-control -D <AXT Host> hostname" (Where <AXT Host> is the AXT Server).
The axt-control tool is used to initiate a control action on the AXT server.
Syntax:
Flags:
| -A Control_Name | Control Name |
| -h | Print the command help text |
| -R Response_Level |
Perform transfer until the response defined is received (See response levels in section 1.3) |
| -v | Perform control verbosely (Multiple to increase verbosity) |
By default, ACK, LOG, WRN and DIE are returned.For more messages, use the -v (verbose) flag.
axt-control does not exit until an error (DIE) or completion (END) message is received from the AXT server by default.
This can be overridden by the -R flag.
e.g.: axt-control -a Purge 7 -R ACK
Control values can be provided when the control accepts arguments.
Running the control name ListControls will return all the controls available on the AXT server.
Default Controls are:
The standard client communicates to the AXT server through sockets (through the socket-to-jms bridge - see section 2.2). The java client communicates to the AXT server through Java JMS Messages.
NOTE: For testing communication from a new client installation, running "axt-control -A Ping" helps.
The axt-message tool is used to initiate a message to an AXT node.
Usage: axt-message \nExample: \n";
Syntax:
Flags:
| -D Destination_Node |
Destination to perform command on. Destination group names must be preceeded by an asterisk(*). |
| -h | Print the command help text |
| -R Response_Level |
Perform transfer until the response defined is received (See response levels in section 1.3) |
| -v | Perform control verbosely (Multiple to increase verbosity) |
| severity=normal|warning|minor|major|critical | Set the severity of the message |
| msg_grp=<message group> | Define the message group |
| node=<node> | Define the message node name |
| service_id=<service id> | Define the message service id |
| application=<application> | Define the messaging application |
| object=<object> | Define the messaging object |
| msg_text=<text> | Define the message text |
By default, ACK, LOG, WRN and DIE are returned.For more messages, use the -v (verbose) flag.
axt-message does not exit until an error (DIE) or completion (END) message is received from the AXT server by default.
This can be overridden by the -R flag.
e.g.: axt-message -R LCL severity=major application=TEST object=TEST msg_txt="Hello World"
The client sends messages to the axt-daemon which manages the persistence of the action.
NOTE: For testing messages from a new client installation, run "axt-message -D <AXT Host> application=TEST object=TEST msg_text="Test Message" " (Where <AXT Host> is the AXT Server).
The axt-transfer tool is used to initiate a transfer request on the AXT server.
Syntax:
Flags:
| -d | Debug output level |
| -D File_URL |
Destination File URL (eg: user1:userpass@sysb:/tmp/testfile) |
| -h | Print the command help text |
| -R Response_Level |
Perform transfer until the response defined is received (See response levels in section 1.3) |
| -s | Stage the data file before initiating the transfer |
| -S File_URL |
Source File URL (eg: /tmp/testfile) |
| -T Transformation_Name | Perform the action as defined in the transformation name provided |
Staging of the source data file is managed by axt-transfer if the "-s" flag is supplied.
If the "-s" flag is provided, the source file location is rewritten to match the new staging file name and location.
The staging location, prefix and unmanaged lifetime is defined in the client configuration file (see section 3.2).
Source files are validated with an MD5 checksum, provided by axt-transfer, that is confirmed on the AXT server after it have been pulled from the source.
By default, only WRN, ERR and DIE are returned. The LOG, ACK and END messages are printed to STDOUT if the -v (verbose) flag is provided. For other message display, use the -d flag.
axt-transfer does not exit until an error (DIE) or completion (END) message is received from the AXT server by default.
This can be overridden by the -R flag.
e.g.: axt-transfer -S /tmp/testfile -D sysb:/tmp/testfile -R ACK
The standard client communicates to the AXT server through sockets (through the socket-to-jms bridge - see section 2.2). The java client communicates to the AXT server through Java JMS Messages.
Transformation functionality has been integrated into the axt-transfer initiator. For performing transformed file transfers, call the initiator with the "-T" flag and the transformer name:
e.g.: axt-transfer -T SETTLEMENT


