pridáno tlačítko na SNMP test a refres infa o objektu

main
Michal 2025-02-18 22:17:05 +01:00
parent 4b7d0e3e8f
commit 1e7bc533b0
5 changed files with 237 additions and 140 deletions

View File

@ -19,6 +19,7 @@ import jnet.lib.object.SnmpProfile;
import jnet.lib.object.User; import jnet.lib.object.User;
import jnet.lib.snmp.DeviceInfo; import jnet.lib.snmp.DeviceInfo;
import jnet.lib.snmp.Interface; import jnet.lib.snmp.Interface;
import jnet.lib.snmp.SNMPTester;
public class ClientMessageParser { public class ClientMessageParser {
@ -49,7 +50,8 @@ public class ClientMessageParser {
handlers.put(Message.DELETE_LOG, ClientMessageParser::handleDeleteLog); handlers.put(Message.DELETE_LOG, ClientMessageParser::handleDeleteLog);
handlers.put(Message.SERVER_CONFIG, ClientMessageParser::handleServerConfig); handlers.put(Message.SERVER_CONFIG, ClientMessageParser::handleServerConfig);
handlers.put(Message.SNMP_OBJECT_INFO, ClientMessageParser::handleSnmpObjectInfo); handlers.put(Message.SNMP_OBJECT_INFO, ClientMessageParser::handleSnmpObjectInfo);
handlers.put(Message.SNMP_OBJECT_INTERFACE, ClientMessageParser:: handleSnmpObjectInterface); handlers.put(Message.SNMP_OBJECT_INTERFACE, ClientMessageParser::handleSnmpObjectInterface);
handlers.put(Message.SNMP_TEST, ClientMessageParser::handleSnmpTest);
} }
public static void parse(Message msg) { public static void parse(Message msg) {
@ -228,4 +230,11 @@ public class ClientMessageParser {
List<Interface> iface = (List<Interface>) msg_obj[1]; List<Interface> iface = (List<Interface>) msg_obj[1];
UIUpdater.updateObjectInterface(frame, iface); UIUpdater.updateObjectInterface(frame, iface);
} }
private static void handleSnmpTest(Message msg) {
Object[] msg_obj = (Object[]) msg.getMsg();
String frame = (String) msg_obj[0];
boolean result = (boolean) msg_obj[1];
UIUpdater.showResultSnmpTest(frame, result);
}
} }

View File

@ -55,5 +55,16 @@ public class UIUpdater {
} }
} }
} }
public static void showResultSnmpTest(String frameName, boolean result) {
for (Window w : JFrame.getWindows()) {
if (w instanceof JFrame && frameName.equals(w.getName())) {
SwingUtilities.invokeLater(() -> {
((ObjectDialog) w).showResultSnmpTest(result);
});
return;
}
}
}
} }

View File

@ -1,13 +1,23 @@
package jnet.client.gui.dialog.object; package jnet.client.gui.dialog.object;
import java.awt.BorderLayout; import java.awt.BorderLayout;
import java.awt.Dialog;
import java.awt.Frame;
import java.awt.event.ActionEvent; import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; import java.awt.event.ActionListener;
import java.util.List; import java.util.List;
import javax.swing.JButton; import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame; import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel; import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.JTabbedPane; import javax.swing.JTabbedPane;
import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import jnet.client.Client; import jnet.client.Client;
import jnet.client.network.NettyClient; import jnet.client.network.NettyClient;
import jnet.lib.Message; import jnet.lib.Message;
@ -17,7 +27,7 @@ import jnet.lib.snmp.DeviceInfo;
import jnet.lib.snmp.Interface; import jnet.lib.snmp.Interface;
public class ObjectDialog extends JFrame { public class ObjectDialog extends JFrame {
private MapObject obj; private MapObject obj;
private int mapId; private int mapId;
private Boolean newObject; private Boolean newObject;
@ -26,7 +36,11 @@ public class ObjectDialog extends JFrame {
private TabSettings tabSettings; private TabSettings tabSettings;
private TabServices tabServices; private TabServices tabServices;
private TabEvents tabEvents; private TabEvents tabEvents;
private JButton snmpTest = new JButton("Test SNMP");
private JButton btnRefresh = new JButton("Obnovit");
private JDialog progress;
public ObjectDialog(MapObject obj) { public ObjectDialog(MapObject obj) {
this.obj = obj; this.obj = obj;
this.mapId = obj.getMap(); this.mapId = obj.getMap();
@ -36,142 +50,182 @@ public class ObjectDialog extends JFrame {
this.setName("object_detail_" + obj.getId()); this.setName("object_detail_" + obj.getId());
init(); init();
} }
public ObjectDialog(MapObject obj, boolean newObject) { public ObjectDialog(MapObject obj, boolean newObject) {
this.obj = new MapObject(); this.obj = new MapObject();
this.mapId = obj.getMap(); this.mapId = obj.getMap();
this.newObject = newObject; this.newObject = newObject;
init(); init();
} }
private void init() { private void init() {
if (newObject) { if (newObject) {
setTitle("Nový objekt"); setTitle("Nový objekt");
} else { } else {
setTitle(obj.getName()); setTitle(obj.getName());
} }
setSize(600, 520); setSize(600, 520);
setLocationRelativeTo(null); setLocationRelativeTo(null);
setVisible(true); setVisible(true);
setAlwaysOnTop(false); setAlwaysOnTop(false);
setResizable(false); setResizable(false);
setLayout(new BorderLayout()); setLayout(new BorderLayout());
JTabbedPane tabbedPane = new JTabbedPane(); JTabbedPane tabbedPane = new JTabbedPane();
// JScrollPane tabNastaveni = new JScrollPane(tabNastaveni(), // JScrollPane tabNastaveni = new JScrollPane(tabNastaveni(),
// JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); // JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
tabInfo = new TabInfo(this.getName(), obj); tabInfo = new TabInfo(this.getName(), obj);
tabSettings = new TabSettings(obj, newObject); tabSettings = new TabSettings(obj, newObject);
tabServices = new TabServices(obj, newObject); tabServices = new TabServices(obj, newObject);
tabEvents = new TabEvents(obj); tabEvents = new TabEvents(obj);
tabbedPane.addTab("Informace", tabInfo);
tabbedPane.addTab("Nastaveni", tabSettings);
tabbedPane.addTab("Služby", tabServices);
tabbedPane.addTab("Události", tabEvents);
//tabbedPane.addTab("Sondy", tabSondy());
tabbedPane.addTab("Informace", tabInfo); // Přidání listeneru na změnu tabu
tabbedPane.addTab("Nastaveni", tabSettings); tabbedPane.addChangeListener(new ChangeListener() {
tabbedPane.addTab("Služby", tabServices); @Override
tabbedPane.addTab("Události", tabEvents); public void stateChanged(ChangeEvent e) {
//tabbedPane.addTab("Sondy", tabSondy()); int selectedIndex = tabbedPane.getSelectedIndex();
if (selectedIndex == 1) { // pokud je zobrazena zalozka nastaveni zobrazit tlačítko test snmp
// pokud se jedna o novy objekt snmpTest.setVisible(true);
if (newObject) { } else {
tabbedPane.setSelectedIndex(1); // prepne na kartu nastaveni snmpTest.setVisible(false);
tabbedPane.setEnabledAt(0, false); // vypne kartu informace }
tabbedPane.setEnabledAt(3, false); // vypne kartu udalosti if (selectedIndex == 0) { // pokud je zobrazena karta info zobrazit tlačítko refresh
btnRefresh.setVisible(true);
} else {
btnRefresh.setVisible(false);
}
} }
});
add(tabbedPane, BorderLayout.CENTER); // pokud se jedna o novy objekt
if (newObject) {
JPanel pane = new JPanel(); tabbedPane.setSelectedIndex(1); // prepne na kartu nastaveni
JButton save = new JButton("Ulozit"); tabbedPane.setEnabledAt(0, false); // vypne kartu informace
save.addActionListener(new ActionListener() { tabbedPane.setEnabledAt(3, false); // vypne kartu udalosti
public void actionPerformed(ActionEvent e) { } else {
// kontrola chyb // pokud se nejsedna o novy objekt odeslat snmp pozadavek na ziskani informaci o zarizeni
String nazev = tabSettings.getName(); snmpRequest();
if (nazev == null) { }
return;
}
String ip = tabSettings.getIp(); add(tabbedPane, BorderLayout.CENTER);
if (ip == null) {
return; JPanel pane = new JPanel();
} JButton save = new JButton("Ulozit");
// ulozeni do objektu save.addActionListener(new ActionListener() {
obj.setMap(mapId); public void actionPerformed(ActionEvent e) {
obj.setName(nazev); // kontrola chyb
obj.setIp(ip); String nazev = tabSettings.getName();
obj.setUser(tabSettings.getUser()); if (nazev == null) {
obj.setPassword(new String(tabSettings.getPassword())); return;
obj.setObjectType(Client.objectType.get(tabSettings.getObjType()).getId()); }
obj.setSnmpProfile(Client.snmpProfile.get(tabSettings.getSnmpProfile()).getId()); String ip = tabSettings.getIp();
obj.setActive(tabSettings.isActive()); if (ip == null) {
obj.setDescription(tabSettings.getDesc()); return;
obj.setLocation(tabSettings.getLoc()); }
// ulozeni do objektu
obj.setWinbox(tabServices.isWinbox()); obj.setMap(mapId);
String winboxPort = tabServices.getWinboxPort(); obj.setName(nazev);
if (winboxPort == null) { obj.setIp(ip);
return; obj.setUser(tabSettings.getUser());
} obj.setPassword(new String(tabSettings.getPassword()));
obj.setWinboxPort(winboxPort); obj.setObjectType(Client.objectType.get(tabSettings.getObjType()).getId());
obj.setSsh(tabServices.isSsh()); obj.setSnmpProfile(Client.snmpProfile.get(tabSettings.getSnmpProfile()).getId());
String sshPort = tabServices.getSshPort(); obj.setActive(tabSettings.isActive());
if (sshPort == null) { obj.setDescription(tabSettings.getDesc());
return; obj.setLocation(tabSettings.getLoc());
}
obj.setSshPort(sshPort); obj.setWinbox(tabServices.isWinbox());
obj.setWeb(tabServices.isWeb()); String winboxPort = tabServices.getWinboxPort();
String webPort = tabServices.getWebPort(); if (winboxPort == null) {
if (webPort == null) { return;
return; }
} obj.setWinboxPort(winboxPort);
obj.setWebPort(webPort); obj.setSsh(tabServices.isSsh());
obj.setWebVerze(tabServices.getWebVersion()); String sshPort = tabServices.getSshPort();
obj.setTelnet(tabServices.isTelnet()); if (sshPort == null) {
String telnetPort = tabServices.getTelnetPort(); return;
if (telnetPort == null) { }
return; obj.setSshPort(sshPort);
} obj.setWeb(tabServices.isWeb());
obj.setTelnetPort(telnetPort); String webPort = tabServices.getWebPort();
obj.setSms(tabServices.isSms()); if (webPort == null) {
String smsPort = tabServices.getSmsPort(); return;
if (smsPort == null) { }
return; obj.setWebPort(webPort);
} obj.setWebVerze(tabServices.getWebVersion());
obj.setSmsPort(smsPort); obj.setTelnet(tabServices.isTelnet());
obj.setSmsVerze(tabServices.getSmsVersion()); String telnetPort = tabServices.getTelnetPort();
if (telnetPort == null) {
if (!obj.isActive() || newObject) { return;
obj.setStatus(Status.NA); }
} obj.setTelnetPort(telnetPort);
obj.setSms(tabServices.isSms());
String smsPort = tabServices.getSmsPort();
if (smsPort == null) {
return;
}
obj.setSmsPort(smsPort);
obj.setSmsVerze(tabServices.getSmsVersion());
if (!obj.isActive() || newObject) {
obj.setStatus(Status.NA);
}
// ArrayList<SnmpProbe> probe = new ArrayList<>(); // ArrayList<SnmpProbe> probe = new ArrayList<>();
// if (!newObject) { // if (!newObject) {
// probe.addAll(obj.getSnmpProbe()); // probe.addAll(obj.getSnmpProbe());
// } // }
// obj.setSnmpProbe(probe); // obj.setSnmpProbe(probe);
if (newObject) { if (newObject) {
NettyClient.send(Message.ADD_OBJECT, obj); NettyClient.send(Message.ADD_OBJECT, obj);
} else { } else {
NettyClient.send(Message.UPDATE_OBJECT, obj); NettyClient.send(Message.UPDATE_OBJECT, obj);
}
// zavreni dialogu
dispose();
} }
}); }
pane.add(save); });
pane.add(save);
JButton cancel = new JButton("Zrusit");
cancel.addActionListener(new ActionListener() { JButton cancel = new JButton("Zavřít");
public void actionPerformed(ActionEvent e) { cancel.addActionListener(new ActionListener() {
dispose(); public void actionPerformed(ActionEvent e) {
} dispose();
}); }
pane.add(cancel); });
pane.add(cancel);
add(pane, BorderLayout.PAGE_END);
// tlačítko snmp test na zalozce nastaveni
snmpTest.setVisible(false);
snmpTest.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Object[] o = {getName(), obj};
NettyClient.send(Message.SNMP_TEST, o);
progress = showProgress();
}
});
pane.add(snmpTest);
// tlačítko obnovit na info zalozce
btnRefresh.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
snmpRequest();
}
});
pane.add(btnRefresh);
add(pane, BorderLayout.PAGE_END);
} }
private String getStatus(int status) { private String getStatus(int status) {
@ -187,15 +241,52 @@ public class ObjectDialog extends JFrame {
} }
} }
public void setDeviceInfo(DeviceInfo di){ public void setDeviceInfo(DeviceInfo di) {
this.tabInfo.setName(di.getSysName()); this.tabInfo.setName(di.getSysName());
this.tabInfo.setDesc(di.getSysDescr()); this.tabInfo.setDesc(di.getSysDescr());
this.tabInfo.setUptime(di.getSysUptime()); this.tabInfo.setUptime(di.getSysUptime());
this.tabInfo.setVendor(di.getSysObjectID()); this.tabInfo.setVendor(di.getSysObjectID());
} }
public void setDeviceInterface(List<Interface> iface){ public void setDeviceInterface(List<Interface> iface) {
this.tabInfo.setInterface(iface); this.tabInfo.setInterface(iface);
} }
public void showResultSnmpTest(boolean result) {
progress.dispose();
if (result) {
JOptionPane.showMessageDialog(null, "SNMP funkční", "SNMP test", JOptionPane.INFORMATION_MESSAGE);
} else {
JOptionPane.showMessageDialog(null, "SNMP nefunkční", "SNMP test", JOptionPane.ERROR_MESSAGE);
}
}
private JDialog showProgress(){
JDialog dialog = new JDialog((Frame) null, "Testování", true);
SwingUtilities.invokeLater(() -> {
dialog.setSize(200, 100);
dialog.setLayout(new BorderLayout());
JLabel label = new JLabel("Prosím, čekejte...", SwingConstants.CENTER);
JProgressBar progressBar = new JProgressBar();
progressBar.setIndeterminate(true); // Animace nekonečného načítání
dialog.add(label, BorderLayout.NORTH);
dialog.add(progressBar, BorderLayout.CENTER);
dialog.setLocationRelativeTo(null);
dialog.setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);
dialog.setVisible(true);
});
return dialog;
}
private void snmpRequest() {
Object[] data = {getName(), this.obj};
NettyClient.send(Message.SNMP_OBJECT_INFO, data);
NettyClient.send(Message.SNMP_OBJECT_INTERFACE, data);
}
} }

