******* Scripts ******* There are some scripts in adapya-adabas that can be run on the command line. Usually they accept Unix style parameters. A help page is shown with the help option. * asmfreader.py - read and print Adabas SMF records * dblist.py - detect accessible databases * mproc.py - Multi-Threaded Reading * ticker.py - update Ticker file in defined interval * search.py - Search or read an Adabas file asmfreader.py - read Adabas SMF records ======================================= Reader for Adabas SMF records from a sequential file - written in a Adabas nucleus session with ADARUN parameter SMFOUT=FILE on z/OS. When run e.g. on Windows, it can first fetch the file per FTP from z/OS and then process it (parameter -d). Supports ASMF versions 1.3 (ada834), 1.4 (ada842), 1.5 (azp835) and 1.6 (azp843) - as of 2018-04-12:: Usage: asmfreader [options] options: -d --dsn remote SMF file -f --file local SMF file -b --bfile local SMF file VB blocked with BDW -m, --maxrec maximum number of records (default 10) -p, --pwd FTP ser1.3.0ogin password (*) -u, --user FTP ser1.3.0ogin userid (*) -h, --host of IBM FTP server (*) -c, --config Set/show configuration -v, --verbose dump records and more output -?, --help Defaults marked with (*) are taken from configuration. The configuration for user specific parameters can be stored with the --config option. The reader can transfer the file (--dsn) per FTP from a remote z/OS with the RDW option or can access the file locally if already transfered (--file). On z/OS the --bfile option may be used. Option -b/--bfile if file includes block descriptor word (BDW) e.g. when running on z/OS with DCB=(RECFM=U) override on DD stmt Examples: 1. set configuration user, password asmfreader --config --user hugo --pwd secret 2. read remote SMF dataset and print asmfreader -d mm.db8.smf -h ZOS1 Example Batch Job for z/OS //MMPYSMF JOB MM,CLASS=K,MSGCLASS=X //* //* asmfreader.py reads Adabas SMF file from DD:SMF //* -h option will print usage / description //* //BPX EXEC PGM=BPXBATSL //SMF DD DISP=SHR,DSN=MM.DB8.SMF,DCB=(RECFM=U) //STDPARM DD * PGM /u/mm/py27/bin/python /u/mm/py27/bin/python/asmfreader.py -b dd:SMF //STDOUT DD SYSOUT=* //STDERR DD SYSOUT=* //STDENV DD PATH='/u/mm/batsl.env',PATHOPTS=ORDONLY // dblist.py - detect accessible databases ======================================= With *dblist.py* you can check if databases are active. In addition it allows to get the Adabas version information and display the FDT of a loaded file:: > python dblist.py -d8 Check if the following databases are active: 8 Database 8 is active, V8.4.2.0, arc=4, opsys=Mainframe (IBM/Siemens/Fujitsu), cluster nucid 0, High-order-byte-first/EBCDIC/IBM-float Help information with the --help option:: Detect accessible databases and display properties (architecture, platform and version), if file number is specified also return the FDT Usage: python dblist.py --dbids [--fnr --xopt ] Options: -a, --auth dbid,userid,password;... authentication for user for database (open systems only) -d, --dbids is a valid dbid or a list of dbids (i,j,...) may have to be quoted "(i,j..)" or a range of dbids i-j -e --env set adalnk parameter -f --fnr display FDT of Adabas file number -n, --noclose leave session open (use for testing only) -r, --replytimeout Adalink max. wait time on reply -s, --silent don't print rsp-148 (use for large ranges) -x, --xopt =1 use LF/X, =2 use LF/F, =3 use LF/I =0 use LF/S (default) (MF: from V8.2, OS: from V6.2) use acbx for 1 and 2 -w, --pwd password for ADASAF databases -u, --usr userid for ADASAF database -v --verbose dump adabas buffers 1 = after call 2 = before and after -h, --help display this help Examples: python dblist.py -d 241 python dblist.py -s -d 1-10000 python dblist.py -dbids (241,10007,65535) python dblist.py -d 241 -f 10 display FDT of db 241 file 10 ticker.py - update Ticker file in defined interval ================================================== With *ticker.py* you can update the Ticker file in predefined intervals. For example database 8, file 16 is updated 3 times with an interval of 1 second:: >> python ticker.py -d8 -f16 -c3 -i1 Updating DB 8 file 16 with 3 ticks, interval=1 sec 2016-11-22 15:45 ... Terminated after 3 ticks. Parameter information with the help option:: The Ticker file has the following field 01,TI,20,A,DE,NU Usage: python ticker.py --dbid --fnr --count --interval or to read the ticker records python ticker.py --dbid --fnr --browse Required Parameters: -d dbid -f file number of ticker file Options: -b --browse read ticker file -C cipher code -h, --help display this help -O run optimzied, debug code not generated -c specifies the number of ticks to write otherwise runs forever -i interval in seconds (default = 60) -p optional password -r, --replytimeout Adalink max. wait time on reply -v verbose, default = 0, 1 = print target info 2 = log after call buffers Example (short parameter form): python ticker.py -d 241 -f 12 -c 5 python ticker.py -d 241 -f 12 -r -c 100 # read at max 100 records Each minute will have a separate record with ISN=minute of day. At most there will be 1440 ISNs. If the interval is other than 60 the number of records changes by factor 60/i search.py - search or read in Adabas file ========================================= With search.py you can search or read in a database file:: >> python search.py -d8 -f11 --format AO,AE. --read AO. --value SALE04 -q1 -seq- -ISN- ---Record--- 1 398 SALE04DEL CASTILLO ENTER or number to read next n records:0 Parameter information with the help option:: Usage: search --dbid --fnr [--format ] [--isnlist ] [--password ] [--search ] [-value ] [--read {|ISN|PHY} [--sort ] Options: -a, --arc client architecture (e.g. 9 = Wintel) -c --format format of requested fields -d, --dbid is a valid dbid -f --fnr Adabas file number -g --acode User encoding for Alpha fields (e.g. 819 for Latin1) -i --isnlist return list of ISNs with isn buffer to hold -j --isnlowerlimit lower limit on ISN for search, start ISN for read -k --cred ,[,newpsw] Userid, password and optionally new password for security system (ADASAF) -n, --noclose leave session open (use for testing only) and do not start with OP (if no acode,arc wcode and timezone parameters are given) -p, --password set password for the session -q, --quantity number of records to read (default 1) all or 0 (not records to read) if there are more records user will be prompted -r, --replytimeout Adalink max. wait time on reply -s --search search fields -t --sort up to 3 field names may be specified, uses S2 command e.g. -t AABBCC -u --wcode User encoding for Wide fields (e.g. 4091 for UTF-8) -v --verbose log adabas buffers 1 = after call 2 = before and after -w --value search value -h, --help display this help -l, --read |ISN|PHY read command L3|L1|L2 rather than search S1 -x, --acbx use acbx -z, --timezone use timezone in session e.g. Europe/Berlin Examples S1 with search/value buffer specified >>> search -d 10006 -f 9 -r 7200 --value "SALE04DEL CASTILLO " --search S2. --format AO,AE. L3 with default search crit on S2 = SALE04* >>> search -d 10006 -f 9 -r 7200 --format AO,AE. --read AO. --value SALE04 mproc.py - Multi-Threaded Reading ================================= The script reads in parallel in an Adabas Employees file:: Database d=8, file f=11 dividing work into p=5 threads (143) cd /u/mm/py27/bin (144) python mproc.py -d8 -f11 -p5 19:23:55.481786 --- Starting multi-threading test with 5 threads 19:23:55.509927 started 0 19:23:55.512386 user 0 user=MM pid=20302D908 Range 1,299 , maxrecs 1492 19:23:55.522629 started 1 19:23:55.526320 user 1 user=MM pid=2D9000108 Range 300,598 , maxrecs 1492 19:23:55.535844 started 2 19:23:55.540366 user 2 user=MM pid=2D9000208 Range 599,897 , maxrecs 1492 19:23:55.548593 started 3 19:23:55.555410 user 3 user=MM pid=2D9000308 Range 898,1196, maxrecs 1492 19:23:55.562067 started 4 19:23:55.562469 waiting for all tasks to complete 19:23:55.564073 waiting task 0 (pid=0000) to complete 19:23:55.572811 user 4 user=MM pid=2D9000408 Range 1197,1495,maxrecs 1492 19:23:55.632237 total recs=000010 user 4: 4 4 still running 19:23:56.384950 total recs=000212 user 3: 3 3 still running 19:23:56.492086 total recs=000289 user 0: 0 2 still running 19:23:56.498253 waiting task 1 (pid=0000) to complete 19:23:56.532578 total recs=000299 user 1: 1 1 still running 19:23:56.534275 waiting task 2 (pid=0000) to complete 19:23:56.551310 total recs=000299 user 2: 2 0 still running 19:23:56.552076 waiting task 3 (pid=0000) to complete 19:23:56.552243 waiting task 4 (pid=0000) to complete all tasks done 19:23:56.552363 --- End multi-threading test with 5 threads duration=0:00:01.070577 (145)