| 1 | KMPDUTL5 ;OIFO/KAK - Obtain CPU Configuration;28 Feb 2002 ;2/17/04  10:56
 | 
|---|
| 2 |  ;;2.0;CAPACITY MANAGEMENT TOOLS;;Mar 22, 2002
 | 
|---|
| 3 |  ;;
 | 
|---|
| 4 | CPU(ARRAY) ;-- get cpu configuration information
 | 
|---|
| 5 |  ;---------------------------------------------------------------------
 | 
|---|
| 6 |  ; ARRAY = passed back by reference
 | 
|---|
| 7 |  ; returns array with CPU information:
 | 
|---|
| 8 |  ;                          piece : information
 | 
|---|
| 9 |  ;       ARRAY(nodename) =    1   : type of cpu
 | 
|---|
| 10 |  ;                            2   : number of processors
 | 
|---|
| 11 |  ;                            3   : processor speed
 | 
|---|
| 12 |  ;                            4   : amount of memory
 | 
|---|
| 13 |  ;---------------------------------------------------------------------
 | 
|---|
| 14 |  ;
 | 
|---|
| 15 |  N ZV
 | 
|---|
| 16 |  ;
 | 
|---|
| 17 |  S ZV=$$MPLTF^KMPDUTL1
 | 
|---|
| 18 |  ;
 | 
|---|
| 19 |  S U="^"
 | 
