| 1 | HLUOPT4 ;OIFO-O/LJA - Purging Entries in file #772 and #773 ;02/04/2004 16:37
 | 
|---|
| 2 |  ;;1.6;HEALTH LEVEL SEVEN;**109**;Oct 13, 1995
 | 
|---|
| 3 |  ;
 | 
|---|
| 4 |  ; This routine was created by patch HL*1.6*109
 | 
|---|
| 5 |  ;
 | 
|---|
| 6 | SHOW120 ; Call SHOWXTMP with 30 second redisplay...
 | 
|---|
| 7 |  D SHOWXTMP(120)
 | 
|---|
| 8 |  QUIT
 | 
|---|
| 9 |  ;
 | 
|---|
| 10 | ASKSHOW ; Ask whether want to monitor purging job progress...
 | 
|---|
| 11 |  N ACTION,XTMP
 | 
|---|
| 12 |  S XTMP=$O(^XTMP("HLUOPT1 9999999.999999"),-1) QUIT:XTMP'["HLUOPT1 "  ;->
 | 
|---|
| 13 |  W !!,"As purging jobs run, they record critical information in the ^XTMP global for"
 | 
|---|
| 14 |  W !,"later review.  (This information is updated every two minutes.) You can view"
 | 
|---|
| 15 |  W !,"purge information now..."
 | 
|---|
| 16 |  F  S ACTION=$$ACTION QUIT:'ACTION  D
 | 
|---|
| 17 |  .  I ACTION=1 D SHOWALL^HLUOPT5(XTMP)
 | 
|---|
| 18 |  .  I ACTION=2 D SHOWXTMP(120)
 | 
|---|
| 19 |  .  I ACTION=3 D
 | 
|---|
| 20 |  .  .  W @IOF
 | 
|---|
| 21 |  .  .  D GRAPH^HLUOPT5
 | 
|---|
| 22 |  .  .  S X=$$BTE^HLCSMON("Press RETURN to continue... ",1)
 | 
|---|
| 23 |  QUIT
 | 
|---|
| 24 |  ;
 | 
|---|
| 25 | ACTION() ;
 | 
|---|
| 26 |  N DIR,DIRUT,DTOUT,DUOUT,X,Y
 | 
|---|
| 27 |  S DIR(0)="S^1:Display all available purging data (full screen);2:Display purging summary (single line);3:Display purging graph;4:Exit."
 | 
|---|
| 28 |  S DIR("?",1)="Option #1 displays all available purging data, for the last job."
 | 
|---|
| 29 |  S DIR("?",2)=""
 | 
|---|
| 30 |  S DIR("?",3)="Option #2 displays the most valuable purging data, but not all data. This"
 | 
|---|
| 31 |  S DIR("?",4)="option includes data for the last purging job, plus previous puring jobs."
 | 
|---|
| 32 |  S DIR("?",5)=""
 | 
|---|
| 33 |  S DIR("?")="Option #3 displays purging times and totals in a graphic representation."
 | 
|---|
| 34 |  D ^DIR
 | 
|---|
| 35 |  QUIT $S(+Y=1:1,+Y=2:2,+Y=3:3,1:"")
 | 
|---|
| 36 |  ;
 | 
|---|
| 37 | SHOWXTMP(SEC) ; Continual redisplay of purging progress ever SEC seconds...
 | 
|---|
| 38 |  N ABORT,ACTIVE,HDR,IOINHI,IOINORM,X,XTMP
 | 
|---|
| 39 |  ;
 | 
|---|
| 40 |  S X="IOINHI;IOINORM" D ENDR^%ZISS
 | 
|---|
| 41 |  S HDR=" Task-Number   Start-Time   Timestamp Finish-time     772@     773@     Time-NOW"
 | 
|---|
| 42 |  ;
 | 
|---|
| 43 |  ; Get last purging process' XTMP...
 | 
