| 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
 | 
|---|