| [613] | 1 | KMPDUTL1 ;OAK/RAK,KAK - CM TOOLS Utilities ;2/17/04  10:51
 | 
|---|
 | 2 |  ;;2.0;CAPACITY MANAGEMENT TOOLS;**3**;Mar 22, 2002
 | 
|---|
 | 3 |  ;
 | 
|---|
 | 4 | CONT(KMPDEXT)  ;-- function displays 'return to continue' message at bottom of page
 | 
|---|
 | 5 |  ;--------------------------------------------------------------------
 | 
|---|
 | 6 |  ; KMPDEXT 0 = do not show 'to exit' text
 | 
|---|
 | 7 |  ;         1 = show 'to exit' text
 | 
|---|
 | 8 |  ;
 | 
|---|
 | 9 |  ; Return: 0 = continue
 | 
|---|
 | 10 |  ;         1 = quit
 | 
|---|
 | 11 |  ;--------------------------------------------------------------------
 | 
|---|
 | 12 |  ;
 | 
|---|
 | 13 |  N DIR,X,Y
 | 
|---|
 | 14 |  ;
 | 
|---|
 | 15 |  S KMPDEXT=+$G(KMPDEXT)
 | 
|---|
 | 16 |  F  Q:$Y>(IOSL-3)  W !
 | 
|---|
 | 17 |  S DIR(0)="EA"
 | 
|---|
 | 18 |  S DIR("A")="Press RETURN to continue"_$S(KMPDEXT:" or '^' to exit: ",1:": ")
 | 
|---|
 | 19 |  D ^DIR
 | 
|---|
 | 20 |  Q +$G(Y)
 | 
|---|
 | 21 |  ;
 | 
|---|
 | 22 | CURSTAT(STAT)   ;-- current status
 | 
|---|
 | 23 |  ;---------------------------------------------------------------------
 | 
|---|
 | 24 |  ; input:  STAT (optional) = data from $$TSKSTAT^KMPSUTL1
 | 
|---|
 | 25 |  ; output: See codes below
 | 
|---|
 | 26 |  ;---------------------------------------------------------------------
 | 
|---|
 | 27 |  ;
 | 
|---|
 | 28 |  N RESULT,SITNUM,STRTDT
 | 
|---|
 | 29 |  ;
 | 
|---|
 | 30 |  S RESULT="",SITNUM=^DD("SITE",1),STRTDT=$G(^XTMP("KMPS",SITNUM,0))
 | 
|---|
 | 31 |  ;
 | 
|---|
 | 32 |  I $D(^XTMP("KMPS","ERROR")) Q "6^ERRORS RECORDED"
 | 
|---|
 | 33 |  I $D(^XTMP("KMPS","STOP")) Q "7^STOPPING"
 | 
|---|
 | 34 |  I $D(^XTMP("KMPS","START")) L +^XTMP("KMPS"):0 I $T L -^XTMP("KMPS") Q "5^DID NOT COMPLETE"
 | 
|---|
 | 35 |  I +STRTDT I +$H-STRTDT>2 Q "5^DID NOT COMPLETE"
 | 
|---|
 | 36 |  I +STRTDT I +$H-STRTDT>1 Q "4^RUNNING TOO LONG"
 | 
|---|
 | 37 |  I $D(^XTMP("KMPS","START")) Q "0^RUNNING"
 | 
|---|
 | 38 |  I $D(STAT) Q $P(STAT,U,1,2)
 | 
|---|
 | 39 |  E  Q "3^NOT RUNNING"
 | 
|---|
 | 40 |  Q "9^UNKNOWN"
 | 
|---|
 | 41 |  ;
 | 
|---|
 | 42 | SYSINFO() ;-- returns system information
 | 
|---|
 | 43 |  ;---------------------------------------------------------------------
 | 
|---|
 | 44 |  ; Returns:
 | 
|---|
 | 45 |  ;         "^" piece 1 - type of M platform
 | 
|---|
 | 46 |  ;         "^" piece 2 - $ZV => name and version of M system
 | 
|---|
 | 47 |  ;         "^" piece 3 - operating system version
 | 
|---|
 | 48 |  ;
 | 
|---|
 | 49 |  ;---------------------------------------------------------------------
 | 
|---|
 | 50 |  ;
 | 
