KMPOPSW ;SP/JML - HTML to Display VistA Ops Data;7/1/2025
;;4.0;CAPACITY MANAGEMENT;**5**;3/1/2018;Build 9
;
;
;
GETWEBG(FROMDATE,TODATE,REFRESH) ;
N KMPARR,KMPCLASS,KMPFTASKS,KMPI,KMPICFG,KMPILIST,KMPKEY,KMPLIST,KMPSITE,KMPVAL,KMPVAL,KMPD,KMPT,KMPTEMP,KMPFH,KMPFDIS
N KMPTH,KMPTDIS,KMPDARR,KMPHL7,KMPHLO,KMPOCFG,KMPPARR,KMPITR,KMPMAIL,KMPQUES,KMPSDET,KMPSMGR,KMPTASK,%H,X,%
I FROMDATE="" S FROMDATE=$ZDATE($H-14,3)
I TODATE="" S TODATE=$ZDATE($H+1,3)
S REFRESH=$G(REFRESH,60)
S KMPFH=$ZDATEH(FROMDATE,3)
S KMPFDIS=$ZDATE(KMPFH)
S KMPTH=$ZDATEH(TODATE,3)
S KMPTDIS=$ZDATE(KMPTH)
S KMPHL7=$$GETHL7^KMPOPS("ALL")
S KMPHLO=$$GETHLO^KMPOPS("ALL")
S KMPTASK=$$GETTASK^KMPOPS()
S KMPMAIL=$$GETMAIL^KMPOPS()
S KMPPARR=$$GETPLIST^KMPOPS(FROMDATE,TODATE)
S KMPSITE=$$SITEINFO^KMPVCCFG()
W "<html>"
W "<head><title>CPE VSM Operations Status</title>"
W "<meta http-equiv='refresh' content='"_REFRESH_"'>"
W "</head>"
; start of style sheet
W "<style>"
W "body { background-color:#121117; color:#CCCCDC}"
W "h1 { color:white; }"
W "h2 { background-color:#4F81BD; color:white; text-align:center; }" ; cpe dark blue
W "th { color:#DBE5F1; text-align:left; }" ; cpe light blue
W "table { width:100%; cellspacing:5; valign:top; }"
W ".alert { color: #ff8383; }"
w ".label { text-align: left; color:#DBE5F1; }"
W ".warn { text-align: left; color:yellow; }"
w ".value { text-align:left; color:white; }"
W "</style>"
; end of style sheet
w "<body>"
W "<table>"
w "<tr><td width='30%' align='left'>"_$P(KMPSITE,"^")_"</td><td width='40%' align='center'><h1>CPE VSM VistA Operations Status</h1></td><td width='30%' align='right'>"_$P(KMPSITE,"^",5)_"</td></tr>"
W "</table>"
W "<table>"
W "<tr>"
; hl7 column
W "<td valign='top'><table>"
W "<tr><td colspan=2 align='center'><h2>HL7 Status</h2></td></tr>"
S KMPVAL=KMPHL7.LinkManagerStatus,KMPCLASS=$S(KMPVAL="Running":"value",1:"alert")
W "<tr><td class='label'>Link Manager Status:</TD><TD class='"_KMPCLASS_"'>"_KMPVAL_"</td></tr>"
S KMPVAL=KMPHL7.LinkManagerCurrent,KMPCLASS=$S(KMPVAL["current":"value",1:"alert")
W "<tr><td class='label'>Link Manager Current:</td><td class='"_KMPCLASS_"'>"_KMPVAL_"</td></tr>"
S KMPVAL=KMPHL7.InCount,KMPICFG=KMPHL7.InConfig
S KMPCLASS=$S(KMPVAL>=KMPICFG:"value",1:"alert")
W "<tr><td class='label'>In Filer Count:</td><td class='"_KMPCLASS_"'>"_KMPVAL_" running of "_KMPICFG_" configured</td></tr>"
S KMPVAL=KMPHL7.OutCount,KMPOCFG=KMPHL7.OutConfig
S KMPCLASS=$S(KMPVAL>=KMPOCFG:"value",1:"alert")
W "<tr><td class='label'>Out Filer Count:</td><td class='"_KMPCLASS_"'>"_KMPVAL_" running of "_KMPOCFG_" configured</td></tr>"
W "<tr><td colspan=2> </td></tr>"
W "<tr><td class='label'>Filer Detail:</td>"
W "<td><table>"
W "<tr><th>Direction</th><th>$J</th><th>Last Run</th><th>Stop Flag</th><th>Error</th></tr>"
S KMPILIST=KMPHL7.FilerList
;
S KMPARR=##class(KMP.Utilities).toArray(KMPILIST)
F KMPI=1:1:KMPARR.Count() D
.S KMPLIST=KMPARR.GetAt(KMPI)
.W "<tr><td class='value'>"_KMPLIST.Direction_"</td>"
.w "<td class='value'>"_KMPLIST.JobNumber_"</td>"
.w "<td class='value'>"_KMPLIST.Behind_"</td>"
.w "<td class='value'>"_KMPLIST.StopFlag_"</td>"
.w "<td class='value'>"_KMPLIST.Error_"</td></tr>"
W "</table></td></tr>"
W "<tr><td colspan=2> </td></tr>"
;
W "<tr><td colspan=2><h2>HLO Status</h2></td></tr>"
S KMPVAL=KMPHLO.SystemStatus,KMPCLASS=$S(KMPVAL="Running":"value",1:"alert")
W "<tr><td class='label'>System Status</td><td class='"_KMPCLASS_"'>"_KMPVAL_"</td></tr>"
S KMPVAL=KMPHLO.ProcessManager,KMPCLASS=$S(KMPVAL["Running":"value",1:"alert")
W "<tr><td class='label'>Process Manager:</td><td class='"_KMPCLASS_"'>"_KMPVAL_"</td></tr>"
S KMPVAL=KMPHLO.StandardListener,KMPCLASS=$S(KMPVAL="Running":"value",1:"alert")
W "<tr><td class='label'>Standard Listener:</td><td class='"_KMPCLASS_"'>"_KMPVAL_"</td></tr>"
W "<tr><td class='label'>DownLinks:</td><td class='value'>"_KMPHLO.DownLinks_"</td></tr>"
W "<tr><td class='label'>Client Link Processes:</td><td class='value'>"_KMPHLO.ClientLinkProcesses_"</td></tr>"
W "<tr><td class='label'>In Filer Processes:</td><td class='value'>"_KMPHLO.InFilerProcesses_"</td></tr>"
W "<tr><td class='label'>Messages Pending on Out Queues:</td><td class='value'>"_KMPHLO.MessagesPendingOutQueues_"</td></tr>"
W "<tr><td class='label'>Messages Pending on Sequence Queues:</td><td class='value'>"_KMPHLO.MessagesPendingSequenceQueues_"</td></tr>"
W "<tr><td class='label'>Messages Pending on Application Queues:</td><td class='value'>"_KMPHLO.MessagesPendingApplications_"</td></tr>"
W "<tr><td class='label'>Stopped Incoming Queues:</td><td class='value'>"_KMPHLO.StoppedIncomingQueues_"</td></tr>"
W "<tr><td class='label'>Stopped Outgoing Queues:</td><td class='value'>"_KMPHLO.StoppedOutgoingQueues_"</td></tr>"
W "<tr><td class='label'>File 777 Record Count</td>"
S KMPD=$P(KMPHLO.File777RecordDate," "),KMPT=$P(KMPHLO.File777RecordDate," ",2)
S KMPTEMP=$P(KMPD,"-",2)_"-"_$P(KMPD,"-",3)_"-"_+KMPD_" "_$P(KMPT,"Z")
W "<td class='value'>"_+KMPHLO.File777RecordCount_" as of "_KMPTEMP_"</td></tr>"
W "<tr><td class='label'>File 777 Record Count:</td>"
S KMPD=$P(KMPHLO.File778RecordDate," "),KMPT=$P(KMPHLO.File778RecordDate," ",2)
S KMPTEMP=$P(KMPD,"-",2)_"-"_$P(KMPD,"-",3)_"-"_+KMPD_" "_$P(KMPT,"Z")
W "<td class='value'>"_+KMPHLO.File778RecordCount_" as of "_KMPTEMP_"</td></tr>"
W "<tr><td class='label'>Messages Sent Today:</td><td class='value'>"_KMPHLO.MessagesSentToday_"</td></tr>"
W "<tr><td class='label'>Messages Received Today:</td><td class='value'>"_KMPHLO.MessagesReceivedToday_"</td></tr>"
W "<tr><td class='label'>Message Errors Today:</td><td class='value'>"_KMPHLO.MessageErrorsToday_"</td></tr>"
; **** LOOK AGAIN
w "<tr><td colspan=2> </td></tr>"
W "<tr><td class='label'>High Stopped Queues</td>"
W "<td><table>"
W "<tr><th>Link</th><th>Queue</th><th>Count</th></tr>"
S KMPQUES=KMPHLO.PendingOutMessageCounts
S KMPARR=##class(KMP.Utilities).toArray(KMPQUES)
F KMPI=1:1:KMPARR.Count() D
.S KMPLIST=KMPARR.GetAt(KMPI)
.W "<tr><td class='value'>"_KMPLIST.Link_"</td>"
.w "<td class='value'>"_KMPLIST.Queue_"</td>"
.w "<td class='value'>"_KMPLIST.count_"</td>"
W "</table></td></tr>"
;
W "<tr><td class='label'>High Sequence Queues</td>"
W "<td><table>"
W "<tr><th>Link</th><th>Queue</th><th>Count</th></tr>"
S KMPQUES=KMPHLO.PendingSeqMessageCounts
S KMPARR=##class(KMP.Utilities).toArray(KMPQUES)
F KMPI=1:1:KMPARR.Count() D
.S KMPLIST=KMPARR.GetAt(KMPI)
.W "<tr><td class='value'>"_KMPLIST.Link_"</td>"
.w "<td class='value'>"_KMPLIST.Queue_"</td>"
.w "<td class='value'>"_KMPLIST.count_"</td>"
W "</table></td></tr>"
;
W "<tr><td class='label'>High Sequence Queues</td>"
W "<td><table>"
W "<tr><th>Link</th><th>Queue</th><th>Count</th></tr>"
S KMPQUES=KMPHLO.PendingInMessageCounts
S KMPARR=##class(KMP.Utilities).toArray(KMPQUES)
F KMPI=1:1:KMPARR.Count() D
.S KMPLIST=KMPARR.GetAt(KMPI)
.W "<tr><td class='value'>"_KMPLIST.Link_"</td>"
.w "<td class='value'>"_KMPLIST.Queue_"</td>"
.w "<td class='value'>"_KMPLIST.count_"</td>"
W "</table></td></tr>"
W "</table></td>"
;
; Start Taskman Column
W "<td valign='top'><table>"
W "<tr><td colspan=2><h2>Task Manager</h2></td></tr>"
S KMPVAL=KMPTASK.TaskmanStatus,KMPCLASS=$S(KMPVAL="Running":"value",1:"alert")
W "<tr><td class='label'>Taskman Status:</td><td class='"_KMPCLASS_"'>"_KMPVAL_"</td></tr>"
S KMPVAL=KMPTASK.RunStatus,KMPCLASS=$S(KMPVAL["Current":"value",1:"alert")
I KMPVAL="Late" S KMPCLASS=$S(KMPTASK.RunLate>50:"alert",KMPTASK.RunLate>20:"warn",1:"value")
W "<tr><td class='label'>Run Status:</td><td class='"_KMPCLASS_"'>"_KMPVAL_"</td></tr>"
S KMPVAL=KMPTASK.RunLate,KMPCLASS=$S(KMPVAL>50:"alert",KMPVAL>20:"warn",1:"value")
W "<tr><td class='label'>Seconds Late:</td><td class='"_KMPCLASS_"'>"_KMPVAL_"</td></tr>"
S KMPVAL=KMPTASK.JobsWaiting,KMPCLASS=$S(KMPVAL>29:"alert",KMPVAL>19:"warn",1:"value")
W "<tr><td class='label'>Jobs Waiting:</td><td class='"_KMPCLASS_"'>"_KMPVAL_"</td></tr>"
S KMPVAL=KMPTASK.TasksRunning,KMPCLASS=$S(KMPVAL>1099:"alert",KMPVAL>999:"warn",1:"value")
W "<tr><td class='label'>Tasks Running:</td><td class='"_KMPCLASS_"'>"_KMPVAL_"</td></tr>"
S KMPD=$P(KMPTASK.CurrentTimestamp," "),KMPT=$P(KMPTASK.CurrentTimestamp," ",2)
S KMPTEMP=$P(KMPD,"-",2)_"-"_$P(KMPD,"-",3)_"-"_+KMPD_" "_$P(KMPT,"Z")
W "<tr><td class='label'>Current Timestamp:</td><td class='value'>"_KMPTEMP_"</td></tr>"
S KMPD=$P(KMPTASK.RunNodeTimestamp," "),KMPT=$P(KMPTASK.RunNodeTimestamp," ",2)
S KMPTEMP=$P(KMPD,"-",2)_"-"_$P(KMPD,"-",3)_"-"_+KMPD_" "_$P(KMPT,"Z")
W "<tr><td class='label'>Run Node Timestamp:</td><td class='value'>"_KMPTEMP_"</td></tr>"
; Status list
w "<tr><td colspan=2> </td></tr>"
w "<tr><td class='label'>Status List:</td>"
w "<td><table>"
S KMPSDET=KMPTASK.StatusDetails
S KMPITR=KMPSDET.%GetIterator()
S KMPI=KMPITR.%GetNext(.KMPKEY,.KMPVAL)
w "<tr><td class='label'>Node:</td><td class='value'>"_KMPVAL.Node_"</td></tr>"
w "<tr><td class='label'>Weight:</td><td class='value'>"_KMPVAL.Weight_"</td></tr>"
w "<tr><td class='label'>Status:</td><td class='value'>"_KMPVAL.Status_"</td></tr>"
w "<tr><td class='label'>Time:</td><td class='value'>"_KMPVAL.Time_"</td></tr>"
w "<tr><td class='label'>$J:</td><td class='value'>"_KMPVAL.JobNumber_"</td></tr>"
w "<tr><td class='label'>Execute:</td><td class='value'>"_KMPVAL.Execute_"</td></tr>"
w "<tr><td class='label'>Message:</td><td class='value'>"_KMPTASK.StatusMessage_"</td></tr>"
w "</table></td></tr>"
; schedule list
w "<tr><td colspan=2> </td></tr>"
w "<tr><td class='label'>Schedule List:</td>"
w "<td><table>"
S KMPVAL=KMPTASK.TasksScheduled,KMPCLASS=$S(KMPVAL>2999:"alert",KMPVAL>2899:"warn",1:"value")
w "<tr><td class='label'>Tasks Scheduled:</td><td class='"_KMPCLASS_"'>"_KMPVAL_"</td></tr>"
S KMPVAL=KMPTASK.TasksLate,KMPCLASS=$S(KMPVAL>29:"alert",KMPVAL>19:"warn",1:"value")
w "<tr><td class='label'>Tasks Late:</td><td class='"_KMPCLASS_"'>"_KMPVAL_"</td></tr>"
w "<tr><td class='label'>First Task Late by:</td><td class='"_KMPCLASS_"'>"_KMPTASK.FirstLateTaskSeconds_"</td></tr>"
w "</table></td></tr>"
; io list
w "<tr><td colspan=2> </td></tr>"
w "<tr><td class='label'>IO List:</td>"
w "<td><table>"
w "<tr><td class='label'>Last Scan:</td><td class='value'>"_KMPTASK.LastScan_"</td></tr>"
w "<tr><td class='label'>Last Device:</td><td class='value'>"_KMPTASK.LastDev_"</td></tr>"
w "<tr><td class='label'>Device Details:</td><td class='value'>"_KMPTASK.DeviceDetails_"</td></tr>"
w "<tr><td class='label'>Tasks Waiting on IO:</td><td class='value'>"_KMPTASK.TotalTasksWaitingIo_"</td></tr>"
w "</table></td></tr>"
;
; sub managers
w "<tr><td colspan=2> </td></tr>"
w "<tr><td class='label'>Waiting on Sub-Managers:</td><td class='value'>"_KMPTASK.SubWait_"</td></tr>"
w "<tr><td colspan=2> </td></tr>"
;
W "<tr><td colspan=2 valign='top'>"
W "<table>"
W "<tr><th>Node</th><th>Count</th><th>Status</th><th>No Start Flag</th></tr>"
S KMPSMGR=KMPTASK.SubManagerStatus
S KMPARR=##class(KMP.Utilities).toArray(KMPSMGR)
F KMPI=1:1:KMPARR.Count() D
.S KMPLIST=KMPARR.GetAt(KMPI)
.W "<tr><td class='value'>"_KMPLIST.Node_"</td>"
.w "<td class='value'>"_KMPLIST.Count_"</td>"
.w "<td class='value'>"_KMPLIST.Status_"</td>"
.w "<td class='value'>"_KMPLIST.NoStart_"</td></tr>"
W "</table></td></tr>"
;
W "<tr><td colspan=2 valign='top'>"
W "<table>"
W "<tr><th>Task</th><th>Next Run</th></tr>"
S KMPFTASKS=KMPTASK.FutureTasks
S KMPARR=##class(KMP.Utilities).toArray(KMPFTASKS)
F KMPI=1:1:KMPARR.Count() D
.S KMPLIST=KMPARR.GetAt(KMPI)
.S KMPCLASS=$S(KMPLIST.TaskDate="Not Scheduled":"alert",1:"value")
.W "<tr><td class='value'>"_KMPLIST.Task_"</td>"
.W "<td class='"_KMPCLASS_"'>"_KMPLIST.TaskDate_"</td></tr>"
W "</table></td></tr>"
;
W "</table></td>"
;
; Start Mail Queues Column
W "<td valign='top'><table>"
W "<tr valign='top'><td colspan=3 valign='top'><h2>Mail Queues</h2></td></tr>"
W "<tr><td class='label'>Total Messages Queued:</td><td class='value'>"_KMPMAIL.TotalMessagesQueued_"</td></tr>"
W "<tr><td class='label'>Total Domains:</td><td class='value'>"_KMPMAIL.TotalDomains_"</td></tr>"
w "<tr><td colspan=3> </td></tr>"
W "<tr><td colspan=3><table>"
w "<tr><th>Mail Domain</th><th>Messages</th><th>Link</th></tr>"
S KMPDARR=KMPMAIL.Queues
S KMPARR=##class(KMP.Utilities).toArray(KMPDARR)
F KMPI=1:1:KMPARR.Count() D
.S KMPLIST=KMPARR.GetAt(KMPI)
.W "<tr><td class='value'>"_KMPLIST.Domain_"</td>"
.W "<td class='value'>"_$P(KMPLIST.MessageData,"^",1)_"</td>"
.W "<td class='value'>"_$P(KMPLIST.MessageData,"^",2)_"</td></tr>"
W "</table></td></tr>"
;
W "<tr><td colspan=2> </td></tr>"
W "<tr><td colspan=2 align='center'><h2>Patch Installs</td></tr>"
W "<tr><td colspan=2 align='center'>"_KMPFDIS_" through "_KMPTDIS_"</td></tr>"
W "<tr><td colspan=2> </td></tr>"
S KMPARR=##class(KMP.Utilities).toArray(KMPPARR)
F KMPI=1:1:KMPARR.Count() D
.S KMPLIST=KMPARR.GetAt(KMPI)
.W "<tr><td>"_KMPLIST.Patch_"</td>"
.W "<td class='value'>"_KMPLIST.InstallDate_"</td></tr>"
;
W "</table></td>"
;
W "</tr></table>"
W "</body></html>"
Q
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HKMPOPSW 13540 printed Apr 22, 2026@13:38:32 Page 2
KMPOPSW ;SP/JML - HTML to Display VistA Ops Data;7/1/2025
+1 ;;4.0;CAPACITY MANAGEMENT;**5**;3/1/2018;Build 9
+2 ;
+3 ;
+4 ;
GETWEBG(FROMDATE,TODATE,REFRESH) ;
+1 NEW KMPARR,KMPCLASS,KMPFTASKS,KMPI,KMPICFG,KMPILIST,KMPKEY,KMPLIST,KMPSITE,KMPVAL,KMPVAL,KMPD,KMPT,KMPTEMP,KMPFH,KMPFDIS
+2 NEW KMPTH,KMPTDIS,KMPDARR,KMPHL7,KMPHLO,KMPOCFG,KMPPARR,KMPITR,KMPMAIL,KMPQUES,KMPSDET,KMPSMGR,KMPTASK,%H,X,%
+3 IF FROMDATE=""
SET FROMDATE=$ZDATE($HOROLOG-14,3)
+4 IF TODATE=""
SET TODATE=$ZDATE($HOROLOG+1,3)
+5 SET REFRESH=$GET(REFRESH,60)
+6 SET KMPFH=$ZDATEH(FROMDATE,3)
+7 SET KMPFDIS=$ZDATE(KMPFH)
+8 SET KMPTH=$ZDATEH(TODATE,3)
+9 SET KMPTDIS=$ZDATE(KMPTH)
+10 SET KMPHL7=$$GETHL7^KMPOPS("ALL")
+11 SET KMPHLO=$$GETHLO^KMPOPS("ALL")
+12 SET KMPTASK=$$GETTASK^KMPOPS()
+13 SET KMPMAIL=$$GETMAIL^KMPOPS()
+14 SET KMPPARR=$$GETPLIST^KMPOPS(FROMDATE,TODATE)
+15 SET KMPSITE=$$SITEINFO^KMPVCCFG()
+16 WRITE "<html>"
+17 WRITE "<head><title>CPE VSM Operations Status</title>"
+18 WRITE "<meta http-equiv='refresh' content='"_REFRESH_"'>"
+19 WRITE "</head>"
+20 ; start of style sheet
+21 WRITE "<style>"
+22 WRITE "body { background-color:#121117; color:#CCCCDC}"
+23 WRITE "h1 { color:white; }"
+24 ; cpe dark blue
WRITE "h2 { background-color:#4F81BD; color:white; text-align:center; }"
+25 ; cpe light blue
WRITE "th { color:#DBE5F1; text-align:left; }"
+26 WRITE "table { width:100%; cellspacing:5; valign:top; }"
+27 WRITE ".alert { color: #ff8383; }"
+28 WRITE ".label { text-align: left; color:#DBE5F1; }"
+29 WRITE ".warn { text-align: left; color:yellow; }"
+30 WRITE ".value { text-align:left; color:white; }"
+31 WRITE "</style>"
+32 ; end of style sheet
+33 WRITE "<body>"
+34 WRITE "<table>"
+35 WRITE "<tr><td width='30%' align='left'>"_$PIECE(KMPSITE,"^")_"</td><td width='40%' align='center'><h1>CPE VSM VistA Operations Status</h1></td><td width='30%' align='right'>"_$PIECE(KMPSITE,"^",5)_"</td></tr>"
+36 WRITE "</table>"
+37 WRITE "<table>"
+38 WRITE "<tr>"
+39 ; hl7 column
+40 WRITE "<td valign='top'><table>"
+41 WRITE "<tr><td colspan=2 align='center'><h2>HL7 Status</h2></td></tr>"
+42 SET KMPVAL=KMPHL7.LinkManagerStatus
SET KMPCLASS=$SELECT(KMPVAL="Running":"value",1:"alert")
+43 WRITE "<tr><td class='label'>Link Manager Status:</TD><TD class='"_KMPCLASS_"'>"_KMPVAL_"</td></tr>"
+44 SET KMPVAL=KMPHL7.LinkManagerCurrent
SET KMPCLASS=$SELECT(KMPVAL["current":"value",1:"alert")
+45 WRITE "<tr><td class='label'>Link Manager Current:</td><td class='"_KMPCLASS_"'>"_KMPVAL_"</td></tr>"
+46 SET KMPVAL=KMPHL7.InCount
SET KMPICFG=KMPHL7.InConfig
+47 SET KMPCLASS=$SELECT(KMPVAL>=KMPICFG:"value",1:"alert")
+48 WRITE "<tr><td class='label'>In Filer Count:</td><td class='"_KMPCLASS_"'>"_KMPVAL_" running of "_KMPICFG_" configured</td></tr>"
+49 SET KMPVAL=KMPHL7.OutCount
SET KMPOCFG=KMPHL7.OutConfig
+50 SET KMPCLASS=$SELECT(KMPVAL>=KMPOCFG:"value",1:"alert")
+51 WRITE "<tr><td class='label'>Out Filer Count:</td><td class='"_KMPCLASS_"'>"_KMPVAL_" running of "_KMPOCFG_" configured</td></tr>"
+52 WRITE "<tr><td colspan=2> </td></tr>"
+53 WRITE "<tr><td class='label'>Filer Detail:</td>"
+54 WRITE "<td><table>"
+55 WRITE "<tr><th>Direction</th><th>$J</th><th>Last Run</th><th>Stop Flag</th><th>Error</th></tr>"
+56 SET KMPILIST=KMPHL7.FilerList
+57 ;
+58 SET KMPARR=##class(KMP.Utilities).toArray(KMPILIST)
+59 FOR KMPI=1:1:KMPARR.Count()
Begin DoDot:1
+60 SET KMPLIST=KMPARR.GetAt(KMPI)
+61 WRITE "<tr><td class='value'>"_KMPLIST.Direction_"</td>"
+62 WRITE "<td class='value'>"_KMPLIST.JobNumber_"</td>"
+63 WRITE "<td class='value'>"_KMPLIST.Behind_"</td>"
+64 WRITE "<td class='value'>"_KMPLIST.StopFlag_"</td>"
+65 WRITE "<td class='value'>"_KMPLIST.Error_"</td></tr>"
End DoDot:1
+66 WRITE "</table></td></tr>"
+67 WRITE "<tr><td colspan=2> </td></tr>"
+68 ;
+69 WRITE "<tr><td colspan=2><h2>HLO Status</h2></td></tr>"
+70 SET KMPVAL=KMPHLO.SystemStatus
SET KMPCLASS=$SELECT(KMPVAL="Running":"value",1:"alert")
+71 WRITE "<tr><td class='label'>System Status</td><td class='"_KMPCLASS_"'>"_KMPVAL_"</td></tr>"
+72 SET KMPVAL=KMPHLO.ProcessManager
SET KMPCLASS=$SELECT(KMPVAL["Running":"value",1:"alert")
+73 WRITE "<tr><td class='label'>Process Manager:</td><td class='"_KMPCLASS_"'>"_KMPVAL_"</td></tr>"
+74 SET KMPVAL=KMPHLO.StandardListener
SET KMPCLASS=$SELECT(KMPVAL="Running":"value",1:"alert")
+75 WRITE "<tr><td class='label'>Standard Listener:</td><td class='"_KMPCLASS_"'>"_KMPVAL_"</td></tr>"
+76 WRITE "<tr><td class='label'>DownLinks:</td><td class='value'>"_KMPHLO.DownLinks_"</td></tr>"
+77 WRITE "<tr><td class='label'>Client Link Processes:</td><td class='value'>"_KMPHLO.ClientLinkProcesses_"</td></tr>"
+78 WRITE "<tr><td class='label'>In Filer Processes:</td><td class='value'>"_KMPHLO.InFilerProcesses_"</td></tr>"
+79 WRITE "<tr><td class='label'>Messages Pending on Out Queues:</td><td class='value'>"_KMPHLO.MessagesPendingOutQueues_"</td></tr>"
+80 WRITE "<tr><td class='label'>Messages Pending on Sequence Queues:</td><td class='value'>"_KMPHLO.MessagesPendingSequenceQueues_"</td></tr>"
+81 WRITE "<tr><td class='label'>Messages Pending on Application Queues:</td><td class='value'>"_KMPHLO.MessagesPendingApplications_"</td></tr>"
+82 WRITE "<tr><td class='label'>Stopped Incoming Queues:</td><td class='value'>"_KMPHLO.StoppedIncomingQueues_"</td></tr>"
+83 WRITE "<tr><td class='label'>Stopped Outgoing Queues:</td><td class='value'>"_KMPHLO.StoppedOutgoingQueues_"</td></tr>"
+84 WRITE "<tr><td class='label'>File 777 Record Count</td>"
+85 SET KMPD=$PIECE(KMPHLO.File777RecordDate," ")
SET KMPT=$PIECE(KMPHLO.File777RecordDate," ",2)
+86 SET KMPTEMP=$PIECE(KMPD,"-",2)_"-"_$PIECE(KMPD,"-",3)_"-"_+KMPD_" "_$PIECE(KMPT,"Z")
+87 WRITE "<td class='value'>"_+KMPHLO.File777RecordCount_" as of "_KMPTEMP_"</td></tr>"
+88 WRITE "<tr><td class='label'>File 777 Record Count:</td>"
+89 SET KMPD=$PIECE(KMPHLO.File778RecordDate," ")
SET KMPT=$PIECE(KMPHLO.File778RecordDate," ",2)
+90 SET KMPTEMP=$PIECE(KMPD,"-",2)_"-"_$PIECE(KMPD,"-",3)_"-"_+KMPD_" "_$PIECE(KMPT,"Z")
+91 WRITE "<td class='value'>"_+KMPHLO.File778RecordCount_" as of "_KMPTEMP_"</td></tr>"
+92 WRITE "<tr><td class='label'>Messages Sent Today:</td><td class='value'>"_KMPHLO.MessagesSentToday_"</td></tr>"
+93 WRITE "<tr><td class='label'>Messages Received Today:</td><td class='value'>"_KMPHLO.MessagesReceivedToday_"</td></tr>"
+94 WRITE "<tr><td class='label'>Message Errors Today:</td><td class='value'>"_KMPHLO.MessageErrorsToday_"</td></tr>"
+95 ; **** LOOK AGAIN
+96 WRITE "<tr><td colspan=2> </td></tr>"
+97 WRITE "<tr><td class='label'>High Stopped Queues</td>"
+98 WRITE "<td><table>"
+99 WRITE "<tr><th>Link</th><th>Queue</th><th>Count</th></tr>"
+100 SET KMPQUES=KMPHLO.PendingOutMessageCounts
+101 SET KMPARR=##class(KMP.Utilities).toArray(KMPQUES)
+102 FOR KMPI=1:1:KMPARR.Count()
Begin DoDot:1
+103 SET KMPLIST=KMPARR.GetAt(KMPI)
+104 WRITE "<tr><td class='value'>"_KMPLIST.Link_"</td>"
+105 WRITE "<td class='value'>"_KMPLIST.Queue_"</td>"
+106 WRITE "<td class='value'>"_KMPLIST.count_"</td>"
End DoDot:1
+107 WRITE "</table></td></tr>"
+108 ;
+109 WRITE "<tr><td class='label'>High Sequence Queues</td>"
+110 WRITE "<td><table>"
+111 WRITE "<tr><th>Link</th><th>Queue</th><th>Count</th></tr>"
+112 SET KMPQUES=KMPHLO.PendingSeqMessageCounts
+113 SET KMPARR=##class(KMP.Utilities).toArray(KMPQUES)
+114 FOR KMPI=1:1:KMPARR.Count()
Begin DoDot:1
+115 SET KMPLIST=KMPARR.GetAt(KMPI)
+116 WRITE "<tr><td class='value'>"_KMPLIST.Link_"</td>"
+117 WRITE "<td class='value'>"_KMPLIST.Queue_"</td>"
+118 WRITE "<td class='value'>"_KMPLIST.count_"</td>"
End DoDot:1
+119 WRITE "</table></td></tr>"
+120 ;
+121 WRITE "<tr><td class='label'>High Sequence Queues</td>"
+122 WRITE "<td><table>"
+123 WRITE "<tr><th>Link</th><th>Queue</th><th>Count</th></tr>"
+124 SET KMPQUES=KMPHLO.PendingInMessageCounts
+125 SET KMPARR=##class(KMP.Utilities).toArray(KMPQUES)
+126 FOR KMPI=1:1:KMPARR.Count()
Begin DoDot:1
+127 SET KMPLIST=KMPARR.GetAt(KMPI)
+128 WRITE "<tr><td class='value'>"_KMPLIST.Link_"</td>"
+129 WRITE "<td class='value'>"_KMPLIST.Queue_"</td>"
+130 WRITE "<td class='value'>"_KMPLIST.count_"</td>"
End DoDot:1
+131 WRITE "</table></td></tr>"
+132 WRITE "</table></td>"
+133 ;
+134 ; Start Taskman Column
+135 WRITE "<td valign='top'><table>"
+136 WRITE "<tr><td colspan=2><h2>Task Manager</h2></td></tr>"
+137 SET KMPVAL=KMPTASK.TaskmanStatus
SET KMPCLASS=$SELECT(KMPVAL="Running":"value",1:"alert")
+138 WRITE "<tr><td class='label'>Taskman Status:</td><td class='"_KMPCLASS_"'>"_KMPVAL_"</td></tr>"
+139 SET KMPVAL=KMPTASK.RunStatus
SET KMPCLASS=$SELECT(KMPVAL["Current":"value",1:"alert")
+140 IF KMPVAL="Late"
SET KMPCLASS=$SELECT(KMPTASK.RunLate>50:"alert",KMPTASK.RunLate>20:"warn",1:"value")
+141 WRITE "<tr><td class='label'>Run Status:</td><td class='"_KMPCLASS_"'>"_KMPVAL_"</td></tr>"
+142 SET KMPVAL=KMPTASK.RunLate
SET KMPCLASS=$SELECT(KMPVAL>50:"alert",KMPVAL>20:"warn",1:"value")
+143 WRITE "<tr><td class='label'>Seconds Late:</td><td class='"_KMPCLASS_"'>"_KMPVAL_"</td></tr>"
+144 SET KMPVAL=KMPTASK.JobsWaiting
SET KMPCLASS=$SELECT(KMPVAL>29:"alert",KMPVAL>19:"warn",1:"value")
+145 WRITE "<tr><td class='label'>Jobs Waiting:</td><td class='"_KMPCLASS_"'>"_KMPVAL_"</td></tr>"
+146 SET KMPVAL=KMPTASK.TasksRunning
SET KMPCLASS=$SELECT(KMPVAL>1099:"alert",KMPVAL>999:"warn",1:"value")
+147 WRITE "<tr><td class='label'>Tasks Running:</td><td class='"_KMPCLASS_"'>"_KMPVAL_"</td></tr>"
+148 SET KMPD=$PIECE(KMPTASK.CurrentTimestamp," ")
SET KMPT=$PIECE(KMPTASK.CurrentTimestamp," ",2)
+149 SET KMPTEMP=$PIECE(KMPD,"-",2)_"-"_$PIECE(KMPD,"-",3)_"-"_+KMPD_" "_$PIECE(KMPT,"Z")
+150 WRITE "<tr><td class='label'>Current Timestamp:</td><td class='value'>"_KMPTEMP_"</td></tr>"
+151 SET KMPD=$PIECE(KMPTASK.RunNodeTimestamp," ")
SET KMPT=$PIECE(KMPTASK.RunNodeTimestamp," ",2)
+152 SET KMPTEMP=$PIECE(KMPD,"-",2)_"-"_$PIECE(KMPD,"-",3)_"-"_+KMPD_" "_$PIECE(KMPT,"Z")
+153 WRITE "<tr><td class='label'>Run Node Timestamp:</td><td class='value'>"_KMPTEMP_"</td></tr>"
+154 ; Status list
+155 WRITE "<tr><td colspan=2> </td></tr>"
+156 WRITE "<tr><td class='label'>Status List:</td>"
+157 WRITE "<td><table>"
+158 SET KMPSDET=KMPTASK.StatusDetails
+159 SET KMPITR=KMPSDET.%GetIterator()
+160 SET KMPI=KMPITR.%GetNext(.KMPKEY,.KMPVAL)
+161 WRITE "<tr><td class='label'>Node:</td><td class='value'>"_KMPVAL.Node_"</td></tr>"
+162 WRITE "<tr><td class='label'>Weight:</td><td class='value'>"_KMPVAL.Weight_"</td></tr>"
+163 WRITE "<tr><td class='label'>Status:</td><td class='value'>"_KMPVAL.Status_"</td></tr>"
+164 WRITE "<tr><td class='label'>Time:</td><td class='value'>"_KMPVAL.Time_"</td></tr>"
+165 WRITE "<tr><td class='label'>$J:</td><td class='value'>"_KMPVAL.JobNumber_"</td></tr>"
+166 WRITE "<tr><td class='label'>Execute:</td><td class='value'>"_KMPVAL.Execute_"</td></tr>"
+167 WRITE "<tr><td class='label'>Message:</td><td class='value'>"_KMPTASK.StatusMessage_"</td></tr>"
+168 WRITE "</table></td></tr>"
+169 ; schedule list
+170 WRITE "<tr><td colspan=2> </td></tr>"
+171 WRITE "<tr><td class='label'>Schedule List:</td>"
+172 WRITE "<td><table>"
+173 SET KMPVAL=KMPTASK.TasksScheduled
SET KMPCLASS=$SELECT(KMPVAL>2999:"alert",KMPVAL>2899:"warn",1:"value")
+174 WRITE "<tr><td class='label'>Tasks Scheduled:</td><td class='"_KMPCLASS_"'>"_KMPVAL_"</td></tr>"
+175 SET KMPVAL=KMPTASK.TasksLate
SET KMPCLASS=$SELECT(KMPVAL>29:"alert",KMPVAL>19:"warn",1:"value")
+176 WRITE "<tr><td class='label'>Tasks Late:</td><td class='"_KMPCLASS_"'>"_KMPVAL_"</td></tr>"
+177 WRITE "<tr><td class='label'>First Task Late by:</td><td class='"_KMPCLASS_"'>"_KMPTASK.FirstLateTaskSeconds_"</td></tr>"
+178 WRITE "</table></td></tr>"
+179 ; io list
+180 WRITE "<tr><td colspan=2> </td></tr>"
+181 WRITE "<tr><td class='label'>IO List:</td>"
+182 WRITE "<td><table>"
+183 WRITE "<tr><td class='label'>Last Scan:</td><td class='value'>"_KMPTASK.LastScan_"</td></tr>"
+184 WRITE "<tr><td class='label'>Last Device:</td><td class='value'>"_KMPTASK.LastDev_"</td></tr>"
+185 WRITE "<tr><td class='label'>Device Details:</td><td class='value'>"_KMPTASK.DeviceDetails_"</td></tr>"
+186 WRITE "<tr><td class='label'>Tasks Waiting on IO:</td><td class='value'>"_KMPTASK.TotalTasksWaitingIo_"</td></tr>"
+187 WRITE "</table></td></tr>"
+188 ;
+189 ; sub managers
+190 WRITE "<tr><td colspan=2> </td></tr>"
+191 WRITE "<tr><td class='label'>Waiting on Sub-Managers:</td><td class='value'>"_KMPTASK.SubWait_"</td></tr>"
+192 WRITE "<tr><td colspan=2> </td></tr>"
+193 ;
+194 WRITE "<tr><td colspan=2 valign='top'>"
+195 WRITE "<table>"
+196 WRITE "<tr><th>Node</th><th>Count</th><th>Status</th><th>No Start Flag</th></tr>"
+197 SET KMPSMGR=KMPTASK.SubManagerStatus
+198 SET KMPARR=##class(KMP.Utilities).toArray(KMPSMGR)
+199 FOR KMPI=1:1:KMPARR.Count()
Begin DoDot:1
+200 SET KMPLIST=KMPARR.GetAt(KMPI)
+201 WRITE "<tr><td class='value'>"_KMPLIST.Node_"</td>"
+202 WRITE "<td class='value'>"_KMPLIST.Count_"</td>"
+203 WRITE "<td class='value'>"_KMPLIST.Status_"</td>"
+204 WRITE "<td class='value'>"_KMPLIST.NoStart_"</td></tr>"
End DoDot:1
+205 WRITE "</table></td></tr>"
+206 ;
+207 WRITE "<tr><td colspan=2 valign='top'>"
+208 WRITE "<table>"
+209 WRITE "<tr><th>Task</th><th>Next Run</th></tr>"
+210 SET KMPFTASKS=KMPTASK.FutureTasks
+211 SET KMPARR=##class(KMP.Utilities).toArray(KMPFTASKS)
+212 FOR KMPI=1:1:KMPARR.Count()
Begin DoDot:1
+213 SET KMPLIST=KMPARR.GetAt(KMPI)
+214 SET KMPCLASS=$SELECT(KMPLIST.TaskDate="Not Scheduled":"alert",1:"value")
+215 WRITE "<tr><td class='value'>"_KMPLIST.Task_"</td>"
+216 WRITE "<td class='"_KMPCLASS_"'>"_KMPLIST.TaskDate_"</td></tr>"
End DoDot:1
+217 WRITE "</table></td></tr>"
+218 ;
+219 WRITE "</table></td>"
+220 ;
+221 ; Start Mail Queues Column
+222 WRITE "<td valign='top'><table>"
+223 WRITE "<tr valign='top'><td colspan=3 valign='top'><h2>Mail Queues</h2></td></tr>"
+224 WRITE "<tr><td class='label'>Total Messages Queued:</td><td class='value'>"_KMPMAIL.TotalMessagesQueued_"</td></tr>"
+225 WRITE "<tr><td class='label'>Total Domains:</td><td class='value'>"_KMPMAIL.TotalDomains_"</td></tr>"
+226 WRITE "<tr><td colspan=3> </td></tr>"
+227 WRITE "<tr><td colspan=3><table>"
+228 WRITE "<tr><th>Mail Domain</th><th>Messages</th><th>Link</th></tr>"
+229 SET KMPDARR=KMPMAIL.Queues
+230 SET KMPARR=##class(KMP.Utilities).toArray(KMPDARR)
+231 FOR KMPI=1:1:KMPARR.Count()
Begin DoDot:1
+232 SET KMPLIST=KMPARR.GetAt(KMPI)
+233 WRITE "<tr><td class='value'>"_KMPLIST.Domain_"</td>"
+234 WRITE "<td class='value'>"_$PIECE(KMPLIST.MessageData,"^",1)_"</td>"
+235 WRITE "<td class='value'>"_$PIECE(KMPLIST.MessageData,"^",2)_"</td></tr>"
End DoDot:1
+236 WRITE "</table></td></tr>"
+237 ;
+238 WRITE "<tr><td colspan=2> </td></tr>"
+239 WRITE "<tr><td colspan=2 align='center'><h2>Patch Installs</td></tr>"
+240 WRITE "<tr><td colspan=2 align='center'>"_KMPFDIS_" through "_KMPTDIS_"</td></tr>"
+241 WRITE "<tr><td colspan=2> </td></tr>"
+242 SET KMPARR=##class(KMP.Utilities).toArray(KMPPARR)
+243 FOR KMPI=1:1:KMPARR.Count()
Begin DoDot:1
+244 SET KMPLIST=KMPARR.GetAt(KMPI)
+245 WRITE "<tr><td>"_KMPLIST.Patch_"</td>"
+246 WRITE "<td class='value'>"_KMPLIST.InstallDate_"</td></tr>"
End DoDot:1
+247 ;
+248 WRITE "</table></td>"
+249 ;
+250 WRITE "</tr></table>"
+251 WRITE "</body></html>"
+252 QUIT