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> <tr>
<td>{{.getName()}}</td> <td>{{.getName()}}</td>
<td>{{.getVersion()}}</td> <td>{{.getVersion()}}</td>
<td>{{.getDescription()}}</td> <td>{{#.getDescription()}}{{.getDescription()}}{{/.getDescription()}}</td>
<td> <td>
<form method="POST"> <form method="POST">
<input type="hidden" name="action" value="modify"> <input type="hidden" name="action" value="modify">

View file

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

View file

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

View file

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

View file

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

View file

@ -20,10 +20,10 @@ public class EventTrigger extends DeviceTrigger{
} }
@Override @Override
public String toString(){ public String toString() {
Event event = getDevice(); Event event = getDevice();
return "Trigger " + (triggerOnChange ? "on" : "when") + 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; " == " + expectedData;
} }

View file

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