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

KMPDTP6.m

Go to the documentation of this file.
  1. KMPDTP6 ;OAK/RAK/JML - CP Timing Real-Time Threshold Alert ;9/1/2015
  1. ;;3.0;Capacity Management Tools;**3**;Jan 15, 2013;Build 42
  1. ;
  1. EN ;-- entry point
  1. ;
  1. N I,KMPDHOUR,KMPDSRCH,KMPDTSEC,KMPDTTL,POP,X,Y
  1. N ZTDESC,ZTRTN,ZTRSAVE,ZTSK,%ZIS
  1. ;
  1. S KMPDTTL=" Coversheet Time-to-Load Alert Report > Real-Time "
  1. D HDR^KMPDUTL4(KMPDTTL)
  1. W !
  1. W !?7,"This alerting report shows the particular coversheet loads"
  1. W !?7,"that have excessive time-to-load values for TODAY (Real-Time)."
  1. W !?7,"This report will search for a particular person, a particular"
  1. W !?7,"client name or IP address."
  1. W !?7,"Foreground and background times are combined."
  1. W !
  1. ;
  1. ; if no data
  1. I ($O(^KMPTMP("KMPDT","ORWCV",""))="")&($O(^KMPTMP("KMPDT","ORWCV-FT",""))="") D Q
  1. .W !!?7,"*** There is currently no data in global ^KMPTMP(""KMPDT"", ***"
  1. ;
  1. ; hours
  1. S KMPDHOUR=$$RLTMHR^KMPDTU11(0,1,1)
  1. Q:KMPDHOUR=""
  1. ;
  1. ; time-to-load threshold seconds
  1. S KMPDTSEC=$$TTLSEC^KMPDTU10
  1. Q:'KMPDTSEC
  1. ;
  1. ; search by
  1. D SRCHBY^KMPDTU10(.KMPDSRCH,"ORWCV",1)
  1. Q:'KMPDSRCH
  1. ;
  1. ; select output device.
  1. S %ZIS="Q",%ZIS("A")="Device: ",%ZIS("B")="HOME"
  1. W ! D ^%ZIS I POP W !,"No action taken." Q
  1. ; if queued.
  1. I $D(IO("Q")) K IO("Q") D Q
  1. .S ZTDESC=KMPDTTL
  1. .S ZTRTN="EN1^KMPDTP6"
  1. .F I="KMPDHOUR","KMPDSRCH","KMPDTSEC","KMPDTTL" S ZTSAVE(I)=""
  1. .D ^%ZTLOAD W:$G(ZTSK) !,"Task #",ZTSK
  1. .D EXIT
  1. ;
  1. ; if output to terminal display message.
  1. W:$E(IOST,1,2)="C-" !,"Compiling timing stats..."
  1. D EN1
  1. ;
  1. Q
  1. ;
  1. EN1 ;-- entry point from taskman
  1. Q:'$D(KMPDHOUR)
  1. Q:'$D(KMPDSRCH)
  1. Q:'$G(KMPDTSEC)
  1. Q:$G(KMPDTTL)=""
  1. ;
  1. K ^TMP($J)
  1. D DATA,PRINT,EXIT
  1. K ^TMP($J)
  1. Q
  1. ;
  1. DATA ;-- compile data
  1. ;
  1. Q:'$D(KMPDHOUR)
  1. Q:'$G(KMPDSRCH)
  1. Q:'$G(KMPDTSEC)
  1. ;
  1. N DATA,DATA1,DATE,DATE1,DELTA,DOT,HOUR,HR,I,QUEUED,TIME
  1. N KMPDSS,DELTA,TOTDELT,KMPDUZ
  1. ;
  1. S DOT=1,QUEUED=$D(ZTQUEUED)
  1. ; set up HOUR() array
  1. F I=1:1:24 S:$P(KMPDHOUR,",",I)'="" HOUR(+$P(KMPDHOUR,",",I))=""
  1. Q:'$D(HOUR)
  1. ; collect raw data
  1. F KMPDSS="ORWCV","ORWCV-FT" D
  1. .S I=""
  1. .F S I=$O(^KMPTMP("KMPDT",KMPDSS,I)) Q:I="" S DATA=^(I) I DATA]"" D
  1. ..S DOT=DOT+1 W:'QUEUED&('(DOT#1000)) "."
  1. ..; start/end date/time in fileman format
  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 ^TMP($J,"DATA",I,KMPDSS)=DATA
  1. ; collate raw data - combined FG and BG
  1. S I=""
  1. F S I=$O(^TMP($J,"DATA",I)) Q:I="" D
  1. .S (KMPDSS,DATA1,KMPDUZ)=""
  1. .S (DELTA,TOTDELT)=0
  1. .F KMPDSS="ORWCV","ORWCV-FT" D
  1. ..S DATA=$G(^TMP($J,"DATA",I,KMPDSS))
  1. ..Q:DATA=""
  1. ..S KMPDUZ=$P(DATA,U,3)
  1. ..S DATE(1)=$$HTFM^XLFDT($P(DATA,U)),DATE(2)=$$HTFM^XLFDT($P(DATA,U,2))
  1. ..Q:'DATE(1)!('DATE(2))
  1. ..; get delta
  1. ..S DELTA=$$HDIFF^XLFDT($P(DATA,U,2),$P(DATA,U),2)
  1. ..; determine hour
  1. ..S HR=+$E($P(DATE(1),".",2),1,2)
  1. ..S HR=$S(HR="":0,HR=24:0,1:HR)
  1. ..; quit if not in HOUR() array
  1. ..Q:'$D(HOUR(HR))
  1. ..; date without time
  1. ..S DATE1=$P(DATE(1),".") Q:'DATE1
  1. ..S TOTDELT=$G(TOTDELT)+DELTA
  1. ..S DATA1="^^^"_TOTDELT_"^"_$P(DATA,U,3)_"^"_$P(DATA,U,4)_"^^^"_$P($P(I," ",2),"-")
  1. .Q:DATA1=""
  1. .Q:'$$MATCH
  1. .Q:$P(DATA1,"^",4)<KMPDTSEC
  1. .; hour & second
  1. .S TIME=$P(DATE(1),".",2) Q:'TIME
  1. .; insert colon (:) between hour & second
  1. .S TIME=$E(TIME,1,2)_":"_$E(TIME,3,4)_":"_$E(TIME,5,6)
  1. .S:$P(TIME,":",2)="" $P(TIME,":",2)="00"
  1. .S:$P(TIME,":",3)="" $P(TIME,":",3)="00"
  1. .S ^TMP($J,"RPT",DATE1,TIME)=DATA1
  1. .; new person - external format
  1. .S $P(^TMP($J,"RPT",DATE1,TIME),U,5)=$P($G(^VA(200,KMPDUZ,0)),U)
  1. Q
  1. ;
  1. PRINT ;-- print data
  1. ;
  1. U IO
  1. D HDR
  1. Q:'$D(^TMP($J))
  1. N CONT,DATE,I,TOTAL
  1. S DATE="",CONT=1,TOTAL=0
  1. F S DATE=$O(^TMP($J,"RPT",DATE)) Q:'DATE D Q:'CONT
  1. .W !,$$FMTE^XLFDT(DATE,2) S HR=""
  1. .F S HR=$O(^TMP($J,"RPT",DATE,HR)) Q:HR="" D Q:'CONT
  1. ..I $Y>(IOSL-4) D Q:'CONT
  1. ...D CONTINUE^KMPDUTL4("",1,.CONT) Q:'CONT
  1. ...D HDR W !,$$FMTE^XLFDT(DATE,2)
  1. ..W ?10,HR
  1. ..S DATA=^TMP($J,"RPT",DATE,HR),TOTAL=TOTAL+1
  1. ..; user name
  1. ..W ?20,$S($P(DATA,U,5)]"":$E($P(DATA,U,5),1,19),1:"N/A")
  1. ..; client name
  1. ..W ?39,$S($P(DATA,U,6)]"":$E($P(DATA,U,6),1,19),1:"N/A")
  1. ..; ip address
  1. ..W ?60,$S($P(DATA,U,9)]"":$P(DATA,U,9),1:"N/A")
  1. ..; server delta
  1. ..W ?75,$P(DATA,U,4)
  1. ..W ! W:$E($O(^TMP($J,"RPT",DATE,HR)),1,2)'=$E(HR,1,2) !
  1. ;
  1. I CONT&(TOTAL) W !!?3,"Total Count: ",$J($FN(TOTAL,",",0),$L(TOTAL)+1)
  1. ;
  1. ; pause if output to terminal
  1. I CONT D CONTINUE^KMPDUTL4("Press RETURN to continue",1)
  1. ;
  1. Q
  1. ;
  1. HDR ;-- print header
  1. W @IOF
  1. N HRS
  1. S X=$G(KMPDTTL)
  1. W !?(80-$L(X)\2),X
  1. S KMPDHOUR=$G(KMPDHOUR)
  1. S HRS=$E(KMPDHOUR,1,$L(KMPDHOUR)-1)
  1. S X="Hour(s): "_HRS
  1. W !?(80-$L(X)\2),X,?61,"Printed: ",$$FMTE^XLFDT(DT,2)
  1. I +KMPDSRCH<4 D
  1. .S X=$P($G(KMPDSRCH),U,2)_": "
  1. .S X=X_$P($G(KMPDSRCH(1)),U,$S((+$G(KMPDSRCH))=1:2,1:1))
  1. .W !?(80-$L(X)\2),X
  1. S X="Threshold: "_$G(KMPDTSEC)_" seconds"
  1. W !?(80-$L(X)\2),X
  1. W !
  1. W !,"Date",?10,"Time",?20,"User Name",?39,"Client Name",?60,"IP Address",?75,"TTL"
  1. W !,$$REPEAT^XLFSTR("-",IOM)
  1. ;
  1. Q
  1. ;
  1. EXIT ;-- cleanup on exit
  1. S:$D(ZTQUEUED) ZTREQ="@"
  1. D ^%ZISC
  1. K KMPDHOUR,KMPDSRCH,KMPDTSEC,KMPDTTL
  1. Q
  1. ;
  1. MATCH() ;-- extrinsic function - check for matches
  1. ;-----------------------------------------------------------------------
  1. ; Return: 1 - match found
  1. ; 0 - no match found
  1. ;-----------------------------------------------------------------------
  1. Q:'$G(KMPDSRCH) 0
  1. ; any occurrence
  1. Q:(+KMPDSRCH)=4 1
  1. ; if not 'any occurrence' then must have kmpdsrch(1) node
  1. Q:'$D(KMPDSRCH(1)) 0
  1. ; if not 'any occurrence' must have DATA1 to determine match
  1. Q:$G(DATA1)=""
  1. ; user name
  1. Q:(+KMPDSRCH)=1&($P(DATA1,U,5)'=$P(KMPDSRCH(1),U)) 0
  1. ; client name
  1. Q:(+KMPDSRCH)=2&($P(DATA1,U,6)'=$P(KMPDSRCH(1),U)) 0
  1. ; ip address
  1. Q:(+KMPDSRCH)=3&($P(DATA1,U,9)'=$P(KMPDSRCH(1),U)) 0
  1. Q 1