ARM - SAS Interface to the ARM API for Release 8.2

Overview | SAS 8 ARM Log | SAS 8 Examples | Logging Performance Data

Release 8.2 ARM Log Format

The ARM Log looks similar to the following:

21OCT1998:10:41:32.353  ARM_INIT    AppID=1  AppName=Demo 1 Application  AppUser=abcusr
21OCT1998:10:41:32.478  ARM_GETID   AppID=1  ClsID=1  TxName=Test  TxDet=Test Transactions for Response Time Testing
21OCT1998:10:41:36.697  ARM_START   AppID=1  ClsID=1  TxSHdl=1
21OCT1998:10:41:49.556  ARM_UPDATE  AppID=1  ClsID=1  TxSHdl=1  TxElap=0:00:12.859  TxCpu=0:00:00.188  UpdtData=Customer Warehouse query
21OCT1998:10:41:54.931  ARM_STOP    AppID=1  ClsID=1  TxSHdl=1  TxStat=0  TxElap=0:00:18.234  TxCpu=0:00:00.266
21OCT1998:10:41:58.588  ARM_START   AppID=1  ClsID=1  TxSHdl=2
21OCT1998:10:42:10.213  ARM_UPDATE  AppID=1  ClsID=1  TxSHdl=2  TxElap=0:00:11.625  TxCpu=0:00:00.360  UpdtData=Update customer info
21OCT1998:10:42:16.635  ARM_STOP    AppID=1  ClsID=1  TxSHdl=2  TxStat=1  TxElap=0:00:18.047  TxCpu=0:00:00.486
21OCT1998:10:42:18.666  ARM_START   AppID=1  ClsID=1  TxSHdl=3
21OCT1998:10:42:27.635  ARM_UPDATE  AppID=1  ClsID=1  TxSHdl=3  TxElap=0:00:08.969  TxCpu=0:00:00.218  UpdtData=Delete customer
21OCT1998:10:42:31.525  ARM_STOP    AppID=1  ClsID=1  TxSHdl=3  TxStat=2  TxElap=0:00:12.859  TxCpu=0:00:00.360
21OCT1998:10:42:34.103  ARM_END     AppID=1  AppNCls=1  AppNTxSt=3  AppNTxSp=3  AppNTxUp=3  AppElap=0:01:01.750  AppCpu=0:00:01.485  AppAvgRt=0:00:16.380  AppMinTx=0:00:12.859  AppMaxTx=0:00:18.234

Each line is a variable length "record" with a maximum lrecl of 400. The date/time stamp and the call identifier always appear in the same column location. Subsequent information appears as a name=value pair. This was done for readability as well as ease of processing with SAS Named Input. The meaning of each variable name is documented (in alphabetical order) in the following table:



AppAvgRt Average response time for all transactions
in the application
AppCpu CPU time for the entire application
AppElap Elapsed time for the entire application
AppID Application ID
AppMaxTx Longest transaction in the entire application
AppMinTx Shortest transaction in the entire application
AppName Application name
AppNCls Number of transaction classes in the application
AppNTxSp Number of transactions in the application
that were stopped
AppNTxSt Number of transactions in the application
that were started
AppNTxUp Number of TRANS_UPDATE calls issued
in the application
AppUser Application UserID
ClsID Transaction class ID
TxCpu CPU time for a transaction
TxDet Transaction class detail
TxElap Elapsed time for a transaction
TxName Transaction class name
TxShdl Transaction instance start handle
TxStat Transaction status code
UpdtData Additional application-supplied data
on TRANS_UPDATE calls.

The log may be post-processed via the ARMPROC macro. This macro creates six output SAS datasets, one for each ARM call:

Dataset Name


INIT appid initdt appname appuser
GETID clsid getiddt appid txname txdet
START txshdl startdt clsid appid
UPDATE txshdl updtdt updtdata txelap txcpu
STOP txshdl stopdt txstat txelap txcpu
END appid enddt appncls appntxst appntxsp
appntxup appelap appcpu appavgrt appmintx appmaxtx

An example of the macro:


The lib parameter points to the output data library that will contain the six datasets and the log parameter specifies the path of the input ARM log external file.

Those 6 datasets may optionally be input to the ARMJOIN macro to produce merged datasets containing information about all applications and transactions:

        *  Process and join the ARM log data
        proc print data=app; run;

See the ARMANLZ.FRAME in the ARM SAMPLE library for examples of using such a process to graph response time data. The following are screen shots of some sample APP and TXN1 datasets: