Made Hal more robust

This commit is contained in:
Ziver Koc 2021-06-08 23:34:44 +02:00
parent 132bd3b29d
commit 1cc834f089
7 changed files with 39 additions and 15 deletions

View file

@ -16,7 +16,7 @@
<tr>
<td>{{.getName()}}</td>
<td>{{.getVersion()}}</td>
<td>{{.getDescription()}}</td>
<td>{{#.getDescription()}}{{.getDescription()}}{{/.getDescription()}}</td>
<td>
<form method="POST">
<input type="hidden" name="action" value="modify">

View file

@ -59,7 +59,7 @@ public class TriggerManager {
for (TriggerFlow flow : TriggerFlow.getTriggerFlows(db)) {
TriggerManager.getInstance().register(flow);
}
} catch (SQLException e) {
} catch (Exception e) {
logger.log(Level.SEVERE, "Unable to read in existing triggers.", e);
}
}
@ -74,7 +74,9 @@ public class TriggerManager {
public void run() {
try {
evaluateAndExecute();
} catch (Exception e){ logger.log(Level.SEVERE, "Trigger Evaluation Thread has Crashed", e); }
} catch (Exception e) {
logger.log(Level.SEVERE, "Trigger Evaluation Thread has Crashed", e);
}
}
}, 0, interval, TimeUnit.MILLISECONDS);
}

View file

@ -45,8 +45,8 @@ public class SendEventAction implements HalAction {
public String toString(){
return "Send event: " + event.getId() +
" (" + (event!=null ? event.getName() : null) + ")" +
return "Send event: " + (event != null ? event.getId() : null) +
" (" + (event != null ? event.getName() : null) + ")" +
" with data: " + data;
}
}

View file

@ -2,10 +2,14 @@ package se.hal.page;
import se.hal.HalContext;
import se.hal.HalServer;
import se.hal.intf.HalAbstractController;
import se.hal.intf.HalAbstractControllerManager;
import se.hal.intf.HalWebPage;
import zutil.io.file.FileUtil;
import zutil.parser.Templator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import static zutil.ui.UserMessageManager.*;
@ -29,16 +33,27 @@ public class PluginConfigWebPage extends HalWebPage {
if (request.containsKey("action")) {
String name = request.get("action_id");
HalServer.enablePlugin(name,
(request.containsKey("enabled") && "on".equals(request.get("enabled"))));
HalAlertManager.getInstance().addAlert(new UserMessage(
MessageLevel.SUCCESS, "Successfully updated plugin " + name + ", change will take affect after restart.", MessageTTL.ONE_VIEW));
if (!name.equals("Hal-Core")) {
HalServer.enablePlugin(name,
(request.containsKey("enabled") && "on".equals(request.get("enabled"))));
HalAlertManager.getInstance().addAlert(new UserMessage(
MessageLevel.SUCCESS, "Successfully updated plugin " + name + ", change will take affect after restart.", MessageTTL.ONE_VIEW));
} else {
HalAlertManager.getInstance().addAlert(new UserMessage(
MessageLevel.ERROR, "Hal-Core cannot be disabled as it is critical component of Hal.", MessageTTL.ONE_VIEW));
}
}
List<HalAbstractController> controllers = new LinkedList<>();
for (HalAbstractControllerManager manager : HalServer.getControllerManagers()) {
controllers.addAll(manager.getControllers());
}
Templator tmpl = new Templator(FileUtil.find(TEMPLATE));
tmpl.set("plugins", HalServer.getAllPlugins());
//tmpl.set("controllers", ControllerManager.getInstance().getControllers()); // TODO: Get all controllers
tmpl.set("controllers", controllers);
return tmpl;
}
}

View file

@ -16,7 +16,7 @@ public abstract class DeviceTrigger implements HalTrigger,
@Configurator.Configurable("Trigger only on change")
protected boolean triggerOnChange = true;
@Configurator.Configurable("Data to compare to")
@Configurator.Configurable("Trigger when data equals")
protected double expectedData;
private transient HalDeviceData receivedData;

View file

@ -20,10 +20,10 @@ public class EventTrigger extends DeviceTrigger{
}
@Override
public String toString(){
public String toString() {
Event event = getDevice();
return "Trigger " + (triggerOnChange ? "on" : "when") +
" event: " + device.getId() + " (" + (event != null ? event.getName() : null) + ")" +
" event: " + (device != null ? device.getId() : null) + " (" + (event != null ? event.getName() : null) + ")" +
" == " + expectedData;
}

View file

@ -3,6 +3,7 @@ package se.hal.util;
import se.hal.HalContext;
import se.hal.struct.Event;
import zutil.db.DBConnection;
import zutil.log.LogUtil;
import zutil.ui.conf.Configurator;
import java.sql.SQLException;
@ -10,11 +11,15 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
* A value provider that will give all Enum values
*/
public class ConfigEventValueProvider implements Configurator.ConfigValueProvider<Event> {
private static final Logger logger = LogUtil.getLogger();
private Event currentValue;
private Map<String, Event> events = new HashMap<>();
@ -29,13 +34,15 @@ public class ConfigEventValueProvider implements Configurator.ConfigValueProvide
events.put(getValue(event), event);
}
} catch (SQLException e) {
throw new RuntimeException("Unable to collect Event objects.", e);
logger.log(Level.SEVERE, "Unable to retrieve local events.", e);
}
}
@Override
public String getValue(Event event) {
return event.getName() + " (id: " + event.getId() + ")";
return (event != null ?
event.getName() + " (id: " + event.getId() + ")" :
null);
}
@Override