сделал перезапуск OVPN только если изменились подсети
This commit is contained in:
parent
5bcc7d9549
commit
aa06678220
|
|
@ -8,10 +8,10 @@ import ru.kirillius.java.utils.events.EventListener;
|
|||
import ru.kirillius.json.JSONProperty;
|
||||
import ru.kirillius.json.JSONSerializable;
|
||||
import ru.kirillius.json.rpc.Annotations.JRPCMethod;
|
||||
import ru.kirillius.json.rpc.Servlet.JSONRPCServlet;
|
||||
import ru.kirillius.pf.sdn.External.API.ShellExecutor;
|
||||
import ru.kirillius.pf.sdn.core.AbstractComponent;
|
||||
import ru.kirillius.pf.sdn.core.Context;
|
||||
import ru.kirillius.pf.sdn.core.Networking.IPv4Subnet;
|
||||
import ru.kirillius.pf.sdn.core.Networking.NetworkResourceBundle;
|
||||
import ru.kirillius.pf.sdn.core.Networking.NetworkingService;
|
||||
import ru.kirillius.pf.sdn.core.Util.IPv4Util;
|
||||
|
|
@ -20,6 +20,9 @@ import ru.kirillius.pf.sdn.web.WebService;
|
|||
import ru.kirillius.utils.logging.SystemLogger;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
/**
|
||||
|
|
@ -27,9 +30,10 @@ import java.util.regex.Pattern;
|
|||
*/
|
||||
public final class OVPN extends AbstractComponent<OVPN.OVPNConfig> {
|
||||
private final static String CTX = OVPN.class.getSimpleName();
|
||||
private final EventListener<JSONRPCServlet> rpcEvent;
|
||||
private final EventListener<NetworkResourceBundle> updateEvent;
|
||||
|
||||
private final List<IPv4Subnet> lastSubnets = new ArrayList<>();
|
||||
|
||||
/**
|
||||
* Registers the component with the JSON-RPC servlet or defers until it becomes available.
|
||||
*/
|
||||
|
|
@ -37,7 +41,16 @@ public final class OVPN extends AbstractComponent<OVPN.OVPNConfig> {
|
|||
super(context);
|
||||
var eventsHandler = context.getEventsHandler();
|
||||
if (config.restartOnUpdate) {
|
||||
updateEvent = eventsHandler.getNetworkManagerUpdateEvent().add(bundle -> restartSystemService());
|
||||
updateEvent = eventsHandler.getNetworkManagerUpdateEvent().add(bundle -> {
|
||||
var subnets = new HashSet<>(bundle.getSubnets());
|
||||
synchronized (lastSubnets) {
|
||||
if (lastSubnets.size() != subnets.size() || !subnets.containsAll(lastSubnets)) {
|
||||
restartSystemService();
|
||||
lastSubnets.clear();
|
||||
lastSubnets.addAll(subnets);
|
||||
}
|
||||
}
|
||||
});
|
||||
} else {
|
||||
updateEvent = null;
|
||||
}
|
||||
|
|
@ -46,11 +59,8 @@ public final class OVPN extends AbstractComponent<OVPN.OVPNConfig> {
|
|||
var RPC = context.getServiceManager().getService(WebService.class).getJSONRPC();
|
||||
if (RPC != null) {
|
||||
RPC.addTargetInstance(OVPN.class, this);
|
||||
rpcEvent = null;
|
||||
return;
|
||||
|
||||
}
|
||||
rpcEvent = eventsHandler.getRPCInitEvent()
|
||||
.add(servlet -> servlet.addTargetInstance(OVPN.class, OVPN.this)); //TODO поисследовать. Возможно событие уже не нужно
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -59,6 +69,7 @@ public final class OVPN extends AbstractComponent<OVPN.OVPNConfig> {
|
|||
@JRPCMethod
|
||||
@ProtectedMethod
|
||||
public String restartSystemService() {
|
||||
SystemLogger.message("Restarting OVPN service", CTX);
|
||||
try (var shell = new ShellExecutor(config.shellConfig)) {
|
||||
return shell.executeCommand(config.restartCommand.split(Pattern.quote(" ")));
|
||||
} catch (IOException e) {
|
||||
|
|
@ -90,9 +101,6 @@ public final class OVPN extends AbstractComponent<OVPN.OVPNConfig> {
|
|||
@Override
|
||||
public void close() {
|
||||
var eventsHandler = context.getEventsHandler();
|
||||
if (rpcEvent != null) {
|
||||
eventsHandler.getRPCInitEvent().remove(rpcEvent);
|
||||
}
|
||||
if (updateEvent != null) {
|
||||
eventsHandler.getNetworkManagerUpdateEvent().remove(updateEvent);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue