Browse Source

REPORT-135687 优化显示

1. 添加排序支持,序号,时间和大小排序
2. 日志异步记录
fbp/release
vito 2 months ago
parent
commit
ad45176383
  1. 83
      designer-base/src/main/java/com/fr/design/remote/ui/debug/RemoteDesignNetWorkHelper.java
  2. 67
      designer-base/src/main/java/com/fr/design/remote/ui/debug/RemoteDesignNetWorkTablePane.java
  3. 32
      designer-base/src/main/java/com/fr/design/remote/ui/debug/RemoteDesignNetWorkTableRowSorter.java

83
designer-base/src/main/java/com/fr/design/remote/ui/debug/RemoteDesignNetWorkHelper.java

@ -0,0 +1,83 @@
package com.fr.design.remote.ui.debug;
import com.fr.stable.StringUtils;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* 帮助类
*
* @author vito
* @since 11.0
* Created on 2024/10/11
*/
public class RemoteDesignNetWorkHelper {
private static final int UNIT = 1000;
private static final int UNIT_BYTES = 1024;
private static final String SECOND = "s";
private static final int K = 1024;
private static final int MS = 1000;
static String dateFormat(Date date) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
return dateFormat.format(date);
}
static String simpleTime(long time) {
if (time < 0) {
return time + "";
} else if (time < MS) {
return time + " ms";
} else {
DecimalFormat df = new DecimalFormat("#.0");
return df.format((float) time / MS) + " s";
}
}
static String simpleSize(long bytes) {
if (bytes < 0) {
return bytes + "";
} else if (bytes < K) {
return bytes + " B";
} else {
DecimalFormat df = new DecimalFormat("#.00");
return df.format((float) bytes / K) + " K";
}
}
static long parseCostToMS(String timeStr) {
String[] split = timeStr.split(" ");
if (split.length > 1) {
double number = Double.parseDouble(split[0]);
String unit = split[1].toLowerCase();
if (StringUtils.equals(unit, SECOND)) {
return (long) (number * UNIT);
}
return (long) number;
}
return 0;
}
static long parseSizeToBytes(String sizeStr) {
String[] split = sizeStr.split(" ");
if (split.length > 1) {
double number = Double.parseDouble(split[0]);
String unit = split[1].toUpperCase();
switch (unit) {
case "K":
return (long) (number * UNIT_BYTES);
case "M":
return (long) (number * UNIT_BYTES * UNIT_BYTES);
case "G":
return (long) (number * UNIT_BYTES * UNIT_BYTES * UNIT_BYTES);
default:
return (long) number;
}
}
return 0;
}
}

67
designer-base/src/main/java/com/fr/design/remote/ui/debug/RemoteDesignNetWorkTablePane.java

