Converts a SAS System 9 or later ARM log written in simple format to the more readable label=item ARM format used in Release 8.2.
Category: ARM Post-Processing Macro
%ARMCONV(login=' aname ',logout=' aname ');
LOGIN=' aname '
is the physical name of the input ARM log.
LOGOUT=' aname '
is the physical name of the output ARM log.
There are two ARM formats:
the SAS System 9 simple format, which is comma delimited
a label=item format that was created in Release 8.2.
The simple format for ARM log records minimizes the resources it takes to log ARM records. It does minimal formatting and delimits each item with a comma. The label=item format is the format used in Release 8.2. The label=item format requires time to format the string and decreases performance. SAS System 9 or later writes all ARM log records in simple format only. The %ARMCONV macro is used to convert a SAS System 9 or later ARM log to the label=item format.
I,1326895477.699000,1,1.792577,1.592289,DATASTEP;WIN_NT;9.00.00A0D011602,* G,1326895478.60000,1,1,putc, I,1326895478.110000,2,2.153096,1.632347,DATASTEP;WIN_NT;9.00.00A0D011602;ABS,* G,1326895478.200000,2,2,putc, I,1326895478.240000,3,2.283283,1.632347,DATASTEP;WIN_NT;9.00.00A0D011602;REL,* G,1326895478.340000,3,3,putc, G,1326895478.861000,1,4,$,PUTC S,1326895479.532000,1,4,1,3.434939,1.752520 P,1326895489.166000,1,4,1,12.938604,1.792577,0 G,1326895489.296000,1,5,.,PUTC
The following code converts the SAS System 9 or later ARM log to a Release 8.2 ARM log:
%armconv(login=' u:\arm\putc.log ',logout=' f:\arm\armlogs\putcV8.log '); run;
17JAN2002:14:04:37.699 ARM_INIT AppID=1 AppName=DATASTEP;WIN_NT;9.00.00A0D011602 AppUser=* 17JAN2002:14:04:38.600 ARM_GETID AppID=1 ClsID=1 TxName=putc TxDet= 17JAN2002:14:04:38.110 ARM_INIT AppID=2 AppName=DATASTEP;WIN_NT;9.00.00A0D011602;ABS AppUser=* 17JAN2002:14:04:38.200 ARM_GETID AppID=2 ClsID=2 TxName=putc TxDet= 17JAN2002:14:04:38.240 ARM_INIT AppID=3 AppName=DATASTEP;WIN_NT;9.00.00A0D011602;REL AppUser=* 17JAN2002:14:04:38.340 ARM_GETID AppID=3 ClsID=3 TxName=putc TxDet= 17JAN2002:14:04:38.861 ARM_GETID AppID=1 ClsID=4 TxName=$ TxDet=PUTC 17JAN2002:14:04:39.532 ARM_START AppID=1 ClsID=4 TxSHdl=1 TxName=$ TxDet=PUTC 17JAN2002:14:04:49.166 ARM_STOP AppID=1 ClsID=4 TxSHdl=1 TxStat=0 TxElap=0:00:12.939 TxCpu=0:00:01.793 17JAN2002:14:04:49.296 ARM_GETID AppID=1 ClsID=5 TxName=. TxDet=PUTC
Signifies the termination of an application
Category: ARM Macro
%ARMEND ( options );
APPID= SAS numeric variable or constant
is the application ID to use on the ARM_GETID function call. The value must be a SAS numeric variable or constant.
Note: Use APPIDVAR= instead of APPID= when coding new applications. APPID= is obsolete.
APPIDVAR= SAS numeric variable
is a SAS numeric variable that supplies the value of the application ID.
LEVEL= variable
is a variable that specifies the conditional execution level. The value must be a numeric constant or variable.
MACONLY=NO YES
allows the %ARMEND macro to be issued in open code, outside of a DATA step. You set the value to YES if the macros are in open code and NO if they are in a DATA step.
Default: NO
SCL=NO YES
is used only in SCL programs and specifies whether the macro is in an SCL environment. Valid values are YES and NO (no quotation marks).
Default: NO
Use %ARMEND when you are finished initiating new activity using the ARM API. %ARMEND is typically called when an application or user instance is terminating. Each %ARMEND is paired with one %ARMINIT to mark the end of an application. %ARMEND is a signal from the application that it will not issue any more ARM calls, and it is typically executed at application termination. ARM calls issued after an application has been ended with %ARMEND result in an error.
Note: You must terminate ARM with %ARMEND to avoid getting a warning or an error from %ARMPROC.
The input is an application ID that is generated by a previous %ARMINIT macro. If the APPID= or APPIDVAR= options are supplied, the specified value is used as the application ID. Otherwise, the value of the global macro variable _ARMAPID is used.
The _ARMRC variable, which is the error status code that was returned from the ARM_END function call, is the output.
data _null_; %armend; run;
data _null_; %arminit(appname=aname, appuser='sasxyz', appidvar=myapp); run; data _null_; %armend(appidvar=myapp); run;
Assigns a unique identifier to a transaction class
Category: ARM Macro
%ARMGTID (TXNNAME=' aname '< ,options >);
TXNNAME=' aname'
is a required transaction name that is a SAS character variable or quoted literal value.
Restriction: The transaction name has a 127-character limit.
APPID= SAS numeric variable or constant
is an application ID to use on the ARM_GETID function call. It must be a SAS numeric variable or constant.
Note: Use APPIDVAR= instead of APPID= when coding new applications. APPID= is obsolete.
APPIDVAR= SAS numeric variable
is a SAS numeric variable that supplies the value of the application ID.
LEVEL= numeric constant or variable
is a variable that specifies the conditional execution level. The value must be a numeric constant or variable.
MACONLY=NO YES
allows the %ARMINIT macro to be issued in open code, outside of a DATA step. You set the value to YES if the macros are in open code and NO if they are in a DATA step.
Default: NO
METRNAM1-7=' aname '
is the user name for the user-defined metric and must be a SAS character variable or quoted literal value.
Requirement: The user name and user-defined metric definition must be specified together.
METRDEF1-7= option
is the definition of the user-defined metric. The value must be one of the following:
COUNT32, COUNT64, COUNTDIV | use the counter to sum up the values over an interval. A counter can also calculate average values, maximums, and minimums per transaction, and other statistical calculations. |
GAUGE32, GAUGE64, GAUGEDIV | use the gauge when a sum of values is not needed. A gauge can calculate average values, maximums, and minimums per transaction, and other statistical calculations. |
ID32, ID64 | use the numeric ID simply as an identifier but not as a measurement value, such as an error code or an employee ID. No calculations can be performed on the numeric ID. |
SHORTSTR, LONGSTR | use the string ID as an identifier. No calculations can be performed on the string ID. |
Restriction: METRDEF7 can only equal LONGSTR. METRDEF1-6 cannot equal LONGSTR. |
Requirement: The user name and user-defined metric definition must be specified together.
SCL=NO YES
is used only in SCL programs and specifies whether the macro is in an SCL environment. Valid values are YES and NO (no quotation marks).
Default: NO
TXNDET=' aname '
is a transaction detail that is a SAS character variable or quoted literal value.
Restriction: The transaction detail has a 127-character limit.
TXNIDVAR= SAS numeric variable
is a SAS numeric variable that contains the value of the transaction ID.
%ARMGTID is used to name a transaction class. Transaction classes are related units of work within an application. One or more %ARMGTID calls are typically issued when the application starts in order to define each of the transaction classes used by the application.
The input is an application ID generated by a previous %ARMINIT macro. If the APPID= or APPIDVAR= options are supplied, the supplied value is used as the application ID. Otherwise, the value of the global macro variable _ARMAPID ID used.
The _ARMTXID variable, which is the transaction class ID that was returned from the ARM_GETID function call, is the output. Any variable that the TXNIDVAR= option points to is also updated.
data _null_; %armgtid(txnname='txn OE', txndet='Order Entry txn class'); run;
data _null_; %arminit(appname=aname, appuser='sasxyz'); %armgtid(txnname='txn OE', txndet='Order Entry txn class', txnidvar=txn1); put ''transaction id is '' txn1; run;
Signifies the initialization of an application
Category: ARM Macro
%ARMINIT (APPNAME=' aname '<, options >);
APPNAME=' aname '
is the required application name that is a SAS character variable or quoted literal value.
Restriction: The application name has a 127-character limit.
APPIDVAR= SAS numeric variable
is a SAS numeric variable containing the value of the application ID.
APPUSER=' aname '
is the application user ID that is a SAS character variable or quoted literal value.
Restriction: The application user ID has a 127-character limit.
GETID=NO YES
is optional and denotes whether to generate an ARM_GETID function call after the ARM_INIT. If the GETID value is YES, you can define the user metrics.
Default: NO
Requirement: TXNNAME= is required when you use GETID=YES.
LEVEL= numeric constant or variable
is a variable that specifies the conditional execution level. The value must be a numeric constant or variable.
MACONLY=NO YES
allows the %ARMINIT macro to be issued in open code, outside of a DATA step. You use YES if the macros are in open code and NO if they are in a DATA step.
Default: NO
SCL=NO YES
is used only in SCL programs and specifies whether the macro is in an SCL environment. Valid values are YES and NO (no quotation marks).
Default: NO
TXNIDVAR= SAS numeric variable
is a SAS numeric variable that contains the value of a transaction ID.
Restriction: Use the TXNIDVAR= only when using GETID=YES.
TXNDET=' aname '
is a transaction detail that is a SAS character variable or quoted literal value and can be specified only when GETID=YES.
Restriction: The transaction detail has a 127-character limit.
TXNNAME=' aname '
is a transaction name that is a SAS character variable or quoted literal value.
Requirement: TXNNAME= is required only when using GETID=YES.
A %ARMINIT macro call names the application and optionally the user of the application. Additionally, it initializes the ARM environment if a previous %ARMINIT has not been issued. It typically is executed when the application initializes.
None.
The _ARMAPID variable, which is the application ID that was returned from the ARM_INIT function call, is the output. If GETID=YES, then the _ARMTXID is returned also. Any variables for the APPIDVAR= and TXNIDVAR= are also updated.
data _null_; %arminit(appname='General Ledger'); run
data _null_; aname = 'Order Entry Application'; %arminit(appname=aname, appuser='sasxyz'); run;
data _null_; %arminit(appname='Warehouse App', getid=YES, txnname='Query 1', txndet='My long query'); run;
data _null_; %arminit(appname=aname, appuser='sasxyz', appidvar=appl); put ''application id is '' appl; run;
Reads the six SAS data sets created by the %ARMPROC macro and creates SAS data sets and SQL views that contain common information about applications and transactions
Category: ARM Post-Processing Macro
%ARMJOIN (<option(s)>);
LIBIN= libref
is the libref for the SAS data library that contains the six data sets created by %ARMPROC.
Default: WORK
LIBOUT= libref
is the libref for the SAS data library that contains the application and transaction data sets.
Default: WORK
TXNDS=YES NO
specifies whether the transaction data sets are to be created.
Default: YES
UPDTDS=YES NO
specifies whether the update data sets are to be created.
Default: YES
The %ARMJOIN macro reads the six output data sets produced by %ARMPROC. It merges the information from those data sets to produce a variety of output data sets and views for easier reporting of ARM data.
Note: The %ARMJOIN macro does not work from SCL. It must be run in the DATA step environment.
The input is the SAS data sets from %ARMPROC; therefore, you must run %ARMPROC before running %ARMJOIN.
The output is a single SAS library containing
information about applications (APP)
a DATA step view that contains information about all start handles, including parent correlator class and parent start handles (TXNVIEW)
a view that contains information about all update transactions (UPDTVIEW)
one transaction data set for each application
one update data set for each application.
The application data set is named APP and contains one observation for every application that is found in the input data. Each observation contains information such as application name, user ID, transaction counts, average application response time, and so on. Additionally, each observation contains a numeric variable 'appno' that is the identifier of the related transaction or update data set that contains more detailed transaction information.
The transaction data sets are named TXN1, TXN2, TXN3, and so on. Each data set corresponds to a single application and each observation represents a single ARM transaction containing start and stop times, elapsed times, and CPU time.
The TXNVIEW view joins all transaction data sets and presents them as a single data set. Start handle elapsed time and CPU time are calculated from the start and stop transactions. If the start handle has a parent start handle, the class ID and start handle of the parent are included using the variables PARCLS= and PARHDL=. If no parent is specified, these variables will contain missing values.
The update data sets are named UPDT1, UPDT2, UPDT3, and so on. Each data set corresponds to a single application and contains multiple observations for each ARM transaction. Each observation contains the ARM call datetime, an ARM call sequence ID, and if applicable , elapsed time, CPU time, and update data.
The UPDTVIEW view joins all update data sets and presents them as a single data set.
The transaction data sets are easier to use for analyzing individual ARM transactions because all information about a transaction is collapsed into one observation. However, the transaction data sets do not contain any information from %ARMUPDT calls.
The update data sets are similar to the transaction data set; however, information about a single transaction is spread over several observations. These data sets contain logged data buffer information from all %ARMUPDT calls.
filename ARMLOG 'd:\armlog'; %armproc(); %armjoin();
libname user 'c:\arm\user'; %armjoin(libin=user,libout=user); run;
Processes an input ARM log and outputs six SAS data sets that contain the gathered information from the log
Category: ARM Post-Processing Macro
%ARMPROC (<option(s)>);
LIB= libref
is the libref for the SAS data library to contain the six data sets.
Default: WORK
LOG= pathname
is the pathname for the physical location of the ARM log. If a pathname is not supplied, you must preassign the ARMLOG fileref before calling the macro.
LOGNEW= pathname
is the pathname the physical location of the new ARM log uses when ARM processing is resumed.
The %ARMPROC macro reads an ARM log and outputs six SAS data sets that contain the information from the log. This macro reads the variable name and value pairs from the ARM log as named input (var=value). You should either preassign the ARMLOG fileref prior to calling the macro or supply the LOG= option. If the ARMLOC= option is ignored, an actual FILENAME statement is required to preassign the ARMLOG fileref.
Note: The %ARMPROC macro does not work from SCL. Any commas that are part of the name cause the log to be parsed incorrectly. Commas in the data area of the UPDATE record do not cause any issues.
The external file containing the ARM log is the input.
The %ARMPROC macro creates six SAS data sets. These SAS data sets contain information from calls to the ARM API function calls. The six SAS data sets are
INIT-contains information from all arm_init calls
GETID-contains information from all arm_getid calls
START-contains information from all arm_start calls
UPDATE-contains information from all arm_update calls
STOP-contains information from all arm_stop calls
END-contains information from all arm_end calls.
libname user 'f:\arm\user'; %armproc(lib=user); run;
libname armout ' sas library name '; %armproc(lib=armout,log=c:\userid\arm\armlog);
Marks the end of a transaction instance
Category: ARM Macro
%ARMSTOP ( options );
LEVEL= numeric constant or variable
is a variable that specifies the conditional execution level. The value must be a numeric constant or variable.
MACONLY=NO YES
allows the %ARMSTOP macro to be issued in open code, outside of a DATA step. You set the value to YES if the macros are in open code and NO if they are in a DATA step.
Default: NO
METRVAL1-7=' aname '
is the value of the user-defined metric. The value must be a SAS character variable or a quoted literal value up to eight characters in length.
Requirement: The value of the user-defined metric must correspond to the user metrics defined in %ARMGTID.
SCL=NO YES
is used only in SCL programs and specifies whether the macro is in an SCL environment. Valid values are YES and NO (no quotation marks).
Default: NO
SHANDLE= SAS numeric variable or constant
is a start handle to use on the ARM_UPDATE function call. The value must be a SAS numeric variable or constant.
SHDLVAR= SAS numeric variable
is a SAS numeric variable that contains the value of the start handle.
STATUS= SAS numeric variable or numeric constants
is a transaction status value to pass to the ARM_STOP function call. The value must be a SAS numeric variable or numeric constants 0, 1, or 2. The default is 0.
%ARMSTOP signals the end of a transaction, that was started using an %ARMSTRT macro call.
The input is a start handle that is generated from a previous %ARMSTRT call. If the SHANDLE= or SHDLVAR= options are supplied, the specified value is used as the start handle. Otherwise, the value of the global macro variable _ARMSHDL is used.
The _ARMRC variable, which contains the error status code that was returned from the ARM_STOP function call, is the output.
data _null_; %armstop; /* status will default to zero*/ run;
data _null_; rc = 2; %armstop(status=rc); run;
data _null_; %arminit(appname=aname, appuser='sasxyz'); %armgtid(txnname='txn OE', txndet='Order Entry txn class'); %armstrt(shdlvar=sh1); run; data _null_; %armstop(shdlvar=sh1); run;
Signals the start of execution of a transaction instance and returns a unique handle that is passed to %ARMUPDT and %ARMSTOP
Category: ARM Macro
%ARMSTRT ( options );
APPID= SAS numeric variable or constant
is an application ID to use on the ARM_GETID function call. The value must be a SAS numeric variable or constant.
Restriction: Use the APPID= only when using GETID=YES. See %ARMINIT for information about GETID=YES.
Note: Use APPIDVAR= instead of APPID= when coding new applications. APPID= is obsolete.
APPIDVAR= SAS numeric variable
is a SAS numeric variable that supplies the value of the application ID.
Restriction: Use the APPIDVAR= only when using GETID=YES. See %ARMINIT for information about GETID=YES.
CORR= n
is an option to define the type of parent and child transactions.
Default:
Requirement: You use CORR= only when using correlators .
GETID=NO YES
is optional and denotes whether to generate an ARM_GETID before the ARM_START. If the GETID value is YES, you can define the user metrics.
Requirement: TXNNAME= is required when using GETID=YES.
Default: NO
LEVEL= numeric constant or variable
is a variable that specifies the conditional execution level. The value must be a numeric constant or variable.
MACONLY=NO YES
allows the %ARMSTRT macro to be issued in open code, outside of a DATA step. You set the value to YES if the macros are in open code and NO if they are in a DATA step.
Default: NO
METRVAL1-7=' aname '
is the value of the user-defined metric. The value must be a SAS character variable or a quoted literal value up to eight characters in length.
Requirement: The value of the user-defined metric must correspond to the user metrics defined in %ARMGTID.
PARNTVAR= SAS numeric variable
is the name of a SAS numeric variable that contains the value of the parent transaction start handle and is only used when defining a child transaction. PARNTVAR= is used only when the CORR= option has a value of 2 or 3.
SCL=NO YES
is used only in SCL programs and specifies whether the macro is in an SCL environment. Valid values are YES and NO (no quotation marks).
Default: NO
SHDLVAR= SAS numeric variable
is a SAS numeric variable that contains the value of the start handle. SHDLVAR= is required when using correlators to define parent and child transactions.
TXNDET=' aname '
is a transaction detail that is a SAS character variable or quoted literal value.
Requirement: TXNDET= is used only with GETID=YES.
Restriction: The transaction detail has a 127-character limit.
TXNID= SAS numeric variable or constant
is a transaction ID to use in the ARM_START function call. The value must be a SAS numeric variable or constant.
Note: Use TXNIDVAR= instead of TXNID= when coding new applications. TXNID= is obsolete.
TXNIDVAR= SAS numeric variable
is a SAS numeric variable that contains the value of the transaction ID when GETID=NO. It contains the value of the TXN ID when GETID=YES.
TXNNAME=' aname '
is the transaction name that is a SAS character variable or quoted literal value.
Requirement: TXNNAME= is required only when using GETID=YES.
Restriction: The transaction name has a 127-character limit.
%ARMSTRT signals the start of a transaction, also known as a transaction instance. A transaction instance is an instantiation of a transaction class that was previously defined by %ARMGTID.
If user metrics are defined for a transaction class using %ARMGTID, the value for the user metrics begins with the METRVAL1-7= option.
The CORR= option defines the type of parent (primary) and child (component) transactions using the following values:
| not part of a related group |
1 | parent transaction |
2 | child transaction |
3 | child of one transaction and parent of another. |
Note: You use CORR= only when using correlators.
Each child start handle variable must be accompanied with a parent start handle variable. Below is a code fragment to show the use of correlator types and the SHLDVAR= and PARNTVAR= options:
%armstrt(txnidvar=txnid,corr=1,shdlvar=HDL100); %armstrt(txnidvar=txnid,corr=0,shdlvar=HDL200<, user metrics>); %armstrt(txnidvar=txnid,corr=2,shldvar=HDL110,parntvar=HDL100); %armstrt(txnidvar=txnid,corr=3,shldvar=HDL120,parntvar=HDL100);
The transaction class ID that is generated by a previous %ARMGTID call is the input. If the TXNID= or TXNIDVAR= options are supplied, the supplied value is used as the transaction ID. Otherwise, the value of the global macro variable _ARMTXID is used.
If GETID=YES and the APPID= or APPIDVAR= options are supplied, the supplied value is used as the application ID. Otherwise, the value of the global macro variable _ARMAPID is used.
The _ARMSHDL variable, which is the start handle that was returned from the ARM_START function call, is the output. If GETID=YES, then the _ARMTXID variable is updated also. The variables that TXNIDVAR= and SHDLVAR= point to are also updated if supplied.
data _null_; %arminit(appname='Forecast')' %armgtid(txnname='Txn 1A', txndet='Forecasting Txn Class'); %armstrt; run;
data _null_; %arminit(appname=aname, appuser='sasxyz'); %armgtid(txnname='txn OE', txndet= 'Order Entry txn class' txnidvar=txnnum); data _null_; %armstrt(txnidvar=txnname); run;
data _null_; %arminit(appname='Forecast', appidvar=savapp); run; data _null_; %armstrt(getid=YES, txnname='Txn 1A', txndet='Forecasting Txn Class', appidvar=savapp); run;
Updates a transaction that has been previously started
Category: ARM Macro
%ARMUPDT ( DATA= < option >, < options >);
DATA=' variable '
is a SAS character variable or a quoted literal user-supplied data buffer that contains text to pass to the ARM_UPDATE function call. DATA = is not required but highly recommended. This information is mutually exclusive of user-defined metric values.
Restriction: The data value has a 1,020-character limit.
LEVEL= numeric constant or variable
is a variable that specifies the conditional execution level. The value must be a numeric constant or variable.
MACONLY=NO YES
allows the %ARMUPDT macro to be issued in open code, outside of a DATA step. You set the value to YES if the macros are in open code and NO if they are in a DATA step.
Default: NO
METRVAL1-7=' aname '
is the value of the user-defined metric. The value must be a SAS character variable or a quoted literal value up to eight characters in length. These values are ignored if the DATA= option is used.
Requirement: The value of the user-defined metric must correspond to the user metrics defined in %ARMGTID.
SCL=NO YES
is used only in SCL programs and specifies whether the macro is in an SCL environment. Valid values are YES and NO (no quotation marks).
Default: NO
SHANDLE= SAS numeric or constant
is a start handle to use on the ARM_UPDATE function call. The value is a SAS numeric or constant.
Note: Use SHDLVAR= instead of SHANDLE= when coding new applications. SHANDLE= is obsolete.
SHDLVAR= SAS numeric variable
is a SAS numeric variable that contains the value of the start handle.
%ARMUPDT is a call that you can execute any number of times after a %ARMSTRT and before a %ARMSTOP. It allows you to supply any additional information about the transaction in progress.
The input is a start handle that is generated by a previous %ARMSTRT call. If the SHANDLE= or SHDLVAR= options are supplied, the specified value is used as the start handle. Otherwise, the value of the global macro variable _ARMSHDL is used.
Note: User metric values and user-supplied data buffers are mutually exclusive parameters. Each requires its own update call to get both types of data into the UPDATE records.
The _ARMRC variable, which contains the error status code that was returned from the ARM_UPDATE function call, is the output.
data _null_; updtdata = 'Txn still running at' put (time(),time.); %armupdt(data=updtdata); run;
data _null_; %arminit(appname=aname, appuser='sasxyz'); %armgtid(txnname='txn OE', txndet='Order Entry txn class'); %armstrt(shdlvar=sh1); run; data _null_; %armupdt(data='OE txn pre-processing complete', shdlvar=sh1); run;