Shared Appendix 10: Exits for the Process Task -- Open Systems and Windows NT Specifics | |
Index to Topics in this File:
Contents of this File:
Exit Placement Purpose Frequency Point of Name Execution
proc100 Directly Enables Once per after the post-sort table. RUN statement processing for the PROC of the SORT of the staged data. staged data. proc125 Directly Allows Once per before setting of table. the "merge" options DATA and open step. DATA step code prior to the merge of the detail- level and staged data. proc135 Directly Allows the Once per before the user to table. closing ; add his/her in the DATA own output statement. data sets. proc180 Duplicate Enables user Open data observation prevent the step code already in automatic and is run detail. deletion of once per observations observation. that duplicate those already in DETAIL. Set _delobs to 0 to prevent deletion of duplicate obs. By default _delobs is set to 1. proc200 When the Allows user Once per observation code to be observation is executed read found each time from the to have an output staged come from observation data set. the new is (staged) found data set. to have come from the new (staged) data set. A count of these observations is accumulated in the variable _addobs . proc205 Directly Allows the Once per before user to observation. the modify the OUTPUT observation statement before it on the is finally "merge" written to DATA the detail step. level. proc230 After Enables return Once per processing code setting table. has been or other final completed operations. for all tables.
For more details about the locations of the exit points:
Process Exits for Open Systems The following is an overview of the logic of %CSPROCES with the locations of the four exit points supported by IT Service Vision for Open Systems and Windows NT inserted. Exit points are indicated by <<< procnnn >>> where nnn is the three digit exit number. Note that Open Systems and Windows NT IT Service Vision supports exits 100, 125, 135, 200, 205, and 230 only. * Read raw data into staging data set; FILENAME RAWDATA ... ; DATA COLLECT.<table> ... ; RUN ; * Sort staged data to prepare for merge with DETAIL; PROC SORT DATA=COLLECT.<table>D ... ; RUN ; <<< proc100 >>> * Exit 100 is after the sort ; <<< proc125 >>> * Exit 125 is before merge ; * Merge DETAIL with COLLECT; DATA DETAIL.<table>D ( KEEP= <all vars to keep in the table> ) <<< proc135 >>> /* Exit 135 is before end of DATA stmt */ ; SET COLLECT.<table>_ (IN=FROMNEW) ... ; ... <<< proc180 >>> * Exit 180 allows duplicate obs to be kept; ... IF FROMNEW THEN DO; <<< proc200 >>> * Exit 200 knows observation from COLLECT; END; ... <<< proc205 >>> * Exit 205 is directly before OUTPUT DETAIL; OUTPUT DETAIL.<table>D; ... RUN; <<< proc230 >>> * Exit 230 is after all tables have been processed ;
The following is an example of creating and invoking the proc200 exit:
/* list of global macro variables that are needed */ %global CPTABLE; * This example converts metrics from an older version of the performance data collector (HP PCS) into their equivalent values in a newer version of the collector (HP MeasureWare); * Allocate the PDB; %CPSTART( pdb=/my/pdb, mode=batch, access=write ); * Create exit code for PCSGLB that maps PCS metrics to their MWA equivalents; %CPCAT ; cards4 ; * Define a macro to convert certain PCS global metrics to MWA equivalent; %macro FIXPCS ; %* Only do this for table PCSGLB; %if %UPCASE(&CPTABLE)=PCSGLB %then %do ; * Calculate the sum of these 6 metrics minus the (alleged) total; _d_i_f_f = abs( sum( GLBCSW, GLBINT, GLBSYS, GLBRTIM, GLBNICE, GLBUSER ) - GLBCPTO ); * This detects old-style data; if (_d_i_f_f<0.00001 or (GLBCPTO=1 and _d_i_f_f<0.1)) and GLBSCUT=. and GLBNMUT=. then do ; * Convert PCS metrics into their MWA form ; GLBSCUT=GLBSYS ; GLBNMUT=GLBUSER ; GLBSYS=GLBCSW + GLBINT + GLBSCUT ; GLBUSER=GLBRTIM + GLBNICE + GLBNMUT ; end ; drop _d_i_f_f ; %end ; %mend FIXPCS ; %FIXPCS ; ;;;; * Store the exit source in catalog WORK.PROCRED in entry PROC200.SOURCE; %CPCAT( cat=work.procred.proc200.source ) ; * Process the data; %CSPROCES( /my/extracted/data, *, exitsrc=work.procred, collectr=HP-PCS );
Note: Although the functionality of the "old-style" exit points will be made available using the "new style" of exits points in a future release, the older form described here will continue to be supported in IT Service Vision indefinitely.
For information about the old-style exit points:
OPEN SYSTEMS OLD-STYLE EXIT FACILITY OVERVIEW Three exit points exist for processing data from Cabletron SPECTRUM, HP Network Node Manager, IBM NetView for AIX, and SunNet Manager. These points allow the inclusion of user-developed SAS statements at a point directly before an observation read from the raw input file is output to the staging data set (COLLECT.tablenm). These exit points are included for compatibility with older releases of IT Service Vision and, though they will continue to be supported, should not be preferred to the newer exit point strategy that utilizes the EXITLIB= parm on the %CSPROCES macro. The newer style exit points are described in other Help files. At the old style exit point for each of these collectors, catalog entries named in this manner: SITELIB.CSEXITS.CS<tablenm>.SOURCE then DICTLIB.CSEXITS.CS<tablenm>.SOURCE are included (if they exist) in the SAS code generated by %CSPROCES. If both entries exist, both are included. Any syntactical or semantic errors introduced into %CSPROCES by the statements in these entries are entirely the responsibility of the user, as are their upkeep and transport should the PDB be copied. USAGE The exits generally should be used to set data values in the observation from information available in that one observation (such as the value of a user-added variable). The data has not gone through standard %CSPROCES data cleanup at this point. This has little effect for COLLECTOR=HP-OV, but for COLLECTOR=SPECTRUM and COLLECTOR=SUNETMGR this means that C2RATE variables have not been converted to rates and the value of DURATION has not been set. The exits should not be used to remove observations from the input data. Rather, the SUBSET= parameter in the %CSPROCES macro should be used. FUTURE The function of this exit facility will be replaced in a future release by one that includes more exit points and the ability to specify a personal exit library. Though the old-style exit points will continue to be supported, they will not be updated to exploit new functionality in IT Service Vision. EXAMPLE ****************************************************************; * This example adds an exit for HP-OV data ; ****************************************************************; * Define new PDB with added variable for department code; x "rm -r /usr/tmp/pdb-exit"; %CPSTART( pdb=/usr/tmp/pdb-exit, mode=batch ); %CPCAT; cards4; delete table name=hn2sys noerror; add table name=hn2sys ; create variable name=udept extname=DEPT type=character interpret=string length=16 kept=yes label='Dept' description='Department' ; update table name=hn2sys /* Do not change BY list for HP-OV tables */ day =( classvars= 'udept machine datetime hour shift' ) week =( classvars= 'udept machine datetime hour shift' ) month =( classvars= 'udept machine datetime hour shift' ) year =( classvars= 'udept machine datetime hour shift' ) ; ;;;; %CPCAT( cat=work.temp.exitdutl.source ); %CPDDUTL( entrynam=work.temp.exitdutl.source, list=y ); * Save the exit statements in dictlib with the proper name; %CPCAT; cards4; *-------------------------------------; * User exit to set UDEPT from MACHINE.; *-------------------------------------; retain _u_cnt_ 0; * This risks varname collision!;; select ; when (scan(machine,1) in ('dali' 'trinity')) udept = 'Personnel'; when (machine =: 'R' ) udept = 'Research'; when (machine = 'henry') udept = 'Facilities'; otherwise do; _u_cnt_ + 1; * Warn of unknown dept only 25 times; if _u_cnt_<=25 then put "WARNING: Unrecognized " machine=; udept = 'Unknown'; end; end; *-------------------------------------; * End user exit code. ; *-------------------------------------; ;;;; %CPCAT( cat=dictlib.csexits.cshn2sys.source ); * Process HP-OV data; %let csdelcol=0; * Opt for debug: Suppress COLLECT cleanup; %let cp_nmsg=2; * Opt for debug: Show generated DATA step; %CSPROCES( <rawdata>, hn2sys, collectr=HP-OV, subset=udept^="Unknown" ); %let csdelcol=2; * Reset to default; %let cp_nmsg=1; * Reset to default; %CPREDUCE;