KMPDTP7 ;OAK/RAK/JML - Real-Time CP Timing Hourly Time-to-Load ;9/1/2015
;;3.0;Capacity Management Tools;**3**;Jan 15, 2013;Build 42
;
EN ;-- entry point
N KMPDTTL,POP,X,Y,ZTDESC,ZTRTN,ZTRSAVE,ZTSK,%ZIS
S KMPDTTL=" Real-Time Hourly Coversheet Time-to-Load (TTL) Report "
D HDR^KMPDUTL4(KMPDTTL)
W !
W !?7,"This report displays the hourly average time-to-load value"
W !?7,"for the coversheet at this site over 24 hours."
W !
;
; if no data
I ($O(^KMPTMP("KMPDT","ORWCV",""))="")&($O(^KMPTMP("KMPDT","ORWCV-FT",""))="") D Q
.W !!?7,"*** There is currently no data in global ^KMPTMP(""KMPDT"", ***"
;
; select output device.
S %ZIS="Q",%ZIS("A")="Device: ",%ZIS("B")="HOME"
W ! D ^%ZIS I POP W !,"No action taken." Q
; if queued.
I $D(IO("Q")) K IO("Q") D Q
.S ZTDESC=KMPDTTL
.S ZTRTN="EN1^KMPDTP7"
.S ZTSAVE("KMPDTTL")=""
.D ^%ZTLOAD W:$G(ZTSK) !,"Task #",ZTSK
.D EXIT
;
; if output to terminal display message.
W:$E(IOST,1,2)="C-" !,"Compiling timing stats..."
D EN1
;
Q
;
EN1 ;-- entry point from taskman
K ^TMP($J)
D DATA,PRINT,EXIT
K ^TMP($J)
Q
;
DATA ;-- compile data
;
N DATA,DATA1,DATE,DATE1,DELTA,DOT,HOURS,HR,I,QUEUED,TIME
N KMPDSS,DELTA,TOTDELT,HRDATE,COMPLETE
;
S DOT=1,QUEUED=$D(ZTQUEUED),DATE=$$DT^XLFDT
; array with hours
S HOURS=$$RLTMHR^KMPDTU11(1,0) Q:HOURS=""
F I=1:1 Q:$P(HOURS,",",I)="" S ^TMP($J,"RPT",DATE,$P(HOURS,",",I))=""
; collect raw data
F KMPDSS="ORWCV","ORWCV-FT" D
.S I=""
.F S I=$O(^KMPTMP("KMPDT",KMPDSS,I)) Q:I="" S DATA=^(I) I DATA]"" D
..S DOT=DOT+1 W:'QUEUED&('(DOT#1000)) "."
..; start/end date/time in fileman format
..S DATE(1)=$$HTFM^XLFDT($P(DATA,U)),DATE(2)=$$HTFM^XLFDT($P(DATA,U,2))
..Q:'DATE(1)!('DATE(2))
..S ^TMP($J,"DATA",I,KMPDSS)=DATA
; collate raw data - combined FG and BG
S I=""
F S I=$O(^TMP($J,"DATA",I)) Q:I="" D
.S (KMPDSS,DATA1,HRDATE,TOTDELT)=""
.S DELTA=0,COMPLETE=1
.F KMPDSS="ORWCV","ORWCV-FT" D
..S DATA=$G(^TMP($J,"DATA",I,KMPDSS))
..Q:DATA=""
..S DATE(1)=$$HTFM^XLFDT($P(DATA,U)),DATE(2)=$$HTFM^XLFDT($P(DATA,U,2))
..I DATE(1)>1 S HRDATE=DATE(1)
..I (DATE(1)<0)!(DATE(2)<0) S COMPLETE=0 Q
..; get delta
..S DELTA=$$HDIFF^XLFDT($P(DATA,U,2),$P(DATA,U),2)
..; date without time
..S DATE1=$P(DATE(1),".") I 'DATE1 Q
..S TOTDELT=$G(TOTDELT)+DELTA
.; determine hour
.Q:TOTDELT=""
.Q:HRDATE=""
.S HR=+$E($P(HRDATE,".",2),1,2)
.S HR=$S(HR="":0,HR=24:0,1:HR)
.; calculate min/max/tot/count
.; if delta
.I COMPLETE D
..; minimum delta
..I $P(^TMP($J,"RPT",DATE,HR),U,2)=""!(TOTDELT<$P(^TMP($J,"RPT",DATE,HR),U,2)) D
...S $P(^TMP($J,"RPT",DATE,HR),U,2)=TOTDELT
..; maximum delta
..I TOTDELT>$P(^TMP($J,"RPT",DATE,HR),U,3) S $P(^TMP($J,"RPT",DATE,HR),U,3)=TOTDELT
..; total delta
..S $P(^TMP($J,"RPT",DATE,HR),U,4)=$P(^TMP($J,"RPT",DATE,HR),U,4)+TOTDELT
..; count
..S $P(^TMP($J,"RPT",DATE,HR),U,5)=$P(^TMP($J,"RPT",DATE,HR),U,5)+1
.; if no delta
.E S $P(^TMP($J,"RPT",DATE,HR),U,6)=$P(^TMP($J,"RPT",DATE,HR),U,6)+1
; calculate average
F HR=1:1 S I=$P(HOURS,",",HR) Q:I="" I $P(^TMP($J,"RPT",DATE,I),U,5) D
.S $P(^TMP($J,"RPT",DATE,I),U)=$P(^TMP($J,"RPT",DATE,I),U,4)/$P(^TMP($J,"RPT",DATE,I),U,5)
Q
;
PRINT ;-- print data
U IO
D HDR
Q:'$D(^TMP($J))
N CONT,DATE,HR,I,TOTAL
S DATE="",CONT=1
F S DATE=$O(^TMP($J,"RPT",DATE)) Q:'DATE S HR="" D Q:'CONT
.S TOTAL=""
.W !,$$FMTE^XLFDT(DATE,2)
.F S HR=$O(^TMP($J,"RPT",DATE,HR)) Q:HR="" D Q:'CONT
..; page feed
..I $Y>(IOSL-3) D CONTINUE^KMPDUTL4("",1,.CONT) Q:'CONT D HDR W !
..W ?12," ",$S($L(HR)=1:"0",1:""),HR
..S DATA=^TMP($J,"RPT",DATE,HR)
..W ?20,$J($FN($P(DATA,U),",",0),10)
..W ?34,$J($FN($P(DATA,U,2),",",0),10)
..W ?48,$J($FN($P(DATA,U,3),",",0),10)
..W ?62,$J($FN($P(DATA,U,5),",",0),10)
..W !
..S $P(TOTAL,U)=$P(TOTAL,U)+$P(DATA,U,5)
..S $P(TOTAL,U,2)=$P(TOTAL,U,2)+$P(DATA,U,6)
.;
.; back to DATE level
.; totals
.W ?62,"----------",!?62,$J($FN(TOTAL,",",0),10),!
.W !?12,"Incomplete: ",$J($FN($P(TOTAL,U,2),",",0),$L($P(TOTAL,U,2))+2),!
.; if another date
.I $O(^TMP($J,"RPT",DATE)) D CONTINUE^KMPDUTL4("",1,.CONT) Q:'CONT D HDR W !
;
I CONT D
.; legend
.W !!?2,"CV = Coversheet",!?2,"TTL = Time-to-Load"
.; pause if output to terminal
.D CONTINUE^KMPDUTL4("Press RETURN to continue",1)
;
Q
;
HDR ;-- print header
W @IOF
S X=$G(KMPDTTL)
W !?(80-$L(X)\2),X
S X=$$FMTE^XLFDT($$DT^XLFDT)
W !?(80-$L(X)\2),X,?61,"Printed: ",$$FMTE^XLFDT(DT,2)
W !
W !?20,"|---------------Seconds---------------|"
W !,"Date",?12,"Hour",?20,"TTL Average",?34,"TTL Minimum",?48,"TTL Maximum",?62,"# of CV Loads"
W !,$$REPEAT^XLFSTR("-",IOM)
;
Q
;
EXIT ;-- cleanup on exit
S:$D(ZTQUEUED) ZTREQ="@"
D ^%ZISC
K KMPDTTL
Q
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HKMPDTP7 4827 printed Oct 16, 2024@17:41:42 Page 2
KMPDTP7 ;OAK/RAK/JML - Real-Time CP Timing Hourly Time-to-Load ;9/1/2015
+1 ;;3.0;Capacity Management Tools;**3**;Jan 15, 2013;Build 42
+2 ;
EN ;-- entry point
+1 NEW KMPDTTL,POP,X,Y,ZTDESC,ZTRTN,ZTRSAVE,ZTSK,%ZIS
+2 SET KMPDTTL=" Real-Time Hourly Coversheet Time-to-Load (TTL) Report "
+3 DO HDR^KMPDUTL4(KMPDTTL)
+4 WRITE !
+5 WRITE !?7,"This report displays the hourly average time-to-load value"
+6 WRITE !?7,"for the coversheet at this site over 24 hours."
+7 WRITE !
+8 ;
+9 ; if no data
+10 IF ($ORDER(^KMPTMP("KMPDT","ORWCV",""))="")&($ORDER(^KMPTMP("KMPDT","ORWCV-FT",""))="")
Begin DoDot:1
+11 WRITE !!?7,"*** There is currently no data in global ^KMPTMP(""KMPDT"", ***"
End DoDot:1
QUIT
+12 ;
+13 ; select output device.
+14 SET %ZIS="Q"
SET %ZIS("A")="Device: "
SET %ZIS("B")="HOME"
+15 WRITE !
DO ^%ZIS
IF POP
WRITE !,"No action taken."
QUIT
+16 ; if queued.
+17 IF $DATA(IO("Q"))
KILL IO("Q")
Begin DoDot:1
+18 SET ZTDESC=KMPDTTL
+19 SET ZTRTN="EN1^KMPDTP7"
+20 SET ZTSAVE("KMPDTTL")=""
+21 DO ^%ZTLOAD
if $GET(ZTSK)
WRITE !,"Task #",ZTSK
+22 DO EXIT
End DoDot:1
QUIT
+23 ;
+24 ; if output to terminal display message.
+25 if $EXTRACT(IOST,1,2)="C-"
WRITE !,"Compiling timing stats..."
+26 DO EN1
+27 ;
+28 QUIT
+29 ;
EN1 ;-- entry point from taskman
+1 KILL ^TMP($JOB)
+2 DO DATA
DO PRINT
DO EXIT
+3 KILL ^TMP($JOB)
+4 QUIT
+5 ;
DATA ;-- compile data
+1 ;
+2 NEW DATA,DATA1,DATE,DATE1,DELTA,DOT,HOURS,HR,I,QUEUED,TIME
+3 NEW KMPDSS,DELTA,TOTDELT,HRDATE,COMPLETE
+4 ;
+5 SET DOT=1
SET QUEUED=$DATA(ZTQUEUED)
SET DATE=$$DT^XLFDT
+6 ; array with hours
+7 SET HOURS=$$RLTMHR^KMPDTU11(1,0)
if HOURS=""
QUIT
+8 FOR I=1:1
if $PIECE(HOURS,",",I)=""
QUIT
SET ^TMP($JOB,"RPT",DATE,$PIECE(HOURS,",",I))=""
+9 ; collect raw data
+10 FOR KMPDSS="ORWCV","ORWCV-FT"
Begin DoDot:1
+11 SET I=""
+12 FOR
SET I=$ORDER(^KMPTMP("KMPDT",KMPDSS,I))
if I=""
QUIT
SET DATA=^(I)
IF DATA]""
Begin DoDot:2
+13 SET DOT=DOT+1
if 'QUEUED&('(DOT#1000))
WRITE "."
+14 ; start/end date/time in fileman format
+15 SET DATE(1)=$$HTFM^XLFDT($PIECE(DATA,U))
SET DATE(2)=$$HTFM^XLFDT($PIECE(DATA,U,2))
+16 if 'DATE(1)!('DATE(2))
QUIT
+17 SET ^TMP($JOB,"DATA",I,KMPDSS)=DATA
End DoDot:2
End DoDot:1
+18 ; collate raw data - combined FG and BG
+19 SET I=""
+20 FOR
SET I=$ORDER(^TMP($JOB,"DATA",I))
if I=""
QUIT
Begin DoDot:1
+21 SET (KMPDSS,DATA1,HRDATE,TOTDELT)=""
+22 SET DELTA=0
SET COMPLETE=1
+23 FOR KMPDSS="ORWCV","ORWCV-FT"
Begin DoDot:2
+24 SET DATA=$GET(^TMP($JOB,"DATA",I,KMPDSS))
+25 if DATA=""
QUIT
+26 SET DATE(1)=$$HTFM^XLFDT($PIECE(DATA,U))
SET DATE(2)=$$HTFM^XLFDT($PIECE(DATA,U,2))
+27 IF DATE(1)>1
SET HRDATE=DATE(1)
+28 IF (DATE(1)<0)!(DATE(2)<0)
SET COMPLETE=0
QUIT
+29 ; get delta
+30 SET DELTA=$$HDIFF^XLFDT($PIECE(DATA,U,2),$PIECE(DATA,U),2)
+31 ; date without time
+32 SET DATE1=$PIECE(DATE(1),".")
IF 'DATE1
QUIT
+33 SET TOTDELT=$GET(TOTDELT)+DELTA
End DoDot:2
+34 ; determine hour
+35 if TOTDELT=""
QUIT
+36 if HRDATE=""
QUIT
+37 SET HR=+$EXTRACT($PIECE(HRDATE,".",2),1,2)
+38 SET HR=$SELECT(HR="":0,HR=24:0,1:HR)
+39 ; calculate min/max/tot/count
+40 ; if delta
+41 IF COMPLETE
Begin DoDot:2
+42 ; minimum delta
+43 IF $PIECE(^TMP($JOB,"RPT",DATE,HR),U,2)=""!(TOTDELT<$PIECE(^TMP($JOB,"RPT",DATE,HR),U,2))
Begin DoDot:3
+44 SET $PIECE(^TMP($JOB,"RPT",DATE,HR),U,2)=TOTDELT
End DoDot:3
+45 ; maximum delta
+46 IF TOTDELT>$PIECE(^TMP($JOB,"RPT",DATE,HR),U,3)
SET $PIECE(^TMP($JOB,"RPT",DATE,HR),U,3)=TOTDELT
+47 ; total delta
+48 SET $PIECE(^TMP($JOB,"RPT",DATE,HR),U,4)=$PIECE(^TMP($JOB,"RPT",DATE,HR),U,4)+TOTDELT
+49 ; count
+50 SET $PIECE(^TMP($JOB,"RPT",DATE,HR),U,5)=$PIECE(^TMP($JOB,"RPT",DATE,HR),U,5)+1
End DoDot:2
+51 ; if no delta
+52 IF '$TEST
SET $PIECE(^TMP($JOB,"RPT",DATE,HR),U,6)=$PIECE(^TMP($JOB,"RPT",DATE,HR),U,6)+1
End DoDot:1
+53 ; calculate average
+54 FOR HR=1:1
SET I=$PIECE(HOURS,",",HR)
if I=""
QUIT
IF $PIECE(^TMP($JOB,"RPT",DATE,I),U,5)
Begin DoDot:1
+55 SET $PIECE(^TMP($JOB,"RPT",DATE,I),U)=$PIECE(^TMP($JOB,"RPT",DATE,I),U,4)/$PIECE(^TMP($JOB,"RPT",DATE,I),U,5)
End DoDot:1
+56 QUIT
+57 ;
PRINT ;-- print data
+1 USE IO
+2 DO HDR
+3 if '$DATA(^TMP($JOB))
QUIT
+4 NEW CONT,DATE,HR,I,TOTAL
+5 SET DATE=""
SET CONT=1
+6 FOR
SET DATE=$ORDER(^TMP($JOB,"RPT",DATE))
if 'DATE
QUIT
SET HR=""
Begin DoDot:1
+7 SET TOTAL=""
+8 WRITE !,$$FMTE^XLFDT(DATE,2)
+9 FOR
SET HR=$ORDER(^TMP($JOB,"RPT",DATE,HR))
if HR=""
QUIT
Begin DoDot:2
+10 ; page feed
+11 IF $Y>(IOSL-3)
DO CONTINUE^KMPDUTL4("",1,.CONT)
if 'CONT
QUIT
DO HDR
WRITE !
+12 WRITE ?12," ",$SELECT($LENGTH(HR)=1:"0",1:""),HR
+13 SET DATA=^TMP($JOB,"RPT",DATE,HR)
+14 WRITE ?20,$JUSTIFY($FNUMBER($PIECE(DATA,U),",",0),10)
+15 WRITE ?34,$JUSTIFY($FNUMBER($PIECE(DATA,U,2),",",0),10)
+16 WRITE ?48,$JUSTIFY($FNUMBER($PIECE(DATA,U,3),",",0),10)
+17 WRITE ?62,$JUSTIFY($FNUMBER($PIECE(DATA,U,5),",",0),10)
+18 WRITE !
+19 SET $PIECE(TOTAL,U)=$PIECE(TOTAL,U)+$PIECE(DATA,U,5)
+20 SET $PIECE(TOTAL,U,2)=$PIECE(TOTAL,U,2)+$PIECE(DATA,U,6)
End DoDot:2
if 'CONT
QUIT
+21 ;
+22 ; back to DATE level
+23 ; totals
+24 WRITE ?62,"----------",!?62,$JUSTIFY($FNUMBER(TOTAL,",",0),10),!
+25 WRITE !?12,"Incomplete: ",$JUSTIFY($FNUMBER($PIECE(TOTAL,U,2),",",0),$LENGTH($PIECE(TOTAL,U,2))+2),!
+26 ; if another date
+27 IF $ORDER(^TMP($JOB,"RPT",DATE))
DO CONTINUE^KMPDUTL4("",1,.CONT)
if 'CONT
QUIT
DO HDR
WRITE !
End DoDot:1
if 'CONT
QUIT
+28 ;
+29 IF CONT
Begin DoDot:1
+30 ; legend
+31 WRITE !!?2,"CV = Coversheet",!?2,"TTL = Time-to-Load"
+32 ; pause if output to terminal
+33 DO CONTINUE^KMPDUTL4("Press RETURN to continue",1)
End DoDot:1
+34 ;
+35 QUIT
+36 ;
HDR ;-- print header
+1 WRITE @IOF
+2 SET X=$GET(KMPDTTL)
+3 WRITE !?(80-$LENGTH(X)\2),X
+4 SET X=$$FMTE^XLFDT($$DT^XLFDT)
+5 WRITE !?(80-$LENGTH(X)\2),X,?61,"Printed: ",$$FMTE^XLFDT(DT,2)
+6 WRITE !
+7 WRITE !?20,"|---------------Seconds---------------|"
+8 WRITE !,"Date",?12,"Hour",?20,"TTL Average",?34,"TTL Minimum",?48,"TTL Maximum",?62,"# of CV Loads"
+9 WRITE !,$$REPEAT^XLFSTR("-",IOM)
+10 ;
+11 QUIT
+12 ;
EXIT ;-- cleanup on exit
+1 if $DATA(ZTQUEUED)
SET ZTREQ="@"
+2 DO ^%ZISC
+3 KILL KMPDTTL
+4 QUIT