|
1 | 1 | # mq-smf-csv
|
2 | 2 | Simple formatter for MQ's SMF records to assist with import to spreadsheets
|
| 3 | + |
| 4 | +README for mqsmfcsv |
| 5 | +=================== |
| 6 | + |
| 7 | +This package has been created to simplify the job |
| 8 | +of doing your own analysis of MQ SMF records from a z/OS system, |
| 9 | +by making it easy to import formatted records into |
| 10 | +a database or spreadsheet. |
| 11 | + |
| 12 | +The program takes the data from a z/OS file, and runs on |
| 13 | +a Windows or Unix system, creating standard CSV |
| 14 | +(comma-separated value) output files. |
| 15 | + |
| 16 | +Unlike packages such as SupportPac MP1B, there is no interpretation |
| 17 | +at all of the SMF data. That can be done by your own spreadsheet or |
| 18 | +database programs and macros. |
| 19 | + |
| 20 | +This makes the code for the program |
| 21 | +very easy to understand; all the structures in the SMF records |
| 22 | +are printed directly. |
| 23 | + |
| 24 | + |
| 25 | +Usage |
| 26 | +===== |
| 27 | +Collect the MQ SMF data in the usual way. |
| 28 | +Dump that data to a z/OS file using a tool such as ... |
| 29 | +Then download that file to |
| 30 | + |
| 31 | +The output files are written to a directory that you name |
| 32 | +on the command line. There is one file for each type of |
| 33 | +element - QPST, WTID etc. The files contain a line of |
| 34 | +column headers, followed by the actual data with each |
| 35 | +field separated by a comma. Spreadsheets such as LibreOffice |
| 36 | +or Excel can then import the data directly. |
| 37 | + |
| 38 | +No attempt is made to explain the column headers; these come |
| 39 | +straight from the field names. More information can be found in |
| 40 | +the csqdsmfc.h header file or the product documentation. |
| 41 | + |
| 42 | +Date and time are split into separate columns; the time |
| 43 | +includes a microsecond portion which is separated using ',' as using '.' |
| 44 | +as the decimal point seems to confuse the automatic importers on |
| 45 | +several spreadsheets. There is no information directly available about |
| 46 | +timezone offsets, so it is possible that the timestamps could be either |
| 47 | +GMT (CUT) or localtime, depending on system configurations. |
| 48 | + |
| 49 | +Durations are split into separate columns for |
| 50 | +seconds and microseconds. This is shown in the column headings. |
| 51 | + |
| 52 | +Options |
| 53 | +======= |
| 54 | + |
| 55 | + printf("Usage: mqsmfcsv [-o <output dir>] [-a] [ -d <level> ]\n"); |
| 56 | + printf(" [ -i <input file> [-m <max records>] [-r ] [-t <ticker>]\n"); |
| 57 | + printf(" -a Append to existing files if they exist. Default is overwrite\n"); |
| 58 | + printf(" -d <level> Debug by dumping binary records (level = 1 or 2)\n"); |
| 59 | + printf(" -i <Input file> Default is to read from stdin\n"); |
| 60 | + printf(" -m <Max records> End after formatting M records. Default to process all\n"); |
| 61 | + printf(" -o <Directory> Where to put output files\n"); |
| 62 | + printf(" -r Do not print '=' on numeric-looking strings\n"); |
| 63 | + printf(" -t <Ticker> Print progress message every T records\n"); |
| 64 | + |
| 65 | +Design and Development |
| 66 | +====================== |
| 67 | + |
| 68 | +Binaries are provided for some platforms. For other |
| 69 | +platforms, you will need to compile the code yourself. |
| 70 | +Familiarity with Makefiles and compiling C programs is |
| 71 | +assumed. |
| 72 | + |
| 73 | +First, you need to get a copy of the MQ product-provided |
| 74 | +header file on z/OS that defines the structures for SMF |
| 75 | +elements. This is called csqdsmfc.h and can be found on your |
| 76 | +z/OS installation. Download a copy of that to your system. |
| 77 | + |
| 78 | +Using the provided Makefiles as a template, set the |
| 79 | +appropriate compilation options for your platform. |
| 80 | +For Unix platforms, the "M" script may be a convenient |
| 81 | +way to override options in the Makefile, as most Unix |
| 82 | +platforms are likely to be very similar in how to build |
| 83 | +programs. |
| 84 | + |
| 85 | +The Makefiles take the z/OS header file and make some |
| 86 | +minor transformations so that it is suitable for |
| 87 | +compiling on other platforms. |
| 88 | + |
| 89 | +Note that the mqsmfcsv program needs to be compiled with |
| 90 | +fixed datatype sizes - in particular, "int" is 32-bit, and |
| 91 | +"long long" is used to represent a 64-bit value. Generally |
| 92 | +this means that the program itself is compiled as 32-bit. |
| 93 | + |
| 94 | +The current version of this program was developed based on the |
| 95 | +MQ V8 SMF structures; it will run against data |
| 96 | +generated by older queue managers |
| 97 | +but will not compile if an older version of csqdsmfc.h is used. |
| 98 | + |
| 99 | +Each data structure is formatted by its own function, contained in |
| 100 | +the print*.c modules. Most of these are very straightforward to |
| 101 | +understand. Some common macros defined in mqsmf.h make it |
| 102 | +easy to add each field from the structure; they also simplify handling |
| 103 | +common fields that need to be printed on every type of SMF element. |
| 104 | + |
| 105 | +A few special cases exist, such as handling bitfields or arrays. But |
| 106 | +again, the code where these are used ought to be obvious, and can be |
| 107 | +used as strategies for handling new types of SMF element. |
| 108 | + |
| 109 | +Sample data |
| 110 | +=========== |
| 111 | +The package includes a tiny amount of sample data that can be used to |
| 112 | +demonstrate the formatting. |
| 113 | + |
| 114 | + |
| 115 | + |
| 116 | +downloading ... |
| 117 | + |
| 118 | + |
| 119 | +Sequential, Variable Length Records |
| 120 | + |
| 121 | +The following is a sample FTP script to retrieve (or GET) a sequential file with variable-length records from a Mainframe system to a Windows system. This FTP script is for using at the client or Windows system. |
| 122 | + |
| 123 | +userid |
| 124 | +password |
| 125 | +CD .. |
| 126 | +PWD |
| 127 | +BINARY |
| 128 | +QUOTE SITE RDW |
| 129 | +GET mainframe.dataset.name drive:\directory\filename.ext |
| 130 | +QUIT |
| 131 | + |
| 132 | +The file must be transferred in BINARY. This will maintain the EBCDIC-encoding and the mainframe |
| 133 | +numeric formats for packed-decimal, binary and zoned-decimal data. |
| 134 | + |
| 135 | +One of the following FTP statements must be used prior to a GET or PUT statement in order to |
| 136 | +download the Record-Descriptor-Word (RDW) and the possible Block-Descriptor-Word (BDW). The BDW and |
| 137 | +RDW are in binary format so it is critical to download in binary even if the records in the file |
| 138 | +are all text strings. Prior to a GET use one of the following statements. |
| 139 | +QUOTE SITE RDW |
| 140 | + or |
| 141 | +LITERAL SITE RDW |
| 142 | + |
| 143 | +If the FTP process is to be executed on the mainframe the GET statement will need to be replaced |
| 144 | +with a PUT and the QUOTE or LITERAL statement will need to be replaced with the following statement. |
| 145 | + |
| 146 | +LOCSITE RDW |
| 147 | + |
| 148 | +Once the file is transferred it is a mirror of the mainframe format with EBCDIC-encoding. Each |
| 149 | +record is preceded by the Record Descriptor Word (RDW) and possible Block Descriptor Word (BDW) and |
| 150 | +must be converted to a Micro Focus formatted sequential file with variable length records. This |
| 151 | +process is described in the following sections of this document. |
0 commit comments