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"
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HKMPOPS 10639 printed Apr 22, 2026@13:38:31 Page 2
KMPOPS ;SP/JML - Collect VistA Ops Data;7/1/2025
+1 ;;4.0;CAPACITY MANAGEMENT;**5**;3/1/2018;Build 9
+2 ;
+3 ; Reference to $$HTFM^XLFDT in ICR #10103
+4 ; Reference to $$HDIFF^XLFDT in ICR #10103
+5 ; Reference to $$TM^%ZTLOAD in ICR #10063
+6 ; References to routine ^XMVSM in ICR #7549
+7 ; References to routine ^XUVSM in ICR #7550
+8 ; References to routine ^HLVSM in ICR #7551
+9 ;
+10 ;
GETDATA(KMPFROM,KMPTO) ; Main entry point to collect ALL ops data
+1 NEW KMPOPS
+2 SET KMPFROM=$GET(KMPFROM)
SET KMPTO=$GET(KMPTO)
+3 SET KMPOPS=##class(%DynamicObject).%New()
+4 SET KMPOPS.HL7=$$GETHL7("ALL")
+5 SET KMPOPS.HLO=$$GETHLO("ALL")
+6 SET KMPOPS.TASK=$$GETTASK()
+7 SET KMPOPS.MAIL=$$GETMAIL()
+8 SET KMPOPS.PLIST=$$GETPLIST(KMPFROM,KMPTO)
+9 SET KMPOPS.Timestamp=$PIECE($$TSTAMP^KMPUTLW($HOROLOG,"HOROLOG"),"^")
+10 QUIT KMPOPS
+11 ;
GETWEBP(KMPREQ,KMPRET) ; called from KMP.VistaSystemMonitor REST class
+1 NEW KMPHL7,KMPHLO,KMPTASK,KMPMAIL,KMPSECT
+2 SET U="^"
+3 SET KMPSECT=KMPREQ.SECTION
+4 SET KMPFROM=KMPREQ.FROMDATE
+5 SET KMPTO=KMPREQ.TODATE
+6 DO SITE^KMPUTLW(KMPRET)
+7 SET KMPRET.Timestamp=$PIECE($$TSTAMP^KMPUTLW($HOROLOG,"HOROLOG"),"^")
+8 IF KMPSECT="ALL"
Begin DoDot:1
+9 SET KMPRET.HL7=$$GETHL7("ALL")
+10 SET KMPRET.HLO=$$GETHLO("ALL")
+11 SET KMPRET.TASK=$$GETTASK()
+12 SET KMPRET.MAIL=$$GETMAIL()
+13 SET KMPRET.PLIST=$$GETPLIST(KMPFROM,KMPTO)
End DoDot:1
QUIT
+14 IF KMPSECT["HL7LIST"
SET KMPRET.HL7=$$GETHL7("LIST")
+15 IF KMPSECT["HLOLIST"
SET KMPRET.HLO=$$GETHLO("LIST")
+16 IF KMPSECT["CORE"
Begin DoDot:1
+17 SET KMPRET.HL7=$$GETHL7("CORE")
+18 SET KMPRET.HLO=$$GETHLO("CORE")
+19 SET KMPRET.TASK=$$GETTASK()
End DoDot:1
+20 IF KMPSECT["MAIL"
SET KMPRET.MAIL=$$GETMAIL()
+21 IF KMPSECT["PLIST"
SET KMPRET.PLIST=$$GETPLIST(KMPFROM,KMPTO)
+22 QUIT
+23 ;
GETHL7(KMPFLAG) ; Get HL7 ops data
+1 NEW KMPTNUM,KMPFDAT,KMPICNT,KMPINF,KMPOCNT,KMPTS,KMPSFLAG,KMPFDAT,KMPERR,KMPTDAT,KMPOUTARR,KMPOUTF,NOW
+2 NEW KMPJHL7,KMPLARR,KMPHORO,KMPCTIME,KMPFCFG
+3 IF $GET(KMPFLAG)=""
SET KMPFLAG="ALL"
+4 SET U="^"
+5 SET KMPJHL7=##class(%DynamicObject).%New()
+6 SET KMPCTIME=$HOROLOG
+7 SET KMPICNT=$$GETFILERS^HLVSM("IN","KMPINF")
+8 SET KMPOCNT=$$GETFILERS^HLVSM("OUT","KMPOUTF")
+9 SET KMPFCFG=$$FILERCFG^HLVSM()
+10 IF "ALL^CORE"[KMPFLAG
Begin DoDot:1
+11 SET KMPJHL7.InCount=KMPICNT
+12 SET KMPJHL7.OutCount=KMPOCNT
+13 SET KMPJHL7.InConfig=$PIECE(KMPFCFG,"^")
+14 SET KMPJHL7.OutConfig=$PIECE(KMPFCFG,"^",2)
+15 SET KMPJHL7.LinkManagerStatus=$SELECT($$LMSTAT^HLVSM()=1:"Running",1:"**NOT RUNNING**")
+16 SET DUZ=.5
DO DUZ^XUP(DUZ)
+17 SET KMPJHL7.LinkManagerCurrent=$ZSTRIP($$SLM^HLVSM,"*C")
End DoDot:1
+18 ;
+19 IF "ALL^LIST"[KMPFLAG
Begin DoDot:1
+20 ; INDIVIDUAL IN FILERS
SET KMPLARR=##class(%DynamicArray).%New()
+21 SET KMPTNUM=""
+22 FOR
SET KMPTNUM=$ORDER(KMPINF(KMPTNUM))
if KMPTNUM=""
QUIT
Begin DoDot:2
+23 SET KMPTOBJ=##class(%DynamicObject).%New()
+24 SET KMPTOBJ.Direction="In"
+25 SET KMPTOBJ.JobNumber=KMPTNUM
+26 SET KMPFDAT=KMPINF(KMPTNUM)
+27 SET KMPHORO=$PIECE(KMPFDAT,"^",2)
+28 SET KMPTOBJ.Behind=$$TIMEDIFF(KMPCTIME,KMPHORO)
+29 ; LAST H
SET KMPTOBJ.Timestamp=$ZDATETIME(KMPHORO,3)
+30 SET KMPTOBJ.StopFlag=$PIECE(KMPFDAT,"^",3)
+31 SET KMPTOBJ.Error=$PIECE(KMPFDAT,"^",5)
+32 DO KMPLARR.%Push(KMPTOBJ)
End DoDot:2
+33 SET KMPTNUM=""
+34 FOR
SET KMPTNUM=$ORDER(KMPOUTF(KMPTNUM))
if KMPTNUM=""
QUIT
Begin DoDot:2
+35 SET KMPTOBJ=##class(%DynamicObject).%New()
+36 SET KMPTOBJ.Direction="Out"
+37 SET KMPTOBJ.JobNumber=KMPTNUM
+38 SET KMPFDAT=KMPOUTF(KMPTNUM)
+39 SET KMPHORO=$PIECE(KMPFDAT,"^",2)
+40 SET KMPTOBJ.Behind=$$TIMEDIFF(KMPCTIME,KMPHORO)
+41 ; LAST H
SET KMPTOBJ.Timestamp=$ZDATETIME($PIECE(KMPFDAT,"^",2),3)
+42 SET KMPTOBJ.StopFlag=$PIECE(KMPFDAT,"^",3)
+43 SET KMPTOBJ.Error=$PIECE(KMPFDAT,"^",5)
+44 SET KMPTDAT=KMPTNUM_" - "_KMPTOBJ.Timestamp_" - "_KMPTOBJ.StopFlag_" - "_KMPTOBJ.Errors
+45 DO KMPLARR.%Push(KMPTOBJ)
End DoDot:2
+46 SET KMPJHL7.FilerList=KMPLARR
End DoDot:1
+47 QUIT KMPJHL7
+48 ;
GETHLO(KMPFLAG) ; HLO OPS DATA
+1 NEW KMPCARR,KMPA,KMPB,KMPF777,KMPF778,TODAY,KMPOQARR,KMPSQARR,KMPIQARR
+2 NEW KMPJHLO,KMPMPOQ
+3 IF $GET(KMPFLAG)=""
SET KMPFLAG="ALL"
+4 SET KMPJHLO=##class(%DynamicObject).%New()
+5 IF "ALL^CORE"[KMPFLAG
Begin DoDot:1
+6 SET KMPJHLO.SystemStatus=$SELECT($$CHKSTOP^HLVSM:"Stopped",1:"Running")
+7 SET KMPJHLO.ProcessManager=$SELECT($$PROCMAN^HLVSM:"Running",1:"Stopped")
+8 SET KMPJHLO.StandardListener=$SELECT($$LSTAT^HLVSM():"Running",1:"Stopped")
+9 SET KMPJHLO.DownLinks=$$DLINKS^HLVSM()
+10 SET KMPJHLO.ClientLinkProcesses=$$CLPROC^HLVSM("OUTGOING CLIENT LINK")
+11 SET KMPJHLO.InFilerProcesses=$$CLPROC^HLVSM("INCOMING QUEUES")
+12 SET KMPJHLO.MessagesPendingOutQueues=$$MPOQ^HLVSM(.KMPOQARR)
+13 SET KMPJHLO.MessagesPendingSequenceQueues=$$MPSQ^HLVSM(.KMPSQARR)
+14 SET KMPJHLO.MessagesPendingApplications=$$MPAQ^HLVSM(.KMPIQARR)
+15 SET KMPJHLO.StoppedIncomingQueues=$$STQUES^HLVSM("IN")
+16 SET KMPJHLO.StoppedOutgoingQueues=$$STQUES^HLVSM("OUT")
+17 SET KMPF777=$$FILE777^HLVSM()
+18 SET KMPJHLO.File777RecordCount=$PIECE(KMPF777,"^",1)
+19 SET KMPJHLO.File777RecordDate=$PIECE($$TSTAMP^KMPUTLW($PIECE(KMPF777,"^",2),"FILEMAN",1),"^")
+20 SET KMPF778=$$FILE778^HLVSM()
+21 SET KMPJHLO.File778RecordCount=$PIECE(KMPF778,"^",1)
+22 SET KMPJHLO.File778RecordDate=$PIECE($$TSTAMP^KMPUTLW($PIECE(KMPF778,"^",2),"FILEMAN",1),"^")
+23 SET TODAY=$$DT^XLFDT
+24 SET KMPJHLO.MessagesSentToday=$$ADD^HLVSM("OUT")
+25 SET KMPJHLO.MessagesReceivedToday=$$ADD^HLVSM("IN")
+26 SET KMPJHLO.MessageErrorsToday=$$ADD^HLVSM("EOUT")+$$ADD^HLVSM("EIN")
End DoDot:1
+27 IF "ALL^LIST"[KMPFLAG
Begin DoDot:1
+28 SET KMPJHLO.PendingOutMessageCounts=$$MESSLIST(.KMPOQARR)
+29 SET KMPJHLO.PendingSeqMessageCounts=$$MESSLIST(.KMPSQARR)
+30 SET KMPJHLO.PendingInMessageCounts=$$MESSLIST(.KMPIQARR)
End DoDot:1
+31 QUIT KMPJHLO
+32 ;
MESSLIST(KMPQARR) ;
+1 NEW KMPTARR,KMPI,KMPLINK,KMPQUE,KMPCOUNT,KMPCNT
+2 NEW KMPQOBJ,KMPTOBJ
+3 SET KMPQOBJ=##class(%DynamicArray).%New()
+4 SET KMPLINK=""
+5 FOR
SET KMPLINK=$ORDER(KMPQARR("OUT",KMPLINK))
if KMPLINK=""
QUIT
Begin DoDot:1
+6 SET KMPQUE=""
+7 FOR
SET KMPQUE=$ORDER(KMPQARR("OUT",KMPLINK,KMPQUE))
if KMPQUE=""
QUIT
Begin DoDot:2
+8 SET KMPCOUNT=KMPQARR("OUT",KMPLINK,KMPQUE)
+9 SET KMPTARR(KMPCOUNT,KMPLINK,KMPQUE)=""
End DoDot:2
End DoDot:1
+10 SET KMPCNT=0
SET KMPI=""
+11 FOR
SET KMPI=$ORDER(KMPTARR(KMPI),-1)
if (KMPI="")!(KMPCNT>4)
QUIT
Begin DoDot:1
+12 SET KMPLINK=""
+13 SET KMPLINK=$ORDER(KMPTARR(KMPI,KMPLINK))
if (KMPLINK="")!(KMPCNT>4)
QUIT
Begin DoDot:2
+14 SET KMPQUE=""
+15 FOR
SET KMPQUE=$ORDER(KMPTARR(KMPI,KMPLINK,KMPQUE))
if (KMPQUE="")!(KMPCNT>4)
QUIT
Begin DoDot:3
+16 SET KMPTOBJ=##class(%DynamicObject).%New()
+17 SET KMPTOBJ.Link=KMPLINK
SET KMPTOBJ.Queue=KMPQUE
+18 SET KMPTOBJ.Count=KMPI
+19 DO KMPQOBJ.%Push(KMPTOBJ)
+20 SET KMPCNT=KMPCNT+1
End DoDot:3
End DoDot:2
End DoDot:1
+21 QUIT KMPQOBJ
+22 ;
GETTASK() ; TASKMAN OPS DATA
+1 NEW KMPCHK,KMPFTASK,KMPFUT,KMPJTSK,KMPRSTAT,KMPSTARR,KMPI,KMPTOBJ,KMPSCH,KMPIO,KMPIOARR,KMPSMARR,KMPSLIST,KMPSM,KMPCHKLST
+2 SET KMPJTSK=##class(%DynamicObject).%New()
+3 SET KMPJTSK.TaskmanStatus=$SELECT($$TM^%ZTLOAD=1:"Running",1:"Stopped")
+4 ; Run Status
+5 SET KMPRSTAT=$$RUNSTATUS^XUVSM()
+6 SET KMPJTSK.RunStatus=$PIECE(KMPRSTAT,"^")
+7 SET KMPJTSK.RunLate=$PIECE(KMPRSTAT,"^",2)
+8 SET KMPJTSK.CurrentTimestamp=$PIECE($$TSTAMP^KMPUTLW($PIECE(KMPRSTAT,"^",3),"HOROLOG",1),"^")
+9 SET KMPJTSK.RunNodeTimestamp=$PIECE($$TSTAMP^KMPUTLW($PIECE(KMPRSTAT,"^",4),"HOROLOG",1),"^")
+10 ; Status List
+11 DO STATLIST^XUVSM(.KMPSLIST)
+12 SET KMPSTARR=##class(%DynamicArray).%New()
+13 SET KMPI=""
+14 FOR
SET KMPI=$ORDER(KMPSLIST("LIST",KMPI))
if KMPI=""
QUIT
Begin DoDot:1
+15 SET KMPTOBJ=##class(%DynamicObject).%New()
+16 SET KMPTOBJ.Node=KMPSLIST("LIST",KMPI,"NODE")
+17 SET KMPTOBJ.Weight=KMPSLIST("LIST",KMPI,"WEIGHT")
+18 SET KMPTOBJ.Status=KMPSLIST("LIST",KMPI,"STATUS")
+19 SET KMPTOBJ.Time=KMPSLIST("LIST",KMPI,"TIME")
+20 SET KMPTOBJ.JobNumber=KMPSLIST("LIST",KMPI,"JOBNUM")
+21 SET KMPTOBJ.Execute=KMPSLIST("LIST",KMPI,"EXECUTE")
+22 DO KMPSTARR.%Push(KMPTOBJ)
End DoDot:1
+23 SET KMPJTSK.StatusDetails=KMPSTARR
+24 SET KMPJTSK.StatusMessage=KMPSLIST("STATMESS")
+25 ; Schedule List
+26 SET KMPSCH=$$SCHLIST^XUVSM()
+27 SET KMPJTSK.TasksScheduled=$PIECE(KMPSCH,"^")
+28 SET KMPJTSK.TasksLate=$PIECE(KMPSCH,"^",2)
+29 SET KMPJTSK.FirstLateTaskSeconds=$PIECE(KMPSCH,"^",3)
+30 ; IO List
+31 DO IOLIST^XUVSM(.KMPIO)
+32 SET KMPJTSK.LastScan=KMPIO("LASTSCAN")
+33 SET KMPJTSK.LastDev=KMPIO("LASTDEV")
+34 SET KMPJTSK.TotalTasksWaitingIo=KMPIO("TTSKWAIT")
+35 SET KMPIOARR=##class(%DynamicArray).%New()
+36 SET KMPI=""
+37 FOR
SET KMPI=$ORDER(KMPIO("LIST",KMPI))
if KMPI=""
QUIT
Begin DoDot:1
+38 DO KMPIOARR.%Push(KMPIO("LIST",KMPI,"ONE")_"^"_KMPIO("LIST",KMPI,"TWO")_"^"_"^"_KMPIO("LIST",KMPI,"THREE"))
End DoDot:1
+39 SET KMPJTSK.DeviceDetail=KMPIOARR
+40 ; Jobs waiting and tasks running
+41 SET KMPJTSK.JobsWaiting=$$JOBSWAIT^XUVSM()
+42 SET KMPJTSK.TasksRunning=$$TASKSRUN^XUVSM()
+43 ; Submanager Status
+44 DO SMLIST^XUVSM(.KMPSM)
+45 SET KMPSMARR=##class(%DynamicArray).%New()
+46 SET KMPI=""
+47 FOR
SET KMPI=$ORDER(KMPSM("LIST",KMPI))
if KMPI=""
QUIT
Begin DoDot:1
+48 SET KMPTOBJ=##class(%DynamicObject).%New()
+49 SET KMPTOBJ.Node=KMPSM("LIST",KMPI,"NODE")
+50 SET KMPTOBJ.Count=KMPSM("LIST",KMPI,"COUNT")
+51 SET KMPTOBJ.Status=KMPSM("LIST",KMPI,"STATUS")
+52 SET KMPTOBJ.NoStart=KMPSM("LIST",KMPI,"NOSTART")
+53 DO KMPSMARR.%Push(KMPTOBJ)
End DoDot:1
+54 SET KMPJTSK.SubManagerStatus=KMPSMARR
+55 SET KMPJTSK.SubWait=KMPSM("SUBWAIT")
+56 ; check for future tasks
+57 SET KMPCHKLST=$$GETVAL^KMPVCCFG("VMCM","FUTURE TASK CHECK",8969)
+58 SET KMPCHK=""
SET KMPI=0
+59 IF $GET(KMPCHKLST)'=""
FOR KMPI=1:1:$LENGTH(KMPCHKLST,":")
SET KMPCHK($PIECE(KMPCHKLST,":",KMPI))="Not Scheduled"
+60 SET KMPCHK=KMPI
+61 DO FUT^XUVSM(.KMPCHK)
+62 SET KMPFUT=##class(%DynamicArray).%New()
+63 SET KMPFTASK=""
+64 FOR
SET KMPFTASK=$ORDER(KMPCHK(KMPFTASK))
if KMPFTASK=""
QUIT
Begin DoDot:1
+65 SET KMPTOBJ=##class(%DynamicObject).%New()
+66 SET KMPTOBJ.Task=KMPFTASK
+67 SET KMPTOBJ.TaskDate=$GET(KMPCHK(KMPFTASK))
+68 DO KMPFUT.%Push(KMPTOBJ)
End DoDot:1
+69 SET KMPJTSK.FutureTasks=KMPFUT
+70 QUIT KMPJTSK
+71 ;
GETMAIL() ; MAILMAN MESSAGE QUEUES
+1 NEW KMPJXM,KMPI,KMPXM,KMPDOM,KMPDARR,KMPTOBJ
+2 SET KMPJXM=##class(%DynamicObject).%New()
+3 DO XMLIST^XMVSM(.KMPXM)
+4 SET KMPJXM.TotalDomains=KMPXM("TOTDOMS")
+5 SET KMPJXM.TotalMessagesQueued=KMPXM("TMQUED")
+6 SET KMPDARR=##class(%DynamicArray).%New()
+7 SET KMPDOM=""
+8 FOR
SET KMPDOM=$ORDER(KMPXM("DOMAINS",KMPDOM))
if KMPDOM=""
QUIT
Begin DoDot:1
+9 SET KMPTOBJ=##class(%DynamicObject).%New()
+10 SET KMPTOBJ.Domain=KMPDOM
+11 SET KMPTOBJ.MessageData=KMPXM("DOMAINS",KMPDOM)
+12 DO KMPDARR.%Push(KMPTOBJ)
End DoDot:1
+13 SET KMPJXM.Queues=KMPDARR
+14 QUIT KMPJXM
+15 ;
GETPLIST(KMPSDAT,KMPEDAT) ;
+1 NEW KMPJPAT,KMPPARR,KMPDT,KMPPAT,X,KMPIDATE,KMPIN,%H,%T,%Y,KMPTOBJ
+2 SET KMPSDAT=$GET(KMPSDAT)
SET KMPEDAT=$GET(KMPEDAT)
+3 IF KMPSDAT'=""
IF KMPSDAT'?4N1.2"-"2N1"-"1.2N
QUIT "Date Format Error: Should be YYYY-MM-DD"
+4 IF KMPEDAT'=""
IF KMPEDAT'?4N1.2"-"2N1"-"1.2N
QUIT "Date Format Error: Should by YYYY-MM-DD"
+5 ;
+6 IF KMPSDAT=""
SET KMPSTART=$HOROLOG-14
+7 IF KMPSDAT
SET KMPSTART=$ZDATEH(KMPSDAT,3)
+8 SET %H=KMPSTART
DO YMD^%DTC
SET KMPSDAT=X
+9 IF KMPEDAT=""
SET KMPEND=$HOROLOG
+10 IF KMPEDAT
SET KMPEND=$ZDATEH(KMPEDAT,3)
+11 SET %H=KMPEND
DO YMD^%DTC
SET KMPEDAT=X+.999999
+12 ;
+13 DO INSTALL^XUVSM(.KMPIN,KMPSDAT,KMPEDAT)
+14 SET KMPJPAT=##class(%DynamicObject).%New()
+15 SET KMPPARR=##class(%DynamicArray).%New()
+16 SET KMPDT=""
+17 FOR
SET KMPDT=$ORDER(KMPIN(KMPDT),-1)
if KMPDT=""
QUIT
Begin DoDot:1
+18 SET KMPPAT=""
+19 FOR
SET KMPPAT=$ORDER(KMPIN(KMPDT,KMPPAT))
if KMPPAT=""
QUIT
Begin DoDot:2
+20 SET X=KMPDT
DO H^%DTC
+21 SET KMPIDATE=$ZDATETIME(%H_","_%T,3)
+22 SET KMPTOBJ=##class(%DynamicObject).%New()
+23 SET KMPTOBJ.Patch=KMPPAT
+24 SET KMPTOBJ.InstallDate=KMPIDATE
+25 DO KMPPARR.%Push(KMPTOBJ)
End DoDot:2
End DoDot:1
+26 QUIT KMPPARR
+27 ;
TIMEDIFF(KMPSTART,KMPEND) ;
+1 NEW KMPDIFF,KMPMIN,KMPSEC
+2 SET KMPDIFF=KMPSTART-KMPEND*86400-$PIECE(KMPEND,",",2)+$PIECE(KMPSTART,",",2)
+3 SET KMPMIN=KMPDIFF\60
+4 SET KMPSEC=KMPDIFF#60
+5 QUIT KMPMIN_"m "_KMPSEC_"s"