[613] | 1 | MHVUL3 ;WAS/GPM - MHV UTILITIES - LOGGING ; 3/17/06 12:03am [5/24/06 10:18am]
|
---|
| 2 | ;;1.0;My HealtheVet;**1**;Aug 23, 2005
|
---|
| 3 | ;;Per VHA Directive 2004-038, this routine should not be modified.
|
---|
| 4 | ;
|
---|
| 5 | Q
|
---|
| 6 | ; Utilities supporting user options for logging
|
---|
| 7 | ;
|
---|
| 8 | LOGONO ; Turn on logging
|
---|
| 9 | N RESULT,DIR,DIRUT,DA,X,Y,DTM,%DT
|
---|
| 10 | D LOGINFOO
|
---|
| 11 | W !
|
---|
| 12 | D LOGINFO^MHVUL1(.RESULT)
|
---|
| 13 | I RESULT("DELETE")="" S RESULT("DELETE")=$$HTFM^XLFDT($H+30,1)
|
---|
| 14 | ;
|
---|
| 15 | ; If logging is already on prompt if want to change deletion date
|
---|
| 16 | I RESULT("STATE") D Q:$D(DIRUT)!'Y
|
---|
| 17 | . S DIR(0)="Y"
|
---|
| 18 | . S DIR("A",1)="Logging is already turned on."
|
---|
| 19 | . S DIR("A")="Reset deletion date"
|
---|
| 20 | . S DIR("?",1)="MHV application logging is already active."
|
---|
| 21 | . S DIR("?")="You may enter a new deletion date for the log."
|
---|
| 22 | . S DIR("B")="NO"
|
---|
| 23 | . D ^DIR
|
---|
| 24 | . Q
|
---|
| 25 | ;
|
---|
| 26 | ; Prompt for deletion date
|
---|
| 27 | K DIR,DIRUT,DA,X,Y
|
---|
| 28 | S DIR(0)="DA^"_DT_"::TX"
|
---|
| 29 | S DIR("A")="Log Deletion Date: "
|
---|
| 30 | S DIR("?",1)="Enter a future date to delete MHV application log."
|
---|
| 31 | S DIR("?",2)="After this date logging will automatically be stopped,"
|
---|
| 32 | S DIR("?")="and all log entries permanently deleted."
|
---|
| 33 | S DIR("B")=$$FMTE^XLFDT(RESULT("DELETE"),1)
|
---|
| 34 | D ^DIR Q:$D(DIRUT)
|
---|
| 35 | ;
|
---|
| 36 | D LOGON^MHVUL1(.RESULT,Y)
|
---|
| 37 | W !!,"MHV application logging switched on."
|
---|
| 38 | W !,"Log will be deleted on "_$$FMTE^XLFDT($P(RESULT,"^",2),1)_"."
|
---|
| 39 | Q
|
---|
| 40 | ;
|
---|
| 41 | LOGSETO ; Set logging parameters
|
---|
| 42 | N RESULT,UPDATE,DIR,DIRUT,DA,X,Y,DTM,%DT,N,I
|
---|
| 43 | D LOGINFOO
|
---|
| 44 | W !
|
---|
| 45 | D LOGINFO^MHVUL1(.UPDATE)
|
---|
| 46 | ;
|
---|
| 47 | ; State ON/OFF
|
---|
| 48 | K DIR,DIRUT,DA,X,Y
|
---|
| 49 | S DIR(0)="SA^1:ON;0:OFF"
|
---|
| 50 | S DIR("A")="Logging: "
|
---|
| 51 | S DIR("?")="Enter ON or OFF"
|
---|
| 52 | S DIR("B")=$S(UPDATE("STATE"):"ON",1:"OFF")
|
---|
| 53 | D ^DIR
|
---|
| 54 | Q:$D(DIRUT)
|
---|
| 55 | S UPDATE("STATE")=Y
|
---|
| 56 | ;
|
---|
| 57 | ; Deletion Date
|
---|
| 58 | K DIR,DIRUT,DA,X,Y
|
---|
| 59 | S DIR(0)="DA^"_DT_"::TX"
|
---|
| 60 | S DIR("A")="Log Deletion Date: "
|
---|
| 61 | S DIR("?",1)="Enter a future date to delete MHV application log."
|
---|
| 62 | S DIR("?",2)="After this date logging will automatically be stopped,"
|
---|
| 63 | S DIR("?")="and all log entries permanently deleted."
|
---|
| 64 | S DIR("B")=$$FMTE^XLFDT(UPDATE("DELETE"))
|
---|
| 65 | D ^DIR Q:$D(DIRUT)
|
---|
| 66 | S UPDATE("DELETE")=Y
|
---|
| 67 | ;
|
---|
| 68 | ; Logging Level
|
---|
| 69 | K DIR,DIRUT,DA,X,Y
|
---|
| 70 | S DIR(0)="SA^E:ERROR;T:TRACE;N:NAMED;D:DEBUG"
|
---|
| 71 | S DIR("A")="Logging Level? "
|
---|
| 72 | S DIR("?",1)="Set logging level"
|
---|
| 73 | S DIR("?",2)="ERROR - only errors logged"
|
---|
| 74 | S DIR("?",3)="TRACE - Trace and errors logged"
|
---|
| 75 | S DIR("?",4)="NAMED - Named entries, trace and errors logged"
|
---|
| 76 | S DIR("?")="DEBUG - All entries logged"
|
---|
| 77 | S DIR("B")=UPDATE("LEVEL")
|
---|
| 78 | D ^DIR
|
---|
| 79 | Q:$D(DIRUT)
|
---|
| 80 | S UPDATE("LEVEL")=Y(0)
|
---|
| 81 | ;
|
---|
| 82 | ; Names
|
---|
| 83 | I UPDATE("LEVEL")="NAMED" D
|
---|
| 84 | . S N=UPDATE("NAMES")
|
---|
| 85 | . F I=2:1:$L(N,"^") S:$P(N,"^",I)'="" UPDATE("NAMES",$P(N,"^",I))=""
|
---|
| 86 | . F D Q:$D(DIRUT)
|
---|
| 87 | .. K DIR,DIRUT,DA,X,Y
|
---|
| 88 | .. S DIR(0)="FO^"
|
---|
| 89 | .. S DIR("A")="Entry name"
|
---|
| 90 | .. S DIR("A",1)=UPDATE("NAMES")
|
---|
| 91 | .. S DIR("?",1)="Enter names of entries to log"
|
---|
| 92 | .. S DIR("?")="Remove entries by prefixing with @"
|
---|
| 93 | .. S DIR("B")=""
|
---|
| 94 | .. D ^DIR
|
---|
| 95 | .. Q:$D(DIRUT)
|
---|
| 96 | .. I $E(Y)="@" K UPDATE("NAMES",$E(Y,2,$L(Y)))
|
---|
| 97 | .. E S UPDATE("NAMES",Y)=""
|
---|
| 98 | .. S UPDATE("NAMES")="^",N=""
|
---|
| 99 | .. F S N=$O(UPDATE("NAMES",N)) Q:N="" S UPDATE("NAMES")=UPDATE("NAMES")_N_"^"
|
---|
| 100 | .. Q
|
---|
| 101 | . Q
|
---|
| 102 | ;
|
---|
| 103 | ; Auto Purge ON/OFF
|
---|
| 104 | K DIR,DIRUT,DA,X,Y
|
---|
| 105 | S DIR(0)="SA^1:ON;0:OFF"
|
---|
| 106 | S DIR("A")="Auto Purge: "
|
---|
| 107 | S DIR("?")="Enter ON or OFF"
|
---|
| 108 | S DIR("B")=$S(UPDATE("AUTOPURGE"):"ON",1:"OFF")
|
---|
| 109 | D ^DIR
|
---|
| 110 | Q:$D(DIRUT)
|
---|
| 111 | S UPDATE("AUTOPURGE")=Y
|
---|
| 112 | ;
|
---|
| 113 | ; Days to Keep
|
---|
| 114 | I UPDATE("AUTOPURGE") D Q:$D(DIRUT)
|
---|
| 115 | . I 'UPDATE("DAYS") S UPDATE("DAYS")=7
|
---|
| 116 | . K DIR,DIRUT,DA,X,Y
|
---|
| 117 | . S DIR(0)="N^1:365"
|
---|
| 118 | . S DIR("A")="Days to Keep"
|
---|
| 119 | . S DIR("?")="Enter number of days to keep log entries"
|
---|
| 120 | . S DIR("B")=UPDATE("DAYS")
|
---|
| 121 | . D ^DIR
|
---|
| 122 | . S UPDATE("DAYS")=Y
|
---|
| 123 | . Q
|
---|
| 124 | ;
|
---|
| 125 | W !!,"New MHV Application Log Settings:"
|
---|
| 126 | D LOGINFOD(.UPDATE)
|
---|
| 127 | W !
|
---|
| 128 | S DIR(0)="Y"
|
---|
| 129 | S DIR("A")="Ok to proceed with update"
|
---|
| 130 | S DIR("?")="Update logging parameters with those shown?"
|
---|
| 131 | S DIR("B")="NO"
|
---|
| 132 | D ^DIR Q:$D(DIRUT)
|
---|
| 133 | I 'Y Q
|
---|
| 134 | ;
|
---|
| 135 | D LOGSET^MHVUL1(.RESULT,.UPDATE)
|
---|
| 136 | W !!,"Logging parameters updated"
|
---|
| 137 | D LOGINFOO
|
---|
| 138 | Q
|
---|
| 139 | ;
|
---|
| 140 | LOGOFFO ;Turn off logging
|
---|
| 141 | N RESULT,DIR,DIRUT,DA,X,Y
|
---|
| 142 | D LOGINFOO
|
---|
| 143 | W !
|
---|
| 144 | D LOGINFO^MHVUL1(.RESULT)
|
---|
| 145 | ; Quit if logging is already off
|
---|
| 146 | I 'RESULT("STATE") W !,"Logging is already turned off." Q
|
---|
| 147 | S DIR(0)="Y"
|
---|
| 148 | S DIR("A")="Turn off logging"
|
---|
| 149 | S DIR("?")="Turn off MHV application logging."
|
---|
| 150 | S DIR("B")="NO"
|
---|
| 151 | D ^DIR Q:$D(DIRUT)
|
---|
| 152 | I 'Y Q
|
---|
| 153 | ;
|
---|
| 154 | D LOGOFF^MHVUL1(.RESULT)
|
---|
| 155 | W !!,"MHV application logging switched off."
|
---|
| 156 | W !,"Log will be deleted on "_$$FMTE^XLFDT($P(RESULT,"^",2),1)_"."
|
---|
| 157 | Q
|
---|
| 158 | ;
|
---|
| 159 | LOGPRGO ; Purge log
|
---|
| 160 | N RESULT,DIR,DIRUT,DA,X,Y,DTM,%DT
|
---|
| 161 | D LOGINFOO
|
---|
| 162 | W !
|
---|
| 163 | ; Purge from date
|
---|
| 164 | S DIR(0)="D^:"_DT_":TX"
|
---|
| 165 | S DIR("A")="Purge From Date"
|
---|
| 166 | S DIR("?",1)="Enter a past date to purge MHV application log."
|
---|
| 167 | S DIR("?")="All log entries older than this date will be removed."
|
---|
| 168 | S DIR("B")=$$HTE^XLFDT($H-7,1)
|
---|
| 169 | D ^DIR Q:$D(DIRUT)
|
---|
| 170 | S DTM=Y
|
---|
| 171 | ;
|
---|
| 172 | ; Confirm Purge
|
---|
| 173 | K DIR,DIRUT,DA,X,Y
|
---|
| 174 | S DIR(0)="Y"
|
---|
| 175 | S DIR("A",1)="Log will be purged from "_$$FMTE^XLFDT(DTM)_"."
|
---|
| 176 | S DIR("A")="OK to proceed"
|
---|
| 177 | S DIR("?")="All log entries older than this date will be removed."
|
---|
| 178 | S DIR("B")="NO"
|
---|
| 179 | D ^DIR Q:$D(DIRUT)
|
---|
| 180 | Q:'Y
|
---|
| 181 | ;
|
---|
| 182 | D LOGPRG^MHVUL1(.RESULT,DTM)
|
---|
| 183 | W !!,"Log purged from "_$$FMTE^XLFDT($P(RESULT,"^",2),1)_"."
|
---|
| 184 | Q
|
---|
| 185 | ;
|
---|
| 186 | LOGINFOO ; Display log information
|
---|
| 187 | N RESULT
|
---|
| 188 | D LOGINFO^MHVUL1(.RESULT)
|
---|
| 189 | W !!,"MHV Application Log Settings:"
|
---|
| 190 | D LOGINFOD(.RESULT)
|
---|
| 191 | Q
|
---|
| 192 | ;
|
---|
| 193 | LOGINFOD(RESULT) ; Display log
|
---|
| 194 | W !," Log Creation Date: ",$$FMTE^XLFDT(RESULT("CREATED"))
|
---|
| 195 | W !," Log Deletion Date: ",$$FMTE^XLFDT(RESULT("DELETE"))
|
---|
| 196 | W !," Oldest Entry: ",$$FMTE^XLFDT(RESULT("OLDEST"))
|
---|
| 197 | W !," Newest Entry: ",$$FMTE^XLFDT(RESULT("NEWEST"))
|
---|
| 198 | W !," Logging: ",$S(RESULT("STATE"):"",1:"OFF")
|
---|
| 199 | I RESULT("STATE") D
|
---|
| 200 | . W RESULT("LEVEL")_" mode"
|
---|
| 201 | . I RESULT("LEVEL")="NAMED" W !,?16,"Names: ",RESULT("NAMES")
|
---|
| 202 | . Q
|
---|
| 203 | W !," Auto Purge: ",$S(RESULT("AUTOPURGE"):"",1:"OFF")
|
---|
| 204 | I RESULT("AUTOPURGE") W +RESULT("DAYS")," days"
|
---|
| 205 | Q
|
---|
| 206 | ;
|
---|
| 207 | LOGSIZEO ; Display log size information
|
---|
| 208 | N RESULT
|
---|
| 209 | D LOGSIZE^MHVUL1(.RESULT)
|
---|
| 210 | W !!,"MHV Application Log Size:"
|
---|
| 211 | D LOGSIZED(.RESULT)
|
---|
| 212 | Q
|
---|
| 213 | ;
|
---|
| 214 | LOGSIZED(RESULT) ; Display log size
|
---|
| 215 | W !," Number of Entries: ",RESULT("ENTRY COUNT")
|
---|
| 216 | W !," Number of Nodes: ",RESULT("NODE COUNT")
|
---|
| 217 | W !," Approx. size in KB: ",RESULT("BYTE COUNT")\1024
|
---|
| 218 | Q
|
---|
| 219 | ;
|
---|
| 220 | LOGVIEWO ; View log
|
---|
| 221 | N LOG,CNT,DTM,J,ENTRY,RESULT,DIR,DIRUT,DTOUT,DUOUT,DA,X,Y,DTM
|
---|
| 222 | ; Use the browser if supported by emulation
|
---|
| 223 | I $$TEST^DDBRT D LOGBROWS^MHVUL2 Q
|
---|
| 224 | K ^TMP("MHV LOG SUMMARY",$J)
|
---|
| 225 | K ^TMP("MHV LOG DETAIL",$J)
|
---|
| 226 | D LOGSUM^MHVUL1(.LOG)
|
---|
| 227 | S CNT=$P(@LOG,"^",2)
|
---|
| 228 | I CNT<1 D LOGSUMD(LOG) Q
|
---|
| 229 | F D Q:$D(DIRUT)
|
---|
| 230 | . D LOGSUMD(LOG) Q:$D(DTOUT)!$D(DUOUT)
|
---|
| 231 | . K DIR,X,DIRUT
|
---|
| 232 | . I 'Y D Q:$D(DIRUT)
|
---|
| 233 | .. S DIR(0)="N^1:"_CNT
|
---|
| 234 | .. S DIR("A")="Select Entry"
|
---|
| 235 | .. S DIR("?")="Select an entry to display"
|
---|
| 236 | .. D ^DIR
|
---|
| 237 | .. Q
|
---|
| 238 | . ;
|
---|
| 239 | . S DTM=$P(@LOG@(Y),"^")
|
---|
| 240 | . S J=$P(@LOG@(Y),"^",2)
|
---|
| 241 | . D LOGDET^MHVUL1(.ENTRY,DTM,J)
|
---|
| 242 | . D LOGDETD(ENTRY)
|
---|
| 243 | . K @ENTRY
|
---|
| 244 | . Q
|
---|
| 245 | K ^TMP("MHV LOG SUMMARY",$J)
|
---|
| 246 | K ^TMP("MHV LOG DETAIL",$J)
|
---|
| 247 | Q
|
---|
| 248 | ;
|
---|
| 249 | LOGSUMD(LOG) ; Display log summary
|
---|
| 250 | N CNT,DTM,J,N
|
---|
| 251 | W !!,"LOG SUMMARY"
|
---|
| 252 | W !,?5,"Entry",?12,"Timestamp",?37,"Job",?50,"Items"
|
---|
| 253 | S CNT=$P(@LOG,"^",2)
|
---|
| 254 | I CNT<1 W !!,?12,"EMPTY" Q
|
---|
| 255 | S Y=0
|
---|
| 256 | K DIRUT,DTOUT,DUOUT
|
---|
| 257 | F I=1:1:CNT D Q:Y!$D(DTOUT)!$D(DUOUT)
|
---|
| 258 | . I I#22=0 D Q:Y!$D(DTOUT)!$D(DUOUT)
|
---|
| 259 | .. K DIR,X,Y,DIRUT,DTOUT,DUOUT
|
---|
| 260 | .. S DIR(0)="NO^1:"_CNT
|
---|
| 261 | .. S DIR("A",1)="Press <RETURN> to see more, '^' to exit, OR"
|
---|
| 262 | .. S DIR("A")="Select Entry"
|
---|
| 263 | .. S DIR("?")="Select an entry to display"
|
---|
| 264 | .. D ^DIR
|
---|
| 265 | .. Q
|
---|
| 266 | . S DTM=$$FMTE^XLFDT(-$P(@LOG@(I),"^"))
|
---|
| 267 | . S J=$P(@LOG@(I),"^",2)
|
---|
| 268 | . S N=$P(@LOG@(I),"^",3)
|
---|
| 269 | . W !,?5,I,?12,DTM,?37,J,?50,N
|
---|
| 270 | . Q
|
---|
| 271 | Q
|
---|
| 272 | ;
|
---|
| 273 | LOGDETD(ENTRY) ;Display log entry
|
---|
| 274 | N CNT,DTM,J,N
|
---|
| 275 | W !!,"LOG DETAIL"
|
---|
| 276 | S CNT=$P(@ENTRY,"^",2)
|
---|
| 277 | I CNT<1 W !,?12,"EMPTY" Q
|
---|
| 278 | W !,?12,"Timestamp",?37,"Job",?50,"Items",?60,"Nodes"
|
---|
| 279 | S DTM=$$FMTE^XLFDT(-$P(@ENTRY@(0),"^"))
|
---|
| 280 | S J=$P(@ENTRY@(0),"^",2)
|
---|
| 281 | S N=$P(@ENTRY@(0),"^",3)
|
---|
| 282 | W !,?12,DTM,?37,J,?50,N,?60,CNT
|
---|
| 283 | S J=3
|
---|
| 284 | F I=1:1:CNT D Q:$D(DIRUT)
|
---|
| 285 | . S J=($L(@ENTRY@(I))+5)\80+1+J
|
---|
| 286 | . I J>23 D Q:$D(DIRUT)
|
---|
| 287 | .. K DIR,X,Y,DIRUT
|
---|
| 288 | .. S DIR(0)="E"
|
---|
| 289 | .. D ^DIR
|
---|
| 290 | .. S J=($L(@ENTRY@(I))+5)\80+1
|
---|
| 291 | .. Q
|
---|
| 292 | . W !,?5,@ENTRY@(I)
|
---|
| 293 | . Q
|
---|
| 294 | ;
|
---|
| 295 | Q:$D(DIRUT)
|
---|
| 296 | K DIR,X,Y,DIRUT
|
---|
| 297 | S DIR(0)="E"
|
---|
| 298 | D ^DIR
|
---|
| 299 | Q
|
---|
| 300 | ;
|
---|