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

XQ82.m

Go to the documentation of this file.
  1. XQ82 ;SF-ISC.SEA/JLI - CLEAN OLD $JOB DATA OUT OF XUTL("XQ", & OTHERS ;12/03/14 08:32
  1. ;;8.0;KERNEL;**59,67,157,258,312,353,542,554,638**;Jul 10, 1995;Build 15
  1. ;Per VA Directive 6402, this routine should not be modified.
  1. ;
  1. ;Make sure that can run from a DCL script
  1. N A,X,%DT,Y,J,K,DDATE,HDATE,HJOB,HPID3,XQOS,XQVND
  1. S U="^",DT=$$DT^XLFDT
  1. S HDATE=$H-7 ;Get seven days ago in $H days
  1. S DDATE=$$HTFM^XLFDT(HDATE) ;Get seven days ago in FM format
  1. S XQVND=^%ZOSF("OS"),XQOS=$$OS^%ZOSV,HPID3=$$CNV^XLFUTL($J,16)
  1. S HJOB=$J,DILOCKTM=$G(DILOCKTM,+$G(^DD("DILOCKTM"),1))
  1. ;Do work as a set of sub routines
  1. D L0,L1,L2,L3,L4,L5,L6,L7,L8
  1. EXIT ;
  1. Q
  1. L0 ;We keep track of jobs by putting data in ^XUTL("XQ",$J).
  1. ;Sign-on time is in ^($J,0) points to sign-on log.
  1. ;Holds the Menu stack.
  1. ;For any entry in user stack '^XUTL("XQ",$J)' w/ date older than 7 days or w/o zero node
  1. ;kill XUTL("XQ",n) and corresponding UTILITY(n), TMP(n), & XUTL(n) nodes.
  1. ;Long running jobs should call TOUCH^XUSCLEAN once a day to update KEEPALIVE.
  1. N %T S J=0
  1. F S J=$O(^XUTL("XQ",J)) Q:J'>0 I $S('$D(^(J,0)):1,1:^(0)<DDATE) D
  1. . I '$D(^XUTL("XQ",J,0)) K ^XUTL("XQ",J) Q ;Missing zero node
  1. . I $G(^XUTL("XQ",J,"KEEPALIVE"))>HDATE Q ;For long running jobs
  1. . I $D(^XUTL("XQ",J,"ZTSKNUM")) L +^%ZTSCH("TASK",^XUTL("XQ",J,"ZTSKNUM")):DILOCKTM Q:'$T L -^%ZTSCH("TASK",^XUTL("XQ",J,"ZTSKNUM"))
  1. . K ^XUTL("XQ",J),^UTILITY(J),^TMP(J),^XUTL(J)
  1. . Q
  1. Q:'$$CHECK ;Check if we should skip pass 2.
  1. ;Now to check again for DEAD jobs on local node
  1. F J=0:0 S J=$O(^XUTL("XQ",J)) Q:J'>0 D
  1. . I $$DEAD(J) K ^XUTL("XQ",J),^UTILITY(J),^TMP(J),^XUTL(J)
  1. Q
  1. ;
  1. L1 ;Loop thru UTILITY and look for nodes w/o corresponding XUTL("XQ",n)
  1. N A,J
  1. S A="" F S A=$O(^UTILITY(A)) Q:A="" D
  1. . I A>0,'$D(^XUTL("XQ",A)) K ^UTILITY(A) Q ;UTILITY($J) w/o XUTL("XQ",$J) node.
  1. . Q:A>0 Q:"^ROU^GLO^LRLTR^"[("^"_A_"^")
  1. . F J=0:0 S J=$O(^UTILITY(A,J)) Q:J'>0 I '$D(^XUTL("XQ",J)) K ^UTILITY(A,J) ;Remove UTILITY(namespace,$J) w/o XUTL("XQ",$J)
  1. . Q
  1. Q
  1. ;
  1. L2 ;Loop thru TMP and look for nodes w/o corresponding XUTL("XQ",n)
  1. N A,J
  1. S A="" F S A=$O(^TMP(A)) Q:A="" D
  1. . I A>0,'$D(^XUTL("XQ",A)) K ^TMP(A) Q ;TMP($J) w/o XUTL("XQ",$J) node.
  1. . Q:A>0 ;Q:"^ROU^GLO^LRLTR^"[("^"_A_"^")
  1. . F J=0:0 S J=$O(^TMP(A,J)) Q:J'>0 I '$D(^XUTL("XQ",J)) K ^TMP(A,J) ;Remove TMP(namespace,$J) w/o XUTL("XQ",$J)
  1. . Q
  1. Q
  1. ;
  1. L3 ;Now to cleanup the XTMP global w/ XTMP(namespace,0)<DT
  1. N A,J
  1. S A="" F S A=$O(^XTMP(A)) Q:A="" S J=$G(^XTMP(A,0)) I J<DT K ^XTMP(A)
  1. Q
  1. ;
  1. L4 ;Now go thru and clean old ^XUSEC(0,"CUR",duz,sign-on) nodes.
  1. D L51("CUR")
  1. Q
  1. ;
  1. L5 ;Now go through and clean old ^XUSEC(0,"AS*" nodes.
  1. D L51("AS1"),L51("AS2"),L51("AS4")
  1. Q
  1. ;
  1. L6 ;Clean out old build nodes from ^XUTL
  1. N K
  1. S K=""
  1. F S K=$O(^XUTL("XQO",K)) Q:K="" D
  1. . I $D(^XUTL("XQO",K,"^BUILD")),($P($H,",",2)-^("^BUILD")>1800)!(^("^BUILD")>$P($H,",",2)) K ^("^BUILD")
  1. Q
  1. ;
  1. L7 ;Kill ^DISV for TERMINATED or DISUSER Users.
  1. N DA,USER
  1. S DA="",U="^"
  1. F S DA=$O(^DISV(DA)) Q:DA="" S USER=$$ACTIVE^XUSER(DA) I '(+USER) K ^DISV(DA)
  1. Q
  1. ;
  1. L8 ;Loop top level of ^XUTL
  1. N A
  1. S A=0
  1. F S A=$O(^XUTL(A)) Q:'A I '$D(^XUTL("XQ",A)) K ^XUTL(A)
  1. Q
  1. ;
  1. L51(NDX) ;Clean old Sign-on log entries from X-ref
  1. N I,J,FDA,NOW,ERR,IEN
  1. S I="",NOW=$$NOW^XLFDT
  1. F S I=$O(^XUSEC(0,NDX,I)) Q:I="" F J=0:0 S J=$O(^XUSEC(0,NDX,I,J)) Q:(J'>0) D
  1. . ;Look at every entry in the X-ref, check for data record
  1. . I $D(^XUSEC(0,J,0))[0 K ^XUSEC(0,NDX,I,J) Q ;No data record.
  1. . Q:J'<DDATE ;Keep for now
  1. . S FDA(3.081,J_",",3)=NOW,FDA(3.081,J_",",16)=1 D UPDATE^DIE("","FDA","IEN","ERR")
  1. . K FDA,IEN,ERR
  1. . Q
  1. Q
  1. ;
  1. DEAD(X1) ;Check if X1 is a PID and DEAD
  1. ;Return 1 if should clean, 0 to skip
  1. I X1\1'=X1 Q 0
  1. ;a PID on VMS has a part that is fixed, not so under Linux so the following line was dropped.
  1. I XQOS="VMS",$E($$CNV^XLFUTL(X1,16),1,3)'=$E(HPID3,1,3) Q 0
  1. ;We should only come here
  1. ;is X1 a PID on this node and is PID active?..
  1. I $D(^$JOB(X1))=0 Q 1 ; Job is DEAD
  1. Q 0
  1. ;
  1. CHECK() ;Check that we have the right enviroment to do pass 2
  1. ;GTM must be on one big box.
  1. I XQVND["GT.M" Q 0
  1. ;Are we on Cache, ^$JOB is supported.
  1. ;Get value of LOCAL TMP (.07) to see if ^TMP, ^UTILITY and ^XUTL("XQ" are local.
  1. I XQVND["OpenM" Q +$P($G(^XTV(8989.3,1,0)),"^",7) ;p554
  1. Q 0
  1. ;