| 1 | VDEFKIDS ;BPOIFO/JG - VDEF Patch Pre & Post Install ; 19 Dec 2005  3:06 PM | 
|---|
| 2 | ;;1.0;VDEF;**3**;Dec 28, 2004 | 
|---|
| 3 | ;Per VHA Directive 2004-038, this routine should not be modified. | 
|---|
| 4 | ; | 
|---|
| 5 | ; IA: 10063 - $$ASKSTOP^%ZTLOAD | 
|---|
| 6 | ;     10063 - RTN^%ZTLOAD | 
|---|
| 7 | ;     10103 - $$FMADD^XLFDT | 
|---|
| 8 | ; | 
|---|
| 9 | PREIN ; This program will suspend all VDEF Request Queues and stop | 
|---|
| 10 | ; the VDEF Monitor tasks for the install of this patch. | 
|---|
| 11 | ; It is run as the KIDS Environment Check Routine because | 
|---|
| 12 | ; if it is run as a Pre-Install routine, all the programs | 
|---|
| 13 | ; in the build are already loaded which may cause | 
|---|
| 14 | ; EDITED error trap errors. | 
|---|
| 15 | ; | 
|---|
| 16 | I $G(XPDNM)'?1"VDEF*".E W !,"Must be run as a KIDS Environment Check." S XPDABORT=1 Q | 
|---|
| 17 | ; | 
|---|
| 18 | ; Check for XU*8.0*339 patch | 
|---|
| 19 | I '$L($T(JOB^%ZTLOAD)) W !,"XU*8.0*339 required for installation of this patch." S XPDABORT=1 Q | 
|---|
| 20 | ; | 
|---|
| 21 | ; Quit if loading a distribution, continue if installing. | 
|---|
| 22 | Q:$G(XPDENV)'=1 | 
|---|
| 23 | W !!,"Suspending Request Queues and stopping associated TaskMan jobs" | 
|---|
| 24 | NEW QUEUE,STAT,TMTASKC,TMTASKF,VDEFIDT,X,VDEFUP | 
|---|
| 25 | S VDEFIDT=$$FMADD^XLFDT(DT,2) | 
|---|
| 26 | K ^XTMP("VDEFP1") S ^XTMP("VDEFP1",0)=VDEFIDT_"^"_DT | 
|---|
| 27 | ; | 
|---|
| 28 | ; Suspend running Request Queues | 
|---|
| 29 | S QUEUE=0 F  S QUEUE=$O(^VDEFHL7(579.3,QUEUE)) Q:'QUEUE  D | 
|---|
| 30 | . S STAT=$$GET1^DIQ(579.3,QUEUE_",",.09,"I") I STAT="R" D | 
|---|
| 31 | .. ; Suspend the request queue | 
|---|
| 32 | .. S VDEFUP(579.3,QUEUE_",",.09)="S" D FILE^DIE("","VDEFUP") | 
|---|
| 33 | .. ; | 
|---|
| 34 | .. ; Stop the current & future TaskMan tasks | 
|---|
| 35 | .. ; Wait up to 5 seconds for tasks to stop then delete them | 
|---|
| 36 | .. ; anyway since that means the process probably died. | 
|---|
| 37 | .. S TMTASKF=$$GET1^DIQ(579.3,QUEUE_",",.08,"I") ; Future | 
|---|
| 38 | .. I TMTASKF'="" D | 
|---|
| 39 | ... N ZTSK S ZTSK=TMTASKF S X=$$ASKSTOP^%ZTLOAD(ZTSK) | 
|---|
| 40 | ... N I F I=1:1:5 D STAT^%ZTLOAD Q:ZTSK(1)=0!(ZTSK(1)>2)  H 1 | 
|---|
| 41 | ... K I D KILL^%ZTLOAD | 
|---|
| 42 | .. S TMTASKC=$$GET1^DIQ(579.3,QUEUE_",",.11,"I") ; Current | 
|---|
| 43 | .. I TMTASKC'=""&(TMTASKC'=TMTASKF) D | 
|---|
| 44 | ... N ZTSK S ZTSK=TMTASKC S X=$$ASKSTOP^%ZTLOAD(ZTSK) | 
|---|
| 45 | ... N I F I=1:1:5 D STAT^%ZTLOAD Q:ZTSK(1)=0!(ZTSK(1)>2)  H 1 | 
|---|
| 46 | ... K I D KILL^%ZTLOAD | 
|---|
| 47 | .. S ^XTMP("VDEFP1",QUEUE)="" | 
|---|
| 48 | ; | 
|---|
| 49 | ; Stop the checked out request monitor | 
|---|
| 50 | W !!,"Stopping the MONITOR^VDEFCONT task" | 
|---|
| 51 | S ZTSK=$$GET1^DIQ(579.5,"1,",.06) | 
|---|
| 52 | I ZTSK'="" D | 
|---|
| 53 | . S X=$$ASKSTOP^%ZTLOAD(ZTSK) | 
|---|
| 54 | . N I F I=1:1:5 D STAT^%ZTLOAD Q:ZTSK(1)=0!(ZTSK(1)>2)  H 1 | 
|---|
| 55 | . K I D KILL^%ZTLOAD | 
|---|
| 56 | ; | 
|---|
| 57 | ; Stop the Request Queue process monitor | 
|---|
| 58 | W !!,"Stopping the MONITOR^VDEFMON task" | 
|---|
| 59 | N TASK D RTN^%ZTLOAD("VDEFMON","TASK") | 
|---|
| 60 | S ZTSK=$O(TASK(0)) I ZTSK D | 
|---|
| 61 | . S X=$$ASKSTOP^%ZTLOAD(ZTSK) | 
|---|
| 62 | . N I F I=1:1:5 D STAT^%ZTLOAD Q:ZTSK(1)=0!(ZTSK(1)>2)  H 1 | 
|---|
| 63 | . K I D KILL^%ZTLOAD | 
|---|
| 64 | ; | 
|---|
| 65 | ; Allow enough time for the VMS processes to quit. | 
|---|
| 66 | W !!,"Waiting for processes to quit " N I F I=1:1:5 W ". " H 1 | 
|---|
| 67 | K I | 
|---|
| 68 | Q | 
|---|
| 69 | ; | 
|---|
| 70 | ; | 
|---|
| 71 | POSTIN ; This program will restart suspended Request Queues start the VDEF | 
|---|
| 72 | ; monitor processes after the KIDS install. | 
|---|
| 73 | ; | 
|---|
| 74 | I $G(XPDNM)'?1"VDEF*".E W !,"Must be run as a KIDS Environment Check." S XPDABORT=1 Q | 
|---|
| 75 | ; | 
|---|
| 76 | ; Don't start VDEF processes on test and Legacy systems | 
|---|
| 77 | I '$$PROD^XUPROD(1) D BMES^XPDUTL("VDEF is not started on test systems.") Q | 
|---|
| 78 | D BMES^XPDUTL("Starting the Request Queues and associated Tasks") | 
|---|
| 79 | ; | 
|---|
| 80 | ; For each Request Queue defined, change the status to | 
|---|
| 81 | ; 'Running' and start the Request Queue process for the queue. | 
|---|
| 82 | NEW QUEUE,STAT,VDEFUP,I,QUENAM | 
|---|
| 83 | S QUEUE=0 F  S QUEUE=$O(^XTMP("VDEFP1",QUEUE)) Q:'QUEUE  D | 
|---|
| 84 | . S QUENAM=$P(^VDEFHL7(579.3,QUEUE,0),U) | 
|---|
| 85 | . S STAT=$$GET1^DIQ(579.3,QUEUE_",",.09,"I") I STAT="S" D | 
|---|
| 86 | .. S VDEFUP(579.3,QUEUE_",",.09)="R" D FILE^DIE("","VDEFUP") | 
|---|
| 87 | .. F I=1:1:5 S STAT=$$GET1^DIQ(579.3,QUEUE_",",.09,"I") Q:STAT="R"  H 1 | 
|---|
| 88 | .. I STAT="R" D REQ^VDEFCONT(QUEUE) | 
|---|
| 89 | .. E  D BMES^XPDUTL("**** VDEF '"_QUENAM_"' QUEUE DID NOT START. START IT FROM VDEF CONFIG MENU.") | 
|---|
| 90 | K ^XTMP("VDEFP1") | 
|---|
| 91 | ; | 
|---|
| 92 | ; Restart the Checked Out monitor process. | 
|---|
| 93 | D BMES^XPDUTL("Starting the MONITOR^VDEFCONT task") | 
|---|
| 94 | D MONCHKO^VDEFCONT | 
|---|
| 95 | ; | 
|---|
| 96 | ; Restart the Request Queue process monitor. | 
|---|
| 97 | D BMES^XPDUTL("Starting the MONITOR^VDEFMON task") | 
|---|
| 98 | D START1^VDEFMON | 
|---|
| 99 | Q | 
|---|