View File

@ -27,8 +27,7 @@ public class TabInfo extends JPanel {
this.frameName = frameName; this.frameName = frameName;
init(); init();
// odeslani SNMP dotazu na server
snmpRequest();
} }
private void init() { private void init() {
@ -92,12 +91,6 @@ public class TabInfo extends JPanel {
} }
private void snmpRequest() {
Object[] data = {frameName, this.obj};
NettyClient.send(Message.SNMP_OBJECT_INFO, data);
NettyClient.send(Message.SNMP_OBJECT_INTERFACE, data);
}
public void setName(String name) { public void setName(String name) {
this.name.setText(name); this.name.setText(name);
} }
@ -115,6 +108,7 @@ public class TabInfo extends JPanel {
} }
public void setInterface(List<Interface> iface) { public void setInterface(List<Interface> iface) {
tableModel.setRowCount(0);
for (Interface i : iface) { for (Interface i : iface) {
Object[] d = { Object[] d = {
i.getDescription(), i.getDescription(),

View File

@ -16,6 +16,8 @@ import javax.swing.JPasswordField;
import javax.swing.JTextArea; import javax.swing.JTextArea;
import javax.swing.JTextField; import javax.swing.JTextField;
import jnet.client.Client; import jnet.client.Client;
import jnet.client.network.NettyClient;
import jnet.lib.Message;
import jnet.lib.object.MapObject; import jnet.lib.object.MapObject;
import jnet.lib.object.ObjectType; import jnet.lib.object.ObjectType;
import jnet.lib.object.SnmpProfile; import jnet.lib.object.SnmpProfile;
@ -113,17 +115,7 @@ public class TabSettings extends JPanel {
disableCheBox.setBounds(110, 180, 160, 25); disableCheBox.setBounds(110, 180, 160, 25);
this.add(disableCheBox); this.add(disableCheBox);
JButton snmpTest = new JButton("Test SNMP");
snmpTest.setBounds(390, 180, 160, 25);
snmpTest.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
/* TODO idealne at test provede server (ten bude osesilat informace o snmp pozadavky!!!!
*/
}
});
this.add(snmpTest);
JLabel locLabel = new JLabel("Umístění"); JLabel locLabel = new JLabel("Umístění");
locLabel.setBounds(20, 230, 80, 25); locLabel.setBounds(20, 230, 80, 25);