From 3315e1556fae6e37adc5b0c443f35e5f2d4e8074 Mon Sep 17 00:00:00 2001 From: evan-miller-jumpmind <70151986+evan-miller-jumpmind@users.noreply.github.com> Date: Fri, 16 Jun 2023 15:46:36 -0400 Subject: [PATCH] 0005876: Added job history dialog to Manage Jobs screen --- .../statistic/IStatisticManager.java | 2 ++ .../symmetric/statistic/JobStats.java | 10 +++++++ .../statistic/JobStatsByPeriodMap.java | 22 ++++++++++++++ .../symmetric/statistic/StatisticManager.java | 11 +++++++ .../vaadin/ui/common/ResizableDialog.java | 30 ++++++++++++++++++- 5 files changed, 74 insertions(+), 1 deletion(-) create mode 100644 symmetric-core/src/main/java/org/jumpmind/symmetric/statistic/JobStatsByPeriodMap.java diff --git a/symmetric-core/src/main/java/org/jumpmind/symmetric/statistic/IStatisticManager.java b/symmetric-core/src/main/java/org/jumpmind/symmetric/statistic/IStatisticManager.java index f3de615636..accec1064d 100644 --- a/symmetric-core/src/main/java/org/jumpmind/symmetric/statistic/IStatisticManager.java +++ b/symmetric-core/src/main/java/org/jumpmind/symmetric/statistic/IStatisticManager.java @@ -125,6 +125,8 @@ public void addRouterStats(long startDataId, long endDataId, long dataReadCount, public Map getWorkingChannelStats(); + public List getWorkingJobStats(); + public HostStats getWorkingHostStats(); public TreeMap> getNodeStatsForPeriod(Date start, Date end, String nodeId, int periodSizeInMinutes); diff --git a/symmetric-core/src/main/java/org/jumpmind/symmetric/statistic/JobStats.java b/symmetric-core/src/main/java/org/jumpmind/symmetric/statistic/JobStats.java index 11b841c195..5745f6ed6b 100644 --- a/symmetric-core/src/main/java/org/jumpmind/symmetric/statistic/JobStats.java +++ b/symmetric-core/src/main/java/org/jumpmind/symmetric/statistic/JobStats.java @@ -59,6 +59,16 @@ public JobStats(String jobName, long startTime, long endTime, long processedCoun this.errorMessage = e.getClass().getName() + ": " + e.getMessage() + "\r\n" + AppUtils.formatStackTrace(e.getStackTrace(), 50, false); } + public JobStats(JobStats source) { + super(source.getNodeId(), source.getHostName(), source.getStartTime(), source.getEndTime()); + this.jobName = source.getJobName(); + this.processedCount = source.getProcessedCount(); + this.targetNodeId = source.getTargetNodeId(); + this.targetNodeCount = source.getTargetNodeCount(); + this.errorFlag = source.isErrorFlag(); + this.errorMessage = source.getErrorMessage(); + } + public String getJobName() { return jobName; } diff --git a/symmetric-core/src/main/java/org/jumpmind/symmetric/statistic/JobStatsByPeriodMap.java b/symmetric-core/src/main/java/org/jumpmind/symmetric/statistic/JobStatsByPeriodMap.java new file mode 100644 index 0000000000..85acd8f776 --- /dev/null +++ b/symmetric-core/src/main/java/org/jumpmind/symmetric/statistic/JobStatsByPeriodMap.java @@ -0,0 +1,22 @@ +package org.jumpmind.symmetric.statistic; + +import java.util.Date; +import java.util.List; + +public class JobStatsByPeriodMap extends AbstractStatsByPeriodMap { + private static final long serialVersionUID = 1L; + + public JobStatsByPeriodMap(Date start, Date end, List list, int periodSizeInMinutes) { + super(start, end, list, periodSizeInMinutes); + } + + @Override + protected void add(Date periodStart, JobStats stat) { + put(periodStart, stat); + } + + @Override + protected void addBlank(Date periodStart) { + put(periodStart, new JobStats()); + } +} diff --git a/symmetric-core/src/main/java/org/jumpmind/symmetric/statistic/StatisticManager.java b/symmetric-core/src/main/java/org/jumpmind/symmetric/statistic/StatisticManager.java index dea90e4b1b..efb65faf6f 100644 --- a/symmetric-core/src/main/java/org/jumpmind/symmetric/statistic/StatisticManager.java +++ b/symmetric-core/src/main/java/org/jumpmind/symmetric/statistic/StatisticManager.java @@ -599,6 +599,17 @@ public Map getWorkingChannelStats() { } } + public List getWorkingJobStats() { + if (jobStats != null) { + List stats = new ArrayList(); + for (JobStats stat : jobStats) { + stats.add(new JobStats(stat)); + } + return stats; + } + return new ArrayList(); + } + public HostStats getWorkingHostStats() { if (this.hostStats != null) { return new HostStats(this.hostStats); diff --git a/symmetric-sqlexplorer/src/main/java/org/jumpmind/vaadin/ui/common/ResizableDialog.java b/symmetric-sqlexplorer/src/main/java/org/jumpmind/vaadin/ui/common/ResizableDialog.java index 334bd11fcd..bf21044aad 100644 --- a/symmetric-sqlexplorer/src/main/java/org/jumpmind/vaadin/ui/common/ResizableDialog.java +++ b/symmetric-sqlexplorer/src/main/java/org/jumpmind/vaadin/ui/common/ResizableDialog.java @@ -34,6 +34,8 @@ import com.vaadin.flow.component.dialog.Dialog; import com.vaadin.flow.component.orderedlayout.HorizontalLayout; import com.vaadin.flow.component.html.Span; +import com.vaadin.flow.component.icon.Icon; +import com.vaadin.flow.component.icon.VaadinIcon; import com.vaadin.flow.component.UI; import com.vaadin.flow.component.orderedlayout.VerticalLayout; @@ -53,6 +55,10 @@ public ResizableDialog(String caption) { } public ResizableDialog(String caption, boolean addEscapeShortcut) { + this(caption, addEscapeShortcut, false); + } + + public ResizableDialog(String caption, boolean addEscapeShortcut, boolean addCloseIcon) { setModal(true); setResizable(true); VerticalLayout content = new VerticalLayout(); @@ -63,7 +69,20 @@ public ResizableDialog(String caption, boolean addEscapeShortcut) { captionLabel = new Label(caption + "
"); captionLabel.setWidthFull(); captionLabel.getStyle().set("margin", null); - content.add(captionLabel); + if (addCloseIcon) { + HorizontalLayout captionLayout = new HorizontalLayout(captionLabel, buildCloseIcon()); + captionLayout.setWidthFull(); + captionLayout.expand(captionLabel); + content.add(captionLayout); + } else { + content.add(captionLabel); + } + } else if (addCloseIcon) { + HorizontalLayout closeIconLayout = new HorizontalLayout(); + closeIconLayout.setWidthFull(); + closeIconLayout.addAndExpand(new Span()); + closeIconLayout.add(buildCloseIcon()); + content.add(closeIconLayout); } innerContent = new VerticalLayout(); innerContent.setWidthFull(); @@ -99,6 +118,15 @@ protected void addComponents(Component... components) { } } + protected Icon buildCloseIcon() { + Icon closeIcon = new Icon(VaadinIcon.CLOSE); + closeIcon.setSize("36px"); + closeIcon.getStyle().set("min-width", "36px"); + closeIcon.setClassName("mouse_pointer"); + closeIcon.addClickListener(event -> close()); + return closeIcon; + } + protected Button buildCloseButton() { Button closeButton = new Button("Close"); closeButton.addThemeVariants(ButtonVariant.LUMO_PRIMARY);