| 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 |  ;
 | 
|---|