|---|
| 44 |  S XTMP=$O(^XTMP("HLUOPT1 9999999.999999"),-1)
 | 
|---|
| 45 |  S ACTIVE=0 ; Default...
 | 
|---|
| 46 |  I XTMP]"" S X=$P($G(^XTMP(XTMP,"RUN")),U,4) I X'?7N.E S ACTIVE=1
 | 
|---|
| 47 |  ;
 | 
|---|
| 48 |  ; Show last 10 runs...
 | 
|---|
| 49 |  D SHOWNUM($S(ACTIVE:9,1:18))
 | 
|---|
| 50 |  ;
 | 
|---|
| 51 |  ; Redisplay SEC defaults to 30...
 | 
|---|
| 52 |  S SEC=$S($G(SEC)>0:+SEC,1:30)
 | 
|---|
| 53 |  ;
 | 
|---|
| 54 |  ; What if no purging process exists?
 | 
|---|
| 55 |  I XTMP']""!('ACTIVE) D  QUIT  ;->
 | 
|---|
| 56 |  .  W !!,"There is no currently running purge job..."
 | 
|---|
| 57 |  .  S X=$$BTE^HLCSMON("Press RETURN to exit... ",1)
 | 
|---|
| 58 |  ;
 | 
|---|
| 59 |  W !!,"Any old jobs that exist will be shown above. The current (or last) purge job"
 | 
|---|
| 60 |  W !,"is shown below.  The information on each line will automatically refresh"
 | 
|---|
| 61 |  W !,"every ",SEC," seconds (or whenever you press RETURN.)"
 | 
|---|
| 62 |  W !!,IOINHI,"Note!!",IOINORM," Enter '^' when you are ready to exit."
 | 
|---|
| 63 |  W !!,"Current (or last) purge job..."
 | 
|---|
| 64 |  W !
 | 
|---|
| 65 |  S CT=0
 | 
|---|
| 66 |  ;
 | 
|---|
| 67 |  F  D  QUIT:ABORT
 | 
|---|
| 68 |  .  S ABORT=1,CT=CT+1
 | 
|---|
| 69 |  .  D LINERUN(XTMP)
 | 
|---|
| 70 |  .  R X:SEC QUIT:X]""  ;-> Quit if they enter anything
 | 
|---|
| 71 |  .  I CT>17 W ! S CT=0
 | 
|---|
| 72 |  .  S ABORT=0
 | 
|---|
| 73 |  ;
 | 
|---|
| 74 |  QUIT
 | 
|---|
| 75 |  ;
 | 
|---|
| 76 | SHOWNUM(NUM) ; Show last NUM entries...
 | 
|---|
| 77 |  N CT,HOLD,XTMP
 | 
|---|
| 78 |  ; ACTIVE -- req
 | 
|---|
| 79 |  S XTMP="HLUOPT1 9999999.99999"
 | 
|---|
| 80 |  ; If last job is active, don't include it in array...
 | 
|---|
| 81 |  I ACTIVE S XTMP=$O(^XTMP(XTMP),-1) QUIT:XTMP'["HLUOPT1 "  ;->
 | 
|---|
| 82 |  S CT=0
 | 