|---|
| 20 |  I (ZV["DSM") D DSM(.ARRAY)
 | 
|---|
| 21 |  I (ZV["CVMS") D CVMS(.ARRAY,1)
 | 
|---|
| 22 |  I (ZV["CWINNT") D CWINNT(.ARRAY,1)
 | 
|---|
| 23 |  Q
 | 
|---|
| 24 |  ;
 | 
|---|
| 25 | DSM(CPUINFO) ;-- for DSM Platform
 | 
|---|
| 26 |  ;---------------------------------------------------------------------
 | 
|---|
| 27 |  ; CPUINFO = array passed back by reference - see CPU(ARRAY) above
 | 
|---|
| 28 |  ;---------------------------------------------------------------------
 | 
|---|
| 29 |  ;
 | 
|---|
| 30 |  N CLSTRMEM,CSID,CSIDARRY,NODE,NODEARRY,X
 | 
|---|
| 31 |  ;
 | 
|---|
| 32 |  S CLSTRMEM=$ZC(%GETSYI,"CLUSTER_MEMBER")
 | 
|---|
| 33 |  ;
 | 
|---|
| 34 |  ; not in cluster environment
 | 
|---|
| 35 |  I 'CLSTRMEM D  Q
 | 
|---|
| 36 |  .S NODE=$ZC(%GETSYI,"NODENAME")
 | 
|---|
| 37 |  .S CPUINFO(NODE)=$ZC(%GETSYI,"HW_NAME")_U_$ZC(%GETSYI,"ACTIVECPU_CNT")
 | 
|---|
| 38 |  ;
 | 
|---|
| 39 |  ; in cluster environment
 | 
|---|
| 40 |  D CLSTR
 | 
|---|
| 41 |  S X="ERR^ZU",@^%ZOSF("TRAP")
 | 
|---|
| 42 |  S NODE=""
 | 
|---|
| 43 |  F  S NODE=$O(NODEARRY(NODE)) Q:NODE=""  D
 | 
|---|
| 44 |  .S CSID=NODEARRY(NODE)
 | 
|---|
| 45 |  .S CPUINFO(NODE)=$ZC(%GETSYI,"HW_NAME",CSID)_U_$ZC(%GETSYI,"ACTIVECPU_CNT",CSID)
 | 
|---|
| 46 |  Q
 | 
|---|
| 47 | CLSTR ; get %GETSYI using wild card to get CSID and NODENAME for all nodes
 | 
|---|
| 48 |  ;
 | 
|---|
| 49 |  N X
 | 
|---|
| 50 |  S X="ERRCLU^KMPDUTL5",@^%ZOSF("TRAP"),$ZE=""
 | 
|---|
| 51 |  S CSIDARRY($ZC(%GETSYI,"NODE_CSID",-1))=""
 | 
|---|
| 52 |  F  S CSIDARRY($ZC(%GETSYI,"NODE_CSID",""))=""
 | 
|---|
| 53 | ERRCLU I $ZE'["NOMORENODE" ZQ
 | 
|---|
| 54 |  N CSID
 | 
|---|
| 55 |  S CSID=""
 | 
|---|
| 56 |  F  S CSID=$O(CSIDARRY(CSID)) Q:CSID=""  S NODEARRY($ZC(%GETSYI,"NODENAME",CSID))=CSID
 | 
|---|
| 57 |  Q
 | 
|---|
| 58 |  ;
 | 
|---|
| 59 | CVMS(CPUINFO,TYP) ;-- for Cache for OpenVMS Platform
 | 
|---|
| 60 |  ;---------------------------------------------------------------------
 | 
|---|
| 61 |  ; input: TYP = type of system information requested
 | 
|---|
| 62 |  ;                1 : cpu system information
 | 
|---|
| 63 |  ;                2 : operating system version information
 | 
|---|
| 64 |  ;
 | 
|---|
| 65 |  ; CPUINFO = array passed back by reference
 | 
|---|
| 66 |  ;           : for TYP=1 see CPU(ARRAY) line tag above
 | 
|---|
| 67 |  ;           : for TYP=2 CPUINFO(1)=os version
 | 
|---|
| 68 |  ;---------------------------------------------------------------------
 | 
|---|
| 69 |  ;
 | 
|---|
| 70 |  N DIR,FILE,LOG,TYPNM
 | 
|---|
| 71 |  ;
 | 
|---|
| 72 |  S TYPNM=$S(TYP=1:"CPU",TYP=2:"VER",1:"")
 | 
|---|
| 73 |  ;
 | 
|---|
| 74 |  S DIR=$ZU(12)
 | 
|---|
| 75 |  ;
 | 
|---|
| 76 |  ; cleanup log file
 | 
|---|
| 77 |  S LOG=DIR_"KMPDU"_TYPNM_".LOG"
 | 
|---|
| 78 |  O LOG:("R"):0 C LOG:("D")
 | 
|---|
| 79 |  ;
 | 
|---|
| 80 |  ; cleanup com file
 | 
|---|
| 81 |  S FILE=DIR_"KMPDU"_TYPNM_".COM"
 | 
|---|
| 82 |  O FILE:("R"):0 C FILE:("D")
 | 
|---|
| 83 |  ;
 | 
|---|
| 84 |  ; create com file   quit on file creation error
 | 
|---|
| 85 |  Q:$$CREATE(FILE,TYP)<0
 | 
|---|
| 86 |  ;
 | 
|---|
| 87 |  ; run com file and create log file
 | 
|---|
| 88 |  I $ZF(-1,"",LOG,FILE)
 | 
|---|
| 89 |  C LOG
 | 
|---|
| 90 |  ;
 | 
|---|
| 91 |  ; parse log file
 | 
|---|
| 92 |  D PARSE(LOG,.CPUINFO,TYP)
 | 
|---|
| 93 |  ;
 | 
|---|
| 94 |  ; cleanup com file
 | 
|---|
| 95 |  O FILE:("R"):0 C FILE:("D")
 | 
|---|
| 96 |  ; cleanup log file
 | 
|---|
| 97 |  O LOG:("R"):0 C LOG:("D")
 | 
|---|
| 98 |  ;
 | 
|---|
| 99 |  Q
 | 
|---|
| 100 |  ;
 | 
|---|
| 101 | CWINNT(CPUINFO,TYP) ;-- for Cache for Windows NT Platform
 | 
|---|
| 102 |  ;---------------------------------------------------------------------
 | 
|---|
| 103 |  ; input: TYP = type of system information requested
 | 
|---|
| 104 |  ;                1 : cpu system information
 | 
|---|
| 105 |  ;                2 : operating system version information
 | 
|---|
| 106 |  ;
 | 
|---|
| 107 |  ; CPUINFO = array passed back by reference
 | 
|---|
| 108 |  ;           : for TYP = 1 see CPU(ARRAY) line tag above
 | 
|---|
| 109 |  ;           : for TYP = 2 CPUINFO(1)=os version
 | 
|---|
| 110 |  ;---------------------------------------------------------------------
 | 
|---|
| 111 |  ;
 | 
|---|
| 112 |  N DATA,FILE,NODE,OUT,X
 | 
|---|
| 113 |  ;
 | 
|---|
| 114 |  S DATA="",OUT=0
 | 
|---|
| 115 |  ;
 | 
|---|
| 116 |  ; $zu(110) = computername
 | 
|---|
| 117 |  S (FILE,NODE)=$ZU(110)
 | 
|---|
| 118 |  S CPUINFO(NODE)=""
 | 
|---|
| 119 |  ;
 | 
|---|
| 120 |  ; cleanup all report files
 | 
|---|
| 121 |  I $ZF(-1,"DEL "_FILE_"*.TXT")
 | 
|---|
| 122 |  ;
 | 
|---|
| 123 |  S FILE=FILE_".TXT"
 | 
|---|
| 124 |  ;
 | 
|---|
| 125 |  ; send system reort to file
 | 
|---|
| 126 |  ; switches: /s => summary report
 | 
|---|
| 127 |  ;           /a => all report
 | 
|---|
| 128 |  ;           /f => send to file named 'computername.TXT'
 | 
|---|
| 129 |  I $ZF(-1,"WINMSD /s /f")
 | 
|---|
| 130 |  ;
 | 
|---|
| 131 |  S X="EOF1",@^%ZOSF("TRAP")
 | 
|---|
| 132 |  ; append *eof* line to report file
 | 
|---|
| 133 |  O FILE:("WA"):0 I $T U FILE W !,"*EOF*" C FILE
 | 
|---|
| 134 |  ;
 | 
|---|
| 135 |  ; read from report file
 | 
|---|
| 136 |  O FILE:("R"):0
 | 
|---|
| 137 |  ;
 | 
|---|
| 138 |  I '$T C FILE:"D" Q
 | 
|---|
| 139 |  ;
 | 
|---|
| 140 |  U FILE
 | 
|---|
| 141 |  ;
 | 
|---|
| 142 |  ; TYP=1 => cpu information
 | 
|---|
| 143 |  I TYP=1 D
 | 
|---|
| 144 |  .F  R X Q:X["*EOF*"  D  Q:OUT
 | 
|---|
| 145 |  ..; type of cpu
 | 
|---|
| 146 |  ..I X["Hardware Abstraction Layer:" S $P(DATA,U)=$$STRIP^KMPDUTL4($P(X,"Hardware Abstraction Layer:",2)) Q
 | 
|---|
| 147 |  ..; number of processors
 | 
|---|
| 148 |  ..I X["NUMBER_OF_PROCESSORS=" S $P(DATA,U,2)=$P(X,"NUMBER_OF_PROCESSORS=",2) Q
 | 
|---|
| 149 |  ..; processor speed - no information available
 | 
|---|
| 150 |  ..; amount of memory
 | 
|---|
| 151 |  ..I X["Physical Memory (K)" D  Q
 | 
|---|
| 152 |  ...R X
 | 
|---|
| 153 |  ...I X["*EOF*" S OUT=1 Q
 | 
|---|
| 154 |  ...I X["Total:" S $P(DATA,U,4)=$$STRIP^KMPDUTL4($$COMMA^KMPDUTL4($P(X,"Total:",2)))\1024 Q
 | 
|---|
| 155 |  ..S CPUINFO(NODE)=DATA
 | 
|---|
| 156 |  ;
 | 
|---|
| 157 |  ; TYP=2 => os version
 | 
|---|
| 158 |  I TYP=2 D
 | 
|---|
| 159 |  .F  R X Q:X["*EOF*"  D  Q:OUT
 | 
|---|
| 160 |  ..; version of operating system
 | 
|---|
| 161 |  ..I X["OS Version Report" D
 | 
|---|
| 162 |  ...F I=1:1:2 R X I X["*EOF*" S OUT=1 Q
 | 
|---|
| 163 |  ...S DATA=X
 | 
|---|
| 164 |  ...R X I X["*EOF*" S OUT=1 Q
 | 
|---|
| 165 |  ...S DATA=DATA_" "_X
 | 
|---|
| 166 |  ...S CPUINFO(1)=DATA
 | 
|---|
| 167 |  ;
 | 
|---|
| 168 |  C FILE:"D"
 | 
|---|
| 169 |  ;
 | 
|---|
| 170 |  Q
 | 
|---|
| 171 |  ;
 | 
|---|
| 172 | CREATE(FILE,TYP) ;-- function to create new com file
 | 
|---|
| 173 |  ;---------------------------------------------------------------------
 | 
|---|
| 174 |  ; input: FILE = name of file to create
 | 
|---|
| 175 |  ;        TYP  = type of system information requested
 | 
|---|
| 176 |  ;                 1 : cpu system information
 | 
|---|
| 177 |  ;                 2 : operating system version information
 | 
|---|
| 178 |  ;
 | 
|---|
| 179 |  ; returns:  1 successful file creation
 | 
|---|
| 180 |  ;          -1 failure of file creation
 | 
|---|
| 181 |  ;---------------------------------------------------------------------
 | 
|---|
| 182 |  ;
 | 
|---|
| 183 |  N DIR,TYPNM
 | 
|---|
| 184 |  ;
 | 
|---|
| 185 |  S TYPNM=$S(TYP=1:"CPU",TYP=2:"VER",1:"")
 | 
|---|
| 186 |  ;
 | 
|---|
| 187 |  O FILE:("NWC"):0 Q:'$T -1
 | 
|---|
| 188 |  ;
 | 
|---|
| 189 |  U FILE
 | 
|---|
| 190 |  W "$! KMPDU"_TYPNM_".COM - Obtain System Configuration Information"
 | 
|---|
| 191 |  W "$!--------------------------------------------------------"
 | 
|---|
| 192 |  W "$! OIFO - CAPACITY PLANNING/KAK"
 | 
|---|
| 193 |  W "$! "_$P($T(+2)_";;",2,999)
 | 
|---|
| 194 |  W "$!--------------------------------------------------------"
 | 
|---|
| 195 |  W "$!"
 | 
|---|
| 196 |  ;
 | 
|---|
| 197 |  I TYP=2 D  G TAGXIT
 | 
|---|
| 198 |  .W "$   write sys$output ""VERSION=""   , f$getsyi(""VERSION"")"
 | 
|---|
| 199 |  ;
 | 
|---|
| 200 |  W "$ if f$getsyi(""CLUSTER_MEMBER"") .eqs. ""FALSE"" then goto NOT_CLUSTER"
 | 
|---|
| 201 |  W "$ CONTEXT = """""
 | 
|---|
| 202 |  W "$START:"
 | 
|---|
| 203 |  W "$   ID = f$csid(CONTEXT)"
 | 
|---|
| 204 |  W "$   if ID .eqs. """" then goto EXIT"
 | 
|---|
| 205 |  W "$   write sys$output ""NODE=""    , f$getsyi(""NODENAME"",,ID)"
 | 
|---|
| 206 |  W "$   write sys$output ""TYPE=""    , f$getsyi(""HW_NAME"",,ID)"
 | 
|---|
| 207 |  W "$   write sys$output ""CPU_CNT="" , f$getsyi(""ACTIVECPU_CNT"",,ID)" 
 | 
|---|
| 208 |  W "$   write sys$output ""SPEED=n/a"""
 | 
|---|
| 209 |  W "$   write sys$output ""MEMSIZE="" , f$getsyi(""MEMSIZE"",,ID)"
 | 
|---|
| 210 |  W "$   goto START"
 | 
|---|
| 211 |  W "$NOT_CLUSTER:"
 | 
|---|
| 212 |  W "$   write sys$output ""NODE=""    , f$getsyi(""NODENAME"")"
 | 
|---|
| 213 |  W "$   write sys$output ""TYPE=""    , f$getsyi(""HW_NAME"")"
 | 
|---|
| 214 |  W "$   write sys$output ""CPU_CNT="" , f$getsyi(""ACTIVECPU_CNT"")"
 | 
|---|
| 215 |  W "$   write sys$output ""SPEED=n/a"""
 | 
|---|
| 216 |  W "$   write sys$output ""MEMSIZE="" , f$getsyi(""MEMSIZE"")"
 | 
|---|
| 217 | TAGXIT ;
 | 
|---|
| 218 |  W "$EXIT:"
 | 
|---|
| 219 |  W "$   write sys$output ""*EOF*"""
 | 
|---|
| 220 |  W "$ exit"
 | 
|---|
| 221 |  W "$!"
 | 
|---|
| 222 |  ;
 | 
|---|
| 223 |  C FILE
 | 
|---|
| 224 |  Q 1
 | 
|---|
| 225 |  ;
 | 
|---|
| 226 | PARSE(LOG,CPUARRY,TYP) ;-- parse log file data
 | 
|---|
| 227 |  ;---------------------------------------------------------------------
 | 
|---|
| 228 |  ; input: LOG = name of log file to parse
 | 
|---|
| 229 |  ;        TYP = type of system information requested
 | 
|---|
| 230 |  ;                1 : cpu system information
 | 
|---|
| 231 |  ;                2 : operating system version information
 | 
|---|
| 232 |  ;
 | 
|---|
| 233 |  ; CPUARRY = passed back by reference
 | 
|---|
| 234 |  ;           : for TYP=1 see CPU(ARRAY) line tag above
 | 
|---|
| 235 |  ;           : for TYP=2 CPUINFO(1)=os version
 | 
|---|
| 236 |  ;---------------------------------------------------------------------
 | 
|---|
| 237 |  ;
 | 
|---|
| 238 |  N NODE,X
 | 
|---|
| 239 |  ;
 | 
|---|
| 240 |  S X="EOF",@^%ZOSF("TRAP"),NODE=""
 | 
|---|
| 241 |  K X S U="^"
 | 
|---|
| 242 |  ;
 | 
|---|
| 243 |  O LOG:("R")
 | 
|---|
| 244 |  U LOG
 | 
|---|
| 245 |  ;
 | 
|---|
| 246 |  I TYP=1 D
 | 
|---|
| 247 |  .F  R X Q:X["*EOF*"  I $E(X)'="$" I X["NODE=" D
 | 
|---|
| 248 |  ..I X["NODE=" S NODE=$P(X,"=",2)
 | 
|---|
| 249 |  ..F  R X  I $E(X)'="$" D  Q:X["MEMSIZE="
 | 
|---|
| 250 |  ...; type of cpu
 | 
|---|
| 251 |  ...I X["TYPE=" S $P(CPUARRY(NODE),U)=$P(X,"=",2) Q
 | 
|---|
| 252 |  ...; number of processors
 | 
|---|
| 253 |  ...I X["CPU_CNT=" S $P(CPUARRY(NODE),U,2)=$P(X,"=",2) Q
 | 
|---|
| 254 |  ...; processor speed - no information available
 | 
|---|
| 255 |  ...I X["SPEED=" Q
 | 
|---|
| 256 |  ...; amount of memory in MB
 | 
|---|
| 257 |  ...I X["MEMSIZE=" S $P(CPUARRY(NODE),U,4)=$P(X,"=",2)/128 Q
 | 
|---|
| 258 |  ;
 | 
|---|
| 259 |  I TYP=2 D
 | 
|---|
| 260 |  .F  R X Q:X["*EOF*"  I $E(X)'="$" D
 | 
|---|
| 261 |  ..; version of operating system
 | 
|---|
| 262 |  ..I X["VERSION=" S CPUARRY(1)=$P(X,"=",2) Q
 | 
|---|
| 263 |  ;
 | 
|---|
| 264 |  C LOG
 | 
|---|
| 265 |  ;
 | 
|---|
| 266 |  S X="ERR^ZU",@^%ZOSF("TRAP")
 | 
|---|
| 267 |  Q
 | 
|---|
| 268 |  ;
 | 
|---|
| 269 | EOF ;-- end of file condition for CVMS
 | 
|---|
| 270 |  S X="ERR^ZU",@^%ZOSF("TRAP")
 | 
|---|
| 271 |  C LOG
 | 
|---|
| 272 |  Q
 | 
|---|
| 273 |  ;
 | 
|---|
| 274 | EOF1 ;-- end of file condition for CWINNT
 | 
|---|
| 275 |  S X="ERR^ZU",@^%ZOSF("TRAP")
 | 
|---|
| 276 |  C FILE:"D"
 | 
|---|
| 277 |  Q
 | 
|---|
| 278 |  ;
 | 
|---|
| 279 | CVMSVER() ;-- returns version of Cache for OpenVMS operating system
 | 
|---|
| 280 |  ;
 | 
|---|
| 281 |  N VER
 | 
|---|
| 282 |  ;
 | 
|---|
| 283 |  D CVMS(.VER,2)
 | 
|---|
| 284 |  Q $S($D(VER(1)):VER(1),1:"")
 | 
|---|
| 285 |  ;
 | 
|---|
| 286 | CWNTVER() ;-- returns version of Cache for Windows NT operating system
 | 
|---|
| 287 |  ;
 | 
|---|
| 288 |  N VER
 | 
|---|
| 289 |  ;
 | 
|---|
| 290 |  D CWINNT(.VER,2)
 | 
|---|
| 291 |  Q $S($D(VER(1)):VER(1),1:"")
 | 
|---|