Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: MAGQBUT

MAGQBUT.m

Go to the documentation of this file.
  1. MAGQBUT ;WOIFO/RMP,JSL - Imaging Background Processor Utilities ; 24 May 2016 11:16 AM
  1. ;;3.0;IMAGING;**7,8,48,20,39,168**;Mar 19, 2002;Build 18;May 24, 2016
  1. ;; Per VHA Directive 2004-038, this routine should not be modified.
  1. ;; +---------------------------------------------------------------+
  1. ;; | Property of the US Government. |
  1. ;; | No permission to copy or redistribute this software is given. |
  1. ;; | Use of unreleased versions of this software requires the user |
  1. ;; | to execute a written test agreement with the VistA Imaging |
  1. ;; | Development Office of the Department of Veterans Affairs, |
  1. ;; | telephone (301) 734-0100. |
  1. ;; | The Food and Drug Administration classifies this software as |
  1. ;; | a medical device. As such, it may not be changed in any way. |
  1. ;; | Modifications to this software may result in an adulterated |
  1. ;; | medical device under 21CFR820, the use of which is considered |
  1. ;; | to be a violation of US Federal Statutes. |
  1. ;; +---------------------------------------------------------------+
  1. ;;
  1. Q
  1. CHGSERV(RESULT,NOTIFY,WSOS,BPWS) ;
  1. ; RPC[MAGQ FS CHNGE]
  1. ; RESULT VALUES:-1=NO RG MEMBERS,0=BELOW RESERVE,1=ABOVE RESERVE*PURGE FACTOR,2=BETWEEN RESERVE AND RESERVE*PURGE FACTOR
  1. ; ^CWL-PHYSICAL REFERENCE^CWL-TOTAL SPACE^PURGE^%FREE SPACE^PURGE_GROUP_IEN^VERIFY^RGADVANCE
  1. N SPACE,IEN,SIZE,CWL,MIN,CNT,TNODE,TINT,NOW,TLTIME,TOD,PLACE,TSPACE,TSIZE,AUTON,GROUP
  1. N APP,PFACTOR,NG,WSIEN,X,OG
  1. S X="ERR^MAGQBTM",@^%ZOSF("TRAP")
  1. S U="^",(SPACE,SIZE,CNT,TSPACE,TSIZE)=0,(RESULT,IEN,NG)="" ; T23
  1. S PLACE=$$PLACE^MAGBAPI(+$G(DUZ(2)))
  1. S APP="MAGQ FS CHNGE: "_BPWS
  1. S WSIEN=$O(^MAG(2006.8,"C",PLACE,BPWS,""))
  1. S MIN=$$SPARM
  1. S CWL=$$CWL^MAGBAPI(PLACE)
  1. S (GROUP,OG)=$$GRP(PLACE)
  1. D:SPACE>0 REPCWL(CWL,GROUP,.RESULT) ; Update Result with Current Write Group properties
  1. S PFACTOR=$$GET1^DIQ(2006.1,PLACE,"60.5","E")
  1. S PFACTOR=$S(+PFACTOR:+PFACTOR,1:2) ; If only one group default to 1
  1. D SPRGE(WSIEN,PLACE,.RESULT) ; Check for Scheduled Purge
  1. D SVERI(WSIEN,PLACE,.RESULT) ; Check for Scheduled Verifier
  1. D RGADV(PLACE,.GROUP,.RESULT) ;Check for RG Advance (Scheduled RAID group advance)
  1. I $P($G(^MAG(2006.1,PLACE,1)),U,10) D NAUTOW(PLACE,CWL,.SPACE,.SIZE,.RESULT,NOTIFY,GROUP) Q ;Cache balancing off
  1. ; Evaluate space for auto-write location update/should find group with space
  1. F D FSP(MIN,.SPACE,.SIZE,.IEN,.TSPACE,.TSIZE,PLACE,GROUP,"") Q:IEN D Q:$P(RESULT,U,1)="-1" Q:GROUP=$$GRP(PLACE) Q:OG=GROUP
  1. . S NG=$$NXTGP(PLACE,GROUP)
  1. . I NG=GROUP D Q
  1. . . D NGF(PLACE) ; Mail "Get_Next_RAID_Group_failure" message
  1. . . I '$P($G(^MAG(2005.2,NG,7,0)),U,4) S $P(RESULT,U,1)="-1" ; ZERO MEMBER COUNT - T23
  1. . . Q
  1. . S GROUP=NG
  1. . Q
  1. I OG'=GROUP,$P(RESULT,U,8)'="" S $P(RESULT,U,8)="Automatic RGADVANCE"
  1. Q:$P(RESULT,U,1)="-1"
  1. I TSIZE D REPCWL(IEN,GROUP,.RESULT,TSPACE,TSIZE) ; %FREE SPACE
  1. E S $P(RESULT,U,5)="0.00"
  1. I +IEN'=CWL,IEN>0 D ; on Change event
  1. . D SCWL(IEN,PLACE,GROUP,APP,DUZ) ; UPDATES SITE PARAMETER FILE WITH CURRENT WRITE AND GROUP LOCATIONS
  1. . Q
  1. ; Evaluate space for auto purge contingencies for current RAID group
  1. I TSIZE>0,(((TSPACE/TSIZE)*100)>(PFACTOR*MIN)) S $P(RESULT,U)=1 Q
  1. S $P(RESULT,U)=$S('TSIZE:0,(((TSPACE/TSIZE)*100)>MIN):1,SPACE>0:2,1:0)
  1. S $P(RESULT,U,2,3)=$P($G(^MAG(2005.2,+$P(^MAG(2006.1,PLACE,0),U,3),0)),U,1,2)
  1. I ($P($G(^MAG(2006.1,PLACE,"BPPURGE")),U)&(SPACE>0)&($$GET1^DIQ(2006.8,WSIEN,"3","I")="1")) D Q ;AUTOPURGE IS ENABLED
  1. . S NG=$$NXTGP(PLACE,GROUP,"1") ;NEXT PURGE CAPABLE GROUP
  1. . I 'NG D NGF(PLACE) Q
  1. . Q:($P(^MAG(2006.1,PLACE,"BPPURGE"),U,7))+4>$$DT^XLFDT ; Allow only 1 auto-purge per 4 days
  1. . I ($$UPPER^MAGQE4(WSOS)'["SERVER") Q:(WSOS'[".6.2.") ;;Q:$$UPPER^MAGQE4(WSOS)'["SERVER"
  1. . S $P(RESULT,U,4)="AUTO_PURGE"
  1. . S $P(RESULT,U,6)=NG ;GROUP TO BE PURGED
  1. . D DFNIQ^MAGQBPG1("","An automatic RAID Group purge has been initiated for the following",0,PLACE,"AUTO_RAID_GROUP_PURGE")
  1. . D DFNIQ^MAGQBPG1("","VistA Imaging RAID group: "_$P($G(^MAG(2005.2,NG,0)),U,1),0,PLACE,"AUTO_RAID_GROUP_PURGE")
  1. . D DFNIQ^MAGQBPG1("","Auto_RAID_group_purge",1,PLACE,"AUTO_RAID_GROUP_PURGE")
  1. . Q
  1. I TSIZE>0,(((TSPACE/TSIZE)*100)>MIN) Q
  1. D:(NOTIFY!(SPACE>0)) TMESS(SPACE,"VistA Imaging RAID storage is Critically Low",PLACE)
  1. Q
  1. TMESS(SPACE,TS,PLACE) ;Trigger a message
  1. N TN,PC,SER S TN=$$GETMI^MAGQBUT5(TS,PLACE)
  1. S PC=$P($G(^MAG(2006.1,PLACE,"BPPURGE")),U)
  1. S SER=$$PURGES(PLACE)
  1. Q:$$FMADD^XLFDT(+$P(TN,"^",2),"",+$P(TN,U,1),"","")>$$NOW^XLFDT
  1. D ICCL^MAGQBUT1(CNT_U_TS_U_SPACE_U_PC_SER,$P(TN,"^",1)_" hours.",PLACE)
  1. Q
  1. PURGES(PLACE) ; BP Server Assigned to Auto-purge
  1. N IEN,NAME,SER S (NAME,SER)=""
  1. F S NAME=$O(^MAG(2006.8,"C",PLACE,NAME)) Q:NAME="" D Q:SER]""
  1. . S IEN=$O(^MAG(2006.8,"C",PLACE,NAME,"")) Q:'IEN
  1. . I $P($G(^MAG(2006.8,IEN,0)),U,4)=1 S SER=$P($G(^MAG(2006.8,IEN,1)),U,1)
  1. . Q
  1. Q SER
  1. NXTGP(PL,GRP,FP) ; return sure the NEXT able group (Canonically sorted by name)
  1. N INDX,TMP,GNAME
  1. S INDX="",GNAME=$P($G(^MAG(2005.2,GRP,0)),U)
  1. F S INDX=$O(^MAG(2005.2,"F",PL,"GRP",INDX)) Q:'INDX D
  1. . Q:'$P($G(^MAG(2005.2,INDX,7,0)),U,4) ; ZERO MEMBER COUNT
  1. . ; CHECK MEMBERS FOR ONLINE, READABLE, HASHED, AND SPACE
  1. . Q:'$$GABLE(INDX,$G(FP))
  1. . S TMP($P($G(^MAG(2005.2,INDX,0)),U),INDX)=""
  1. . Q
  1. Q:'$D(TMP) GRP
  1. S INDX=$O(TMP(GNAME)) ;TRY NEXT GROUP NAME CANONICALLY CH
  1. I INDX="" S INDX=$O(TMP("")) ; ELSE LOOP TO FIRST
  1. S INDX=$S(INDX'="":$O(TMP(INDX,"")),1:"") ; IF ANY GROUPS QUALIFY
  1. K TMP
  1. Q $S(INDX'="":INDX,1:GRP)
  1. GABLE(GR,FP) ; next group able (has online, readable, hashed)
  1. N IEN,RESULT,MIN,SPACE,SIZE
  1. S (IEN,RESULT,SPACE,SIZE)=0
  1. S MIN=$$SPARM
  1. F S IEN=$O(^MAG(2005.2,GR,7,"B",IEN)) Q:'IEN D
  1. . Q:$P($G(^MAG(2005.2,IEN,0)),U,6,7)'="1^MAG" ; Not online/MAG
  1. . Q:$P($G(^MAG(2005.2,IEN,1)),U,6)="1" ; Read-only
  1. . Q:$P($G(^MAG(2005.2,IEN,0)),U,3)'>0 ; No total space reported
  1. . Q:$P($G(^MAG(2005.2,IEN,0)),U,8)'="Y" ; Not hashed
  1. . Q:$P($G(^MAG(2005.2,IEN,0)),U,2)[":" ;skip if it appears to be a local drive
  1. . Q:$E($P($G(^MAG(2005.2,IEN,0)),U,2),1,2)'="\\" ; skip if not a normal share path address
  1. . Q:('$G(FP)&'$$MAXSP(IEN,.SPACE,.SIZE,$G(^MAG(2005.2,IEN,0)),MIN))
  1. . S RESULT="1"
  1. . Q
  1. Q RESULT
  1. MAXSP(IEN,FS,SZ,NODE,MIN) ; Called from FSP (RPC[MAGQ FS CHNGE]CHGSERV:FSP)
  1. N SPACE,SIZE
  1. S SPACE=+$P(NODE,U,5),SIZE=+$P(NODE,U,3)
  1. I SIZE>0,(((SPACE/SIZE)*100)>MIN),SPACE>FS D Q 1
  1. . S FS=SPACE,SZ=SIZE
  1. Q 0
  1. SPARM() ;Site Parameter for PERCENT server space to be held in reserve
  1. N VALUE
  1. S VALUE=$P($G(^MAG(2006.1,$$PLACE^MAGBAPI(+$G(DUZ(2))),1)),U,8)
  1. Q $S(VALUE>0:VALUE,1:5)
  1. SCWL(IEN,PLACE,GROUP,APP,DUZ) ; Sets updates the Current Write Location
  1. N X,X2,CNT
  1. Q:'$$VALRD(IEN,PLACE,GROUP)
  1. S X=$$DT^XLFDT,X2=$$FMADD^XLFDT(X,30,"","","")
  1. I '$D(^XTMP("MAGSCWL "_X,0)) D
  1. . S ^XTMP("MAGSCWL "_X,0)=X2_"^"_X_"^"_"Recording current write location updates"
  1. S ^XTMP("MAGSCWL "_X,$$NOW^XLFDT)="CWL: "_IEN_" ( "_$P($G(^MAG(2005.2,IEN,0)),U,1,2)_")^PLACE: "_PLACE_"^GROUP: "_GROUP_"^Application: "_$G(APP)_"^DUZ: "_DUZ
  1. S $P(^MAG(2006.1,PLACE,0),U,10)=GROUP
  1. S $P(^MAG(2006.1,PLACE,0),U,3)=IEN
  1. S $P(^MAG(2006.1,PLACE,"PACS"),U,3)=IEN
  1. Q
  1. EGR(PL,GRP,ACTION) ; Edit Group Read Only
  1. N INDX,ZNODE,NODE1
  1. S INDX=0
  1. F S INDX=$O(^MAG(2005.2,INDX)) Q:INDX'?1N.N D
  1. . S ZNODE=$G(^MAG(2005.2,INDX,0))
  1. . Q:$P(ZNODE,U,10)'=PLACE
  1. . Q:$P(ZNODE,U,6,7)'["1^MAG"
  1. . Q:$P(ZNODE,U,9)="1" ;ROUTING SHARE
  1. . S NODE1=$G(^MAG(2005.2,INDX,1))
  1. . Q:$P(NODE1,U,8)'=GRP
  1. . I ACTION="E" S $P(^MAG(2005.2,INDX,1),U,6)="0"
  1. . E S $P(^MAG(2005.2,INDX,1),U,6)="1"
  1. . Q
  1. Q
  1. GRP(PLACE) ;
  1. Q $S(+$P($G(^MAG(2006.1,PLACE,0)),U,10):+$P($G(^MAG(2006.1,PLACE,0)),U,10),1:$$NXTGP(PLACE,0))
  1. FSP(MIN,SPACE,SIZE,IEN,TSPACE,TSIZE,PLACE,GROUP,FILTER) ; Find Space called from (RPC[MAGQ FS CHNGE]CHGSERV)
  1. N INDX,ZNODE,NODE1
  1. S (INDX,TSPACE,TSIZE)=0
  1. F S INDX=$O(^MAG(2005.2,INDX)) Q:INDX'?1N.N D
  1. . Q:'$$VALRD(INDX,PLACE,GROUP)
  1. . S ZNODE=$G(^MAG(2005.2,INDX,0))
  1. . S TSPACE=TSPACE+(+$P(ZNODE,U,5))
  1. . S TSIZE=TSIZE+(+$P(ZNODE,U,3))
  1. . S CNT=CNT+1
  1. . Q:(+FILTER=INDX) ; Find a share within the group other than this one
  1. . I $$MAXSP(INDX,.SPACE,.SIZE,ZNODE,MIN) S IEN=INDX
  1. . Q
  1. Q
  1. VALRD(IEN,PLACE,GROUP) ;Validate Active RAID
  1. N ZNODE,NODE1
  1. S ZNODE=$G(^MAG(2005.2,IEN,0))
  1. S NODE1=$G(^MAG(2005.2,IEN,1))
  1. Q:$P(ZNODE,U,10)'=PLACE 0
  1. I $D(GROUP),$P(NODE1,U,8)'=GROUP Q 0
  1. Q:+$P(NODE1,U,6) 0 ;READ ONLY
  1. Q:$P(ZNODE,U,6,7)'["1^MAG" 0
  1. Q:$P(ZNODE,U,9)="1" 0 ;ROUTING SHARE
  1. Q:$P(ZNODE,U,8)'="Y" 0 ;skip not hashed
  1. Q:$P(ZNODE,U,2)[":" 0 ;skip if it appears to be a local drive - from testing
  1. Q:$E($P(ZNODE,U,2),1,2)'="\\" 0 ; skip if not a normal share path address
  1. Q 1
  1. NGF(PLACE) ;
  1. D DFNIQ^MAGQBPG1("","The get next raid group function failed!",0,PLACE,"GET_NEXT_RAID_GROUP_FAILURE")
  1. D DFNIQ^MAGQBPG1("","Use your BP Network Location Manager to re-configure your RAID",0,PLACE,"GET_NEXT_RAID_GROUP_FAILURE")
  1. D DFNIQ^MAGQBPG1("","Get_Next_RAID_Group_failure",1,PLACE,"GET_NEXT_RAID_GROUP_FAILURE")
  1. Q
  1. SPRGE(WSIEN,PLACE,RESULT) ; Scheduled Purge
  1. N NG
  1. ;Check for scheduled purge
  1. Q:'$$GET1^DIQ(2006.1,PLACE,"61","I") ; Check if Scheduled purge is enabled
  1. Q:($$GET1^DIQ(2006.1,PLACE,"61.1","I")+1)>$$DT^XLFDT ;Check if activated today
  1. I ($$UPPER^MAGQE4(WSOS)'["SERVER") Q:(WSOS'[".6.2.") ;;Q:$$UPPER^MAGQE4(WSOS)'["SERVER" ; workaround Win 2012
  1. Q:'$$GET1^DIQ(2006.8,WSIEN,"3","I") ;Check if task is assigned to this BP WS
  1. N T1,T2
  1. ;Adjust 24 hour time for Fileman format for Scheduled time (#61.4)
  1. S T1="0000",T2=$$GET1^DIQ(2006.1,PLACE,"61.4","I"),T1=$E(T1,1,($L(T1)-$L(T2)))_T2
  1. I $$FMADD^XLFDT($$NOW^XLFDT,"","",20,"")>($$GET1^DIQ(2006.1,PLACE,"61.3","I")_"."_T1) D
  1. . S NG=$$NXTGP(PLACE,GROUP,"1") ; Next purge capable Group
  1. . I 'NG D NGF(PLACE) Q ; Quit if next Raid Group not found
  1. . S $P(RESULT,U,4)="SCHEDULED_PURGE"_"~"_$$GET1^DIQ(2006.1,PLACE,"61.3","I")
  1. . S $P(RESULT,U,6)=NG
  1. . D DFNIQ^MAGQBPG1("","A scheduled RAID group purge has been initiated for the following",0,PLACE,"SCHEDULED_RAID_GROUP_PURGE")
  1. . D DFNIQ^MAGQBPG1("","VistA Imaging RAID group: "_$P($G(^MAG(2005.2,NG,0)),U,1),0,PLACE,"SCHEDULED_RAID_GROUP_PURGE")
  1. . D DFNIQ^MAGQBPG1("","Scheduled_RAID_group_purge",1,PLACE,"SCHEDULED_RAID_GROUP_PURGE")
  1. . Q
  1. Q
  1. SVERI(WSIEN,PLACE,RESULT) ; Scheduled Verify
  1. Q:'$$GET1^DIQ(2006.1,PLACE,"62","I") ; Check if Scheduled Verify is enabled
  1. Q:($$GET1^DIQ(2006.1,PLACE,"62.1","I")+1)>$$DT^XLFDT ;Check if activated today
  1. I ($$UPPER^MAGQE4(WSOS)'["SERVER") Q:(WSOS'[".6.2.") ;;Q:$$UPPER^MAGQE4(WSOS)'["SERVER"
  1. Q:'$$GET1^DIQ(2006.8,WSIEN,"4","I") ;Check if task is assigned to this BP WS
  1. N T1,T2
  1. S T1="0000",T2=$$GET1^DIQ(2006.1,PLACE,"62.4","I"),T1=$E(T1,1,($L(T1)-$L(T2)))_T2
  1. I $$FMADD^XLFDT($$NOW^XLFDT,"","",20,"")>($$GET1^DIQ(2006.1,PLACE,"62.3","I")_"."_T1) D
  1. . S $P(RESULT,U,7)="VERIFY"_"~"_$$GET1^DIQ(2006.1,PLACE,"62.3","I")
  1. . Q
  1. Q
  1. NAUTOW(PLACE,CWL,SPACE,SIZE,RESULT,NOTIFY,GROUP) ; CACHE BALANCING OFF
  1. ; No Auto RG Advance if Auto write is off
  1. S SPACE=+$P($G(^MAG(2005.2,CWL,0)),U,5),SIZE=+$P($G(^MAG(2005.2,CWL,0)),U,3)
  1. I (SIZE>0),((SPACE/SIZE)*100)>MIN D Q ;Here is where % Reserve is returned ...need to add by group and by RAID set also GB
  1. . S $P(RESULT,U)=1
  1. . I SIZE S $P(RESULT,U,5)=$P(((SPACE/SIZE)*100),".")_"."_$E($P(((SPACE/SIZE)*100),".",2),1,2)
  1. . E S $P(RESULT,U,5)="0.00"
  1. . Q
  1. I SIZE>0 S $P(RESULT,U,5)=$P(((SPACE/SIZE)*100),".")_"."_$E($P(((SPACE/SIZE)*100),".",2),1,2)
  1. E S $P(RESULT,U,5)="0.00"
  1. S $P(RESULT,U)=$S(SPACE>0:2,1:0)
  1. S $P(RESULT,U,2,3)=$P(^MAG(2005.2,$P(^MAG(2006.1,PLACE,0),U,3),0),U,1,2)
  1. I (($$GET1^DIQ(2006.1,PLACE,"61.1","I")+4)<$$DT^XLFDT) D ;Check if activated within 4 days
  1. . I ($P($G(^MAG(2006.1,PLACE,"BPPURGE")),U)&(SPACE>0)&($$GET1^DIQ(2006.8,WSIEN,"3","I")="1")) D
  1. . . I ($$UPPER^MAGQE4(WSOS)'["SERVER") Q:(WSOS'[".6.2.") ;;Q:$$UPPER^MAGQE4(WSOS)'["SERVER"
  1. . . S $P(RESULT,U,4)="AUTO_PURGE",$P(RESULT,U,6)=GROUP
  1. . . D DFNIQ^MAGQBPG1("","An automatic RAID Group purge has been initiated for the following",0,PLACE,"AUTO_RAID_GROUP_PURGE")
  1. . . D DFNIQ^MAGQBPG1("","VistA Imaging RAID group: "_$P($G(^MAG(2005.2,GROUP,0)),U,1),0,PLACE,"AUTO_RAID_GROUP_PURGE")
  1. . . D DFNIQ^MAGQBPG1("","Auto_RAID_group_purge",1,PLACE,"AUTO_RAID_GROUP_PURGE")
  1. . . Q
  1. . Q
  1. D:(NOTIFY!(SPACE>0)) TMESS(SPACE,"VistA Imaging RAID storage is Critically Low ",PLACE)
  1. Q
  1. RGADV(PLACE,GROUP,RESULT) ; Scheduled Raid Group Advance
  1. N NODERG,NG,IEN,APP,SCH,T1,T2
  1. S NODERG=$G(^MAG(2006.1,PLACE,"RGADVANCE"))
  1. I $P(NODERG,U,1) D
  1. . Q:'(+$P(NODERG,U,4))
  1. . S T1="0000",T2=$P(NODERG,U,5),T1=$E(T1,1,($L(T1)-$L(T2)))_T2
  1. . I $$FMADD^XLFDT($$NOW^XLFDT,"","",20,"")>($P(NODERG,U,4)_"."_T1) D
  1. . . S NG=$$NXTGP(PLACE,GROUP) ;$$NXTGP returns null when no group with suitable space is found
  1. . . I ((NG)&(NG'=GROUP)) D Q
  1. . . . S GROUP=NG,IEN=""
  1. . . . D FSP(MIN,.SPACE,.SIZE,.IEN,.TSPACE,.TSIZE,PLACE,GROUP,"")
  1. . . . S APP="Scheduled RAID Group Advance"
  1. . . . D SCWL(IEN,PLACE,GROUP,APP,DUZ)
  1. . . . S $P(RESULT,U,8)="Scheduled RGADVANCE"
  1. . . . D DFNIQ^MAGQBPG1("","A Scheduled RGADVANCE has completed",0,PLACE,APP)
  1. . . . D DFNIQ^MAGQBPG1("","The Active RAID Group is now set to: "_$P(^MAG(2005.2,GROUP,0),U,1),0,PLACE,APP)
  1. . . . D DFNIQ^MAGQBPG1("","Scheduled_RAID_Group_Advance",1,PLACE,APP)
  1. . . . S $P(^MAG(2006.1,PLACE,"RGADVANCE"),U,3)=$$DT^XLFDT ; DATE OF LAST RG ADVANCE #63.2
  1. . . . ;Allow singly scheduled RGAdvance,unschedule next if Frequency not set
  1. . . . S $P(^MAG(2006.1,PLACE,"RGADVANCE"),U,4)=$S(+$P(NODERG,U,2)>0:$$FMADD^XLFDT($$DT^XLFDT,$P(NODERG,U,2),"","",""),1:"")
  1. . . . Q
  1. . . ; Else NOTIFY & QUIT
  1. . . N MSG S MSG="The scheduled RAID Group Advance failed!"
  1. . . D DFNIQ^MAGQBPG1("",MSG,0,PLACE,"MAGQ FS CHNGE")
  1. . . S MSG="Scheduled_RAID_Group_Advance_failure!"
  1. . . D DFNIQ^MAGQBPG1("",MSG,1,PLACE,"MAGQ FS CHNGE") ; Send
  1. . . Q
  1. . Q
  1. Q
  1. REPCWL(IEN,RG,RES,TSPACE,TSIZE) ; Update Result with Current Write Group properties
  1. S $P(RES,U,2)="CWL: "_IEN_" RG: "_RG
  1. S $P(RES,U,3)=TSPACE
  1. S $P(RES,U,5)=$P(((TSPACE/TSIZE)*100),".")_"."_$E($P(((TSPACE/TSIZE)*100),".",2),1,2) ; %FREE SPACE
  1. Q