[progress Communities] [progress Openedge Abl] Forum Post: Re: How To Find Extent Is...

Status
Not open for further replies.
G

George Potemkin

Guest
Sample Program to monitor area usage using VST (downloaded from amduus.com) /* dba/reparea.p - Report on database areas Here's a small program that gives pretty output about how much of each area is in use. It's originally by Wim van der Ham, and had been somewhat adapted by Jurriaan Kalkman. For licensing questions, contact Wim van der Ham on the PEG list. */ &GLOBAL-DEFINE MAXLENGTH 46 DEFINE VARIABLE dePerc AS DECIMAL NO-UNDO. DEFINE VARIABLE cPath AS CHARACTER NO-UNDO. DEFINE VARIABLE iMiddle AS INTEGER NO-UNDO. DEFINE VARIABLE iRemLeft AS INTEGER NO-UNDO. DEFINE VARIABLE iRemRght AS INTEGER NO-UNDO. DEFINE VARIABLE deBlockSize AS DECIMAL NO-UNDO. DEFINE VARIABLE deAvail AS DECIMAL NO-UNDO. DEFINE VARIABLE deUsed AS DECIMAL NO-UNDO. DEFINE VARIABLE cFileName AS CHARACTER NO-UNDO. cFileName = SUBSTITUTE("area_status_&1&2&3.txt", STRING(YEAR(TODAY), "9999"), STRING(MONTH(TODAY), "99"), STRING(DAY(TODAY), "99")). OUTPUT TO VALUE(cFileName). FILE-INFO:FILE-NAME = cFileName. FORM HEADER FILL("=", 80) FORMAT "X(80)" "Area Status Report" AT 26 FILL("-", 80) FORMAT "X(80)" "Database :" LDBNAME(1) FORMAT "X(12)" "Date:" AT 65 TODAY FORMAT "99/99/9999" SKIP "DBFile :" PDBNAME(1) FORMAT "X(50)" "Time: " AT 65 STRING(TIME, "HH:MM:SS") "Output file:" FILE-INFO:FULL-PATHNAME FORMAT "X(50)" "Page:" AT 65 PAGE-NUMBER FORMAT ">>>>>>>>>9" FILL("-", 80) FORMAT "X(80)" WITH FRAME pageHeader PAGE-TOP NO-LABELS STREAM-IO WIDTH 80 NO-BOX. FORM HEADER FILL("=", 80) FORMAT "X(80)" WITH FRAME pageFooter PAGE-BOTTOM NO-LABEL STREAM-IO WIDTH 80 NO-BOX. VIEW FRAME pageHeader. FIND FIRST _dbstatus. ASSIGN deBlockSize = _dbstatus-dbblksize . /* HIWATER REPORT */ FOR EACH _areastatus WHERE _areastatus-areanum GE 6: IF (SubStr(_areastatus-areaname, 1, 11) = "After Image") THEN NEXT. ASSIGN dePerc = ( ( _areastatus-hiwater - _areastatus-freenum) / _areastatus-totblocks ) * 100 . DISPLAY _areastatus-areanum FORMAT "z9" COLUMN-LABEL "Nr" (_areastatus-totblocks / 1000) FORMAT "zzz,zz9" COLUMN-LABEL "Total!Blocks" ( _areastatus-hiwater / 1000) FORMAT "zzz,zz9" COLUMN-LABEL "Used!Blocks" ( _areastatus-freenum / 1000) FORMAT "zzz,zz9" COLUMN-LABEL "Free!Blocks" FILL("*", INTEGER(dePerc * 38 / 100)) FORMAT "X(38)" COLUMN-LABEL "0% 25% 50% 75% 100%!| | | | |" dePerc FORMAT "zz9.99 %" COLUMN-LABEL "Full %" WITH STREAM-IO TITLE " Hiwater Percentages " WIDTH 80. END. FOR EACH _areastatus: ASSIGN deAvail = decimal(_areastatus-totblocks) * deBlockSize deUsed = decimal(_areastatus-hiwater) * deBlockSize . DISPLAY _areastatus-areanum FORMAT "z9" COLUMN-LABEL "Nr" _areastatus-areaname FORMAT "X(20)" COLUMN-LABEL "Name" deAvail FORMAT "zzz,zzz,zzz,zzz,zz9" COLUMN-LABEL "Total Size!(In Bytes)" (TOTAL) deUsed FORMAT "zzz,zzz,zzz,zzz,zz9" COLUMN-LABEL "Used Size!(In Bytes)" (TOTAL) WITH STREAM-IO TITLE " Database Size " WIDTH 80. END. /* AREA LEGEND */ FOR EACH _areastatus WHERE _areastatus-areanum GE 6: IF (SubStr(_areastatus-areaname, 1, 11) = "After Image") THEN NEXT. cPath = _areastatus-lastextent. IF LENGTH(cPath) GT {&MAXLENGTH} THEN DO: ASSIGN iMiddle = LENGTH(cPath) / 2 iRemLeft = INTEGER((LENGTH(cPath) - {&MAXLENGTH}) / 2) iRemRght = LENGTH(cPath) - {&MAXLENGTH} - iRemLeft iRemLeft = iRemLeft + 3 . cPath = SUBSTITUTE("&1&2&3", SUBSTRING(cPath, 1, iMiddle - iRemLeft), FILL(".", 3), SUBSTRING(cPath, iMiddle + iRemRght + 3)). END. DISPLAY _areastatus-areanum FORMAT "z9" COLUMN-LABEL "Nr" _areastatus-areaname FORMAT "X(20)" COLUMN-LABEL "Name" _areastatus-extents FORMAT "zz9" COLUMN-LABEL "Extents" cPath FORMAT "X({&MAXLENGTH})" COLUMN-LABEL "Currently used extent" WITH STREAM-IO TITLE " Database Areas " WIDTH 80. END. VIEW FRAME pageFooter. OUTPUT CLOSE. OS-COMMAND SILENT VALUE("start " + cFileName).

Continue reading...
 
Status
Not open for further replies.
Top