|---|
| 83 |  F  S XTMP=$O(^XTMP(XTMP),-1) Q:(CT>(NUM-1))!(XTMP'["HLUOPT1 ")  D
 | 
|---|
| 84 |  .  S CT=CT+1
 | 
|---|
| 85 |  .  S HOLD(XTMP)=""
 | 
|---|
| 86 |  QUIT:'$D(HOLD)  ;->
 | 
|---|
| 87 |  W !!,"Recent purge runs..."
 | 
|---|
| 88 |  W !!,HDR,!,$$REPEAT^XLFSTR("-",IOM)
 | 
|---|
| 89 |  S XTMP=""
 | 
|---|
| 90 |  F  S XTMP=$O(HOLD(XTMP)) Q:XTMP']""  D
 | 
|---|
| 91 |  .  D LINERUN(XTMP)
 | 
|---|
| 92 |  QUIT
 | 
|---|
| 93 |  ;
 | 
|---|
| 94 | LINERUN(XTMP) ; Display one line...
 | 
|---|
| 95 |  N I,PCE1,PCE2,PCE3,PCE4,PCE5,PCE6,PCE7,PCE8,PCE9,PCE10,PCE11
 | 
|---|
| 96 |  N PCE12,PCE13,PCE14
 | 
|---|
| 97 |  S RUN=$G(^XTMP(XTMP,"RUN"))
 | 
|---|
| 98 |  F I=1:1:14 S @("PCE"_I)=$P(RUN,U,I)
 | 
|---|
| 99 |  S PCE2=$$SDT(PCE2),PCE3=$$SDT(PCE3),PCE4=$$SDT(PCE4)
 | 
|---|
| 100 |  I ($P(PCE2,"@"))=$$SDT(DT) S PCE3="      "_$P(PCE3,"@",2)
 | 
|---|
| 101 |  I ($P(PCE2,"@"))=$$SDT(DT) S PCE4="      "_$P(PCE4,"@",2)
 | 
|---|
| 102 |  I CT=1 W !,HDR,!,$$REPEAT^XLFSTR("-",IOM)
 | 
|---|
| 103 |  W !,$J(PCE1,12),?14,PCE2,?26,PCE3,?38,PCE4,?50,$J(PCE8,8)
 | 
|---|
| 104 |  W ?59,$J(PCE10,8)
 | 
|---|
| 105 |  W ?69,$$SDT($$NOW^XLFDT)
 | 
|---|
| 106 |  QUIT
 | 
|---|
| 107 |  ;
 | 
|---|
| 108 | SDT(DATE) ; Return shortened form of date...
 | 
|---|
| 109 |  I DATE?7N QUIT $E(DATE,4,5)_"/"_$E(DATE,6,7) ;->
 | 
|---|
| 110 |  I DATE?7N1"."1.N QUIT $E(DATE,4,5)_"/"_$E(DATE,6,7)_"@"_$E($P($$FMTE^XLFDT(DATE),"@",2),1,5)
 | 
|---|
| 111 |  QUIT ""
 | 
|---|
| 112 |  ;
 | 
|---|
| 113 | XTMPBEGN ; Initialize ^XTMP nodes for use in purging monitoring...
 | 
|---|
| 114 |  N NOW
 | 
|---|
| 115 |  S NOW=$$NOW^XLFDT,XTMP="HLUOPT1 "_NOW
 | 
|---|
| 116 |  S ^XTMP(XTMP,0)=$$FMADD^XLFDT(NOW,14)_U_NOW_U_$G(DUZ)_U_"HLUOPT1 Purging"
 | 
|---|
| 117 |  S ^XTMP(XTMP,"RUN")=$G(ZTSK)_U_NOW_U_NOW_U_U_"RUNNING"_U_"XTMPBEGN"
 | 
|---|
| 118 |  QUIT
 | 
|---|
| 119 |  ;
 | 
|---|
| 120 | XTMPUPD(XTMP,STATUS,WHERE) ; Update the data in purging's ^XTMP...
 | 
|---|
| 121 |  N NOW,RUN
 | 
|---|
| 122 |  ;
 | 
|---|
| 123 |  ; Required variables...
 | 
|---|
| 124 |  S NOW=$$NOW^XLFDT
 | 
|---|
| 125 |  ;
 | 
|---|
| 126 |  ; Update node...
 | 
|---|
| 127 |  S RUN=$G(^XTMP(XTMP,"RUN"))
 | 
|---|
| 128 |  S $P(RUN,U,3)=$$NOW^XLFDT ; Timestamp
 | 
|---|
| 129 |  I STATUS="FINISHED"!(STATUS["ABORTED") S $P(RUN,U,4)=NOW ; Finish time
 | 
|---|
| 130 |  S $P(RUN,U,5)=STATUS ; Status
 | 
|---|
| 131 |  S $P(RUN,U,6)=WHERE ; Whereabouts
 | 
|---|
| 132 |  S $P(RUN,U,7)=$G(XTMP(772,"REV")) ; # 772 reviewed
 | 
|---|
| 133 |  S $P(RUN,U,8)=$G(XTMP(772,"DEL")) ; # 772 deleted
 | 
|---|
| 134 |  S $P(RUN,U,9)=$G(XTMP(773,"REV")) ; # 773 reviewed
 | 
|---|
| 135 |  S $P(RUN,U,10)=$G(XTMP(773,"DEL")) ;# 773 deleted
 | 
|---|
| 136 |  S $P(RUN,U,11)=$G(XTMP(772,"LAST")) ; Last 772 IEN
 | 
|---|
| 137 |  S $P(RUN,U,12)=$G(XTMP(772,"FAIL")) ; # failed purge check (in a row)
 | 
|---|
| 138 |  S $P(RUN,U,13)=$G(XTMP(773,"LAST")) ; Last 773 IEN
 | 
|---|
| 139 |  S $P(RUN,U,14)=$G(XTMP(773,"FAIL")) ; # failed purge check (in a row)
 | 
|---|
| 140 |  S $P(RUN,U,15)=$G(XTMP(772,"LAST","TIME")) ; Last 772s .01 time
 | 
|---|
| 141 |  S $P(RUN,U,16)=$G(XTMP(773,"LAST","TIME")) ; Last 773's 772s .01 time
 | 
|---|
| 142 |  S ^XTMP(XTMP,"RUN")=RUN
 | 
|---|
| 143 |  ;
 | 
|---|
| 144 |  QUIT
 | 
|---|
| 145 |  ;
 | 
|---|
| 146 | LOCKTELL ; Process is locked, so new purge job can't be started...
 | 
|---|
| 147 |  N X
 | 
|---|
| 148 |  W !!,"The '^HL(""HLUOPT1"")' lock is already owned by another purge job!  So, this"
 | 
|---|
| 149 |  W !,"purge job cannot be started."
 | 
|---|
| 150 |  S X=$$BTE^HLCSMON("Press RETURN to exit... ",1)
 | 
|---|
| 151 |  QUIT
 | 
|---|
| 152 |  ;
 | 
|---|
| 153 | INIT ; Moved here from HLUOPT1 (ran out of room)
 | 
|---|
| 154 |  ; If no data are stored in file 869.3, fields 41, 42, and 43,
 | 
|---|
| 155 |  ; the default number for these fields is 7, 30, 90, respectively.
 | 
|---|
| 156 |  N I,HLIEN,HLREC,HLDEF
 | 
|---|
| 157 |  S HLDEF="7^30^90^90"
 | 
|---|
| 158 |  S HLIEN=+$O(^HLCS(869.3,0))
 | 
|---|
| 159 |  S HLREC=$S(HLIEN:$G(^HLCS(869.3,HLIEN,4)),1:"")
 | 
|---|
| 160 |  F I=1:1:4 I '$P(HLREC,U,I) S $P(HLREC,U,I)=$P(HLDEF,U,I)
 | 
|---|
| 161 |  ;
 | 
|---|
| 162 |  ; If AWAITING ACK<COMPLETED -- or -- AWAITING ACK > ALL -- or -- PURGE < ALL use the default values (for an invalid date(s) has been entered into the paramters)
 | 
|---|
| 163 |  I $P(HLREC,U,2)<$P(HLREC,U,1)!($P(HLREC,U,3)<$P(HLREC,U,2))!($P(HLREC,U,3)>$P(HLREC,U,4)) D
 | 
|---|
| 164 |  .  S HLREC=HLDEF
 | 
|---|
| 165 |  ;
 | 
|---|
| 166 |  I $D(ZTQUEUED) D  Q
 | 
|---|
| 167 |  . S HLPDT("COMP")=$$FMADD^XLFDT(DT,-$P(HLREC,U,1))_.9
 | 
|---|
| 168 |  . S HLPDT("WAIT")=$$FMADD^XLFDT(DT,-$P(HLREC,U,2))_.9
 | 
|---|
| 169 |  . S HLPDT("ALL")=$$FMADD^XLFDT(DT,-$P(HLREC,U,3))_.9
 | 
|---|
| 170 |  . S HLPDT("ERR")=$$FMADD^XLFDT(DT,-$P(HLREC,U,4))_.9
 | 
|---|
| 171 |  ;
 | 
|---|
| 172 |  ; get input data from user
 | 
|---|
| 173 |  N DIR,X,Y,DIRUT
 | 
|---|
| 174 |  ; input cutoff date for "Successfully Completed" messages
 | 
|---|
| 175 |  S DIR(0)="D^:"_$$FMADD^XLFDT(DT,-1)_":EX"
 | 
|---|
| 176 |  S DIR("A",1)="  Enter inclusive date up to which to purge SUCCESSFULLY COMPLETED"
 | 
|---|
| 177 |  S DIR("A")="  messages"
 | 
|---|
| 178 |  S DIR("B")="T"_-$P(HLREC,U,1)
 | 
|---|
| 179 |  S DIR("?",1)="  The suggested cutoff date to purge 'Successfully Completed' messages"
 | 
|---|
| 180 |  S DIR("?",2)="  is seven days prior to today."
 | 
|---|
| 181 |  S DIR("?")="  Must be on or before "_$$FMTE^XLFDT($$FMADD^XLFDT(DT,-1),2)_"."
 | 
|---|
| 182 |  W ! D ^DIR I $D(DIRUT) S HLEXIT=1 Q
 | 
|---|
| 183 |  S HLPDT("COMP")=Y
 | 
|---|
| 184 |  K DIR
 | 
|---|
| 185 |  ;
 | 
|---|
| 186 |  ; input cutoff date for "Awaiting Acknowledgement" messages
 | 
|---|
| 187 |  S DIR(0)="D^:"_HLPDT("COMP")_":EX"
 | 
|---|
| 188 |  S DIR("A",1)="  Enter inclusive date up to which to purge AWAITING ACK"
 | 
|---|
| 189 |  S DIR("A")="  messages"
 | 
|---|
| 190 |  S DIR("B")="T"_-$P(HLREC,U,2)
 | 
|---|
| 191 |  S DIR("?",1)="  The suggested cutoff date to purge 'Awaiting Acknowledgment' messages"
 | 
|---|
| 192 |  S DIR("?",2)="  is thirty days prior to today."
 | 
|---|
| 193 |  S DIR("?")="  Must be on or before "_$$FMTE^XLFDT(HLPDT("COMP"),2)_"."
 | 
|---|
| 194 |  W ! D ^DIR I $D(DIRUT) S HLEXIT=1 Q
 | 
|---|
| 195 |  S HLPDT("WAIT")=Y
 | 
|---|
| 196 |  K DIR
 | 
|---|
| 197 |  ;
 | 
|---|
| 198 |  ; Input for Vaporization Date
 | 
|---|
| 199 |  S DIR(0)="D^:"_HLPDT("WAIT")_":EX"
 | 
|---|
| 200 |  S DIR("A",1)="  Enter inclusive date up to which to purge all messages, regardless"
 | 
|---|
| 201 |  S DIR("A")="  of status (except ERROR status)"
 | 
|---|
| 202 |  S DIR("B")="T"_-$P(HLREC,U,3)
 | 
|---|
| 203 |  S DIR("?",1)="  The suggested cutoff date to purge all messages (except for 'Error' messages)"
 | 
|---|
| 204 |  S DIR("?",2)="  is 90 days prior to today."
 | 
|---|
| 205 |  S DIR("?")="  Must be on or before "_$$FMTE^XLFDT(HLPDT("WAIT"),2)_"."
 | 
|---|
| 206 |  W ! D ^DIR I $D(DIRUT) S HLEXIT=1 Q
 | 
|---|
| 207 |  S HLPDT("ALL")=Y+.9
 | 
|---|
| 208 |  K DIR
 | 
|---|
| 209 |  ;
 | 
|---|
| 210 |  ; prompt whether to purge "Error" messages
 | 
|---|
| 211 |  S DIR(0)="Y"
 | 
|---|
| 212 |  S DIR("A")="  Do you also want to purge messages with an ERROR status"
 | 
|---|
| 213 |  S DIR("B")="NO"
 | 
|---|
| 214 |  S DIR("?",1)="  Enter 'Yes' to purge entries whose status is 'error'."
 | 
|---|
| 215 |  S DIR("?",2)="  If you have reviewed/resolved the cause of the problem of those",DIR("?")="  entries with an 'error' status answer 'Yes'.  Otherwise answer 'No'."
 | 
|---|
| 216 |  W ! D ^DIR I $D(DIRUT) S HLEXIT=1 Q
 | 
|---|
| 217 |  K DIR
 | 
|---|
| 218 |  I 'Y S HLPDT("ERR")=0
 | 
|---|
| 219 |  E  D  Q:HLEXIT
 | 
|---|
| 220 |  . ; input cutoff date for "Error" messages
 | 
|---|
| 221 |  . S DIR(0)="D^:"_HLPDT("WAIT")_":EX"
 | 
|---|
| 222 |  . S DIR("A",1)="    WARNING: You should have investigated all errors because purging"
 | 
|---|
| 223 |  . S DIR("A",2)="             these messages permanently removes them from the system."
 | 
|---|
| 224 |  . S DIR("A",3)=" "
 | 
|---|
| 225 |  . S DIR("A",4)="    Enter inclusive date up to which to purge ERROR"
 | 
|---|
| 226 |  . S DIR("A")="    messages"
 | 
|---|
| 227 |  . S DIR("B")="T"_-$P(HLREC,U,4)
 | 
|---|
| 228 |  . S DIR("?",1)="  The suggested cutoff date to purge 'Error' messages"
 | 
|---|
| 229 |  . S DIR("?",2)="  is 90 days prior to today."
 | 
|---|
| 230 |  . S DIR("?")="  Must be on or before "_$$FMTE^XLFDT(HLPDT("WAIT"),2)_"."
 | 
|---|
| 231 |  . W ! D ^DIR I $D(DIRUT) S HLEXIT=1 Q
 | 
|---|
| 232 |  . S HLPDT("ERR")=Y+.9
 | 
|---|
| 233 |  . K DIR
 | 
|---|
| 234 |  ;
 | 
|---|
| 235 |  ; prompt whether to run this purge in the background
 | 
|---|
| 236 |  S DIR(0)="YA"
 | 
|---|
| 237 |  S DIR("A")="  Would you like to queue this purge?  "
 | 
|---|
| 238 |  S DIR("B")="YES"
 | 
|---|
| 239 |  S DIR("?")="  If run in the foreground, you will see dots and a total count."
 | 
|---|
| 240 |  W ! D ^DIR I $D(DIRUT) S HLEXIT=1 Q
 | 
|---|
| 241 |  S HLTASK=Y
 | 
|---|
| 242 |  K DIR
 | 
|---|
| 243 |  W !,"  "
 | 
|---|
| 244 |  ;
 | 
|---|
| 245 |  S HLPDT("COMP")=HLPDT("COMP")+.9,HLPDT("WAIT")=HLPDT("WAIT")+.9
 | 
|---|
| 246 |  Q
 | 
|---|
| 247 |  ;
 | 
|---|
| 248 | EOR ;HLUOPT4 - Purging Entries in file #772 and #773 ;12/10/02 16:37
 | 
|---|