|---|
 | 51 |  N MPLTF,OSVER,SYSINFO
 | 
|---|
 | 52 |  ;
 | 
|---|
 | 53 |  S MPLTF=$$MPLTF(),OSVER=$$OSVER(MPLTF)
 | 
|---|
 | 54 |  S SYSINFO=MPLTF_U_$ZV_U_OSVER
 | 
|---|
 | 55 |  Q SYSINFO
 | 
|---|
 | 56 |  ;
 | 
|---|
 | 57 | MPLTF() ;-- returns the type of M platform
 | 
|---|
 | 58 |  ;---------------------------------------------------------------------
 | 
|---|
 | 59 |  ; Returns:  DSM    for DSM platform
 | 
|---|
 | 60 |  ;           CVMS   for Cache for OpenVMS platform
 | 
|---|
 | 61 |  ;           CWINNT for Cache for Windows NT platform
 | 
|---|
 | 62 |  ;---------------------------------------------------------------------
 | 
|---|
 | 63 |  ;
 | 
|---|
 | 64 |  N MPLTF,ZV
 | 
|---|
 | 65 |  ;
 | 
|---|
 | 66 |  S ZV=$ZV
 | 
|---|
 | 67 |  S MPLTF=$S(ZV["DSM":"DSM",ZV["VMS":"CVMS",ZV["Windows":"CWINNT",1:"UNK")
 | 
|---|
 | 68 |  Q MPLTF
 | 
|---|
 | 69 |  ;
 | 
|---|
 | 70 | OSVER(MPLTF) ;-- returns the operating system version
 | 
|---|
 | 71 |  ;---------------------------------------------------------------------
 | 
|---|
 | 72 |  ; input: MPLTF = type of M platform
 | 
|---|
 | 73 |  ;---------------------------------------------------------------------
 | 
|---|
 | 74 |  ;
 | 
|---|
 | 75 |  I $G(MPLTF)="" Q ""
 | 
|---|
 | 76 |  ;
 | 
|---|
 | 77 |  I MPLTF["DSM" Q $ZC(%GETSYI,"VERSION")
 | 
|---|
 | 78 |  I MPLTF["CVMS" Q $$CVMSVER^KMPDUTL5()
 | 
|---|
 | 79 |  I MPLTF["CWINNT" Q $$CWNTVER^KMPDUTL5()
 | 
|---|
 | 80 |  Q ""
 | 
|---|
 | 81 |  ;
 | 
|---|
 | 82 | TSKSTAT(OPT) ;-- status of scheduled task option
 | 
|---|
 | 83 |  ;---------------------------------------------------------------------
 | 
|---|
 | 84 |  ; input  OPT = option name
 | 
|---|
 | 85 |  ; 
 | 
|---|
 | 86 |  ; output RTN = by "^" piece
 | 
|---|
 | 87 |  ;               1 - status code
 | 
|---|
 | 88 |  ;               2 - literal condition
 | 
|---|
 | 89 |  ;               3 - scheduled date@time (day)
 | 
|---|
 | 90 |  ;               4 - numeric day-of-week
 | 
|---|
 | 91 |  ;               5 - expanded scheduled frequency
 | 
|---|
 | 92 |  ;               6 - short form frequency
 | 
|---|
 | 93 |  ;               7 - task id
 | 
|---|
 | 94 |  ;               8 - queued by
 | 
|---|
 | 95 |  ;               9 - user status
 | 
|---|
 | 96 |  ;
 | 
|---|
 | 97 |  ; where status code^condition:
 | 
|---|
 | 98 |  ;            = 0^SCHEDULED
 | 
|---|
 | 99 |  ;            = 1^NOT SCHEDULED and 'scheduled date@time' will
 | 
|---|
 | 100 |  ;                   be UNKNOWN and 'numeric day of week' will be -1
 | 
|---|
 | 101 |  ;            = 2^NOT RESCHEDULED
 | 
|---|
 | 102 |  ;            = 3^MISSING when OPT does not exist
 | 
|---|
 | 103 |  ;            = 9^UNKNOWN
 | 
|---|
 | 104 |  ;            = ""^UNDEFINED
 | 
|---|
 | 105 |  ;
 | 
|---|
 | 106 |  ; where user status = ACTIVE or NOT ACTIVE
 | 
|---|
 | 107 |  ;---------------------------------------------------------------------
 | 
|---|
 | 108 |  ;
 | 
|---|
 | 109 |  Q:$G(OPT)="" "^UNDEFINED"
 | 
|---|
 | 110 |  ;
 | 
|---|
 | 111 |  N ACTV,DA,DAY,DOW,FREQ,RTN,TSK,TSKINFO,USER,Y
 | 
|---|
 | 112 |  ;
 | 
|---|
 | 113 |  S (DOW,FREQ)=-1
 | 
|---|
 | 114 |  S RTN="9^UNKNOWN^NO DATE^-1^UNKNOWN^^^UNKNOWN^NOT ACTIVE"
 | 
|---|
 | 115 |  ;
 | 
|---|
 | 116 |  I '$D(^DIC(19,"B",OPT)) S $P(RTN,U,1,2)="3^MISSING" Q RTN
 | 
|---|
 | 117 |  S DA=$O(^DIC(19,"B",OPT,0)),DA=+$O(^DIC(19.2,"B",DA,0))
 | 
|---|
 | 118 |  S TSKINFO=$G(^DIC(19.2,DA,0)),(DOW,Y)=$P(TSKINFO,U,2),FREQ=$P(TSKINFO,U,6)
 | 
|---|
 | 119 |  D:+Y DD^%DT S $P(TSKINFO,U,2)=Y
 | 
|---|
 | 120 |  I DOW'="" S DAY=$$DOW^XLFDT(DOW),DOW=$$DOW^XLFDT(DOW,1)
 | 
|---|
 | 121 |  S TSK=+$G(^DIC(19.2,+DA,1))
 | 
|---|
 | 122 |  I (DOW="")!(TSK="") S $P(RTN,U,1,2)="1^NOT SCHEDULED"
 | 
|---|
 | 123 |  E  D
 | 
|---|
 | 124 |  .S $P(RTN,U,1,2)="0^SCHEDULED"
 | 
|---|
 | 125 |  .I FREQ="" S $P(RTN,U,1,2)="2^NOT RESCHEDULED"
 | 
|---|
 | 126 |  .; queued to run at
 | 
|---|
 | 127 |  .S $P(RTN,U,3,4)=$S($P(TSKINFO,U,2)="":"NO DATE",1:$P(TSKINFO,U,2))_$S($D(DAY):" ("_DAY_")",1:"")_U_DOW
 | 
|---|
 | 128 |  ; rescheduling frequency
 | 
|---|
 | 129 |  I FREQ?1.3N1A D
 | 
|---|
 | 130 |  .S $P(RTN,U,5,6)=+FREQ_" "_$S(FREQ["D":"day",FREQ["M":"month",1:FREQ)_$S(+FREQ>1:"s",1:"")_U_FREQ
 | 
|---|
 | 131 |  E  S $P(RTN,U,5,6)=$S(FREQ="":"UNKNOWN",1:FREQ)_U_FREQ
 | 
|---|
 | 132 |  ; task id
 | 
|---|
 | 133 |  S $P(RTN,U,7)=TSK
 | 
|---|
 | 134 |  ; find if the user is active
 | 
|---|
 | 135 |  I TSK D
 | 
|---|
 | 136 |  .S TSKINFO=$G(^%ZTSK(TSK,0))
 | 
|---|
 | 137 |  .S USER=+$P(TSKINFO,U,3)
 | 
|---|
 | 138 |  .S ACTV=+$$ACTIVE^XUSER(USER)
 | 
|---|
 | 139 |  .; queued by
 | 
|---|
 | 140 |  .S $P(RTN,U,8)=$P($G(^VA(200,USER,0)),U)
 | 
|---|
 | 141 |  I $G(ACTV) S $P(RTN,U,9)="ACTIVE"
 | 
|---|
 | 142 |  Q RTN
 | 
|---|
 | 143 |  ;
 | 
|---|
 | 144 | VERPTCH(PKG,RTNARRY)    ;-- returns current version and patch status of specified CM package
 | 
|---|
 | 145 |  ;---------------------------------------------------------------------
 | 
|---|
 | 146 |  ; input PKG = 'D' for CM TOOLS
 | 
|---|
 | 147 |  ;             'R' for RUM
 | 
|---|
 | 148 |  ;             'S' for SAGG
 | 
|---|
 | 149 |  ; Return array (passed by reference) in format:
 | 
|---|
 | 150 |  ; output RTNARRY = -1 for error
 | 
|---|
 | 151 |  ;        RTNARRY(0) = number of routines^total rtns ok^total rtns bad^total rtns missing
 | 
|---|
 | 152 |  ;        RTNARRY(rtn name) = {0=good 1=bad 2=missing routine}^released version^released patch(es)^site version^site patch(es)
 | 
|---|
 | 153 |  ;
 | 
|---|
 | 154 |  ; This code will reference line tag PTCHINFO^KMP_pkg_UTL for the
 | 
|---|
 | 155 |  ; following patch information text starting at PTCHINFO+1:
 | 
|---|
 | 156 |  ;
 | 
|---|
 | 157 |  ;        ;;routine name ^ current version ^ current patch(es)
 | 
|---|
 | 158 |  ;
 | 
|---|
 | 159 |  ; Example:    
 | 
|---|
 | 160 |  ;           PATCHINFO  ;-- patch information
 | 
|---|
 | 161 |  ;                      ;;KMPSGE^1.8^**1,2**
 | 
|---|
 | 162 |  ;                      ;;KMPSUTL^1.8^**1,2**
 | 
|---|
 | 163 |  ;  last line >         ;;
 | 
|---|
 | 164 |  ;---------------------------------------------------------------------
 | 
|---|
 | 165 |  ;
 | 
|---|
 | 166 |  K RTNARRY
 | 
|---|
 | 167 |  ;
 | 
|---|
 | 168 |  N BAD,I,INFO,INFOSITE,OK,OUT,PTCH,PTCHSITE,RTN
 | 
|---|
 | 169 |  N TAG,TOTBAD,TOTMISS,TOTOK,TOTRTN,X,VER,VERSITE
 | 
|---|
 | 170 |  ;
 | 
|---|
 | 171 |  I $G(PKG)=""!("DRS"'[$G(PKG))!($L(PKG)'=1) S RTNARRY=-1 Q
 | 
|---|
 | 172 |  S X="KMP"_PKG_"UTL"
 | 
|---|
 | 173 |  X ^%ZOSF("TEST") I '$T S RTNARRY=-1 Q
 | 
|---|
 | 174 |  ;
 | 
|---|
 | 175 |  S (OUT,TOTBAD,TOTMISS,TOTOK,TOTRTN)=0
 | 
|---|
 | 176 |  F I=1:1 D  Q:OUT
 | 
|---|
 | 177 |  .S TAG="PTCHINFO+"_I_"^KMP"_PKG_"UTL"
 | 
|---|
 | 178 |  .S INFO=$P($T(@TAG),";;",2)
 | 
|---|
 | 179 |  .I INFO="" S OUT=1 Q
 | 
|---|
 | 180 |  .S RTN=$P(INFO,U),VER=$P(INFO,U,2),PTCH=$P(INFO,U,3)
 | 
|---|
 | 181 |  .; if routine is missing
 | 
|---|
 | 182 |  .I $T(@(RTN_"^"_RTN))="" D  Q
 | 
|---|
 | 183 |  ..S TOTMISS=TOTMISS+1,TOTRTN=TOTRTN+1
 | 
|---|
 | 184 |  ..S RTNARRY(RTN)="2^"_VER_U_PTCH_"^^"
 | 
|---|
 | 185 |  .X "ZL @RTN S INFOSITE=$T(+2)"
 | 
|---|
 | 186 |  .S VERSITE=$P(INFOSITE,";",3),PTCHSITE=$P(INFOSITE,";",5)
 | 
|---|
 | 187 |  .I VERSITE'=VER!(PTCHSITE'=PTCH) S BAD=1,OK=0
 | 
|---|
 | 188 |  .E  S BAD=0,OK=1
 | 
|---|
 | 189 |  .S TOTBAD=TOTBAD+BAD,TOTOK=TOTOK+OK,TOTRTN=TOTRTN+1
 | 
|---|
 | 190 |  .S RTNARRY(RTN)=BAD_U_VER_U_PTCH_U_VERSITE_U_PTCHSITE
 | 
|---|
 | 191 |  S RTNARRY(0)=TOTRTN_U_TOTOK_U_TOTBAD_U_TOTMISS
 | 
|---|
 | 192 |  Q
 | 
|---|