| [613] | 1 | KMPDTU10 ;OAK/RAK - CP Tools Timing Utility ;6/21/05  10:17 | 
|---|
|  | 2 | ;;2.0;CAPACITY MANAGEMENT TOOLS;**4**;Mar 22, 2002 | 
|---|
|  | 3 | ; | 
|---|
|  | 4 | DATERNG(KMPDSS,KMPDEF,KMPDRES,KMPDDT) ; timing date range for a subscript | 
|---|
|  | 5 | ;----------------------------------------------------------------------- | 
|---|
|  | 6 | ; KMPDSS.... KMPTMP SUBSCRIPT | 
|---|
|  | 7 | ; KMPDEF.... (optional) default number of days to track - if not defined | 
|---|
|  | 8 | ;            will default to seven (7) | 
|---|
|  | 9 | ; KMPDRES(). Results of api in format: | 
|---|
|  | 10 | ;             KMPDRES(0)=piece 1 - Start Date Internal | 
|---|
|  | 11 | ;                        piece 2 - End Date Internal | 
|---|
|  | 12 | ;                        piece 3 - Start Date External | 
|---|
|  | 13 | ;                        piece 4 - End Date External | 
|---|
|  | 14 | ;                 Null ("") is returned if no results are found | 
|---|
|  | 15 | ;             KMPDRES(1)=NumberOfDays | 
|---|
|  | 16 | ; KMPDDT.... Date only (do not ask for days) | 
|---|
|  | 17 | ;             0 - both date & days | 
|---|
|  | 18 | ;             1 - date only - do not ask for days | 
|---|
|  | 19 | ; | 
|---|
|  | 20 | ; This api determines the date range for KMPDSS (ex: ORWCV for CPRS | 
|---|
|  | 21 | ; cover sheets).  It asks the user the ending date.  After the ending | 
|---|
|  | 22 | ; date is entered, the user is prompted for the number of days to track. | 
|---|
|  | 23 | ; Results are returned in the KMPDRES() array as described above. | 
|---|
|  | 24 | ;----------------------------------------------------------------------- | 
|---|
|  | 25 | K KMPDRES S KMPDRES(0)="",KMPDRES(1)="" | 
|---|
|  | 26 | Q:$G(KMPDSS)="" | 
|---|
|  | 27 | S:'$G(KMPDEF) KMPDEF=7 | 
|---|
|  | 28 | S KMPDDT=+$G(KMPDDT) | 
|---|
|  | 29 | N COUNT,DATE,DAYS,END,SESS,START | 
|---|
|  | 30 | ; start & end dates | 
|---|
|  | 31 | S DATE=$$DATERNG1(KMPDSS,.SESS) | 
|---|
|  | 32 | Q:'$D(SESS) | 
|---|
|  | 33 | S START=$P(DATE,U),END=$P(DATE,U,2) | 
|---|
|  | 34 | Q:'START!('END) | 
|---|
|  | 35 | ; get end date | 
|---|
|  | 36 | K DIR S DIR(0)="DO^"_START_":"_END_":E" | 
|---|
|  | 37 | S DIR("A")="Select End Date",DIR("B")=$$FMTE^XLFDT(END) | 
|---|
|  | 38 | W ! D ^DIR Q:'Y  S END=Y | 
|---|
|  | 39 | ; if date only | 
|---|
|  | 40 | I KMPDDT D  Q | 
|---|
|  | 41 | .S KMPDRES(0)=END_U_END_U_$$FMTE^XLFDT(END)_U_$$FMTE^XLFDT(END) | 
|---|
|  | 42 | ; determine number of days | 
|---|
|  | 43 | S DATE=END+.1,START=END,DAYS=0 | 
|---|
|  | 44 | F  S DATE=$O(SESS(DATE),-1) Q:'DATE   S START=DATE,DAYS=DAYS+1 | 
|---|
|  | 45 | Q:'DAYS | 
|---|
|  | 46 | ; days to go back | 
|---|
|  | 47 | K DIR S DIR(0)="NO^1:"_DAYS_":O" | 
|---|
|  | 48 | S DIR("A")="Select # of Days Review" | 
|---|
|  | 49 | S DIR("B")=$S(DAYS'<KMPDEF:KMPDEF,1:DAYS) | 
|---|
|  | 50 | D ^DIR Q:Y=""!(Y="^") | 
|---|
|  | 51 | ; determine start date | 
|---|
|  | 52 | S START=END | 
|---|
|  | 53 | I Y'=1 S COUNT=1 D | 
|---|
|  | 54 | .F  S START=$O(SESS(START),-1) Q:'START  S COUNT=COUNT+1 Q:COUNT'<Y | 
|---|
|  | 55 | S KMPDRES(0)=START_U_END_U_$$FMTE^XLFDT(START)_U_$$FMTE^XLFDT(END) | 
|---|
|  | 56 | S KMPDRES(1)=Y | 
|---|
|  | 57 | ; | 
|---|
|  | 58 | Q | 
|---|
|  | 59 | ; | 
|---|
|  | 60 | DATERNG1(KMPDSS,KMPDSESS) ;-- extrinsic function | 
|---|
|  | 61 | ;----------------------------------------------------------------------- | 
|---|
|  | 62 | ; KMPDSS.... KMPTMP SUBSCRIPT | 
|---|
|  | 63 | ; KMPDSESS() Array of dates: | 
|---|
|  | 64 | ;             KMPDSESS(3030801)="" | 
|---|
|  | 65 | ;             KMPDSESS(3030802)="" | 
|---|
|  | 66 | ;             ... | 
|---|
|  | 67 | ; | 
|---|
|  | 68 | ; Return: StartDate^EndDate - in internal fileman format | 
|---|
|  | 69 | ;         "" - no results | 
|---|
|  | 70 | ;----------------------------------------------------------------------- | 
|---|
|  | 71 | Q:$G(KMPDSS)="" "" | 
|---|
|  | 72 | N DATE,END,START | 
|---|
|  | 73 | ; determine most recent date | 
|---|
|  | 74 | F DATE=0:0 S DATE=$O(^KMPD(8973.2,"ASVDTSS",KMPDSS,DATE)) Q:'DATE  D | 
|---|
|  | 75 | .; set array of session dates | 
|---|
|  | 76 | .S KMPDSESS(DATE)="" | 
|---|
|  | 77 | Q:'$D(KMPDSESS) "" | 
|---|
|  | 78 | ; set start and end dates according to SESS() array | 
|---|
|  | 79 | S END=$O(KMPDSESS("A"),-1),START=$O(KMPDSESS("")) | 
|---|
|  | 80 | Q START_"^"_END | 
|---|
|  | 81 | ; | 
|---|
|  | 82 | DTTMRNG(KMPDSS,KMPDEF,KMPDRES,KMPDEFH) ; timing date/time range for a subscript | 
|---|
|  | 83 | ;----------------------------------------------------------------------- | 
|---|
|  | 84 | ; KMPDSS.... KMPTMP SUBSCRIPT | 
|---|
|  | 85 | ; KMPDEF.... (optional) default number of days to track - if not defined | 
|---|
|  | 86 | ;            will default to seven (7) | 
|---|
|  | 87 | ; KMPDRES(). Results of api in format: | 
|---|
|  | 88 | ;             KMPDRES(0)=piece 1 - Start Date Internal | 
|---|
|  | 89 | ;                        piece 2 - End Date Internal | 
|---|
|  | 90 | ;                        piece 3 - Start Date External | 
|---|
|  | 91 | ;                        piece 4 - End Date External | 
|---|
|  | 92 | ;                 Null ("") is returned if no results are found | 
|---|
|  | 93 | ;             KMPDRES(1)=NumberOfDays | 
|---|
|  | 94 | ; KMPDEFH.. (optional) Default hour. | 
|---|
|  | 95 | ; | 
|---|
|  | 96 | ; This api determines the date range for KMPDSS (ex: ORWCV for CPRS | 
|---|
|  | 97 | ; cover sheets).  It asks the user the ending date.  After the ending | 
|---|
|  | 98 | ; date is entered, the user is prompted for the number of hours to | 
|---|
|  | 99 | ; review. Results are returned in the KMPDRES() array as described | 
|---|
|  | 100 | ; above. | 
|---|
|  | 101 | ;----------------------------------------------------------------------- | 
|---|
|  | 102 | K KMPDRES S KMPDRES(0)="",KMPDRES(1)="" | 
|---|
|  | 103 | Q:$G(KMPDSS)="" | 
|---|
|  | 104 | S:'$G(KMPDEF) KMPDEF=7 | 
|---|
|  | 105 | S KMPDEFH=$G(KMPDEFH) | 
|---|
|  | 106 | N COUNT,DATE,DAYS,END,SESS,START | 
|---|
|  | 107 | ; get date | 
|---|
|  | 108 | D DATERNG(KMPDSS,1,.KMPDRES,1) | 
|---|
|  | 109 | Q:'$D(KMPDRES) | 
|---|
|  | 110 | Q:$G(KMPDRES(0))="" | 
|---|
|  | 111 | S KMPDRES(1)="" | 
|---|
|  | 112 | ; determine number of hours | 
|---|
|  | 113 | K DIR S DIR(0)="LO^0:23:O" | 
|---|
|  | 114 | S DIR("A")="Select Hour(s) to Review" | 
|---|
|  | 115 | S:KMPDEFH'="" DIR("B")=KMPDEFH | 
|---|
|  | 116 | D ^DIR Q:Y=""!(Y="^") | 
|---|
|  | 117 | S KMPDRES(1)=Y | 
|---|
|  | 118 | Q | 
|---|
|  | 119 | ; | 
|---|
|  | 120 | LISTSEL(KMPDLIST,KMPDSS,KMPDRLTM) ;-- extrinsic function - build list and select entry | 
|---|
|  | 121 | ;----------------------------------------------------------------------- | 
|---|
|  | 122 | ; KMPDLIST... 2 - Client Name | 
|---|
|  | 123 | ;             3 - IP Address | 
|---|
|  | 124 | ; KMPDSS..... Field #.07 (KMPTMP SUBSCRIPT) | 
|---|
|  | 125 | ; KMPDRLTM... Real-Time data | 
|---|
|  | 126 | ;              0 - not real-time | 
|---|
|  | 127 | ;              1 - real-time | 
|---|
|  | 128 | ; | 
|---|
|  | 129 | ; Return: "" - no selection | 
|---|
|  | 130 | ;         Name - free text | 
|---|
|  | 131 | ; | 
|---|
|  | 132 | ; This function will build a list of entries from file #8973.2 | 
|---|
|  | 133 | ;(CP TIMING) and ask the user to select an entry. | 
|---|
|  | 134 | ;----------------------------------------------------------------------- | 
|---|
|  | 135 | S KMPDLIST=+$G(KMPDLIST) | 
|---|
|  | 136 | Q:KMPDLIST<2!(KMPDLIST>3) "" | 
|---|
|  | 137 | Q:$G(KMPDSS)="" "" | 
|---|
|  | 138 | S KMPDRLTM=+$G(KMPDRLTM) | 
|---|
|  | 139 | ; | 
|---|
|  | 140 | N DIC,I,X,XREF,Y | 
|---|
|  | 141 | ; | 
|---|
|  | 142 | W " ==> building list..." | 
|---|
|  | 143 | K ^TMP("KMPDTU10-LIST",$J) | 
|---|
|  | 144 | D @$S('KMPDRLTM:"LISTSELH",1:"LISTSELR") | 
|---|
|  | 145 | ; quit if no data | 
|---|
|  | 146 | Q:'$D(^TMP("KMPDTU10-LIST",$J)) | 
|---|
|  | 147 | S DIC="^TMP(""KMPDTU10-LIST"",$J," | 
|---|
|  | 148 | S DIC(0)="AEQZ" | 
|---|
|  | 149 | S DIC("A")=$S(KMPDLIST=2:"Select Client",1:"IP Address")_": " | 
|---|
|  | 150 | D ^DIC | 
|---|
|  | 151 | K ^TMP("KMPDTU10-LIST",$J) | 
|---|
|  | 152 | Q $S(Y<1:"",1:$P(Y,"^",2)) | 
|---|
|  | 153 | ; | 
|---|
|  | 154 | LISTSELH ;-- historical data list | 
|---|
|  | 155 | N I,CNT,DOT,XREF | 
|---|
|  | 156 | ; determine xref to build list | 
|---|
|  | 157 | S XREF=$S(KMPDLIST=2:"ASSCLDTTM",KMPDLIST=3:"ASSIPDTTM",1:"") | 
|---|
|  | 158 | S I="",(CNT,DOT)=0 | 
|---|
|  | 159 | F  S I=$O(^KMPD(8973.2,XREF,KMPDSS,I)) Q:I=""  D | 
|---|
|  | 160 | .S CNT=CNT+1,DOT=DOT+1 W:'(DOT#100) "." | 
|---|
|  | 161 | .S ^TMP("KMPDTU10-LIST",$J,CNT,0)=I | 
|---|
|  | 162 | .S ^TMP("KMPDTU10-LIST",$J,"B",I,CNT)="" | 
|---|
|  | 163 | S ^TMP("KMPDTU10-LIST",$J,0)=$S(KMPDLIST=2:"Client Name",1:"IP Address")_"^1.01^"_CNT_"^"_CNT | 
|---|
|  | 164 | Q | 
|---|
|  | 165 | ; | 
|---|
|  | 166 | LISTSELR ;-- real-time data list | 
|---|
|  | 167 | N I,CNT,DATA,DOT,X | 
|---|
|  | 168 | S I="",(CNT,DOT)=0 | 
|---|
|  | 169 | F  S I=$O(^KMPTMP("KMPDT",KMPDSS,I)) Q:I=""  S DATA=^(I) I DATA]"" D | 
|---|
|  | 170 | .S X=$S(KMPDLIST=2:$P(DATA,U,4),1:$P($P(I," ",2),"-")) | 
|---|
|  | 171 | .Q:$O(^TMP("KMPDTU10-LIST",$J,"B",X,0)) | 
|---|
|  | 172 | .S CNT=CNT+1,DOT=DOT+1 W:'(DOT#100) "." | 
|---|
|  | 173 | .S ^TMP("KMPDTU10-LIST",$J,CNT,0)=X | 
|---|
|  | 174 | .S ^TMP("KMPDTU10-LIST",$J,"B",X,CNT)="" | 
|---|
|  | 175 | S ^TMP("KMPDTU10-LIST",$J,0)=$S(KMPDLIST=2:"Client Name",1:"IP Address")_"^1.01^"_CNT_"^"_CNT | 
|---|
|  | 176 | Q | 
|---|
|  | 177 | ; | 
|---|
|  | 178 | SRCHBY(KMPDRES,KMPDSS,KMPDRLTM) ;-- api - search by criteria | 
|---|
|  | 179 | ;----------------------------------------------------------------------- | 
|---|
|  | 180 | ; KMPDRES().. Array (passed by reference) containing results in format: | 
|---|
|  | 181 | ;             KMPDRES    = "" - no valid selection | 
|---|
|  | 182 | ;             KMPDRES    = 1^User Name | 
|---|
|  | 183 | ;             KMPDRES(1) = DUZ^NewPersonName | 
|---|
|  | 184 | ;             KMPDRES    = 2^Client Name | 
|---|
|  | 185 | ;             KMPDRES(1) = ClientName (free text) | 
|---|
|  | 186 | ;             KMPDRES    = 3^IP Address | 
|---|
|  | 187 | ;             KMPDRES(1) = IPAddress | 
|---|
|  | 188 | ;             KMPDRES    = 4^Any Occurrence | 
|---|
|  | 189 | ; KMPDSS..... KMPTMP SUBSCIPT - field #.07 from file #8973.2 (CP TIMING) | 
|---|
|  | 190 | ; KMPDRLTM... Real-Time data | 
|---|
|  | 191 | ;              0 - not real-time | 
|---|
|  | 192 | ;              1 - real-time | 
|---|
|  | 193 | ;----------------------------------------------------------------------- | 
|---|
|  | 194 | K KMPDRES S KMPDRES="" | 
|---|
|  | 195 | Q:$G(KMPDSS)="" | 
|---|
|  | 196 | S KMPDRLTM=+$G(KMPDRLTM) | 
|---|
|  | 197 | N DIC,DIR,X,Y | 
|---|
|  | 198 | S DIR(0)="SO^1:User Name;2:Client Name;3:IP Address;4:All of the Above" | 
|---|
|  | 199 | S DIR("A")="Search By" | 
|---|
|  | 200 | S DIR("B")=4 | 
|---|
|  | 201 | D ^DIR | 
|---|
|  | 202 | Q:'Y | 
|---|
|  | 203 | S KMPDRES=Y_"^"_Y(0) | 
|---|
|  | 204 | ; quit if 'all of the above' | 
|---|
|  | 205 | Q:(+KMPDRES)=4 | 
|---|
|  | 206 | ; | 
|---|
|  | 207 | ; user name | 
|---|
|  | 208 | I (+KMPDRES)=1 D  Q | 
|---|
|  | 209 | .S DIC=200,DIC(0)="AEMQZ",DIC("A")="Select User: " | 
|---|
|  | 210 | .D ^DIC | 
|---|
|  | 211 | .I Y<1 S KMPDRES="" Q | 
|---|
|  | 212 | .S KMPDRES(1)=Y | 
|---|
|  | 213 | ; | 
|---|
|  | 214 | ; client name | 
|---|
|  | 215 | I (+KMPDRES)=2 D  Q | 
|---|
|  | 216 | .S KMPDRES(1)=$$LISTSEL(+KMPDRES,KMPDSS,KMPDRLTM) | 
|---|
|  | 217 | .S:KMPDRES(1)="" KMPDRES="" | 
|---|
|  | 218 | ; | 
|---|
|  | 219 | ; ip address | 
|---|
|  | 220 | I (+KMPDRES)=3 D  Q | 
|---|
|  | 221 | .S KMPDRES(1)=$$LISTSEL(+KMPDRES,KMPDSS,KMPDRLTM) | 
|---|
|  | 222 | .S:KMPDRES(1)="" KMPDRES="" | 
|---|
|  | 223 | ; | 
|---|
|  | 224 | Q | 
|---|
|  | 225 | ; | 
|---|
|  | 226 | TTLSEC() ;-- extrinsic function - time-to-load threshold seconds | 
|---|
|  | 227 | ;----------------------------------------------------------------------- | 
|---|
|  | 228 | ;----------------------------------------------------------------------- | 
|---|
|  | 229 | N DIR,X,Y | 
|---|
|  | 230 | S DIR(0)="NAO^1" | 
|---|
|  | 231 | S DIR("A")="Select Time-To-Load Threshold (Seconds): " | 
|---|
|  | 232 | S DIR("B")=60 | 
|---|
|  | 233 | D ^DIR | 
|---|
|  | 234 | Q $S(Y:Y,1:"") | 
|---|