Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: KMPDTM

KMPDTM.m

Go to the documentation of this file.
  1. KMPDTM ;OAK/RAK/JML - CM Tools Timing Monitor ;9/1/2015
  1. ;;3.0;Capacity Management Tools;**3**;Jan 15, 2013;Build 42
  1. ;
  1. EN ;-- entry point
  1. ;
  1. N DIR,X,Y,KMPDLTYP
  1. ;
  1. D HDR^KMPDUTL4(" Timing Data Monitor ")
  1. ;
  1. ; if no data
  1. S KMPDLTYP=0
  1. I $D(^KMPTMP("KMPDT","ORWCV")) S KMPDLTYP=KMPDLTYP+1
  1. I $D(^KMPTMP("KMPDT","ORWCV-FT")) S KMPDLTYP=KMPDLTYP+2
  1. I KMPDLTYP=0 D Q
  1. .W !!?7,"*** There is currently no data in global ^KMPTMP(""KMPDT"") ***"
  1. ;
  1. W !
  1. W !?7,"This option displays CPRS Coversheet time-to-load data, as a"
  1. W !?7,"bar graph, for the current day. This option can be left"
  1. W !?7,"running on a terminal (if desired). The monitor is updated"
  1. W !?7,"every 10 minutes (site configurable through the [KMPD PARAM"
  1. W !?7,"EDIT] Edit CP Parameters File option), and displays current"
  1. W !?7,"average time-to-load data starting at midnight. An alarm"
  1. W !?7,"message is displayed if the average time-to-load exceeds 30"
  1. W !?7,"seconds (site configurable through the [KMPD PARAM EDIT] Edit"
  1. W !?7,"CP Parameters File option)."
  1. W !
  1. S DIR(0)="YO",DIR("A")="Continue",DIR("B")="YES"
  1. W ! D ^DIR Q:Y'=1
  1. ;
  1. ;
  1. W !!,"Compiling timing stats..."
  1. D EN1
  1. ;
  1. Q
  1. ;
  1. EN1 ;-- main loop
  1. ;
  1. N KMPUALRT,KMPUTIME,KMPUTMP,OUT
  1. ;
  1. S KMPUALRT=0,KMPUTIME=$$NOW^XLFDT
  1. S OUT=0
  1. F D Q:OUT
  1. .D DATA
  1. .D GRAPH
  1. .S OUT=$$FTR Q:OUT
  1. .D EXIT
  1. Q
  1. ;
  1. DATA ;-- compile data
  1. ;
  1. N DATA,DATA1,DATE,DELTA,DOT,HOURS,HR,I
  1. N KMPDI,KMPDSUB,TDELT
  1. ;
  1. K KMPUTMP
  1. S DOT=1,DATE=$$DT^XLFDT
  1. ; array with hours
  1. S HOURS=$$RLTMHR^KMPDTU11(1,0) Q:HOURS=""
  1. F HR=1:1 Q:$P(HOURS,",",HR)="" S KMPUTMP(HR,0)=""
  1. ;
  1. ; collate BG and FG data
  1. F KMPDSUB="ORWCV","ORWCV-FT" D
  1. .S KMPDI=""
  1. .F S KMPDI=$O(^KMPTMP("KMPDT",KMPDSUB,KMPDI)) Q:KMPDI="" S DATA=^(KMPDI) I DATA]"" D
  1. ..Q:$P($$HTFM^XLFDT($P(DATA,U)),".")'=DATE
  1. ..S DOT=DOT+1 W:('(DOT#1000)) "."
  1. ..S ^TMP($J,"DATA",KMPDI,KMPDSUB)=DATA
  1. ; Add BG and FG data
  1. S I=""
  1. F S I=$O(^TMP($J,"DATA",I)) Q:I="" D
  1. .S DELTA=0
  1. .S KMPDSUB=""
  1. .F S KMPDSUB=$O(^TMP($J,"DATA",I,KMPDSUB)) Q:KMPDSUB="" D
  1. ..S DATA=$G(^TMP($J,"DATA",I,KMPDSUB)) Q:DATA=""
  1. ..S DATE(1)=$$HTFM^XLFDT($P(DATA,U)),DATE(2)=$$HTFM^XLFDT($P(DATA,U,2))
  1. ..Q:'DATE(1)!('DATE(2))
  1. ..S TDELT=$$FMDIFF^XLFDT(DATE(2),DATE(1),2)
  1. ..S:TDELT<0 TDELT=0
  1. ..S DELTA=DELTA+TDELT
  1. .; determine hour
  1. .S HR=+$E($P(DATE(1),".",2),1,2) Q:HR="" ;HR="0"
  1. .S DATA1="^^^"_DELTA_"^"_$P(DATA,U,3)_"^"_$P(DATA,U,4)_"^^^"_$P($P(I," ",2),"-")
  1. .;
  1. .; quit if no delta
  1. .Q:$P(DATA1,U,4)=""
  1. .; hour
  1. .S $P(KMPUTMP(HR,0),U)=HR
  1. .; total delta
  1. .S $P(KMPUTMP(HR,0),U,2)=$P(KMPUTMP(HR,0),U,2)+$P(DATA1,U,4)
  1. .; count
  1. .S $P(KMPUTMP(HR,0),U,3)=$P(KMPUTMP(HR,0),U,3)+1
  1. ;
  1. ; average
  1. F HR=1:1 S I=$P(HOURS,",",HR) Q:I="" I $P($G(KMPUTMP(I,0)),U,2) D
  1. .S $P(KMPUTMP(I,0),U,2)=$FN($P(KMPUTMP(I,0),U,2)/$P(KMPUTMP(I,0),U,3),"",1)
  1. ;
  1. Q
  1. ;
  1. FTR() ;-- extrinsic function - footer
  1. N OUT,PROMPT,UTIME,X
  1. ; update time - how often graph will refress itself
  1. S UTIME=$P($G(^KMPD(8973,1,19)),U)
  1. ; value is in minutes and is converted to seconds for timed read
  1. S UTIME=$S(UTIME:UTIME,1:10)*60
  1. S PROMPT="[Q]uit, [U]pdate: "
  1. S OUT=0
  1. F D Q:OUT
  1. .S DX=(IOM-$L(PROMPT)\2),DY=(IOSL-1) X IOXY
  1. .W PROMPT R X:UTIME
  1. .S X=$$UP^XLFSTR(X)
  1. .I X="Q"!(X="^")!(X="U")!('$T) S OUT=1
  1. .E W $C(7) S DY=(IOSL-1) F DX=1:1:IOM W " " X IOXY
  1. W $S(X="Q":"uit",X="^":"Quit",X="U":"pdate",1:"Update")
  1. Q $S(X="Q"!(X="^"):1,1:0)
  1. ;
  1. GRAPH ;-- display graph
  1. Q:'$D(KMPUTMP)
  1. N ALERT,DATA,LOADTM,NOW,TITLE,TXT,UPDATE,KMPDMESS
  1. ; alert time in seconds - if average time-to-load is not less than this
  1. ; value an alert will appear on screen
  1. S NOW=$$NOW^XLFDT
  1. S KMPDMESS=$S(KMPDLTYP=1:"Foreground",KMPDLTYP=2:"Background",KMPDLTYP=3:"Foreground and Background",1:"")
  1. S DATA=$G(^KMPD(8973,1,19))
  1. ; if no ALERT set default to 30 seconds
  1. S ALERT=$S($P(DATA,U,2):$P(DATA,U,2),1:30)
  1. ; if not UPDATE default to 10 minutes
  1. S UPDATE=$S($P(DATA,U):$P(DATA,U),1:10)
  1. ; current hour
  1. S HR=+$E($P(NOW,".",2),1,2)
  1. ; current time-to-load value
  1. S LOADTM=0
  1. S:HR&($D(KMPUTMP(HR))) LOADTM=$P(KMPUTMP(HR,0),U,2)
  1. ; determine if is now an alert condition
  1. S KMPUALRT=$S(LOADTM>ALERT:1,1:0)
  1. ;
  1. ; if load time is greater than alert time
  1. I KMPUALRT S TXT(1,0)=$C(7)_"ALERT!!! - Current Average Time-To-Load exceeds '"_ALERT_" seconds'"
  1. ; else
  1. E S TXT(1,0)=""
  1. ;
  1. ;S TXT(2,0)=""
  1. S TXT(2,0)="Coversheet loads executed in the "_KMPDMESS
  1. S TXT(3,0)="Last Updated: "_$P($$FMTE^XLFDT(NOW),"@",2)_" > "
  1. S TXT(3,0)=TXT(3,0)_"Monitor will be updated every "_UPDATE_" min."
  1. I $G(KMPUTIME) D
  1. .S TXT(4,0)="Running Time: "_$$FMDIFF^XLFDT(NOW,KMPUTIME,3)_" > "
  1. .S TXT(4,0)=TXT(4,0)_"ALERT will display if Load Time exceeds "_ALERT_" sec."
  1. S TITLE="Timing Data Monitor^CPRS Coversheet^Load Time (Sec)^Hour"
  1. ;
  1. D EN^KMPDUG("KMPUTMP",TITLE,"DV","","TXT",1,40)
  1. ;
  1. Q
  1. ;
  1. EXIT ;-- cleanup on exit
  1. D ^%ZISC
  1. Q