сделал перезапуск 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.JSONProperty;
|
||||||
import ru.kirillius.json.JSONSerializable;
|
import ru.kirillius.json.JSONSerializable;
|
||||||
import ru.kirillius.json.rpc.Annotations.JRPCMethod;
|
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.External.API.ShellExecutor;
|
||||||
import ru.kirillius.pf.sdn.core.AbstractComponent;
|
import ru.kirillius.pf.sdn.core.AbstractComponent;
|
||||||
import ru.kirillius.pf.sdn.core.Context;
|
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.NetworkResourceBundle;
|
||||||
import ru.kirillius.pf.sdn.core.Networking.NetworkingService;
|
import ru.kirillius.pf.sdn.core.Networking.NetworkingService;
|
||||||
import ru.kirillius.pf.sdn.core.Util.IPv4Util;
|
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 ru.kirillius.utils.logging.SystemLogger;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.List;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -27,9 +30,10 @@ import java.util.regex.Pattern;
|
||||||
*/
|
*/
|
||||||
public final class OVPN extends AbstractComponent<OVPN.OVPNConfig> {
|
public final class OVPN extends AbstractComponent<OVPN.OVPNConfig> {
|
||||||
private final static String CTX = OVPN.class.getSimpleName();
|
private final static String CTX = OVPN.class.getSimpleName();
|
||||||
private final EventListener<JSONRPCServlet> rpcEvent;
|
|
||||||
private final EventListener<NetworkResourceBundle> updateEvent;
|
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.
|
* 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);
|
super(context);
|
||||||
var eventsHandler = context.getEventsHandler();
|
var eventsHandler = context.getEventsHandler();
|
||||||
if (config.restartOnUpdate) {
|
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 {
|
} else {
|
||||||
updateEvent = null;
|
updateEvent = null;
|
||||||
}
|
}
|
||||||
|
|
@ -46,11 +59,8 @@ public final class OVPN extends AbstractComponent<OVPN.OVPNConfig> {
|
||||||
var RPC = context.getServiceManager().getService(WebService.class).getJSONRPC();
|
var RPC = context.getServiceManager().getService(WebService.class).getJSONRPC();
|
||||||
if (RPC != null) {
|
if (RPC != null) {
|
||||||
RPC.addTargetInstance(OVPN.class, this);
|
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
|
@JRPCMethod
|
||||||
@ProtectedMethod
|
@ProtectedMethod
|
||||||
public String restartSystemService() {
|
public String restartSystemService() {
|
||||||
|
SystemLogger.message("Restarting OVPN service", CTX);
|
||||||
try (var shell = new ShellExecutor(config.shellConfig)) {
|
try (var shell = new ShellExecutor(config.shellConfig)) {
|
||||||
return shell.executeCommand(config.restartCommand.split(Pattern.quote(" ")));
|
return shell.executeCommand(config.restartCommand.split(Pattern.quote(" ")));
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
|
|
@ -90,9 +101,6 @@ public final class OVPN extends AbstractComponent<OVPN.OVPNConfig> {
|
||||||
@Override
|
@Override
|
||||||
public void close() {
|
public void close() {
|
||||||
var eventsHandler = context.getEventsHandler();
|
var eventsHandler = context.getEventsHandler();
|
||||||
if (rpcEvent != null) {
|
|
||||||
eventsHandler.getRPCInitEvent().remove(rpcEvent);
|
|
||||||
}
|
|
||||||
if (updateEvent != null) {
|
if (updateEvent != null) {
|
||||||
eventsHandler.getNetworkManagerUpdateEvent().remove(updateEvent);
|
eventsHandler.getNetworkManagerUpdateEvent().remove(updateEvent);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue