uprava ping probe
parent
8276df1596
commit
839231901f
|
|
@ -6,8 +6,9 @@ mysql_password=Michal2407
|
||||||
mysql_database=jnet
|
mysql_database=jnet
|
||||||
server_port=1225
|
server_port=1225
|
||||||
debug=true
|
debug=true
|
||||||
ping_attempt=2
|
ping_attempt=4
|
||||||
ping_timeout=2000
|
ping_timeout=2
|
||||||
|
ping_repeat=3
|
||||||
instability_attempt=2
|
instability_attempt=2
|
||||||
instability_limit=1000
|
instability_limit=1
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,6 @@ import jnet.lib.Status;
|
||||||
import jnet.lib.object.MapObject;
|
import jnet.lib.object.MapObject;
|
||||||
import jnet.server.Server;
|
import jnet.server.Server;
|
||||||
|
|
||||||
|
|
||||||
public class NettyPing extends Thread {
|
public class NettyPing extends Thread {
|
||||||
|
|
||||||
private static final HashedWheelTimer TIMER = new HashedWheelTimer(); // Netty časovač
|
private static final HashedWheelTimer TIMER = new HashedWheelTimer(); // Netty časovač
|
||||||
|
|
@ -19,10 +18,8 @@ public class NettyPing extends Thread {
|
||||||
public NettyPing() {
|
public NettyPing() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void start() {
|
public void run() {
|
||||||
LogFile.printInfo("Ping probe start");
|
LogFile.printInfo("Ping probe start");
|
||||||
for (MapObject mapObject : Server.mapObject) {
|
for (MapObject mapObject : Server.mapObject) {
|
||||||
schedulePing(mapObject);
|
schedulePing(mapObject);
|
||||||
|
|
@ -34,7 +31,7 @@ public class NettyPing extends Thread {
|
||||||
@Override
|
@Override
|
||||||
public void run(Timeout timeout) {
|
public void run(Timeout timeout) {
|
||||||
pingHost(object);
|
pingHost(object);
|
||||||
timeout.timer().newTimeout(this, 3, TimeUnit.SECONDS); // Opakuje každých 5 sekund
|
timeout.timer().newTimeout(this, Server.config.getInt("ping_repeat"), TimeUnit.SECONDS); // Opakuje každých x sekund
|
||||||
}
|
}
|
||||||
}, 0, TimeUnit.SECONDS);
|
}, 0, TimeUnit.SECONDS);
|
||||||
}
|
}
|
||||||
|
|
@ -42,8 +39,8 @@ public class NettyPing extends Thread {
|
||||||
private static void pingHost(MapObject object) {
|
private static void pingHost(MapObject object) {
|
||||||
try {
|
try {
|
||||||
String command = System.getProperty("os.name").startsWith("Windows")
|
String command = System.getProperty("os.name").startsWith("Windows")
|
||||||
? "ping -n 1 " + object.getIp()
|
? "ping -n 1 -w " + String.valueOf((Server.config.getInt("ping_timeout")*1000)) + " " + object.getIp() // Timeout 2000 ms (Windows)
|
||||||
: "ping -c 1 " + object.getIp();
|
: "ping -c 1 -W " + String.valueOf(Server.config.getInt("ping_timeout")) + " " + object.getIp(); // Timeout 2 sec (Linux)
|
||||||
|
|
||||||
Process process = Runtime.getRuntime().exec(command);
|
Process process = Runtime.getRuntime().exec(command);
|
||||||
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
|
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
|
||||||
|
|
@ -60,16 +57,18 @@ public class NettyPing extends Thread {
|
||||||
}
|
}
|
||||||
|
|
||||||
//System.out.println("Ping na " + object.getIp() + (success ? " uspesny! RTT: " + timeMs + " ms" : " selhal!"));
|
//System.out.println("Ping na " + object.getIp() + (success ? " uspesny! RTT: " + timeMs + " ms" : " selhal!"));
|
||||||
if (object.getStatus() != Status.OK) {
|
if (success) {
|
||||||
PingResult.stateOnline(object);
|
if (object.getStatus() != Status.OK) {
|
||||||
|
PingResult.stateOnline(object);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
PingResult.stateOffline(object);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
process.waitFor();
|
process.waitFor();
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
System.err.println("Chyba pri pingu na " + object.getIp());
|
|
||||||
PingResult.stateOffline(object);
|
PingResult.stateOffline(object);
|
||||||
//e.printStackTrace();
|
LogFile.printErr("Chyba pri pingu na " + object.getIp() + " " + e.getMessage());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -83,5 +82,4 @@ public class NettyPing extends Thread {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -10,14 +10,26 @@ import jnet.server.ServerMessageParser;
|
||||||
|
|
||||||
public class PingResult {
|
public class PingResult {
|
||||||
|
|
||||||
private static final int POKUS = 2;
|
private static final int POKUS = Server.config.getInt("ping_attempt");
|
||||||
|
|
||||||
|
|
||||||
public static void stateOnline(MapObject obj) {
|
public static void stateOnline(MapObject obj) {
|
||||||
// oveří jestli neni zarizeni vypnuto
|
// oveří jestli neni zarizeni vypnuto
|
||||||
if (obj.isActive()) {
|
if (obj.isActive() && obj.getStatus() != Status.OK) {
|
||||||
// vynuluje ping pokusy
|
// vynuluje ping pokusy
|
||||||
obj.setPingAttemp(0);
|
obj.setPingAttemp(0);
|
||||||
|
// pokud byl předchozí stav offline ukončí event
|
||||||
|
if (obj.getStatus() == Status.OFFLINE) {
|
||||||
|
// aktualizace eventu
|
||||||
|
Event event = Database.endEvent(obj.getId(), Event.TYPE_PING);
|
||||||
|
for (int i = 0; i < Server.events.size(); i++) {
|
||||||
|
if (Server.events.get(i).getId() == event.getId()) {
|
||||||
|
Server.events.set(i, event);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// odeslani aktualizovaného eventu
|
||||||
|
ServerMessageParser.sendAll(Message.EVENT_UPDATE, event);
|
||||||
|
}
|
||||||
|
|
||||||
// nastavi status objektu
|
// nastavi status objektu
|
||||||
obj.setStatus(Status.OK);
|
obj.setStatus(Status.OK);
|
||||||
// odesle informaci o novem stavu klientum
|
// odesle informaci o novem stavu klientum
|
||||||
|
|
@ -28,7 +40,8 @@ public class PingResult {
|
||||||
public static void stateOffline(MapObject obj) {
|
public static void stateOffline(MapObject obj) {
|
||||||
// oveří jestli neni zarizeni vypnuto
|
// oveří jestli neni zarizeni vypnuto
|
||||||
if (obj.isActive()) {
|
if (obj.isActive()) {
|
||||||
if (obj.getPingAttemp() >= POKUS) {
|
if (obj.getPingAttemp() >= POKUS && obj.getStatus() != Status.OFFLINE) {
|
||||||
|
System.err.println("objekt: " + obj.getName() + " pokus: " + obj.getPingAttemp());
|
||||||
// nastavi status objektu
|
// nastavi status objektu
|
||||||
obj.setStatus(Status.OFFLINE);
|
obj.setStatus(Status.OFFLINE);
|
||||||
// odesle informaci o novem stavu klientum
|
// odesle informaci o novem stavu klientum
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue