Refactored main and added timed thread in TriggerManager. issue 6
This commit is contained in:
parent
274b708089
commit
f2e940cda1
2 changed files with 47 additions and 26 deletions
|
|
@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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,25 +82,24 @@ public class TriggerManager {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static void initialize(PluginManager pluginManager) {
|
||||||
public static void initialize(PluginManager pluginManager){
|
|
||||||
TriggerManager manager = new TriggerManager();
|
TriggerManager manager = new TriggerManager();
|
||||||
|
|
||||||
for (Iterator<Class<? extends HalTrigger>> it = pluginManager.getClassIterator(HalTrigger.class);
|
for (Iterator<Class<? extends HalTrigger>> it = pluginManager.getClassIterator(HalTrigger.class);
|
||||||
it.hasNext(); ){
|
it.hasNext(); ) {
|
||||||
manager.addAvailableTrigger(it.next());
|
manager.addAvailableTrigger(it.next());
|
||||||
}
|
}
|
||||||
|
|
||||||
for (Iterator<Class<? extends HalAction>> it = pluginManager.getClassIterator(HalAction.class);
|
for (Iterator<Class<? extends HalAction>> it = pluginManager.getClassIterator(HalAction.class);
|
||||||
it.hasNext(); ){
|
it.hasNext(); ) {
|
||||||
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;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue