package org.infosec.ismp.applet.manager.component.panel.database; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.util.List; import javax.swing.BorderFactory; import javax.swing.JPanel; import javax.swing.JTextField; import javax.swing.SwingUtilities; import javax.swing.Timer; import javax.swing.table.DefaultTableModel; import org.infosec.ismp.applet.manager.application.dynamicInfo.DynamicInfo; import org.infosec.ismp.applet.manager.component.panel.SJTUConst; import org.infosec.ismp.applet.manager.component.panel.reflash.HostRefreshPanelUI; import org.infosec.ismp.applet.manager.component.panel.utils.SJTUUtils; import org.infosec.ismp.applet.manager.component.panel.utils.TableUtil; import org.infosec.ismp.applet.manager.component.panel.view.BorderPanel; import org.infosec.ismp.applet.manager.model.NodeModel; import org.infosec.ismp.applet.manager.utilities.NullFilter; import org.infosec.ismp.manager.rmi.db.model.DatabaseResultStatus; import org.infosec.ismp.manager.rmi.db.model.DeadLock; import org.infosec.ismp.manager.rmi.db.model.ProcessMemory; import org.infosec.ismp.manager.rmi.db.model.Workspace; import org.infosec.ismp.manager.rmi.tm.manager.model.DeviceInformation; import twaver.swing.TableLayout; /** * Orcale 展示面板 * @author 肖高峰 * */ @SuppressWarnings("serial") public class OraclePanel extends JPanel { private DatabaseResultStatus oracleStatus; private OracleInfoPanel oracleInfoPanel = new OracleInfoPanel("Oracle信息"); private DeadLockPanel deadLockPanel = new DeadLockPanel("死锁"); private ProcessMemoryPanel processMemeoryPanel = new ProcessMemoryPanel("进程、内存 管理"); private TablespaceUserPanel tablespaceUserPanel = new TablespaceUserPanel("表空间使用信息"); private NodeModel node; private boolean flag = true ; private DataRefresh dataRefresh; public OraclePanel(NodeModel node) { this.node = node; initGUI(); node.addPropertyChangeListener(new PropertyChangeListener() { public void propertyChange(PropertyChangeEvent evt) { if(evt.getPropertyName().equals("CP:"+NodeModel.DEVICE_INFORMATION)) { DeviceInformation deviceInfo = (DeviceInformation)evt.getNewValue(); if(flag) { dataRefresh = new DataRefresh(deviceInfo); dataRefresh.start(); flag = false; } dataRefresh.setDeviceInfo(deviceInfo); } } }); } /** * 引用数据线程。 */ class DataRefresh extends Thread { DeviceInformation deviceInfo = null; public DataRefresh(DeviceInformation info) { this.deviceInfo = info; } public void run() { Timer timer = new Timer(5000, new ActionListener() { public void actionPerformed(ActionEvent e) { SwingUtilities.invokeLater(new Runnable() { public void run() { if(deviceInfo.getDatabaseResultStatus() != null) { oracleStatus = deviceInfo.getDatabaseResultStatus(); node.setImage(node.activeBigICO()); node.setIcon(node.activeSmallICO()); } else { node.setImage(""); node.setIcon(""); } OraclePanel.this.reflashData(); } }); } }); timer.start(); DynamicInfo.addDynameTimer(node.getNodeId(), timer); } public void setDeviceInfo(DeviceInformation deviceInfo) { this.deviceInfo = deviceInfo; } } private void initGUI() { double rows[] = { TableLayout.PREFERRED, TableLayout.FILL, TableLayout.FILL, TableLayout.FILL }; double cols[] = { TableLayout.FILL }; TableLayout layout = new TableLayout(cols, rows, 10, 15); this.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); this.setLayout(layout); this.add(oracleInfoPanel, "0,0,0,0"); this.add(tablespaceUserPanel,"0,1"); this.add(processMemeoryPanel,"0,2"); this.add(deadLockPanel, "0,3"); } public void reflashData() { oracleInfoPanel.updateField(); deadLockPanel.updateField(); processMemeoryPanel.updateField(); tablespaceUserPanel.updateField(); } class OracleInfoPanel extends BorderPanel { private JTextField txtCacheHitRatio = SJTUUtils.getTextField(); private JTextField txtCpuUsed = SJTUUtils.getTextField(); private JTextField txtTransactionValue = SJTUUtils.getTextField(); private JTextField txtSession = SJTUUtils.getTextField(); private JTextField txtDatabaseName = SJTUUtils.getTextField(); private JTextField txtCreateDate = SJTUUtils.getTextField(); public OracleInfoPanel(String title) { super(title); initGUI(); } @Override public void initGUI() { this.setBackground(SJTUConst.PANELBACKGROUND); double rows[] = { TableLayout.PREFERRED, TableLayout.PREFERRED, TableLayout.PREFERRED }; double cols[] = { TableLayout.PREFERRED, TableLayout.FILL, TableLayout.PREFERRED, TableLayout.FILL }; TableLayout layout = new TableLayout(cols, rows, 10, 5); this.setLayout(layout); this.add(SJTUUtils.getLabel("数据库名称"), "0,0"); this.add(txtDatabaseName, "1,0"); this.add(SJTUUtils.getLabel("CPU 使用率"), "0,1"); this.add(txtCpuUsed, "1,1"); this.add(SJTUUtils.getLabel("事务数"), "0,2"); this.add(txtTransactionValue, "1,2"); this.add(SJTUUtils.getLabel("Session 数量"), "2,0"); this.add(txtSession, "3,0"); this.add(SJTUUtils.getLabel("Cache 命中率"), "2,1"); this.add(txtCacheHitRatio, "3,1"); this.add(SJTUUtils.getLabel("创建时间"), "2,2"); this.add(txtCreateDate, "3,2"); } @SuppressWarnings("deprecation") protected void updateField() { if (oracleStatus != null) { txtCacheHitRatio.setText((int)(oracleStatus.getCacheHitRatio() * 100) + "%"); txtCpuUsed.setText(oracleStatus.getCpuBusyRatio() * 100 + ""); txtTransactionValue.setText(oracleStatus.getTransactionNum() + ""); txtSession.setText(oracleStatus.getSessionNum() + ""); txtCreateDate.setText(oracleStatus.getCreateTime().toLocaleString()); txtDatabaseName.setText(node.getName()); } else { txtCacheHitRatio.setText(""); txtCpuUsed.setText(""); txtTransactionValue.setText(""); txtSession.setText(""); txtCreateDate.setText(""); } } } class DeadLockPanel extends BorderPanel { private Object[][] data; private String[] columnNames = { "Oracle用户名", "Session唯一标识", "系统程序名", "系统机器名", "系统用户名", "锁类型", "会话保持的锁的模式", "会话申请的锁的模式", "当前锁是否阻塞另一个锁", "死锁时间(单位:秒)" }; private DefaultTableModel model = new DefaultTableModel(data, columnNames); public DeadLockPanel(String title) { super(title); initGUI(); } @Override public void initGUI() { TableUtil.addTable(this,model); } protected void updateField() { if (oracleStatus != null) { List<DeadLock> list = oracleStatus.getDeadLocks(); data = new Object[list.size()][columnNames.length]; if (list != null && list.size() > 0) { int i = 0; for (DeadLock deadLock : list) { data[i][0] = deadLock.getUsername(); data[i][1] = deadLock.getSid(); data[i][2] = deadLock.getProgram(); data[i][3] = deadLock.getMachine(); data[i][4] = deadLock.getOsuser(); data[i][5] = deadLock.getType(); data[i][6] = deadLock.getImode(); data[i][7] = deadLock.getRequest(); data[i][8] = deadLock.getBlock(); data[i][9] = deadLock.getCtime(); i++; } } else { data = null; } } model.setDataVector(data, columnNames); } } class ProcessMemoryPanel extends BorderPanel { private Object[][] data; private String[] columnNames = { "Oracle进程ID", "进程名称", "已使用内存(单位:M)", "已分配内存(单位:M)", "最大已分配内存(单位:M)", "利用率"}; private DefaultTableModel model = new DefaultTableModel(data, columnNames); public ProcessMemoryPanel(String title) { super(title); initGUI(); } @Override public void initGUI() { TableUtil.addTable(this,model); } protected void updateField() { if (oracleStatus != null) { List<ProcessMemory> list = oracleStatus.getProcessMemories(); data = new Object[list.size()][columnNames.length]; if (list != null && list.size() > 0) { int i = 0; for (ProcessMemory processMemory : list) { data[i][0] = processMemory.getPid(); data[i][1] = processMemory.getName(); data[i][2] = processMemory.getPgaUsedMem(); data[i][3] = processMemory.getPgaAllocMem(); data[i][4] = processMemory.getPgaMaxMem(); data[i][5] = processMemory.getUsedRatio(); i++; } } else { data = null; } } model.setDataVector(data, columnNames); } } class TablespaceUserPanel extends BorderPanel { private Object[][] data ; private String[] columnNames = { "表空间名", "表空间类型", "表空间大小(单位:M)", "已使用大小(单位:M)", "利用率"}; private DefaultTableModel model = new DefaultTableModel(data, columnNames); public TablespaceUserPanel(String title) { super(title); initGUI(); } @Override public void initGUI() { TableUtil.addTable(this,model); } protected void updateField() { if (oracleStatus != null) { List<Workspace> list = oracleStatus.getWorkspaces(); data = new Object[list.size()][columnNames.length]; if (list != null && list.size() > 0) { int i = 0; for (Workspace wokspace : list) { data[i][0] = wokspace.getName(); data[i][1] = wokspace.getType(); data[i][2] = wokspace.getCapability(); data[i][3] = wokspace.getUsedSpace(); data[i][4] = wokspace.getUsedRatio(); i++; } } else { data = null; } } model.setDataVector(data, columnNames); } } public DatabaseResultStatus getOracleStatus() { return oracleStatus; } public void setOracleStatus(DatabaseResultStatus oracleStatus) { this.oracleStatus = oracleStatus; } public static void main(String[] args) { // OraclePanel o = new OraclePanel(); // SJTUUtils.showCompoentInFrame(o); // o.reflashData(); } }