From 1cc834f08991d5caf27f0f1e7425893a1b86c62f Mon Sep 17 00:00:00 2001 From: Ziver Koc Date: Tue, 8 Jun 2021 23:34:44 +0200 Subject: [PATCH] Made Hal more robust --- .../resource/resource/web/plugin_config.tmpl | 2 +- hal-core/src/se/hal/TriggerManager.java | 6 +++-- .../src/se/hal/action/SendEventAction.java | 4 +-- .../src/se/hal/page/PluginConfigWebPage.java | 25 +++++++++++++++---- .../src/se/hal/trigger/DeviceTrigger.java | 2 +- hal-core/src/se/hal/trigger/EventTrigger.java | 4 +-- .../se/hal/util/ConfigEventValueProvider.java | 11 ++++++-- 7 files changed, 39 insertions(+), 15 deletions(-) diff --git a/hal-core/resource/resource/web/plugin_config.tmpl b/hal-core/resource/resource/web/plugin_config.tmpl index 94ddfeca..4c7ee9f8 100644 --- a/hal-core/resource/resource/web/plugin_config.tmpl +++ b/hal-core/resource/resource/web/plugin_config.tmpl @@ -16,7 +16,7 @@ {{.getName()}} {{.getVersion()}} - {{.getDescription()}} + {{#.getDescription()}}{{.getDescription()}}{{/.getDescription()}}
diff --git a/hal-core/src/se/hal/TriggerManager.java b/hal-core/src/se/hal/TriggerManager.java index 10936481..2b30473c 100644 --- a/hal-core/src/se/hal/TriggerManager.java +++ b/hal-core/src/se/hal/TriggerManager.java @@ -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); } diff --git a/hal-core/src/se/hal/action/SendEventAction.java b/hal-core/src/se/hal/action/SendEventAction.java index 7ac658af..173263bd 100644 --- a/hal-core/src/se/hal/action/SendEventAction.java +++ b/hal-core/src/se/hal/action/SendEventAction.java @@ -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; } } diff --git a/hal-core/src/se/hal/page/PluginConfigWebPage.java b/hal-core/src/se/hal/page/PluginConfigWebPage.java index ac44c35b..e625a0c9 100644 --- a/hal-core/src/se/hal/page/PluginConfigWebPage.java +++ b/hal-core/src/se/hal/page/PluginConfigWebPage.java @@ -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 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; } } diff --git a/hal-core/src/se/hal/trigger/DeviceTrigger.java b/hal-core/src/se/hal/trigger/DeviceTrigger.java index dd8d3276..d050e62b 100644 --- a/hal-core/src/se/hal/trigger/DeviceTrigger.java +++ b/hal-core/src/se/hal/trigger/DeviceTrigger.java @@ -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; diff --git a/hal-core/src/se/hal/trigger/EventTrigger.java b/hal-core/src/se/hal/trigger/EventTrigger.java index 77a1f25d..cbb72afb 100644 --- a/hal-core/src/se/hal/trigger/EventTrigger.java +++ b/hal-core/src/se/hal/trigger/EventTrigger.java @@ -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; } diff --git a/hal-core/src/se/hal/util/ConfigEventValueProvider.java b/hal-core/src/se/hal/util/ConfigEventValueProvider.java index a09b6d06..0b633ea9 100644 --- a/hal-core/src/se/hal/util/ConfigEventValueProvider.java +++ b/hal-core/src/se/hal/util/ConfigEventValueProvider.java @@ -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 { + private static final Logger logger = LogUtil.getLogger(); + private Event currentValue; private Map 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