Refactored main and added timed thread in TriggerManager. issue 6

This commit is contained in:
Ziver Koc 2017-01-12 17:12:26 +01:00
parent 274b708089
commit f2e940cda1
2 changed files with 47 additions and 26 deletions

View file

@ -20,12 +20,16 @@ import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledExecutorService;
/** /**
* Created by Ziver on 2015-12-03. * Main class for Hal
*/ */
public class HalServer { public class HalServer {
private static List<HalDaemon> daemons; private static ScheduledExecutorService daemonExecutor;
private static List<HalHttpPage> pages; private static List<HalDaemon> daemons = new ArrayList<>();
private static HttpServer http;
private static List<HalHttpPage> pages = new ArrayList<>();
public static void main(String[] args) throws Exception { public static void main(String[] args) throws Exception {
@ -53,32 +57,34 @@ public class HalServer {
// init daemons // init daemons
daemons = new ArrayList<>();
for (Iterator<HalDaemon> it=pluginManager.getObjectIterator(HalDaemon.class); it.hasNext(); )
daemons.add(it.next());
// We set only one thread for easier troubleshooting // We set only one thread for easier troubleshooting
ScheduledExecutorService executor = Executors.newScheduledThreadPool(1); daemonExecutor = Executors.newScheduledThreadPool(1);
for(HalDaemon daemon : daemons){ for (Iterator<HalDaemon> it=pluginManager.getObjectIterator(HalDaemon.class); it.hasNext(); )
daemon.initiate(executor); registerDaemon(it.next());
}
// init http server // init http server
HalHttpPage.getRootNav().createSubNav("Sensors"); HalHttpPage.getRootNav().createSubNav("Sensors");
HalHttpPage.getRootNav().createSubNav("Events").setWeight(100); HalHttpPage.getRootNav().createSubNav("Events").setWeight(100);
pages = new ArrayList<>();
for (Iterator<HalHttpPage> it = pluginManager.getObjectIterator(HalJsonPage.class); it.hasNext(); )
pages.add(it.next());
for (Iterator<HalHttpPage> it=pluginManager.getObjectIterator(HalHttpPage.class); it.hasNext(); )
pages.add(it.next());
HttpServer http = new HttpServer(HalContext.getIntegerProperty("http_port")); http = new HttpServer(HalContext.getIntegerProperty("http_port"));
http.setDefaultPage(new HttpFilePage(FileUtil.find("resource/web/"))); http.setDefaultPage(new HttpFilePage(FileUtil.find("resource/web/")));
http.setPage("/", new HttpRedirectPage("/map")); http.setPage("/", new HttpRedirectPage("/map"));
http.setPage(HalAlertManager.getInstance().getUrl(), HalAlertManager.getInstance()); http.setPage(HalAlertManager.getInstance().getUrl(), HalAlertManager.getInstance());
for(HalHttpPage page : pages){ for (Iterator<HalHttpPage> it = pluginManager.getObjectIterator(HalJsonPage.class); it.hasNext(); )
http.setPage(page.getId(), page); registerPage(it.next());
} for (Iterator<HalHttpPage> it=pluginManager.getObjectIterator(HalHttpPage.class); it.hasNext(); )
registerPage(it.next());
http.start(); http.start();
} }
public static void registerDaemon(HalDaemon daemon){
daemons.add(daemon);
daemon.initiate(daemonExecutor);
}
public static void registerPage(HalHttpPage page){
pages.add(page);
http.setPage(page.getId(), page);
}
} }

View file

@ -9,6 +9,9 @@ import zutil.plugin.PluginManager;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import java.util.logging.Logger; import java.util.logging.Logger;
@ -17,14 +20,28 @@ import java.util.logging.Logger;
*/ */
public class TriggerManager { public class TriggerManager {
private static final Logger logger = LogUtil.getLogger(); private static final Logger logger = LogUtil.getLogger();
private static final long EVALUATION_INTERVAL = 5 * 1000;
private static TriggerManager instance; private static TriggerManager instance;
private ArrayList<Class<? extends HalTrigger>> availableTriggers = new ArrayList<>(); private ArrayList<Class<? extends HalTrigger>> availableTriggers = new ArrayList<>();
private ArrayList<Class<? extends HalAction>> availableActions = new ArrayList<>(); private ArrayList<Class<? extends HalAction>> availableActions = new ArrayList<>();
private ArrayList<TriggerFlow> triggerFlows = new ArrayList<>(); private ArrayList<TriggerFlow> triggerFlows = new ArrayList<>();
private ScheduledExecutorService executor;
public void setEvaluationInterval(long interval) {
if (executor != null)
executor.shutdownNow();
executor = Executors.newScheduledThreadPool(1);
executor.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
evaluateAndExecute();
}
}, 0, interval, TimeUnit.MILLISECONDS);
}
public void addAvailableTrigger(Class<? extends HalTrigger> clazz) { public void addAvailableTrigger(Class<? extends HalTrigger> clazz) {
if ( ! availableTriggers.contains(clazz)) if ( ! availableTriggers.contains(clazz))
@ -48,7 +65,6 @@ public class TriggerManager {
} }
/** /**
* Main execution method. * Main execution method.
* This method will go through all flows and evaluate them. If the * This method will go through all flows and evaluate them. If the
@ -66,7 +82,6 @@ public class TriggerManager {
} }
public static void initialize(PluginManager pluginManager) { public static void initialize(PluginManager pluginManager) {
TriggerManager manager = new TriggerManager(); TriggerManager manager = new TriggerManager();
@ -80,11 +95,11 @@ public class TriggerManager {
manager.addAvailableAction(it.next()); manager.addAvailableAction(it.next());
} }
manager.setEvaluationInterval(EVALUATION_INTERVAL);
instance = manager; instance = manager;
} }
public static TriggerManager getInstance(){ public static TriggerManager getInstance(){
return instance; return instance;
} }
} }