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

KMPOPS.m

Go to the documentation of this file.
KMPOPS ;SP/JML - Collect VistA Ops Data;7/1/2025
 ;;4.0;CAPACITY MANAGEMENT;**5**;3/1/2018;Build 9
 ;
 ; Reference to $$HTFM^XLFDT in ICR #10103
 ; Reference to $$HDIFF^XLFDT in ICR #10103
 ; Reference to $$TM^%ZTLOAD in ICR #10063
 ; References to routine ^XMVSM in ICR #7549
 ; References to routine ^XUVSM in ICR #7550
 ; References to routine ^HLVSM in ICR #7551
 ;
 ;
GETDATA(KMPFROM,KMPTO)  ; Main entry point to collect ALL ops data
 N KMPOPS
 S KMPFROM=$G(KMPFROM),KMPTO=$G(KMPTO)
 S KMPOPS=##class(%DynamicObject).%New()
 S KMPOPS.HL7=$$GETHL7("ALL")
 S KMPOPS.HLO=$$GETHLO("ALL")
 S KMPOPS.TASK=$$GETTASK()
 S KMPOPS.MAIL=$$GETMAIL()
 S KMPOPS.PLIST=$$GETPLIST(KMPFROM,KMPTO)
 S KMPOPS.Timestamp=$P($$TSTAMP^KMPUTLW($H,"HOROLOG"),"^")
 Q KMPOPS
 ;