@ -14,17 +14,19 @@ import javax.swing.JPanel;
import javax.swing.JScrollPane; import javax.swing.JScrollPane;
import javax.swing.JTable; import javax.swing.JTable;
import javax.swing.JToolBar; import javax.swing.JToolBar;
import javax.swing.SwingUtilities;
import javax.swing.border.EmptyBorder; import javax.swing.border.EmptyBorder;
import javax.swing.table.DefaultTableModel; import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellRenderer; import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumn; import javax.swing.table.TableColumn;
import java.awt.BorderLayout; import java.awt.BorderLayout;
import java.awt.Component; import java.awt.Component;
import java.text.DecimalFormat; import java.util.concurrent.atomic.AtomicLong;
import java.text.SimpleDateFormat;
import java.util.Date;
import static com.fanruan.workplace.http.debug.RemoteDesignDebugEvent.REMOTE_HTTP_REQUEST; import static com.fanruan.workplace.http.debug.RemoteDesignDebugEvent.REMOTE_HTTP_REQUEST;
import static com.fr.design.remote.ui.debug.RemoteDesignNetWorkHelper.dateFormat;
import static com.fr.design.remote.ui.debug.RemoteDesignNetWorkHelper.simpleSize;
import static com.fr.design.remote.ui.debug.RemoteDesignNetWorkHelper.simpleTime;
/** /**
* 远程设计网络调试面板 * 远程设计网络调试面板
@ -34,29 +36,29 @@ import static com.fanruan.workplace.http.debug.RemoteDesignDebugEvent.REMOTE_HTT
* Created on 2024/9/24 * Created on 2024/9/24
*/ */
public class RemoteDesignNetWorkTablePane extends JPanel { public class RemoteDesignNetWorkTablePane extends JPanel {
private static final int K = 1024;
private static final int MS = 1000;
private static final int TWO = 2; private static final int TWO = 2;
private JTable uiTable; private JTable uiTable;
private DefaultTableModel model; private DefaultTableModel model;
private int count = 0; private final AtomicLong count = new AtomicLong(0);
private boolean scrollRectToVisible = false; private boolean scrollRectToVisible = false;
private final Listener<RequestInfo> remoteDesignDebugListener = new Listener<RequestInfo>() { private final Listener<RequestInfo> remoteDesignDebugListener = new Listener<RequestInfo>() {
@Override @Override
public void on(Event event, RequestInfo requestInfo) { public void on(Event event, RequestInfo requestInfo) {
model.addRow(new Object[]{ SwingUtilities.invokeLater(() -> {
count++, model.addRow(new Object[]{
dateFormat(requestInfo.getDate()), count.incrementAndGet(),
requestInfo.getPath().substring(WorkContext.getCurrent().getPath().length() - 1), dateFormat(requestInfo.getDate()),
requestInfo.getStatus(), requestInfo.getPath().substring(WorkContext.getCurrent().getPath().length() - 1),
simpleTime(requestInfo.getConsume()), requestInfo.getStatus(),
simpleSize(requestInfo.getRequestSize()), simpleTime(requestInfo.getConsume()),
simpleSize(requestInfo.getResponseSize()), simpleSize(requestInfo.getRequestSize()),
requestInfo.getSendBody(), simpleSize(requestInfo.getResponseSize()),
requestInfo.getReturnBody(), requestInfo.getSendBody(),
requestInfo.getReturnBody(),
});
adjustColumnWidths(uiTable);
}); });
adjustColumnWidths(uiTable);
} }
}; };
@ -84,6 +86,7 @@ public class RemoteDesignNetWorkTablePane extends JPanel {
model.addColumn("request"); model.addColumn("request");
model.addColumn("response"); model.addColumn("response");
uiTable = new JTable(model); uiTable = new JTable(model);
uiTable.setRowSorter(new RemoteDesignNetWorkTableRowSorter(model));
add(new JScrollPane(uiTable), BorderLayout.CENTER); add(new JScrollPane(uiTable), BorderLayout.CENTER);
} }
@ -110,10 +113,10 @@ public class RemoteDesignNetWorkTablePane extends JPanel {
remove.setToolTipText("Clear Records"); remove.setToolTipText("Clear Records");
remove.addActionListener(e -> { remove.addActionListener(e -> {
model.setRowCount(0); model.setRowCount(0);
count = 0; count.set(0);
}); });
refresh.setToolTipText("Always Scroll To Visible"); refresh.setToolTipText("Always Scroll To Visible");
refresh.addActionListener(e -> scrollRectToVisible = !scrollRectToVisible); refresh.addChangeListener(e -> scrollRectToVisible = !scrollRectToVisible);
jToolBar.add(run); jToolBar.add(run);
jToolBar.add(forbid); jToolBar.add(forbid);
jToolBar.add(remove); jToolBar.add(remove);
@ -152,31 +155,5 @@ public class RemoteDesignNetWorkTablePane extends JPanel {
} }
} }
private static String dateFormat(Date date) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return dateFormat.format(date);
}
private static String simpleTime(long time) {
if (time < 0) {
return time + "";
} else if (time < MS) {
return time + " ms";
} else {
DecimalFormat df = new DecimalFormat("#.0");
return df.format((float) time / MS) + " s";
}
}
private static String simpleSize(long bytes) {
if (bytes < 0) {
return bytes + "";
} else if (bytes < K) {
return bytes + " B";
} else {
DecimalFormat df = new DecimalFormat("#.00");
return df.format((float) bytes / K) + " K";
}
}
} }

32
designer-base/src/main/java/com/fr/design/remote/ui/debug/RemoteDesignNetWorkTableRowSorter.java

@ -0,0 +1,32 @@
package com.fr.design.remote.ui.debug;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableRowSorter;
import java.util.Comparator;
/**
* 行排序器
*
* @author vito
* @since 11.0
* Created on 2024/10/11
*/
public class RemoteDesignNetWorkTableRowSorter extends TableRowSorter<DefaultTableModel> {
public RemoteDesignNetWorkTableRowSorter(DefaultTableModel model) {
super(model);
setComparator(0, (Comparator<Long>) Long::compareTo);
setComparator(4, Comparator.comparingLong(RemoteDesignNetWorkHelper::parseCostToMS));
setComparator(5, Comparator.comparingLong(RemoteDesignNetWorkHelper::parseSizeToBytes));
setComparator(6, Comparator.comparingLong(RemoteDesignNetWorkHelper::parseSizeToBytes));
}
@Override
public boolean isSortable(int column) {
return column == 0
|| column == 4
|| column == 5
|| column == 6;
}
}
Loading…
Cancel
Save