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

KMPDUTL5.m

Go to the documentation of this file.
  1. KMPDUTL5 ;OIFO/KAK - Obtain CPU Configuration;28 Feb 2002 ;2/17/04 10:56
  1. ;;3.0;KMPD;;Jan 22, 2009;Build 42
  1. ;;
  1. CPU(ARRAY) ;-- get cpu configuration information
  1. ;---------------------------------------------------------------------
  1. ; ARRAY = passed back by reference
  1. ; returns array with CPU information:
  1. ; piece : information
  1. ; ARRAY(nodename) = 1 : type of cpu
  1. ; 2 : number of processors
  1. ; 3 : processor speed
  1. ; 4 : amount of memory
  1. ;---------------------------------------------------------------------
  1. ;
  1. N ZV
  1. ;
  1. S ZV=$$MPLTF^KMPDUTL1
  1. ;
  1. S U="^"
  1. I (ZV["DSM") D DSM(.ARRAY)
  1. I (ZV["CVMS") D CVMS(.ARRAY,1)
  1. I (ZV["CWINNT") D CWINNT(.ARRAY,1)
  1. Q
  1. ;
  1. DSM(CPUINFO) ;-- for DSM Platform
  1. ;---------------------------------------------------------------------
  1. ; CPUINFO = array passed back by reference - see CPU(ARRAY) above
  1. ;---------------------------------------------------------------------
  1. ;
  1. N CLSTRMEM,CSID,CSIDARRY,NODE,NODEARRY,X
  1. ;
  1. S CLSTRMEM=$ZC(%GETSYI,"CLUSTER_MEMBER")
  1. ;
  1. ; not in cluster environment
  1. I 'CLSTRMEM D Q
  1. .S NODE=$ZC(%GETSYI,"NODENAME")
  1. .S CPUINFO(NODE)=$ZC(%GETSYI,"HW_NAME")_U_$ZC(%GETSYI,"ACTIVECPU_CNT")
  1. ;
  1. ; in cluster environment
  1. D CLSTR
  1. S X="ERR^ZU",@^%ZOSF("TRAP")
  1. S NODE=""
  1. F S NODE=$O(NODEARRY(NODE)) Q:NODE="" D
  1. .S CSID=NODEARRY(NODE)
  1. .S CPUINFO(NODE)=$ZC(%GETSYI,"HW_NAME",CSID)_U_$ZC(%GETSYI,"ACTIVECPU_CNT",CSID)
  1. Q
  1. CLSTR ; get %GETSYI using wild card to get CSID and NODENAME for all nodes
  1. ;
  1. N X
  1. S X="ERRCLU^KMPDUTL5",@^%ZOSF("TRAP"),$ZE=""
  1. S CSIDARRY($ZC(%GETSYI,"NODE_CSID",-1))=""
  1. F S CSIDARRY($ZC(%GETSYI,"NODE_CSID",""))=""
  1. ERRCLU I $ZE'["NOMORENODE" ZQ
  1. N CSID
  1. S CSID=""
  1. F S CSID=$O(CSIDARRY(CSID)) Q:CSID="" S NODEARRY($ZC(%GETSYI,"NODENAME",CSID))=CSID
  1. Q
  1. ;
  1. CVMS(CPUINFO,TYP) ;-- for Cache for OpenVMS Platform
  1. ;---------------------------------------------------------------------
  1. ; input: TYP = type of system information requested
  1. ; 1 : cpu system information
  1. ; 2 : operating system version information
  1. ;
  1. ; CPUINFO = array passed back by reference
  1. ; : for TYP=1 see CPU(ARRAY) line tag above
  1. ; : for TYP=2 CPUINFO(1)=os version
  1. ;---------------------------------------------------------------------
  1. ;
  1. N DFILE,DIR,DLOG,FILE,FILESPEC,LOG,TYPNM,Y
  1. ;
  1. S TYPNM=$S(TYP=1:"CPU",TYP=2:"VER",1:"")
  1. ;
  1. S DIR=$ZU(12)
  1. ;
  1. ; cleanup com file and log file
  1. S FILE=DIR_"KMPDU"_TYPNM_".COM"
  1. S DFILE="KMPDU"_TYPNM_".COM"
  1. S LOG=DIR_"KMPDU"_TYPNM_".LOG"
  1. S DLOG="KMPDU"_TYPNM_".LOG"
  1. S FILESPEC(DFILE)=""
  1. S FILESPEC(DLOG)=""
  1. S Y=$$DEL^%ZISH(DIR,.FILESPEC)
  1. ;
  1. ; create com file quit on file creation error
  1. Q:$$CREATE(FILE,TYP)<0
  1. ;
  1. ; run com file and create log file
  1. I $ZF(-1,"",LOG,FILE)
  1. C LOG
  1. ;
  1. ; parse log file
  1. D PARSE(LOG,.CPUINFO,TYP)
  1. ;
  1. ; cleanup com file and log file
  1. K FILESPEC
  1. S FILESPEC(DFILE)=""
  1. S FILESPEC(DLOG)=""
  1. S Y=$$DEL^%ZISH(DIR,.FILESPEC)
  1. ;
  1. Q
  1. ;
  1. CWINNT(CPUINFO,TYP) ;-- for Cache for Windows NT Platform
  1. ;---------------------------------------------------------------------
  1. ; input: TYP = type of system information requested
  1. ; 1 : cpu system information
  1. ; 2 : operating system version information
  1. ;
  1. ; CPUINFO = array passed back by reference
  1. ; : for TYP = 1 see CPU(ARRAY) line tag above
  1. ; : for TYP = 2 CPUINFO(1)=os version
  1. ;---------------------------------------------------------------------
  1. ;
  1. N DATA,FILE,I,NODE,OUT,POP,X
  1. S:'$G(DTIME) DTIME=30
  1. ;
  1. S DATA="",OUT=0
  1. ;
  1. ; $zu(110) = computername
  1. S (FILE,NODE)=$ZU(110)
  1. S CPUINFO(NODE)=""
  1. ;
  1. ; cleanup all report files
  1. I $ZF(-1,"DEL "_FILE_"*.TXT")
  1. ;
  1. S FILE=FILE_".TXT"
  1. ;
  1. ; send system reort to file
  1. ; switches: /s => summary report
  1. ; /a => all report
  1. ; /f => send to file named 'computername.TXT'
  1. I $ZF(-1,"WINMSD /s /f")
  1. ;
  1. S X="EOF1",@^%ZOSF("TRAP")
  1. ;
  1. ; read from report file
  1. D OPEN^%ZISH("CWINNT","",FILE,"R")
  1. Q:POP
  1. U IO
  1. ;
  1. ; TYP=1 => cpu information
  1. I TYP=1 D
  1. .F R X:DTIME Q:$$STATUS^%ZISH D Q:OUT
  1. ..; type of cpu
  1. ..I X["Hardware Abstraction Layer:" S $P(DATA,U)=$$STRIP^KMPDUTL4($P(X,"Hardware Abstraction Layer:",2)) Q
  1. ..; number of processors
  1. ..I X["NUMBER_OF_PROCESSORS=" S $P(DATA,U,2)=$P(X,"NUMBER_OF_PROCESSORS=",2) Q
  1. ..; processor speed - no information available
  1. ..; amount of memory
  1. ..I X["Physical Memory (K)" D Q
  1. ...R X:DTIME I $$STATUS^%ZISH S OUT=1 Q
  1. ...I X["Total:" S $P(DATA,U,4)=$$STRIP^KMPDUTL4($$COMMA^KMPDUTL4($P(X,"Total:",2)))\1024 Q
  1. ..S CPUINFO(NODE)=DATA
  1. ;
  1. ; TYP=2 => os version
  1. I TYP=2 D
  1. .F R X:DTIME Q:$$STATUS^%ZISH D Q:OUT
  1. ..; version of operating system
  1. ..I X["OS Version Report" D
  1. ...F I=1:1:2 R X:DTIME I $$STATUS^%ZISH S OUT=1 Q
  1. ...S DATA=X
  1. ...S DATA=DATA_" "_X
  1. ...S CPUINFO(1)=DATA
  1. ;
  1. D CLOSE^%ZISH("CWINNT")
  1. ;
  1. Q
  1. ;
  1. CREATE(FILE,TYP) ;-- function to create new com file
  1. ;---------------------------------------------------------------------
  1. ; input: FILE = name of file to create
  1. ; TYP = type of system information requested
  1. ; 1 : cpu system information
  1. ; 2 : operating system version information
  1. ;
  1. ; returns: 1 successful file creation
  1. ; -1 failure of file creation
  1. ;---------------------------------------------------------------------
  1. ;
  1. N DIR,TYPNM
  1. ;
  1. S TYPNM=$S(TYP=1:"CPU",TYP=2:"VER",1:"")
  1. ;
  1. O FILE:("NWC"):0 Q:'$T -1
  1. ;
  1. U FILE
  1. W "$! KMPDU"_TYPNM_".COM - Obtain System Configuration Information"
  1. W "$!--------------------------------------------------------"
  1. W "$! OIFO - CAPACITY PLANNING/KAK"
  1. W "$! "_$P($T(+2)_";;",2,999)
  1. W "$!--------------------------------------------------------"
  1. W "$!"
  1. ;
  1. I TYP=2 D G TAGXIT
  1. .W "$ write sys$output ""VERSION="" , f$getsyi(""VERSION"")"
  1. ;
  1. W "$ if f$getsyi(""CLUSTER_MEMBER"") .eqs. ""FALSE"" then goto NOT_CLUSTER"
  1. W "$ CONTEXT = """""
  1. W "$START:"
  1. W "$ ID = f$csid(CONTEXT)"
  1. W "$ if ID .eqs. """" then goto EXIT"
  1. W "$ write sys$output ""NODE="" , f$getsyi(""NODENAME"",,ID)"
  1. W "$ write sys$output ""TYPE="" , f$getsyi(""HW_NAME"",,ID)"
  1. W "$ write sys$output ""CPU_CNT="" , f$getsyi(""ACTIVECPU_CNT"",,ID)"
  1. W "$ write sys$output ""SPEED=n/a"""
  1. W "$ write sys$output ""MEMSIZE="" , f$getsyi(""MEMSIZE"",,ID)"
  1. W "$ goto START"
  1. W "$NOT_CLUSTER:"
  1. W "$ write sys$output ""NODE="" , f$getsyi(""NODENAME"")"
  1. W "$ write sys$output ""TYPE="" , f$getsyi(""HW_NAME"")"
  1. W "$ write sys$output ""CPU_CNT="" , f$getsyi(""ACTIVECPU_CNT"")"
  1. W "$ write sys$output ""SPEED=n/a"""
  1. W "$ write sys$output ""MEMSIZE="" , f$getsyi(""MEMSIZE"")"
  1. TAGXIT ;
  1. W "$EXIT:"
  1. W "$ write sys$output ""*EOF*"""
  1. W "$ exit"
  1. W "$!"
  1. ;
  1. C FILE
  1. Q 1
  1. ;
  1. PARSE(LOG,CPUARRY,TYP) ;-- parse log file data
  1. ;---------------------------------------------------------------------
  1. ; input: LOG = name of log file to parse
  1. ; TYP = type of system information requested
  1. ; 1 : cpu system information
  1. ; 2 : operating system version information
  1. ;
  1. ; CPUARRY = passed back by reference
  1. ; : for TYP=1 see CPU(ARRAY) line tag above
  1. ; : for TYP=2 CPUINFO(1)=os version
  1. ;---------------------------------------------------------------------
  1. ;
  1. N NODE,X
  1. ;
  1. S X="EOF",@^%ZOSF("TRAP"),NODE=""
  1. K X S U="^"
  1. ;
  1. D OPEN^%ZISH("LOG",DIR,DLOG,"R")
  1. Q:POP
  1. U IO
  1. ;
  1. I TYP=1 D
  1. .F R X:DTIME Q:$$STATUS^%ZISH I $E(X)'="$" I X["NODE=" D
  1. ..I X["NODE=" S NODE=$P(X,"=",2)
  1. ..F R X:DTIME I $E(X)'="$" D Q:X["MEMSIZE="
  1. ...; type of cpu
  1. ...I X["TYPE=" S $P(CPUARRY(NODE),U)=$P(X,"=",2) Q
  1. ...; number of processors
  1. ...I X["CPU_CNT=" S $P(CPUARRY(NODE),U,2)=$P(X,"=",2) Q
  1. ...; processor speed - no information available
  1. ...I X["SPEED=" Q
  1. ...; amount of memory in MB
  1. ...I X["MEMSIZE=" S $P(CPUARRY(NODE),U,4)=$P(X,"=",2)/128 Q
  1. ;
  1. I TYP=2 D
  1. .F R X:DTIME Q:$$STATUS^%ZISH I $E(X)'="$" D
  1. ..; version of operating system
  1. ..I X["VERSION=" S CPUARRY(1)=$P(X,"=",2) Q
  1. ;
  1. D CLOSE^%ZISH("LOG")
  1. ;
  1. S X="ERR^ZU",@^%ZOSF("TRAP")
  1. Q
  1. ;
  1. EOF ;-- end of file condition for CVMS
  1. S X="ERR^ZU",@^%ZOSF("TRAP")
  1. D CLOSE^%ZISH("LOG")
  1. Q
  1. ;
  1. EOF1 ;-- end of file condition for CWINNT
  1. S X="ERR^ZU",@^%ZOSF("TRAP")
  1. D CLOSE^%ZISH("CWINNT")
  1. Q
  1. ;
  1. CVMSVER() ;-- returns version of Cache for OpenVMS operating system
  1. ;
  1. N VER
  1. ;
  1. D CVMS(.VER,2)
  1. Q $S($D(VER(1)):VER(1),1:"")
  1. ;
  1. CWNTVER() ;-- returns version of Cache for Windows NT operating system
  1. ;
  1. N VER
  1. ;
  1. D CWINNT(.VER,2)
  1. Q $S($D(VER(1)):VER(1),1:"")