GETWEBP(KMPREQ,KMPRET)   ; called from KMP.VistaSystemMonitor REST class
 N KMPHL7,KMPHLO,KMPTASK,KMPMAIL,KMPSECT
 S U="^"
 S KMPSECT=KMPREQ.SECTION
 S KMPFROM=KMPREQ.FROMDATE
 S KMPTO=KMPREQ.TODATE
 D SITE^KMPUTLW(KMPRET)
 S KMPRET.Timestamp=$P($$TSTAMP^KMPUTLW($H,"HOROLOG"),"^")
 I KMPSECT="ALL" D  Q
 .S KMPRET.HL7=$$GETHL7("ALL")
 .S KMPRET.HLO=$$GETHLO("ALL")
 .S KMPRET.TASK=$$GETTASK()
 .S KMPRET.MAIL=$$GETMAIL()
 .S KMPRET.PLIST=$$GETPLIST(KMPFROM,KMPTO)
 I KMPSECT["HL7LIST" S KMPRET.HL7=$$GETHL7("LIST")
 I KMPSECT["HLOLIST" S KMPRET.HLO=$$GETHLO("LIST")
 I KMPSECT["CORE" D
 .S KMPRET.HL7=$$GETHL7("CORE")
 .S KMPRET.HLO=$$GETHLO("CORE")
 .S KMPRET.TASK=$$GETTASK()
 I KMPSECT["MAIL" S KMPRET.MAIL=$$GETMAIL()
 I KMPSECT["PLIST" S KMPRET.PLIST=$$GETPLIST(KMPFROM,KMPTO)
 Q
 ;
GETHL7(KMPFLAG) ; Get HL7 ops data
 N KMPTNUM,KMPFDAT,KMPICNT,KMPINF,KMPOCNT,KMPTS,KMPSFLAG,KMPFDAT,KMPERR,KMPTDAT,KMPOUTARR,KMPOUTF,NOW
 N KMPJHL7,KMPLARR,KMPHORO,KMPCTIME,KMPFCFG
 I $G(KMPFLAG)="" S KMPFLAG="ALL"
 S U="^"
 S KMPJHL7=##class(%DynamicObject).%New()
 S KMPCTIME=$H
 S KMPICNT=$$GETFILERS^HLVSM("IN","KMPINF")
 S KMPOCNT=$$GETFILERS^HLVSM("OUT","KMPOUTF")
 S KMPFCFG=$$FILERCFG^HLVSM()
 I "ALL^CORE"[KMPFLAG D
 .S KMPJHL7.InCount=KMPICNT
 .S KMPJHL7.OutCount=KMPOCNT
 .S KMPJHL7.InConfig=$P(KMPFCFG,"^")
 .S KMPJHL7.OutConfig=$P(KMPFCFG,"^",2)
 .S KMPJHL7.LinkManagerStatus=$S($$LMSTAT^HLVSM()=1:"Running",1:"**NOT RUNNING**")
 .S DUZ=.5 D DUZ^XUP(DUZ)
 .S KMPJHL7.LinkManagerCurrent=$ZSTRIP($$SLM^HLVSM,"*C")
 ;
 I "ALL^LIST"[KMPFLAG D
 .S KMPLARR=##class(%DynamicArray).%New() ; INDIVIDUAL IN FILERS
 .S KMPTNUM=""
 .F  S KMPTNUM=$O(KMPINF(KMPTNUM)) Q:KMPTNUM=""  D
 ..S KMPTOBJ=##class(%DynamicObject).%New()
 ..S KMPTOBJ.Direction="In"
 ..S KMPTOBJ.JobNumber=KMPTNUM
 ..S KMPFDAT=KMPINF(KMPTNUM)
 ..S KMPHORO=$P(KMPFDAT,"^",2)
 ..S KMPTOBJ.Behind=$$TIMEDIFF(KMPCTIME,KMPHORO)
 ..S KMPTOBJ.Timestamp=$ZDATETIME(KMPHORO,3)  ; LAST H
 ..S KMPTOBJ.StopFlag=$P(KMPFDAT,"^",3)
 ..S KMPTOBJ.Error=$P(KMPFDAT,"^",5)
 ..D KMPLARR.%Push(KMPTOBJ)
 .S KMPTNUM=""
 .F  S KMPTNUM=$O(KMPOUTF(KMPTNUM)) Q:KMPTNUM=""  D
 ..S KMPTOBJ=##class(%DynamicObject).%New()
 ..S KMPTOBJ.Direction="Out"
 ..S KMPTOBJ.JobNumber=KMPTNUM
 ..S KMPFDAT=KMPOUTF(KMPTNUM)
 ..S KMPHORO=$P(KMPFDAT,"^",2)
 ..S KMPTOBJ.Behind=$$TIMEDIFF(KMPCTIME,KMPHORO)
 ..S KMPTOBJ.Timestamp=$ZDATETIME($P(KMPFDAT,"^",2),3)  ; LAST H
 ..S KMPTOBJ.StopFlag=$P(KMPFDAT,"^",3)
 ..S KMPTOBJ.Error=$P(KMPFDAT,"^",5)
 ..S KMPTDAT=KMPTNUM_" - "_KMPTOBJ.Timestamp_" - "_KMPTOBJ.StopFlag_" - "_KMPTOBJ.Errors
 ..D KMPLARR.%Push(KMPTOBJ)
 .S KMPJHL7.FilerList=KMPLARR
 Q KMPJHL7
 ;
GETHLO(KMPFLAG) ; HLO OPS DATA
 N KMPCARR,KMPA,KMPB,KMPF777,KMPF778,TODAY,KMPOQARR,KMPSQARR,KMPIQARR
 N KMPJHLO,KMPMPOQ
 I $G(KMPFLAG)="" S KMPFLAG="ALL"
 S KMPJHLO=##class(%DynamicObject).%New()
 I "ALL^CORE"[KMPFLAG D
 .S KMPJHLO.SystemStatus=$S($$CHKSTOP^HLVSM:"Stopped",1:"Running")
 .S KMPJHLO.ProcessManager=$S($$PROCMAN^HLVSM:"Running",1:"Stopped")
 .S KMPJHLO.StandardListener=$S($$LSTAT^HLVSM():"Running",1:"Stopped")
 .S KMPJHLO.DownLinks=$$DLINKS^HLVSM()
 .S KMPJHLO.ClientLinkProcesses=$$CLPROC^HLVSM("OUTGOING CLIENT LINK")
 .S KMPJHLO.InFilerProcesses=$$CLPROC^HLVSM("INCOMING QUEUES")
 .S KMPJHLO.MessagesPendingOutQueues=$$MPOQ^HLVSM(.KMPOQARR)
 .S KMPJHLO.MessagesPendingSequenceQueues=$$MPSQ^HLVSM(.KMPSQARR)
 .S KMPJHLO.MessagesPendingApplications=$$MPAQ^HLVSM(.KMPIQARR)
 .S KMPJHLO.StoppedIncomingQueues=$$STQUES^HLVSM("IN")
 .S KMPJHLO.StoppedOutgoingQueues=$$STQUES^HLVSM("OUT")
 .S KMPF777=$$FILE777^HLVSM()
 .S KMPJHLO.File777RecordCount=$P(KMPF777,"^",1)
 .S KMPJHLO.File777RecordDate=$P($$TSTAMP^KMPUTLW($P(KMPF777,"^",2),"FILEMAN",1),"^")
 .S KMPF778=$$FILE778^HLVSM()
 .S KMPJHLO.File778RecordCount=$P(KMPF778,"^",1)
 .S KMPJHLO.File778RecordDate=$P($$TSTAMP^KMPUTLW($P(KMPF778,"^",2),"FILEMAN",1),"^")
 .S TODAY=$$DT^XLFDT
 .S KMPJHLO.MessagesSentToday=$$ADD^HLVSM("OUT")
 .S KMPJHLO.MessagesReceivedToday=$$ADD^HLVSM("IN")
 .S KMPJHLO.MessageErrorsToday=$$ADD^HLVSM("EOUT")+$$ADD^HLVSM("EIN")
 I "ALL^LIST"[KMPFLAG D
 .S KMPJHLO.PendingOutMessageCounts=$$MESSLIST(.KMPOQARR)
 .S KMPJHLO.PendingSeqMessageCounts=$$MESSLIST(.KMPSQARR)
 .S KMPJHLO.PendingInMessageCounts=$$MESSLIST(.KMPIQARR)
 Q KMPJHLO
 ;
MESSLIST(KMPQARR) ;
 N KMPTARR,KMPI,KMPLINK,KMPQUE,KMPCOUNT,KMPCNT
 N KMPQOBJ,KMPTOBJ
 S KMPQOBJ=##class(%DynamicArray).%New()
 S KMPLINK=""
 F  S KMPLINK=$O(KMPQARR("OUT",KMPLINK)) Q:KMPLINK=""  D
 .S KMPQUE=""
 .F  S KMPQUE=$O(KMPQARR("OUT",KMPLINK,KMPQUE)) Q:KMPQUE=""  D
 ..S KMPCOUNT=KMPQARR("OUT",KMPLINK,KMPQUE)
 ..S KMPTARR(KMPCOUNT,KMPLINK,KMPQUE)=""
 S KMPCNT=0,KMPI=""
 F  S KMPI=$O(KMPTARR(KMPI),-1)  Q:(KMPI="")!(KMPCNT>4)  D
 .S KMPLINK=""
 .S KMPLINK=$O(KMPTARR(KMPI,KMPLINK))  Q:(KMPLINK="")!(KMPCNT>4)  D
 ..S KMPQUE=""
 ..F  S KMPQUE=$O(KMPTARR(KMPI,KMPLINK,KMPQUE)) Q:(KMPQUE="")!(KMPCNT>4)  D
 ...S KMPTOBJ=##class(%DynamicObject).%New()
 ...S KMPTOBJ.Link=KMPLINK,KMPTOBJ.Queue=KMPQUE
 ...S KMPTOBJ.Count=KMPI
 ...D KMPQOBJ.%Push(KMPTOBJ)
 ...S KMPCNT=KMPCNT+1
 Q KMPQOBJ
 ;
GETTASK() ; TASKMAN OPS DATA
 N KMPCHK,KMPFTASK,KMPFUT,KMPJTSK,KMPRSTAT,KMPSTARR,KMPI,KMPTOBJ,KMPSCH,KMPIO,KMPIOARR,KMPSMARR,KMPSLIST,KMPSM,KMPCHKLST
 S KMPJTSK=##class(%DynamicObject).%New()
 S KMPJTSK.TaskmanStatus=$S($$TM^%ZTLOAD=1:"Running",1:"Stopped")
 ; Run Status
 S KMPRSTAT=$$RUNSTATUS^XUVSM()
 S KMPJTSK.RunStatus=$P(KMPRSTAT,"^")
 S KMPJTSK.RunLate=$P(KMPRSTAT,"^",2)
 S KMPJTSK.CurrentTimestamp=$P($$TSTAMP^KMPUTLW($P(KMPRSTAT,"^",3),"HOROLOG",1),"^")
 S KMPJTSK.RunNodeTimestamp=$P($$TSTAMP^KMPUTLW($P(KMPRSTAT,"^",4),"HOROLOG",1),"^")
 ; Status List
 D STATLIST^XUVSM(.KMPSLIST)
 S KMPSTARR=##class(%DynamicArray).%New()
 S KMPI=""
 F  S KMPI=$O(KMPSLIST("LIST",KMPI)) Q:KMPI=""  D
 .S KMPTOBJ=##class(%DynamicObject).%New()
 .S KMPTOBJ.Node=KMPSLIST("LIST",KMPI,"NODE")
 .S KMPTOBJ.Weight=KMPSLIST("LIST",KMPI,"WEIGHT")
 .S KMPTOBJ.Status=KMPSLIST("LIST",KMPI,"STATUS")
 .S KMPTOBJ.Time=KMPSLIST("LIST",KMPI,"TIME")
 .S KMPTOBJ.JobNumber=KMPSLIST("LIST",KMPI,"JOBNUM")
 .S KMPTOBJ.Execute=KMPSLIST("LIST",KMPI,"EXECUTE")
 .D KMPSTARR.%Push(KMPTOBJ)
 S KMPJTSK.StatusDetails=KMPSTARR
 S KMPJTSK.StatusMessage=KMPSLIST("STATMESS")
 ; Schedule List
 S KMPSCH=$$SCHLIST^XUVSM()
 S KMPJTSK.TasksScheduled=$P(KMPSCH,"^")
 S KMPJTSK.TasksLate=$P(KMPSCH,"^",2)
 S KMPJTSK.FirstLateTaskSeconds=$P(KMPSCH,"^",3)
 ; IO List
 D IOLIST^XUVSM(.KMPIO)
 S KMPJTSK.LastScan=KMPIO("LASTSCAN")
 S KMPJTSK.LastDev=KMPIO("LASTDEV")
 S KMPJTSK.TotalTasksWaitingIo=KMPIO("TTSKWAIT")
 S KMPIOARR=##class(%DynamicArray).%New()
 S KMPI=""
 F  S KMPI=$O(KMPIO("LIST",KMPI)) Q:KMPI=""  D
 .D KMPIOARR.%Push(KMPIO("LIST",KMPI,"ONE")_"^"_KMPIO("LIST",KMPI,"TWO")_"^"_"^"_KMPIO("LIST",KMPI,"THREE"))
 S KMPJTSK.DeviceDetail=KMPIOARR
 ; Jobs waiting and tasks running
 S KMPJTSK.JobsWaiting=$$JOBSWAIT^XUVSM()
 S KMPJTSK.TasksRunning=$$TASKSRUN^XUVSM()
 ; Submanager Status
 D SMLIST^XUVSM(.KMPSM)
 S KMPSMARR=##class(%DynamicArray).%New()
 S KMPI=""
 F  S KMPI=$O(KMPSM("LIST",KMPI)) Q:KMPI=""  D
 .S KMPTOBJ=##class(%DynamicObject).%New()
 .S KMPTOBJ.Node=KMPSM("LIST",KMPI,"NODE")
 .S KMPTOBJ.Count=KMPSM("LIST",KMPI,"COUNT")
 .S KMPTOBJ.Status=KMPSM("LIST",KMPI,"STATUS")
 .S KMPTOBJ.NoStart=KMPSM("LIST",KMPI,"NOSTART")
 .D KMPSMARR.%Push(KMPTOBJ)
 S KMPJTSK.SubManagerStatus=KMPSMARR
 S KMPJTSK.SubWait=KMPSM("SUBWAIT")
 ; check for future tasks
 S KMPCHKLST=$$GETVAL^KMPVCCFG("VMCM","FUTURE TASK CHECK",8969)
 S KMPCHK="",KMPI=0
 I $G(KMPCHKLST)'="" F KMPI=1:1:$L(KMPCHKLST,":") S KMPCHK($P(KMPCHKLST,":",KMPI))="Not Scheduled"
 S KMPCHK=KMPI
 D FUT^XUVSM(.KMPCHK)
 S KMPFUT=##class(%DynamicArray).%New()
 S KMPFTASK=""
 F  S KMPFTASK=$O(KMPCHK(KMPFTASK)) Q:KMPFTASK=""  D
 .S KMPTOBJ=##class(%DynamicObject).%New()
 .S KMPTOBJ.Task=KMPFTASK
 .S KMPTOBJ.TaskDate=$G(KMPCHK(KMPFTASK))
 .D KMPFUT.%Push(KMPTOBJ)
 S KMPJTSK.FutureTasks=KMPFUT
 Q KMPJTSK
 ;
GETMAIL() ; MAILMAN MESSAGE QUEUES
 N KMPJXM,KMPI,KMPXM,KMPDOM,KMPDARR,KMPTOBJ
 S KMPJXM=##class(%DynamicObject).%New()
 D XMLIST^XMVSM(.KMPXM)
 S KMPJXM.TotalDomains=KMPXM("TOTDOMS")
 S KMPJXM.TotalMessagesQueued=KMPXM("TMQUED")
 S KMPDARR=##class(%DynamicArray).%New()
 S KMPDOM=""
 F  S KMPDOM=$O(KMPXM("DOMAINS",KMPDOM)) Q:KMPDOM=""  D
 .S KMPTOBJ=##class(%DynamicObject).%New()
 .S KMPTOBJ.Domain=KMPDOM
 .S KMPTOBJ.MessageData=KMPXM("DOMAINS",KMPDOM)
 .D KMPDARR.%Push(KMPTOBJ)
 S KMPJXM.Queues=KMPDARR
 Q KMPJXM
 ;
GETPLIST(KMPSDAT,KMPEDAT) ;
 N KMPJPAT,KMPPARR,KMPDT,KMPPAT,X,KMPIDATE,KMPIN,%H,%T,%Y,KMPTOBJ
 S KMPSDAT=$G(KMPSDAT),KMPEDAT=$G(KMPEDAT)
 I KMPSDAT'="",KMPSDAT'?4N1.2"-"2N1"-"1.2N Q "Date Format Error: Should be YYYY-MM-DD"
 I KMPEDAT'="",KMPEDAT'?4N1.2"-"2N1"-"1.2N Q "Date Format Error: Should by YYYY-MM-DD"
 ;
 I KMPSDAT="" S KMPSTART=$H-14
 I KMPSDAT S KMPSTART=$ZDATEH(KMPSDAT,3)
 S %H=KMPSTART D YMD^%DTC S KMPSDAT=X
 I KMPEDAT="" S KMPEND=$H
 I KMPEDAT S KMPEND=$ZDATEH(KMPEDAT,3)
 S %H=KMPEND D YMD^%DTC S KMPEDAT=X+.999999
 ;
 D INSTALL^XUVSM(.KMPIN,KMPSDAT,KMPEDAT)
 S KMPJPAT=##class(%DynamicObject).%New()
 S KMPPARR=##class(%DynamicArray).%New()
 S KMPDT=""
 F  S KMPDT=$O(KMPIN(KMPDT),-1) Q:KMPDT=""  D
 .S KMPPAT=""
 .F  S KMPPAT=$O(KMPIN(KMPDT,KMPPAT)) Q:KMPPAT=""  D
 ..S X=KMPDT D H^%DTC
 ..S KMPIDATE=$ZDATETIME(%H_","_%T,3)
 ..S KMPTOBJ=##class(%DynamicObject).%New()
 ..S KMPTOBJ.Patch=KMPPAT
 ..S KMPTOBJ.InstallDate=KMPIDATE
 ..D KMPPARR.%Push(KMPTOBJ)
 Q KMPPARR
 ;
TIMEDIFF(KMPSTART,KMPEND) ;
 N KMPDIFF,KMPMIN,KMPSEC
 S KMPDIFF=KMPSTART-KMPEND*86400-$P(KMPEND,",",2)+$P(KMPSTART,",",2)
 S KMPMIN=KMPDIFF\60
 S KMPSEC=KMPDIFF#60
 Q KMPMIN_"m "_KMPSEC_"s"