From 74bdd33a9c569fe1138f7efcce6164b805b796c9 Mon Sep 17 00:00:00 2001 From: Ziver Koc Date: Mon, 6 Mar 2017 17:59:38 +0100 Subject: [PATCH] Added toString metods, and some robustness fixes in TriggerManager --- src/se/hal/TriggerManager.java | 7 ++++--- src/se/hal/action/SendEventAction.java | 7 ++++++- src/se/hal/trigger/DateTimeTrigger.java | 16 +++++++++++++--- 3 files changed, 23 insertions(+), 7 deletions(-) diff --git a/src/se/hal/TriggerManager.java b/src/se/hal/TriggerManager.java index 2c0c3e80..2c9a4714 100755 --- a/src/se/hal/TriggerManager.java +++ b/src/se/hal/TriggerManager.java @@ -6,7 +6,6 @@ import se.hal.struct.TriggerFlow; import zutil.log.LogUtil; import zutil.plugin.PluginManager; -import java.sql.SQLException; import java.util.ArrayList; import java.util.Iterator; import java.util.List; @@ -40,7 +39,9 @@ public class TriggerManager { executor.scheduleAtFixedRate(new Runnable() { @Override public void run() { - evaluateAndExecute(); + try { + evaluateAndExecute(); + } catch (Exception e){ logger.log(Level.SEVERE, "Trigger Evaluation Thread has Crashed", e); } } }, 0, interval, TimeUnit.MILLISECONDS); } @@ -74,7 +75,7 @@ public class TriggerManager { * evaluation of a trigger returns true then its execute method will be called. */ public synchronized void evaluateAndExecute() { - for (int i = 0; i < triggerFlows.size(); i++) { // avoid foreach as triggerFlow can change while we are running + for (int i = 0; i < triggerFlows.size(); i++) { // avoid foreach as triggerFlows can change while we are running TriggerFlow flow = triggerFlows.get(i); if (flow.evaluate()) { logger.fine("Flow "+ flow.getId() +" evaluated true, executing actions"); diff --git a/src/se/hal/action/SendEventAction.java b/src/se/hal/action/SendEventAction.java index 5a78505b..3698ccb5 100755 --- a/src/se/hal/action/SendEventAction.java +++ b/src/se/hal/action/SendEventAction.java @@ -45,6 +45,11 @@ public class SendEventAction implements HalAction { public String toString(){ - return "Send event: "+ eventId +" with data: "+ data; + DBConnection db = HalContext.getDB(); + Event event = null; + try{ event = Event.getEvent(db, eventId); } catch (Exception e){} //ignore exception + return "Send event: "+ eventId + + " ("+(event!=null ? event.getName() : null)+")" + + " with data: "+ data; } } diff --git a/src/se/hal/trigger/DateTimeTrigger.java b/src/se/hal/trigger/DateTimeTrigger.java index 8599fe5d..f52b7f51 100755 --- a/src/se/hal/trigger/DateTimeTrigger.java +++ b/src/se/hal/trigger/DateTimeTrigger.java @@ -5,6 +5,8 @@ import zutil.CronTimer; import zutil.ui.Configurator; import zutil.ui.Configurator.PreConfigurationActionListener; +import java.text.SimpleDateFormat; + /** * */ @@ -30,19 +32,27 @@ public class DateTimeTrigger implements HalTrigger,PreConfigurationActionListene @Override public void preConfigurationAction(Configurator configurator, Object obj) { cronTimer = new CronTimer(minute, hour, dayOfMonth, month, dayOfWeek, year); + reset(); } @Override public boolean evaluate() { if (cronTimer == null) return false; - if (timeOut < 0) + if (System.currentTimeMillis()-timeOut > 60*1000) // have we passed the timeout by one minute? reset(); - return timeOut < System.currentTimeMillis(); + return timeOut <= System.currentTimeMillis(); } @Override public void reset() { - timeOut = cronTimer.next(); + if (cronTimer != null) + timeOut = cronTimer.next(); + } + + public String toString(){ + return //"Cron: \""+minute+" "+hour+" "+dayOfMonth+" "+month+" "+dayOfWeek+" "+year+"\" "+ + "Next timeout: "+ + (timeOut>0 ? new SimpleDateFormat("yyyy-MM-dd HH:mm").format(timeOut) : timeOut); } }