📄 mpdmon.java
字号:
public class MPDMon extends javax.swing.JFrame{ private int port; private String host; public String mpd_id; private String selecttype; private String nodesstring; public int jobid; private String[] load_data; private String[] mem_data; private javax.swing.JCheckBox load_indep; private javax.swing.JLabel load_num; private javax.swing.JLabel time_num; private javax.swing.JPanel nodepanel; private javax.swing.JPanel load_output; private javax.swing.JPanel mem_output; private javax.swing.JPanel myr_output; private javax.swing.JPanel options; private javax.swing.JPanel load_options; private javax.swing.JPanel mem_options; private javax.swing.JPanel myr_options; private javax.swing.JPanel sys_options; private javax.swing.JPanel type_options; private javax.swing.JScrollPane load_scroller; private javax.swing.JScrollPane mem_scroller; private javax.swing.JScrollPane options_scroller; private javax.swing.JTextField rangetext; private javax.swing.JTextField jobidtext; private javax.swing.JButton nodes_jobid_button; private javax.swing.JButton nodes_range_button; private MyrTable myrtable; private MyrTable memtable; private myr_counter_box myrboxes; private mem_counter_box memboxes; private int updatetime; private javax.swing.JTabbedPane main_tabpane; private mpd_procs procs; private java.net.Socket mpdsock; private java.io.InputStreamReader in; private java.io.OutputStreamWriter out; private java.util.LinkedList datatypes; private NodeParser nparser; public static void main(String[] args) { long time; MPDMon MonWin; if (args.length < 2) { System.out.println("Usage: java MPDMon <host> <port>"); System.exit(1); } MonWin = new MPDMon(args); MonWin.pack(); MonWin.setVisible(true); for (;;) { time = System.currentTimeMillis(); while (System.currentTimeMillis() - time < MonWin.getUpdateTime()) { } MonWin.update(MonWin.mpd_id, MonWin.jobid); MonWin.repaint(); } } public MPDMon(String[] args) { super("MPD Remote Monitor"); // System.out.println("started constructor"); this.addWindowListener(new WindowCloser()); this.addComponentListener(new WindowResizer()); Object[] sockstuff; int load_length; int mem_length; CheckBoxListener clisten; javax.swing.JSlider load_slide; javax.swing.JSlider time_slide; javax.swing.JCheckBox load_type_box; javax.swing.JCheckBox mem_type_box; javax.swing.JCheckBox myr_type_box; javax.swing.JButton mem_types_aux; javax.swing.JButton myr_types_aux; javax.swing.JButton myr_reset; javax.swing.JRadioButton nodes_range; javax.swing.JRadioButton nodes_jobid; javax.swing.JRadioButton nodes_all; javax.swing.JPanel rangepanel; javax.swing.JPanel jobidpanel; javax.swing.JPanel radiobuttonpanel; javax.swing.JPanel textpanel; javax.swing.JLabel rangelabel; javax.swing.JLabel jobidlabel; javax.swing.ButtonGroup bgroup; NodeSelectListener nslisten; ReqTypeOKButtonListener rtoblisten; mpd_id = ""; selecttype = "all"; nodesstring = ""; myrboxes = new myr_counter_box(); memboxes = new mem_counter_box(); myrtable = new MyrTable(); memtable = new MyrTable(); nodepanel = new javax.swing.JPanel(); load_options = new javax.swing.JPanel(); mem_options = new javax.swing.JPanel(); myr_options = new javax.swing.JPanel(); sys_options = new javax.swing.JPanel(); rangepanel = new javax.swing.JPanel(); jobidpanel = new javax.swing.JPanel(); textpanel = new javax.swing.JPanel(); radiobuttonpanel = new javax.swing.JPanel(); nslisten = new NodeSelectListener(); rtoblisten = new ReqTypeOKButtonListener(); nparser = new NodeParser(); datatypes = new java.util.LinkedList(); load_options.setBorder(new javax.swing.border.TitledBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createEtchedBorder(), "Load average options"))); mem_options.setBorder(new javax.swing.border.TitledBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createEtchedBorder(), "Memory use options"))); myr_options.setBorder(new javax.swing.border.TitledBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createEtchedBorder(), "Myrinet counter options"))); sys_options.setBorder(new javax.swing.border.TitledBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createEtchedBorder(), "System options"))); javax.swing.JLabel load_options_label = new javax.swing.JLabel("Load average history:"); javax.swing.JLabel mem_options_label = new javax.swing.JLabel("Memory use history:"); javax.swing.JLabel time_options_label = new javax.swing.JLabel("Update frequency(ms)"); rangelabel = new javax.swing.JLabel("Range:"); jobidlabel = new javax.swing.JLabel("Job ID:"); bgroup = new javax.swing.ButtonGroup(); host = args[0]; port = Integer.parseInt(args[1]); procs = new mpd_procs(); //*********************** updatetime = 3000; load_indep = new javax.swing.JCheckBox("Graphs scale independently", true); load_num = new javax.swing.JLabel(Integer.toString(100)); load_length = 100; mem_length = 100; //*********************** nodes_all = new javax.swing.JRadioButton("All nodes", true); nodes_range = new javax.swing.JRadioButton("Range/List of nodes"); nodes_jobid = new javax.swing.JRadioButton("Job ID"); nodes_all.setActionCommand("nodes_all"); nodes_range.setActionCommand("nodes_range"); nodes_jobid.setActionCommand("nodes_jobid"); nodes_all.addActionListener(nslisten); nodes_range.addActionListener(nslisten); nodes_jobid.addActionListener(nslisten); rangetext = new javax.swing.JTextField(10); jobidtext = new javax.swing.JTextField(4); // rangetext.setMaximumSize(new java.awt.Dimension(30,10)); // jobidtext.setMaximumSize(new java.awt.Dimension(30,10)); rangetext.setEnabled(false); jobidtext.setEnabled(false); time_num = new javax.swing.JLabel(Integer.toString(updatetime)); load_slide = new javax.swing.JSlider(10, 999, load_length); time_slide = new javax.swing.JSlider(500, 5000, updatetime); load_type_box = new javax.swing.JCheckBox("Load Averages", true); mem_type_box = new javax.swing.JCheckBox("Memory Statistics", false); myr_type_box = new javax.swing.JCheckBox("Myrinet Statistics", false); clisten = new CheckBoxListener(load_type_box, mem_type_box, myr_type_box); load_type_box.addItemListener(clisten); mem_type_box.addItemListener(clisten); myr_type_box.addItemListener(clisten); mem_types_aux = new javax.swing.JButton("Memory Statistics"); mem_types_aux.addMouseListener(new MemButtonListener()); myr_types_aux = new javax.swing.JButton("Myrinet Counters"); myr_types_aux.addMouseListener(new MyrButtonListener()); myr_reset = new javax.swing.JButton("Reset Counters"); myr_reset.addMouseListener(new ResetListener()); nodes_jobid_button = new javax.swing.JButton("OK"); nodes_range_button = new javax.swing.JButton("OK"); nodes_jobid_button.setActionCommand("jobid"); nodes_range_button.setActionCommand("range"); nodes_jobid_button.addActionListener(rtoblisten); nodes_range_button.addActionListener(rtoblisten); nodes_jobid_button.setEnabled(false); nodes_range_button.setEnabled(false); mpd_id = args[0] + "_" + Integer.toString(port); // System.out.println("about to try connect..."); sockstuff = connect(host, port, mpd_id); // System.out.println("connected!"); mpdsock = (java.net.Socket)sockstuff[0]; in = (java.io.InputStreamReader)sockstuff[1]; out = (java.io.OutputStreamWriter)sockstuff[2]; load_output = new javax.swing.JPanel(); mem_output = new javax.swing.JPanel(); myr_output = new javax.swing.JPanel(); options = new javax.swing.JPanel(); type_options = new javax.swing.JPanel(); main_tabpane = new javax.swing.JTabbedPane(); load_output.setLayout(new java.awt.GridLayout(0,10)); mem_output.setLayout(new java.awt.FlowLayout()); nodepanel.setLayout(new java.awt.GridLayout(0,5)); // rangepanel.setLayout(new java.awt.GridLayout(1,2)); // jobidpanel.setLayout(new java.awt.GridLayout(1,2)); radiobuttonpanel.setLayout(new java.awt.GridLayout(3,1)); textpanel.setLayout(new java.awt.GridLayout(2,1)); myr_output.setLayout(new javax.swing.BoxLayout(myr_output, javax.swing.BoxLayout.Y_AXIS)); mem_output.setLayout(new javax.swing.BoxLayout(mem_output, javax.swing.BoxLayout.Y_AXIS)); myr_output.add(myr_reset); myr_output.add(myrtable); mem_output.add(memtable); options.setLayout(new javax.swing.BoxLayout(options, javax.swing.BoxLayout.Y_AXIS)); type_options.setLayout(new javax.swing.BoxLayout(type_options, javax.swing.BoxLayout.Y_AXIS)); bgroup.add(nodes_all); bgroup.add(nodes_range); bgroup.add(nodes_jobid); radiobuttonpanel.add(nodes_all); radiobuttonpanel.add(nodes_range); radiobuttonpanel.add(nodes_jobid); rangepanel.add(rangelabel); rangepanel.add(rangetext); rangepanel.add(nodes_range_button); jobidpanel.add(jobidlabel); jobidpanel.add(jobidtext); jobidpanel.add(nodes_jobid_button); textpanel.add(rangepanel); textpanel.add(jobidpanel); load_options.add(load_options_label); load_options.add(load_slide); load_options.add(load_num); // load_options.add(load_indep); mem_options.add(mem_options_label); mem_options.add(mem_types_aux); myr_options.add(myr_types_aux); sys_options.add(time_options_label); sys_options.add(time_slide); sys_options.add(time_num); sys_options.add(radiobuttonpanel); sys_options.add(textpanel); type_options.add(load_type_box); type_options.add(mem_type_box); type_options.add(myr_type_box); load_slide.addChangeListener(new SliderListener(load_output, load_num)); //mem_slide.addChangeListener(new SliderListener()); time_slide.addChangeListener(new SliderListener(time_num)); //load_indep.addItemListener(new CheckBoxListener()); load_scroller = new javax.swing.JScrollPane(load_output, javax.swing.JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, javax.swing.JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); mem_scroller = new javax.swing.JScrollPane(mem_output, javax.swing.JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, javax.swing.JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); options_scroller = new javax.swing.JScrollPane(options, javax.swing.JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, javax.swing.JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); options.add(sys_options); //*********************** toggleVal("loadavg", true); //toggleVal("memusage", true); //toggleVal("myrinfo", true); //*********************** main_tabpane.addTab("Nodes", null, nodepanel, "Node list overview"); main_tabpane.addTab("Options", null, options_scroller, "Display options"); main_tabpane.addTab("Display Types", null, type_options, "Types of data to display"); this.getContentPane().add(main_tabpane); repaint(); // System.out.println("finished constructor"); } public void toggleVal(String val, boolean enabled) { if (enabled) { datatypes.add(val); if (val.equals("loadavg")) { main_tabpane.addTab("System Load", null, load_scroller, "System load levels"); options.add(load_options); } else if (val.equals("memusage")) { main_tabpane.addTab("Memory Usage", null, mem_scroller, "Memory Statistics"); options.add(mem_options); } else if (val.equals("myrinfo")) { main_tabpane.addTab("Myrinet Counters", null, myr_output, "Myrinet card *_cnt numbers"); options.add(myr_options); } } else { datatypes.remove(val); if (val.equals("loadavg")) { main_tabpane.remove(load_scroller); options.remove(load_options); } else if (val.equals("memusage")) { main_tabpane.remove(mem_scroller); options.remove(mem_options); } else if (val.equals("myrinfo")) { main_tabpane.remove(myr_output); options.remove(myr_options); } } repaint(); } public void update(String id, int jobid) { int tindex; double tdata; Double tDouble; String tString; java.util.LinkedList removed = getData(id, jobid); java.util.ArrayList procVector = procs.toArrayList(); if (datatypes.indexOf("loadavg") != -1) { java.awt.Component[] load_comps = load_output.getComponents(); String load_huge = ""; for (int i = 0; i < load_comps.length; i++) { load_huge = load_huge.concat(((LoadGraph)load_comps[i]).getId()); } if (nodepanel.getComponentCount() > load_comps.length) { for (int i = 0; i < nodepanel.getComponentCount(); i++) { if (load_huge.indexOf(((javax.swing.JCheckBox)nodepanel.getComponent(i)).getText()) == -1) { load_output.add(new LoadGraph(((javax.swing.JCheckBox)nodepanel.getComponent(i)).getText(), 100, true)); } } } for (int i = 0; i < load_comps.length; i++) { if (removed.indexOf(((LoadGraph)load_comps[i]).getId()) != -1) { load_output.remove((LoadGraph)load_comps[i]); } else { for (tindex = 0; tindex < procVector.size(); tindex++) { if (((Node)procVector.get(tindex)).name.equals(((LoadGraph)load_comps[i]).getId())) break; } tString = (String)(((Node)procVector.get(tindex)).loadavg); tDouble = new Double(Double.parseDouble(tString)); tdata = tDouble.doubleValue(); ((LoadGraph)load_comps[i]).update_data(tdata); for (int j = 0; j < nodepanel.getComponentCount(); j++) { if (((javax.swing.JCheckBox)nodepanel.getComponent(j)).getText().equals(((LoadGraph)load_comps[i]).getId())) { load_comps[i].setVisible(((javax.swing.JCheckBox)nodepanel.getComponent(j)).isSelected()); load_comps[i].invalidate(); } } } } } if (datatypes.indexOf("memusage") != -1) { java.util.LinkedList columnnames = new java.util.LinkedList(); java.util.LinkedList data = new java.util.LinkedList(); java.util.LinkedList tempv = new java.util.LinkedList(); java.util.LinkedList memtypes = new java.util.LinkedList(); Node tempnode; int index; columnnames.add("Node"); javax.swing.JPanel mempanel = (javax.swing.JPanel)memboxes.getContentPane().getComponent(0); for (int i = 0; i < mempanel.getComponentCount() - 1; i++) { if (((javax.swing.JCheckBox)mempanel.getComponent(i)).isSelected()) { memtypes.add(((javax.swing.JCheckBox)mempanel.getComponent(i)).getText()); } } for (int i = 0; i < nodepanel.getComponentCount(); i++) { if (((javax.swing.JCheckBox)nodepanel.getComponent(i)).isSelected()) { index = procs.indexOf(((javax.swing.JCheckBox)nodepanel.getComponent(i)).getText()); tempv.add(procs.getData(index, "name")); for (int j = 0; j < memtypes.size(); j++) { tempv.add(procs.getData(index, (String)memtypes.get(j))); } data.add(tempv.clone()); tempv.clear(); } } memtypes.addFirst("Node");
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -