| 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 | 
|---|