Previous Topic: 9.1.1.3 ASG-TMON for CICS Data

Next Topic: 9.1.3 Dynamic Processing

9.1.2 CMF Dictionary Processing


To read CMF records, the CICS Analyzer must first obtain the
description of each data field from the data dictionary
records.  The only exception to this is when reading the
exception class data in CICS 3.1 and higher releases, which
do not produce a data dictionary for this class of data.  The
following provides a general flow of CMF dictionary
processing.
 
In the first DAILY execution after CICS Analyzer has been
installed, DAY040 expects to find the dictionary records
ahead of the data records for each region in the input file.
When a dictionary record is found, it is saved in storage so
that it can be used to read subsequent data records.  If a
data record is found before the dictionary record, and it is
not a CICS 3.1 (or higher) exception record, then it is
rejected.  If the input file contains multiple dictionary
record for the same region and CMF class, the CICS Analyzer
keeps the latest copy in storage.
 
To keep the dictionary information in storage, the CICS
Analyzer stores the field ID, type, and length of each data
field in SAS arrays.  Each array references multiple
monitoring class, such as performance, accounting (pre 3.1)
and exception (pre 3.1).  The index for these arrays is
derived based on the connector value that associates a
dictionary entry with its corresponding data field.
 
Since the connector values are only unique within a
particular class, and multiple classes of data exist in each
array, a class index is added to the connector value to
derive the subscript for the dictionary arrays.  The class
index for accounting data is 0; the class index for
performance data is 20; and the class index for exception
data is 296.  To find the dictionary array index for a
particular data element, the CICS Analyzer adds the element's
connector value to 0, 20, or 296, respectively, depending on
the element's class.
 
When storing the dictionary information in SAS arrays, DAY040
performs additional conversion to accommodate inconsistencies
in the data from one CICS release to the next, such as
overlapping field IDs for user clocks and counters in CICS
release 2.1 and higher.  For user clocks, DAY040 changes the
left-most digit of the field ID to a 7; for user counters the
left-most digit is changed to an 8, and for user areas a 9.
 
DAY040 also changes the field ID to type S data fields for
CICS release 2.1 and above.  This is because type S data
fields contain an additional flag byte which was absent in
CICS 1.6.  If the field ID is less than 100, DAY040 changes
the left-most digit to 5; otherwise, it is changed to 6.
 
Because the size of the SAS Program Data Vector, which
contains the names and locations of a program's SAS
variables, is limited, the dictionary arrays (one set per
region) are maintained in a storage table outside of the
Program Data Vector.  This means that only one set of field
ID, type, and length arrays is actually defined to SAS.  As a
result, the SAS arrays are refreshed each time the region and
class have changed, so that they always contain the
dictionary information necessary to process the current data
record.
 
To move the dictionary information between the SAS arrays and
the storage table, the function CICVMAM is used.  This
function builds and accesses the storage table via GET and
PUT requests.  A GET request causes CICVMAM to locate the
dictionary information in the storage table and move them to
the SAS arrays.  A PUT request moves the data in the SAS
arrays to the storage table.
 
Once the SAS arrays have been loaded with the proper
dictionary information by CICVMAM, DAY040 calls the informat
$CICDEP to read the data records and store the data in SAS
variables.
 
At the end of input processing in the first DAILY, assuming
no errors have occurred, the CICS Analyzer moves the
dictionary information from the storage table to
DETAIL.CICCDC01.  Each observation in CICCDC01 contains the
connector, type, length, and field ID of a single CMF data
field.  The observations are keyed by APPLID, CICSID, and
CICSREL (CICS release number).  They also contain a last
reference date, which is used to delete observations that are
not referenced within a specified period of time.
 
In subsequent DAILY executions, the CICS Analyzer loads the
content of DETAIL.CICCDC01 in storage prior to processing the
input file.  This is done to ensure the successful processing
of data records which have no corresponding dictionary
records in the input file.  It is normal for dictionary
records to be absent from input, since many shops do not shut
down CICS on a daily basis (dictionary records are written
when CMF is first activated).  Once the dictionary
information is loaded in storage, the same logic described
above is used to read the data records.  At the end of input
processing, if all goes well, the content of the storage
table is moved to DETAIL.CICCDC01.  The same dictionary
processing logic takes place for the next DAILY run.