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

ZOSVKRO.m

Go to the documentation of this file.
  1. %ZOSVKR ;SF/KAK/RAK/JML - ZOSVKR - Collect RUM Statistics for Cache on VMS/Linux/Windows ;10/1/2020
  1. ;;8.0;KERNEL;**90,94,107,122,143,186,550,568,670,740**;3/1/2018;Build 6
  1. ;
  1. RO(KMPVOPT) ; Record option resource usage in ^KMPTMP("KMPR"
  1. ;
  1. N KMPVTYP S KMPVTYP=0 ; option
  1. G EN
  1. ;
  1. RP(KMPEVENT) ; Record protocol resource usage in ^KMPTMP("KMPR"
  1. ; Variable PRTCL = option_name^protocol_name
  1. ;
  1. ; quit if rum is turned off
  1. Q:'$G(^%ZTSCH("LOGRSRC"))
  1. ;
  1. N KMPVOPT,KMPVPROT
  1. S KMPVOPT=$P(KMPEVENT,"^"),KMPVPROT=$P(KMPEVENT,"^",2)
  1. Q:KMPVPROT=""
  1. ;
  1. N KMPVTYP S KMPVTYP=1 ; protocol
  1. G EN
  1. ;
  1. RU(KMPEVENT,KMPVTYP,KMPVEXT) ;
  1. ;----------------------------------------------------------------------
  1. ; Set metrics into ^KMPTMP("KMPV","VBEM","DLY"
  1. ; Set negative number errors into ^KMPTMP("KMPV","VBEM","ERROR"
  1. ;
  1. ;Inputs: - MIRRORS RUM COLLECTOR
  1. ; KMPVOPT... Option name (may be option, protocol, rpc, etc.)
  1. ; KMPVTYP... type of option:
  1. ; 0 - Option
  1. ; 1 - Protocol
  1. ; 2 - RPC (Remote Procedure Call)
  1. ; 3 - HL7
  1. ; KMPVEXT... Possible: Extended option type - to identify requests from non-legacy sources
  1. ;
  1. ; ^KMPTMP("KMPV","VBEM","DLY"... Storage of data for current day
  1. ;
  1. ;NOTE: KMPV("NOKILL" is not "NEWED" or "KILLED" as it must exist between calls
  1. ; KMPV("NOKILL",node) contains stats that must exist between routine calls
  1. ; KMPV("NOKILL","KMPVIMP") persists M implementation to decrease overhead
  1. ; KMPV("NOKILL","KMPVVER") persists Version number to decrease overhead
  1. ;----------------------------------------------------------------------
  1. ;
  1. Q:$G(KMPEVENT)=""
  1. ;
  1. N KMPVOPT,KMPVPROT
  1. S KMPVOPT=$P(KMPEVENT,"^"),KMPVPROT=$P(KMPEVENT,"^",2)
  1. ;
  1. S KMPVTYP=+$G(KMPVTYP),KMPVEXT=+$G(KMPVEXT)
  1. ;
  1. EN ;
  1. ;
  1. N KMPVCSTAT,KMPVDIFF,KMPVH,KMPVHOUR,KMPVHRSEC,KMPVHTIME,KMPVI,KMPVMET
  1. N KMPVMIN,KMPVNODE,KMPVPOPT,KMPVPSTAT,KMPVSINT,KMPVSLOT,Y
  1. ;
  1. S KMPVSINT=$$GETVAL^KMPVCCFG("VBEM","COLLECTION INTERVAL",8969)
  1. ;
  1. D GETENV^%ZOSV S KMPVNODE=$P(Y,U,3)_":"_$P($P(Y,U,4),":",2) ; IA 10097
  1. I KMPVTYP I KMPVOPT="" S:$P($G(KMPV("NOKILL",KMPVNODE,$J)),U,10)["$LOGIN$" KMPVOPT="$LOGIN$"
  1. I KMPVOPT="" Q:'+$G(^XUTL("XQ",$J,"T")) S KMPVOPT=$P($G(^XUTL("XQ",$J,^XUTL("XQ",$J,"T"))),U,2) Q:KMPVOPT=""
  1. ;
  1. ; KMPVCSTAT = current stats for this $job: cpu^lines^commands^GloRefs^ElapsedTime
  1. S KMPVCSTAT=$$STATS()
  1. Q:KMPVCSTAT=""
  1. S $P(KMPVCSTAT,"^",5)=$ZTIMESTAMP
  1. ;
  1. ; KMPVPSTAT = previous stats for this $job
  1. S KMPVPSTAT=$G(KMPV("NOKILL",KMPVNODE,$J,"STATS"))
  1. S KMPVPOPT=$G(KMPV("NOKILL",KMPVNODE,$J,"OPT"))
  1. ;
  1. ; if previous option was tagged as being run from taskman(!)
  1. ; then mark current OPTion as running from taskman(!)
  1. I $P(KMPVPOPT,"***")=("!"_KMPVOPT) S KMPVOPT="!"_KMPVOPT
  1. ;
  1. ; concatenate to KMPVCSTAT: ...^OPTion^option_type
  1. S KMPV("NOKILL",KMPVNODE,$J,"STATS")=KMPVCSTAT
  1. S KMPV("NOKILL",KMPVNODE,$J,"OPT")=$S(KMPVTYP=2:"`"_KMPVOPT,KMPVTYP=3:"&"_KMPVOPT,1:KMPVOPT)_"***"_$G(KMPVPROT)
  1. ;
  1. ; if option and login or taskman
  1. I 'KMPVTYP I KMPVOPT="$LOGIN$"!(KMPVOPT="$STRT ZTMS$") Q
  1. ;
  1. I KMPVOPT="$LOGOUT$"!(KMPVOPT="$STOP ZTMS$")!(KMPVOPT="XUPROGMODE") K KMPV("NOKILL",KMPVNODE,$J)
  1. ;
  1. Q:KMPVPSTAT=""
  1. ; difference = current stats minus previous stats
  1. ; KMPVDIFF = KMPVCSTAT - KMPVPSTAT
  1. ; = cpu^lines^commands^GloRefs^ElapsedTime
  1. F KMPVI=1:1:4 S $P(KMPVDIFF,"^",KMPVI)=$P(KMPVCSTAT,U,KMPVI)-$P(KMPVPSTAT,"^",KMPVI)
  1. S $P(KMPVDIFF,U,5)=$$ETIME($P(KMPVCSTAT,U,5),$P(KMPVPSTAT,U,5))
  1. ;
  1. S KMPVOPT=KMPVPOPT ; Setting data from previous call
  1. ;
  1. S KMPVH=$H
  1. S KMPVHRSEC=$ZT($P(KMPVH,",",2))
  1. S KMPVHOUR=$P(KMPVHRSEC,":")
  1. S KMPVMIN=$P(KMPVHRSEC,":",2)
  1. S KMPVSLOT=+$P(KMPVMIN/KMPVSINT,".")
  1. S KMPVHTIME=(KMPVHOUR*3600)+(KMPVSLOT*KMPVSINT*60) ; Same as KMPVVTCM using KMPVHANG.
  1. ;
  1. S KMPVMET=$G(^KMPTMP("KMPV","VBEM","DLY",+KMPVH,KMPVNODE,KMPVHTIME,KMPVPOPT,$J))
  1. S $P(KMPVMET,U)=$P(KMPVMET,U)+1
  1. F KMPVI=2:1:6 S $P(KMPVMET,U,KMPVI)=$P(KMPVMET,U,KMPVI)+$P(KMPVDIFF,U,KMPVI-1)
  1. F KMPVI=2:1:6 I $P(KMPVMET,U,KMPVI)<0 D Q
  1. .S ^KMPTMP("KMPV","VBEM","ERROR",+KMPVH,KMPVNODE,KMPVHTIME,KMPVPOPT,$J)=KMPVMET
  1. S ^KMPTMP("KMPV","VBEM","DLY",+KMPVH,KMPVNODE,KMPVHTIME,KMPVPOPT,$J)=KMPVMET
  1. ;
  1. Q
  1. ;
  1. STATS() ; return current stats for this $job
  1. N KMPVCPU,KMPIMP,KMPVOS,KMPVPROC,KMPVRET,KMPVTCPU,KMPVV,KMPVVER,KMPVZH
  1. ;
  1. S KMPVRET=""
  1. ; implementation name and version
  1. I $G(KMPV("NOKILL","KMPVIMP"))="" D
  1. .S KMPIMP=$$VERSION^%ZOSV(1) ; IA 10097
  1. .S KMPIMP=$TR(KMPIMP,"cahe","CAHE")
  1. .S KMPV("NOKILL","KMPVIMP")=KMPIMP
  1. .S KMPV("NOKILL","KMPVVER")=$P($$VERSION^%ZOSV(0),".",1,2) ; IA 10097
  1. ; quit if not CACHE or IRIS
  1. Q:(KMPV("NOKILL","KMPVIMP")'["CACHE")&(KMPV("NOKILL","KMPVIMP")'["IRIS") ""
  1. ; if version is greater than 2007
  1. I KMPV("NOKILL","KMPVVER")>2007 D
  1. .; RETURN = cpu^lines^commands^GloRefs
  1. .S KMPVPROC=##class(%SYS.ProcessQuery).%OpenId($J)
  1. .Q:KMPVPROC=""
  1. .; cpu time
  1. .S KMPVCPU=KMPVPROC.GetCPUTime()
  1. .S KMPVTCPU=$P(KMPVCPU,",")+$P(KMPVCPU,",",2)
  1. .S $P(KMPVRET,U)=KMPVTCPU
  1. .; m commands - lines
  1. .S $P(KMPVRET,U,2)=KMPVPROC.LinesExecuted
  1. .; m commands - commands
  1. .S $P(KMPVRET,U,3)=KMPVPROC.CommandsExecuted
  1. .; global references
  1. .S $P(KMPVRET,U,4)=KMPVPROC.GlobalReferences
  1. .; current time UTC
  1. .S $P(KMPVRET,U,5)=$ZTIMESTAMP
  1. ;
  1. ; if version is 4 or greater and not linux and not unknown
  1. E D
  1. .; operating system
  1. .S KMPVOS=$$OS^%ZOSV ; IA 10097
  1. .I (+KMPV("NOKILL","KMPVVER"))'<4&(KMPVOS'["UNIX")&(KMPVOS'["UNK") D
  1. ..S KMPVV=$V(-1,$J),KMPVZH=$ZU(171)
  1. ..; cpu time
  1. ..S $P(KMPVRET,U)=$P(KMPVZH,",")
  1. ..; m commands
  1. ..S $P(KMPVRET,U,2)=$P($P(KMPVV,U,7),",")
  1. ..; global references
  1. ..S $P(KMPVRET,U,4)=$P($P(KMPVV,U,7),",",2)
  1. ..; current time UTC
  1. ..S $P(KMPVRET,U,5)=$ZTIMESTAMP
  1. ;
  1. Q KMPVRET
  1. ;
  1. ETIME(KMPVCUR,KMPVPREV) ;Calculate elapsed time for event
  1. N KMPVDAYS,KMPVETIME
  1. ; IF WITHIN SAME DAY
  1. S KMPVETIME=""
  1. I +KMPVCUR=+KMPVPREV D
  1. .S KMPVETIME=$P(KMPVCUR,",",2)-$P(KMPVPREV,",",2)
  1. ; IF OVER CHANGE OF DAY
  1. E D
  1. .S KMPVETIME=$P(KMPVCUR,",",2)+(86400-$P(KMPVPREV,",",2))
  1. .; IN CASE RUNS OVER 2 DAY BOUNDARIES
  1. .S KMPVDAYS=(+KMPVCUR)-(+KMPVPREV)
  1. .I KMPVDAYS>1 S KMPVETIME=KMPVETIME+((KMPVDAYS-1)*86400)
  1. Q KMPVETIME