[613] | 1 | MAGQBUT ;WOIFO/RMP - Imaging Background Processor Utilities [ 03/25/2001 11:20 ]
|
---|
| 2 | ;;3.0;IMAGING;**7,8,48,20**;Apr 12, 2006
|
---|
| 3 | ;; +---------------------------------------------------------------+
|
---|
| 4 | ;; | Property of the US Government. |
|
---|
| 5 | ;; | No permission to copy or redistribute this software is given. |
|
---|
| 6 | ;; | Use of unreleased versions of this software requires the user |
|
---|
| 7 | ;; | to execute a written test agreement with the VistA Imaging |
|
---|
| 8 | ;; | Development Office of the Department of Veterans Affairs, |
|
---|
| 9 | ;; | telephone (301) 734-0100. |
|
---|
| 10 | ;; | |
|
---|
| 11 | ;; | The Food and Drug Administration classifies this software as |
|
---|
| 12 | ;; | a medical device. As such, it may not be changed in any way. |
|
---|
| 13 | ;; | Modifications to this software may result in an adulterated |
|
---|
| 14 | ;; | medical device under 21CFR820, the use of which is considered |
|
---|
| 15 | ;; | to be a violation of US Federal Statutes. |
|
---|
| 16 | ;; +---------------------------------------------------------------+
|
---|
| 17 | ;;
|
---|
| 18 | FTYPE(RESULT) ;
|
---|
| 19 | ; RPC[MAGQ FTYPE]
|
---|
| 20 | S X="ERR^MAGQBTM",@^%ZOSF("TRAP")
|
---|
| 21 | N MAX,INDX,PLACE
|
---|
| 22 | S PLACE=$$PLACE^MAGBAPI(+$G(DUZ(2)))
|
---|
| 23 | S U="^",MAX=$P(^MAG(2006.1,PLACE,2,0),U,4),INDX=0
|
---|
| 24 | Q:+MAX<1
|
---|
| 25 | F S INDX=$O(^MAG(2006.1,PLACE,2,INDX)) Q:INDX'?1N.N D Q:INDX=MAX
|
---|
| 26 | . S RESULT(INDX-1)=$G(^MAG(2006.1,PLACE,2,INDX,0))
|
---|
| 27 | Q
|
---|
| 28 | CHGSERV(RESULT,NOTIFY) ;
|
---|
| 29 | ; RPC[MAGQ FS CHNGE]
|
---|
| 30 | S X="ERR^MAGQBTM",@^%ZOSF("TRAP")
|
---|
| 31 | N SPACE,DATA,IEN,SIZE,CWL,MIN,CNT,TNODE,TINT,NOW,TLTIME,TOD,PLACE,TS,AUTON
|
---|
| 32 | S U="^",(INDX,SPACE,SIZE,CNT)=0,(RESULT,IEN)=""
|
---|
| 33 | S PLACE=$$PLACE^MAGBAPI(+$G(DUZ(2)))
|
---|
| 34 | S MIN=$$SPARM
|
---|
| 35 | S CWL=$$CWL^MAGBAPI(PLACE)
|
---|
| 36 | S DATA=$S(CWL?1N.N:$G(^MAG(2005.2,CWL,0)),1:0)
|
---|
| 37 | ;Check for scheduled purge
|
---|
| 38 | S AUTON=$G(^MAG(2006.1,PLACE,5))
|
---|
| 39 | I $P(AUTON,U,3) D
|
---|
| 40 | . N T1,T2
|
---|
| 41 | . S T1="0000",T2=$P(AUTON,U,5),T1=$E(T1,1,($L(T1)-$L(T2)))_T2
|
---|
| 42 | . I ($$FMADD^XLFDT($$NOW^XLFDT,-$P(AUTON,U,4),"","",""))>($P(AUTON,U,6)_"."_T1) D
|
---|
| 43 | . . S $P(RESULT,U,4)="PURGE"
|
---|
| 44 | . . S $P(^MAG(2006.1,PLACE,5),U,6)=$P($$NOW^XLFDT,".")
|
---|
| 45 | . . Q
|
---|
| 46 | . Q
|
---|
| 47 | I $P($G(^MAG(2006.1,PLACE,1)),U,10) D Q ;Cache balancing off
|
---|
| 48 | . S SPACE=+$P($G(^MAG(2005.2,CWL,0)),U,5),SIZE=+$P($G(^MAG(2005.2,CWL,0)),U,3)
|
---|
| 49 | . I (SIZE>0)&(((SPACE/SIZE)*100)>MIN) D Q
|
---|
| 50 | . . S $P(RESULT,U)=1
|
---|
| 51 | . . D Q
|
---|
| 52 | . . . I SIZE S $P(RESULT,U,5)=$P(((SPACE/SIZE)*100),".")_"."_$E($P(((SPACE/SIZE)*100),".",2),1,2) Q
|
---|
| 53 | . . . E S $P(RESULT,U,5)="0.00" Q
|
---|
| 54 | . E D
|
---|
| 55 | . . I SIZE S $P(RESULT,U,5)=$P(((SPACE/SIZE)*100),".")_"."_$E($P(((SPACE/SIZE)*100),".",2),1,2)
|
---|
| 56 | . . E S $P(RESULT,U,5)="0.00"
|
---|
| 57 | . . S $P(RESULT,U)=$S(SPACE>0:2,1:0)
|
---|
| 58 | . . S $P(RESULT,U,2,3)=$P(^MAG(2005.2,$P(^MAG(2006.1,PLACE,0),U,3),0),U,1,2)
|
---|
| 59 | . . I ($P($G(^MAG(2006.1,PLACE,5)),U)&(SPACE>0)) S $P(RESULT,U,4)="PURGE" Q
|
---|
| 60 | . . D:(NOTIFY!(SPACE>0)) TMESS(SPACE,PLACE)
|
---|
| 61 | . . Q
|
---|
| 62 | . Q
|
---|
| 63 | D FSP(MIN,.SPACE,.SIZE,.IEN,.TS,PLACE)
|
---|
| 64 | I SIZE S $P(RESULT,U,5)=$P(((SPACE/SIZE)*100),".")_"."_$E($P(((SPACE/SIZE)*100),".",2),1,2)
|
---|
| 65 | E S $P(RESULT,U,5)="0.00"
|
---|
| 66 | I IEN D SCWL(IEN,PLACE)
|
---|
| 67 | I SIZE>0,(((SPACE/SIZE)*100)>MIN) S $P(RESULT,U)=1 Q
|
---|
| 68 | S $P(RESULT,U)=$S(SPACE>0:2,1:0)
|
---|
| 69 | S $P(RESULT,U,2,3)=$P(^MAG(2005.2,$P(^MAG(2006.1,PLACE,0),U,3),0),U,1,2)
|
---|
| 70 | I ($P($G(^MAG(2006.1,PLACE,5)),U)&(SPACE>0)) D Q
|
---|
| 71 | . S $P(RESULT,U,4)="PURGE"
|
---|
| 72 | . D TPMESS^MAGQBUT5(PLACE)
|
---|
| 73 | . Q
|
---|
| 74 | D:(NOTIFY!(SPACE>0)) TMESS(TS,PLACE)
|
---|
| 75 | Q
|
---|
| 76 | TMESS(TS,PLACE) ;Trigger a message
|
---|
| 77 | N TN S TN=^MAG(2006.1,PLACE,3)
|
---|
| 78 | Q:$$FMADD^XLFDT($P(TN,"^",11),"",$P(TN,"^",7),"","")>$$NOW^XLFDT
|
---|
| 79 | D ICCL^MAGQBUT1(CNT_U_TS_U_SPACE_U_$P($G(^MAG(2006.1,PLACE,5)),U),$P(TN,"^",7)_" hours.",PLACE)
|
---|
| 80 | Q
|
---|
| 81 | TPURGE ;
|
---|
| 82 | S $P(RESULT,U,2,3)=$P(^MAG(2005.2,$P(^MAG(2006.1,PLACE,0),U,3),0),1,2)
|
---|
| 83 | S TNODE=^MAG(2006.1,PLACE,3)
|
---|
| 84 | S TINT=$P(TNODE,"^",8) I "^W^D^"[("^"_TINT_"^") D ;CONDITIONAL PURGE
|
---|
| 85 | . S NOW=$$NOW^XLFDT,TOD=$P(TNODE,"^",9)
|
---|
| 86 | . Q:NOW<$$FMADD^XLFDT($P(NOW,"."),"",TOD,"","")
|
---|
| 87 | . S TLTIME=$P(TNODE,"^",10)
|
---|
| 88 | . I NOW>$$FMADD^XLFDT(TLTIME,$S(TINT="D":1,TINT="W":7),"","","") D
|
---|
| 89 | . . S $P(RESULT,"^",4)="PURGE"
|
---|
| 90 | Q
|
---|
| 91 | MAXSP(IEN,FS,SZ,NODE,MIN) ;
|
---|
| 92 | N SPACE,SIZE
|
---|
| 93 | S SPACE=+$P(NODE,U,5),SIZE=+$P(NODE,U,3)
|
---|
| 94 | I SIZE>0,(((SPACE/SIZE)*100)>MIN),SPACE>FS D Q 1
|
---|
| 95 | . S FS=SPACE,SZ=SIZE
|
---|
| 96 | Q 0
|
---|
| 97 | HFIND(SHARE,IEN) ;HASHED SHARE AT THE SAME LOCATION
|
---|
| 98 | N INDEX,NODE,RESULT
|
---|
| 99 | S INDEX=0,RESULT=""
|
---|
| 100 | F S INDEX=$O(^MAG(2005.2,"AC",SHARE,INDEX)) Q:INDEX'?1N.N D
|
---|
| 101 | . Q:INDEX=IEN
|
---|
| 102 | . I $P(^MAG(2005.2,INDEX,0),"^",8)="Y" S RESULT=1
|
---|
| 103 | Q RESULT
|
---|
| 104 | SPARM() ;Site Parameter for PERCENT server space to be held in reserve
|
---|
| 105 | N VALUE
|
---|
| 106 | S VALUE=$P($G(^MAG(2006.1,$$PLACE^MAGBAPI(+$G(DUZ(2))),1)),U,8)
|
---|
| 107 | Q $S(VALUE>0:VALUE,1:5)
|
---|
| 108 | SCWL(IEN,PLACE) ;
|
---|
| 109 | S $P(^MAG(2006.1,PLACE,0),U,3)=IEN
|
---|
| 110 | S $P(^MAG(2006.1,PLACE,"PACS"),U,3)=IEN
|
---|
| 111 | Q
|
---|
| 112 | FSP(MIN,SPACE,SIZE,IEN,TOTAL,PLACE) ; Find Space
|
---|
| 113 | N INDX,DATA S (TOTAL,INDX)=0
|
---|
| 114 | F S INDX=$O(^MAG(2005.2,INDX)) Q:INDX'?1N.N D
|
---|
| 115 | . S DATA=$G(^MAG(2005.2,INDX,0))
|
---|
| 116 | . Q:$P(DATA,U,6,7)'["1^MAG"
|
---|
| 117 | . Q:$P(DATA,U,9)="1" ;ROUTING SHARE
|
---|
| 118 | . Q:$P(DATA,U,10)'=PLACE
|
---|
| 119 | . I $P(DATA,U,8)'="Y",$$HFIND($P(DATA,"^",2),INDX) Q
|
---|
| 120 | . Q:$P(DATA,U,2)[":"
|
---|
| 121 | . Q:$E($P(DATA,U,2),1,2)'="\\"
|
---|
| 122 | . S TOTAL=TOTAL+(+$P(DATA,U,5))
|
---|
| 123 | . S CNT=CNT+1
|
---|
| 124 | . I $$MAXSP(INDX,.SPACE,.SIZE,DATA,MIN) S IEN=INDX
|
---|
| 125 | Q
|
---|
| 126 | SLAD(RESULT) ;SITE LAST ACCESS DATE(DEFAULT TO 180)
|
---|
| 127 | N PLACE
|
---|
| 128 | S PLACE=$$PLACE^MAGBAPI(+$G(DUZ(2)))
|
---|
| 129 | S RESULT=$S(+$P(^MAG(2006.1,PLACE,1),"^",2):+$P(^MAG(2006.1,PLACE,1),"^",2),1:180)
|
---|
| 130 | Q
|
---|
| 131 | DQUE(QIEN) ;
|
---|
| 132 | N ZNODE,TYPE,MAGIEN,PLACE,QP,QT
|
---|
| 133 | S ZNODE=$G(^MAGQUEUE(2006.03,QIEN,0))
|
---|
| 134 | S PLACE=$P(ZNODE,U,12)
|
---|
| 135 | S TYPE=$P(ZNODE,U)
|
---|
| 136 | I TYPE="" D DBQ(QIEN,PLACE,ZNODE) Q
|
---|
| 137 | S QP=$O(^MAGQUEUE(2006.031,"C",PLACE,TYPE,""))
|
---|
| 138 | L +^MAGQUEUE(2006.031,QP,0)
|
---|
| 139 | S QT=+$P($G(^MAGQUEUE(2006.031,QP,0)),U,5)
|
---|
| 140 | S $P(^MAGQUEUE(2006.031,QP,0),U,5)=QT-1
|
---|
| 141 | L -^MAGQUEUE(2006.031,QP,0)
|
---|
| 142 | K ^MAGQUEUE(2006.03,"C",PLACE,$P(ZNODE,U),QIEN)
|
---|
| 143 | K ^MAGQUEUE(2006.03,QIEN,0)
|
---|
| 144 | I $P(ZNODE,U,5)]"" D
|
---|
| 145 | . K ^MAGQUEUE(2006.03,"D",PLACE,TYPE,$E($P(ZNODE,U,5),1,30),QIEN)
|
---|
| 146 | L +^MAGQUEUE(2006.03,0)
|
---|
| 147 | S $P(^MAGQUEUE(2006.03,0),"^",4)=$P(^MAGQUEUE(2006.03,0),"^",4)-1
|
---|
| 148 | L -^MAGQUEUE(2006.03,0)
|
---|
| 149 | Q:("^JBTOHD^PREFET^JUKEBOX^")'[("^"_TYPE_"^")
|
---|
| 150 | S MAGIEN=$P(ZNODE,U,7)
|
---|
| 151 | Q:'MAGIEN
|
---|
| 152 | I TYPE="JUKEBOX" D Q
|
---|
| 153 | . K ^MAGQUEUE(2006.03,"E",PLACE,MAGIEN,QIEN)
|
---|
| 154 | I "^JBTOHD^PREFET^"[("^"_TYPE_"^") D Q
|
---|
| 155 | . Q:$P(ZNODE,U,8)']""
|
---|
| 156 | . K ^MAGQUEUE(2006.03,"F",PLACE,MAGIEN,$P(ZNODE,U,8),QIEN)
|
---|
| 157 | . Q
|
---|
| 158 | Q
|
---|
| 159 | DQUE1(RESULT,QIEN) ;[MAGQB QUEDEL]
|
---|
| 160 | D DQUE(QIEN)
|
---|
| 161 | Q
|
---|
| 162 | DBQ(QIEN,PLACE,ZNODE) ;
|
---|
| 163 | N INDX
|
---|
| 164 | F INDX="DELETE","ABSTRACT","JUKEBOX","JBTOHD","PREFET","IMPORT" D
|
---|
| 165 | . K ^MAGQUEUE(2006.03,"C",PLACE,INDX,QIEN)
|
---|
| 166 | . K:$P(ZNODE,U,5)]"" ^MAGQUEUE(2006.03,"D",PLACE,INDX,$E($P(ZNODE,U,5),1,30),QIEN)
|
---|
| 167 | . I INDX="JUKEBOX" D
|
---|
| 168 | . . K:$P(ZNODE,U,7) ^MAGQUEUE(2006.03,"E",PLACE,$P(ZNODE,U,7),QIEN) Q
|
---|
| 169 | . I "^JBTOHD^PREFET^"[("^"_INDX_"^") D
|
---|
| 170 | . . K:($P(ZNODE,U,7)&$P(ZNODE,U,8)]"") ^MAGQUEUE(2006.03,"F",PLACE,$P(ZNODE,U,7),$P(ZNODE,U,8),QIEN) Q
|
---|
| 171 | K ^MAGQUEUE(2006.03,QIEN,0)
|
---|
| 172 | Q
|
---|
| 173 | JBQUE(RESULT,QIEN) ; RPC[MAGQBP JBQUE]
|
---|
| 174 | S X="ERR^MAGQBTM",@^%ZOSF("TRAP")
|
---|
| 175 | S RESULT=$$JUKEBOX^MAGBAPI(QIEN,$$PLACE^MAGBAPI(+$G(DUZ(2))))
|
---|
| 176 | Q
|
---|
| 177 | POSTI ;
|
---|
| 178 | D INI^MAGUSIT
|
---|
| 179 | N DIC,X,DA,Y,NODE1,NODE3,PLACE,KEYS
|
---|
| 180 | S PLACE=$$PLACE^MAGBAPI(+$G(DUZ(2)))
|
---|
| 181 | Q:'PLACE
|
---|
| 182 | S DIC="^MAG(2006.1,"_PLACE_",2,",DIC(0)="XL",X="TXT",DLAYGO="2006.112"
|
---|
| 183 | S DA(1)=PLACE,DIC("P")="2006.112"
|
---|
| 184 | D ^DIC
|
---|
| 185 | S (DIE,DIC,DLAYGO)=2006.1,DA=PLACE,DIC(0)="XL"
|
---|
| 186 | S NODE1=$G(^MAG(2006.1,1,1)),NODE3=$G(^MAG(2006.1,PLACE,3)),DR=""
|
---|
| 187 | S KEYS=$G(^MAG(2006.1,PLACE,"KEYS"))
|
---|
| 188 | S DR=$S(($P(NODE1,"^",2)'?1N.N):"8///45",1:DR)
|
---|
| 189 | I ($P(NODE1,"^",5)'?1N.N) S DR=DR_$S((DR["/"):";",1:"")_"9///45"
|
---|
| 190 | I ($P(NODE1,"^",10)'?1N.N) S DR=DR_$S((DR["/"):";",1:"")_"20///1"
|
---|
| 191 | I ($P(NODE3,"^",1)'?1N.N) S DR=DR_$S((DR["/"):";",1:"")_"21///45"
|
---|
| 192 | I ($P(NODE3,"^",2)'?1N.N) S DR=DR_$S((DR["/"):";",1:"")_"22///45"
|
---|
| 193 | I ($P(NODE3,"^",3)'?1N.N) S DR=DR_$S((DR["/"):";",1:"")_"23///120"
|
---|
| 194 | I ($P(NODE3,"^",4)'?1N.N) S DR=DR_$S((DR["/"):";",1:"")_"24///120"
|
---|
| 195 | I ($P(NODE3,"^",5)'?1N.N) S DR=DR_$S((DR["/"):";",1:"")_"102///10"
|
---|
| 196 | I ($P(NODE3,"^",6)'?1N.N) S DR=DR_$S((DR["/"):";",1:"")_"103///15"
|
---|
| 197 | I ($P(NODE3,"^",7)'?1N.N) S DR=DR_$S((DR["/"):";",1:"")_"11.5///6"
|
---|
| 198 | S DR=DR_$S((DR["/"):";",1:"")_"11.6///D"
|
---|
| 199 | I ($P(NODE3,"^",9)'?1N.N) S DR=DR_$S((DR["/"):";",1:"")_"11.7///4"
|
---|
| 200 | I ($P(NODE3,"^",10)'?1N.E) D
|
---|
| 201 | . S DR=DR_$S((DR["/"):";",1:"")_"11.8///"_$$NOW^XLFDT
|
---|
| 202 | I ($P(NODE3,"^",11)'?1N.E) D
|
---|
| 203 | . S DR=DR_$S((DR["/"):";",1:"")_"11.9///"_$$NOW^XLFDT
|
---|
| 204 | I ($P(KEYS,"^",2)'?1N.N) S DR=DR_$S((DR["/"):";",1:"")_"121///60"
|
---|
| 205 | I ($P(KEYS,"^",3)'?1N.N) S DR=DR_$S((DR["/"):";",1:"")_"122///90"
|
---|
| 206 | D ^DIE
|
---|
| 207 | ; Enable the Imaging Health Summary component
|
---|
| 208 | I $D(^GMT(142.1,235)) D
|
---|
| 209 | . S (DIE,DIC)=142.1,DA=235
|
---|
| 210 | . S DR="5///@;8///@"
|
---|
| 211 | . D ^DIE
|
---|
| 212 | K DIE,DIC,DA,Y,X,DLAYGO,DR
|
---|
| 213 | D MMGRP^MAGQAI
|
---|
| 214 | Q
|
---|
| 215 | X1 ; CLEANUP
|
---|
| 216 | N PC
|
---|
| 217 | S DIR(0)="Y",DIR("B")="YES"
|
---|
| 218 | S DIR("?")="This activity removes already processed queues which precede the current queue pointer. These queues are not necessary for file recovery.The current BP software will recover files during purge or by the verify."
|
---|
| 219 | S DIR("A")="Do you wish to remove old processed Background Processor Queues" D
|
---|
| 220 | . D ^DIR Q:($D(DIRUT)!(Y'="1"))
|
---|
| 221 | . F PC="JUKEBOX","JBTOHD","PREFET","IMPORT","GCC","DELETE" D FOQUE("",PC)
|
---|
| 222 | ; REINDEX FIELD 4 (COMPLETION STATUS) IN FILE 2006.03 (QUEUE)
|
---|
| 223 | K DIR
|
---|
| 224 | K ^MAGQUEUE(2006.03,"C")
|
---|
| 225 | S DIK="^MAGQUEUE(2006.03,"
|
---|
| 226 | D IXALL^DIK K DIK
|
---|
| 227 | K DIRUT
|
---|
| 228 | Q
|
---|
| 229 | FOQUE(RESULT,PROC) ;[MAGQ COQ] PASS A BP PROCESS TO DELETE OLD FAILED QUEUES
|
---|
| 230 | N XX,JXMAX,JHMAX,QIEN,PLACE,LQP,CNT
|
---|
| 231 | S PLACE=$$PLACE^MAGBAPI(+$G(DUZ(2))),CNT=0
|
---|
| 232 | S QIEN=$O(^MAGQUEUE(2006.031,"C",PLACE,PROC,""))
|
---|
| 233 | I QIEN D
|
---|
| 234 | . S LQP=$P($G(^MAGQUEUE(2006.031,QIEN,0)),"^",2)
|
---|
| 235 | . Q:'LQP
|
---|
| 236 | . S XX=0
|
---|
| 237 | . F S XX=$O(^MAGQUEUE(2006.03,"C",PLACE,PROC,XX)) Q:'XX Q:XX>(LQP) D
|
---|
| 238 | . . S CNT=CNT+1
|
---|
| 239 | . . D DQUE(XX)
|
---|
| 240 | S RESULT=CNT
|
---|
| 241 | Q
|
---|