| 1 | KMPDTM ;OAK/RAK - CM Tools Timing Monitor ;6/21/05  10:14 | 
|---|
| 2 | ;;2.0;CAPACITY MANAGEMENT TOOLS;**1,4**;Mar 22, 2002 | 
|---|
| 3 | ; | 
|---|
| 4 | EN ;-- entry point | 
|---|
| 5 | ; | 
|---|
| 6 | N DIR,X,Y | 
|---|
| 7 | ; | 
|---|
| 8 | D HDR^KMPDUTL4(" Timing Data Monitor ") | 
|---|
| 9 | ; | 
|---|
| 10 | ; if no data | 
|---|
| 11 | I $O(^KMPTMP("KMPDT","ORWCV",""))="" D  Q | 
|---|
| 12 | .W !!?7,"*** There is currently no data in global ^KMPTMP(""KMPDT"",""ORWCV"") ***" | 
|---|
| 13 | ; | 
|---|
| 14 | W ! | 
|---|
| 15 | W !?7,"This option displays CPRS Coversheet time-to-load data, as a" | 
|---|
| 16 | W !?7,"bar graph, for the current day.  This option can be left" | 
|---|
| 17 | W !?7,"running on a terminal (if desired).  The monitor is updated" | 
|---|
| 18 | W !?7,"every 10 minutes (site configurable through the [KMPD PARAM" | 
|---|
| 19 | W !?7,"EDIT] Edit CP Parameters File option), and displays current" | 
|---|
| 20 | W !?7,"average time-to-load data starting at midnight.  An alarm" | 
|---|
| 21 | W !?7,"message is displayed if the average time-to-load exceeds 30" | 
|---|
| 22 | W !?7,"seconds (site configurable through the [KMPD PARAM EDIT] Edit" | 
|---|
| 23 | W !?7,"CP Parameters File option)." | 
|---|
| 24 | W ! | 
|---|
| 25 | S DIR(0)="YO",DIR("A")="Continue",DIR("B")="YES" | 
|---|
| 26 | W ! D ^DIR Q:Y'=1 | 
|---|
| 27 | ; | 
|---|
| 28 | ; | 
|---|
| 29 | W !!,"Compiling timing stats..." | 
|---|
| 30 | D EN1 | 
|---|
| 31 | ; | 
|---|
| 32 | Q | 
|---|
| 33 | ; | 
|---|
| 34 | EN1 ;-- main loop | 
|---|
| 35 | ; | 
|---|
| 36 | N KMPUALRT,KMPUTIME,KMPUTMP,OUT | 
|---|
| 37 | ; | 
|---|
| 38 | S KMPUALRT=0,KMPUTIME=$$NOW^XLFDT | 
|---|
| 39 | S OUT=0 | 
|---|
| 40 | F  D  Q:OUT | 
|---|
| 41 | .D DATA | 
|---|
| 42 | .D GRAPH | 
|---|
| 43 | .S OUT=$$FTR Q:OUT | 
|---|
| 44 | .D EXIT | 
|---|
| 45 | Q | 
|---|
| 46 | ; | 
|---|
| 47 | DATA ;-- compile data | 
|---|
| 48 | ; | 
|---|
| 49 | N DATA,DATA1,DATE,DELTA,DOT,HOURS,HR,I | 
|---|
| 50 | ; | 
|---|
| 51 | K KMPUTMP | 
|---|
| 52 | S DOT=1,DATE=$$DT^XLFDT | 
|---|
| 53 | ; array with hours | 
|---|
| 54 | S HOURS=$$RLTMHR^KMPDTU11(1,0) Q:HOURS="" | 
|---|
| 55 | F HR=1:1 Q:$P(HOURS,",",HR)=""  S KMPUTMP(HR,0)="" | 
|---|
| 56 | S I="" | 
|---|
| 57 | F  S I=$O(^KMPTMP("KMPDT","ORWCV",I)) Q:I=""  S DATA=^(I) I DATA]"" D | 
|---|
| 58 | .S DOT=DOT+1 W:('(DOT#1000)) "." | 
|---|
| 59 | .; start/end date/time in fileman format | 
|---|
| 60 | .S DATE(1)=$$HTFM^XLFDT($P(DATA,U)),DATE(2)=$$HTFM^XLFDT($P(DATA,U,2)) | 
|---|
| 61 | .Q:'DATE(1)!('DATE(2)) | 
|---|
| 62 | .; quit if not today (DATE) | 
|---|
| 63 | .Q:$P(DATE(1),".")'=DATE | 
|---|
| 64 | .S DELTA=$$FMDIFF^XLFDT(DATE(2),DATE(1),2) | 
|---|
| 65 | .S:DELTA<0 DELTA="" | 
|---|
| 66 | .; determine hour | 
|---|
| 67 | .S HR=+$E($P(DATE(1),".",2),1,2) Q:HR=""  ;HR="0" | 
|---|
| 68 | .;Q:'HR | 
|---|
| 69 | .; quit if not in HOUR() array | 
|---|
| 70 | .;Q:'$D(HOUR(HR)) | 
|---|
| 71 | .S DATA1="^^^"_DELTA_"^"_$P(DATA,U,3)_"^"_$P(DATA,U,4)_"^^^"_$P($P(I," ",2),"-") | 
|---|
| 72 | .; | 
|---|
| 73 | .; quit if no delta | 
|---|
| 74 | .Q:$P(DATA1,U,4)="" | 
|---|
| 75 | .; hour | 
|---|
| 76 | .S $P(KMPUTMP(HR,0),U)=HR | 
|---|
| 77 | .; total delta | 
|---|
| 78 | .S $P(KMPUTMP(HR,0),U,2)=$P(KMPUTMP(HR,0),U,2)+$P(DATA1,U,4) | 
|---|
| 79 | .; count | 
|---|
| 80 | .S $P(KMPUTMP(HR,0),U,3)=$P(KMPUTMP(HR,0),U,3)+1 | 
|---|
| 81 | ; | 
|---|
| 82 | ; average | 
|---|
| 83 | F HR=1:1 S I=$P(HOURS,",",HR) Q:I=""  I $P($G(KMPUTMP(I,0)),U,2) D | 
|---|
| 84 | .S $P(KMPUTMP(I,0),U,2)=$FN($P(KMPUTMP(I,0),U,2)/$P(KMPUTMP(I,0),U,3),"",1) | 
|---|
| 85 | ; | 
|---|
| 86 | Q | 
|---|
| 87 | ; | 
|---|
| 88 | FTR() ;-- extrinsic function - footer | 
|---|
| 89 | N OUT,PROMPT,UTIME,X | 
|---|
| 90 | ; update time - how often graph will refress itself | 
|---|
| 91 | S UTIME=$P($G(^KMPD(8973,1,19)),U) | 
|---|
| 92 | ; value is in minutes and is converted to seconds for timed read | 
|---|
| 93 | S UTIME=$S(UTIME:UTIME,1:10)*60 | 
|---|
| 94 | S PROMPT="[Q]uit, [U]pdate: " | 
|---|
| 95 | S OUT=0 | 
|---|
| 96 | F  D  Q:OUT | 
|---|
| 97 | .S DX=(IOM-$L(PROMPT)\2),DY=(IOSL-1) X IOXY | 
|---|
| 98 | .W PROMPT R X:UTIME | 
|---|
| 99 | .S X=$$UP^XLFSTR(X) | 
|---|
| 100 | .I X="Q"!(X="^")!(X="U")!('$T) S OUT=1 | 
|---|
| 101 | .E  W $C(7) S DY=(IOSL-1) F DX=1:1:IOM W " " X IOXY | 
|---|
| 102 | W $S(X="Q":"uit",X="^":"Quit",X="U":"pdate",1:"Update") | 
|---|
| 103 | Q $S(X="Q"!(X="^"):1,1:0) | 
|---|
| 104 | ; | 
|---|
| 105 | GRAPH ;-- display graph | 
|---|
| 106 | Q:'$D(KMPUTMP) | 
|---|
| 107 | N ALERT,DATA,LOADTM,NOW,TITLE,TXT,UPDATE | 
|---|
| 108 | ; alert time in seconds - if average time-to-load is not less than this | 
|---|
| 109 | ;                         value an alert will appear on screen | 
|---|
| 110 | S NOW=$$NOW^XLFDT | 
|---|
| 111 | S DATA=$G(^KMPD(8973,1,19)) | 
|---|
| 112 | ; if no ALERT set default to 30 seconds | 
|---|
| 113 | S ALERT=$S($P(DATA,U,2):$P(DATA,U,2),1:30) | 
|---|
| 114 | ; if not UPDATE default to 10 minutes | 
|---|
| 115 | S UPDATE=$S($P(DATA,U):$P(DATA,U),1:10) | 
|---|
| 116 | ; current hour | 
|---|
| 117 | S HR=+$E($P(NOW,".",2),1,2) | 
|---|
| 118 | ; current time-to-load value | 
|---|
| 119 | S:HR&($D(KMPUTMP(HR))) LOADTM=$P(KMPUTMP(HR,0),U,2) | 
|---|
| 120 | ; determine if is now an alert condition | 
|---|
| 121 | S KMPUALRT=$S(LOADTM>ALERT:1,1:0) | 
|---|
| 122 | ; | 
|---|
| 123 | ; if load time is greater than alert time | 
|---|
| 124 | I KMPUALRT S TXT(1,0)=$C(7)_"ALERT!!! - Current Average Time-To-Load exceeds '"_ALERT_" seconds'" | 
|---|
| 125 | ; else | 
|---|
| 126 | E  S TXT(1,0)="" | 
|---|
| 127 | ; | 
|---|
| 128 | S TXT(2,0)="" | 
|---|
| 129 | S TXT(3,0)="Last Updated: "_$P($$FMTE^XLFDT(NOW),"@",2)_"  > " | 
|---|
| 130 | S TXT(3,0)=TXT(3,0)_"Monitor will be updated every "_UPDATE_" min." | 
|---|
| 131 | I $G(KMPUTIME) D | 
|---|
| 132 | .S TXT(4,0)="Running Time: "_$$FMDIFF^XLFDT(NOW,KMPUTIME,3)_"  > " | 
|---|
| 133 | .S TXT(4,0)=TXT(4,0)_"ALERT will display if Load Time exceeds "_ALERT_" sec." | 
|---|
| 134 | S TITLE="Timing Data Monitor^CPRS Coversheet^Load Time (Sec)^Hour" | 
|---|
| 135 | ; | 
|---|
| 136 | D EN^KMPDUG("KMPUTMP",TITLE,"DV","","TXT",1,40) | 
|---|
| 137 | ; | 
|---|
| 138 | Q | 
|---|
| 139 | ; | 
|---|
| 140 | EXIT ;-- cleanup on exit | 
|---|
| 141 | D ^%ZISC | 
|---|
| 142 | Q | 
|---|