List of usage examples for io.vertx.core Vertx sharedData
@CacheReturn SharedData sharedData();
From source file:com.github.edgar615.util.vertx.sharedata.SyncMap.java
License:Open Source License
/** * Creates a new async map.//from w ww . j a v a 2 s. c o m * * @param vertx the vert.x instance * @param name the name of the underlying structure (either a local map for non-clustered * vert.x, or a sync map for clustered vert.x) */ public SyncMap(Vertx vertx, String name) { this.vertx = vertx; ClusterManager clusterManager = ((VertxInternal) vertx).getClusterManager(); if (clusterManager == null) { delegateMap = new LocalMapWrapper<>(vertx.sharedData().<K, V>getLocalMap(name)); } else { delegateMap = clusterManager.getSyncMap(name); } }
From source file:examples.SharedDataExamples.java
License:Open Source License
public void example1(Vertx vertx) { SharedData sd = vertx.sharedData(); LocalMap<String, String> map1 = sd.getLocalMap("mymap1"); map1.put("foo", "bar"); // Strings are immutable so no need to copy LocalMap<String, Buffer> map2 = sd.getLocalMap("mymap2"); map2.put("eek", Buffer.buffer().appendInt(123)); // This buffer will be copied before adding to map // Then... in another part of your application: map1 = sd.getLocalMap("mymap1"); String val = map1.get("foo"); map2 = sd.getLocalMap("mymap2"); Buffer buff = map2.get("eek"); }
From source file:examples.SharedDataExamples.java
License:Open Source License
public void example2(Vertx vertx) { SharedData sd = vertx.sharedData(); sd.<String, String>getClusterWideMap("mymap", res -> { if (res.succeeded()) { AsyncMap<String, String> map = res.result(); } else {// w ww .j a va2 s . c om // Something went wrong! } }); }
From source file:fr.wseduc.rack.controllers.RackController.java
License:Open Source License
@Override public void init(Vertx vertx, JsonObject config, RouteMatcher rm, Map<String, fr.wseduc.webutils.security.SecuredAction> securedActions) { super.init(vertx, config, rm, securedActions); this.threshold = config.getInteger("alertStorage", 80); String node = (String) vertx.sharedData().getLocalMap("server").get("node"); if (node == null) { node = ""; }/*from www.j a va 2s. c o m*/ this.imageResizerAddress = node + config.getString("image-resizer-address", "wse.image.resizer"); this.timelineHelper = new TimelineHelper(vertx, eb, config); this.eventStore = EventStoreFactory.getFactory().getEventStore(Rack.class.getSimpleName()); }
From source file:io.apiman.gateway.engine.vertx.shareddata.SharedGlobalDataRegistry.java
License:Apache License
public SharedGlobalDataRegistry(Vertx vertx, IEngineConfig vxConfig, Map<String, String> options) { this.vertx = vertx; this.vxConfig = vxConfig; this.options = options; if (!vertx.isClustered()) { throw new IllegalStateException(SharedGlobalDataRegistry.class.getCanonicalName() + " only works when operating in clustered mode!"); }/* ww w . jav a 2s .c o m*/ vertx.sharedData().<String, Object>getClusterWideMap("SharedGlobalDataRegistry-Shared", async -> { if (async.succeeded()) { objectMap = async.result(); } else { throw new IllegalStateException(async.cause()); } }); }
From source file:org.azrul.langmera.QLearningAnalytics.java
@Override public void getDecision(DecisionRequest s, Vertx vertx, Consumer<DecisionResponse> responseAction) { int decisionCount = vertx.sharedData().getLocalMap("DECISION_REQUEST").size(); if (decisionCount % 10 <= config.getProperty("epsilon", Integer.class)) { getRandomDecision(s, vertx, responseAction); } else {//from www . j a v a 2 s .c o m getCalculatedDecision(s, vertx, responseAction); } }
From source file:org.azrul.langmera.QLearningAnalytics.java
public void getCalculatedDecision(DecisionRequest req, Vertx vertx, Consumer<DecisionResponse> responseAction) { getDecisionPreCondition(req);/*from www . j a va2 s . com*/ LocalMap<String, Double> q = vertx.sharedData().getLocalMap("Q"); String keyWithMaxVal = null; Double maxVal = Double.NEGATIVE_INFINITY; for (String k : q.keySet()) { if (q.get(k) > maxVal) { maxVal = q.get(k); keyWithMaxVal = k; } } DecisionResponse resp = null; if (keyWithMaxVal != null) { String decision = keyWithMaxVal.split(":")[1]; resp = new DecisionResponse(); resp.setDecisionId(req.getDecisionId()); resp.setDecision(decision); resp.setQValue(maxVal); //save cache to be matched to feedback if (req != null) { vertx.sharedData().getLocalMap("DECISION_REQUEST").put(req.getDecisionId(), req); } if (resp != null) { vertx.sharedData().getLocalMap("DECISION_RESPONSE").put(req.getDecisionId(), resp); } responseAction.accept(resp); } else { getRandomDecision(req, vertx, responseAction); } }
From source file:org.azrul.langmera.QLearningAnalytics.java
public void getRandomDecision(DecisionRequest req, Vertx vertx, Consumer<DecisionResponse> responseAction) { getDecisionPreCondition(req);/*from w ww .java 2s.c o m*/ Integer r = random.nextInt(req.getOptions().length); DecisionResponse resp = new DecisionResponse(); resp.setDecision(req.getOptions()[r]); resp.setDecisionId(req.getDecisionId()); //save cache to be matched to feedback if (req != null) { vertx.sharedData().getLocalMap("DECISION_REQUEST").put(req.getDecisionId(), req); } if (resp != null) { vertx.sharedData().getLocalMap("DECISION_RESPONSE").put(req.getDecisionId(), resp); } responseAction.accept(resp); }
From source file:org.azrul.langmera.QLearningAnalytics.java
@Override public void learn(DecisionFeedback currentFeedback, Vertx vertx, Runnable responseAction) { LocalMap<String, DetailDecisionFeedback> decisionFeedbackMap = vertx.sharedData() .getLocalMap("DECISION_FEEDBACK"); LocalMap<String, DecisionRequest> decisionRequestMap = vertx.sharedData().getLocalMap("DECISION_REQUEST"); LocalMap<String, DecisionResponse> decisionResponseMap = vertx.sharedData() .getLocalMap("DECISION_RESPONSE"); LocalMap<String, Double> q = vertx.sharedData().getLocalMap("Q"); LocalMap<Long, String> trackers = vertx.sharedData().getLocalMap("FEEDBACK_TRACKER"); int feedbackCount = decisionFeedbackMap.size(); boolean skipLearning = false; if (decisionRequestMap.get(currentFeedback.getDecisionId()) == null) { skipLearning = true;//from w w w.j a v a 2s .c o m } if (decisionResponseMap.get(currentFeedback.getDecisionId()) == null) { skipLearning = true; } if (skipLearning == false) { String context = decisionRequestMap.get(currentFeedback.getDecisionId()).getContext(); String decision = decisionResponseMap.get(currentFeedback.getDecisionId()).getDecision(); DetailDecisionFeedback detailFB = new DetailDecisionFeedback(); detailFB.setFeedback(currentFeedback); detailFB.setContext(context); detailFB.setDecision(decision); decisionFeedbackMap.put(currentFeedback.getDecisionId(), detailFB); Long trackerKey = (new Date()).getTime(); trackers.put(trackerKey, currentFeedback.getDecisionId()); int feedbackCountByDecision = 0; List<Double> rewards = new ArrayList<>(); for (DetailDecisionFeedback fb : decisionFeedbackMap.values()) { if (context.equals(decisionFeedbackMap.get(fb.getFeedback().getDecisionId()).getContext()) && decision .equals(decisionFeedbackMap.get(fb.getFeedback().getDecisionId()).getDecision())) { feedbackCountByDecision++; rewards.add(fb.getFeedback().getScore()); } } Double w = 0.0; Double alpha = config.getProperty("alpha", Double.class); //if no step parameter is configured, calculate it if (alpha == null) { alpha = 1.0 / (feedbackCountByDecision); } //non-stationary q-learning int i = 0; for (Double ri : rewards) { i++; w = w + alpha * (Math.pow(1 - alpha, feedbackCountByDecision - i)) * ri; } Double newQ = w; //System.out.println(feedbackCount+" Q:["+context + ":" + decision+"]"+newQ); //save what we learn if (newQ.isInfinite() || newQ.isNaN()) { //skip } else { String key = context + ":" + decision; q.put(key, newQ); } //Limit the number of history taken into account - prevents memory leak if (feedbackCount > config.getProperty("maxHistoryRetained", Integer.class)) { Long tk = Collections.min(trackers.keySet()); String decisionIDWithMinTracker = trackers.get(tk); decisionFeedbackMap.remove(decisionIDWithMinTracker); trackers.remove(tk); } //clear cached req/resp once the feedback has come back decisionRequestMap.remove(currentFeedback.getDecisionId()); decisionResponseMap.remove(currentFeedback.getDecisionId()); //Get maxQ Double maxQ = Double.NEGATIVE_INFINITY; String decisionWithMaxQ = null; for (String contextDecision : q.keySet()) { if (q.get(contextDecision) > maxQ) { decisionWithMaxQ = contextDecision; maxQ = q.get(contextDecision); } } //keep traces if (Boolean.TRUE.equals(config.getProperty("collect.traces", Boolean.class))) { Date now = new Date(); for (String contextDecision : q.keySet()) { List<Double> qtrace = traces.get(contextDecision); if (qtrace == null) { qtrace = new ArrayList<Double>(); qtrace.add(q.get(contextDecision)); traces.put(contextDecision, qtrace); } else { qtrace.add(q.get(contextDecision)); } String[] c = contextDecision.split(":"); Trace trace = new Trace(currentFeedback.getDecisionId(), c[0], q.get(contextDecision), maxQ, now, c[1], currentFeedback.getScore()); vertx.eventBus().publish("SAVE_TRACE_TO_TRACE", SerializationUtils.serialize((Serializable) trace)); } } // //put in in-memory DB // // // String[] c = decisionWithMaxQ.split(":"); // if (InMemoryDB.store.get(0)==null){ // List<Object> imContext = new ArrayList<Object>(); // imContext.add(c[0]); // InMemoryDB.store.add(0,imContext); // }else{ // InMemoryDB.store.get(0).add(c[0]); // } // // if (InMemoryDB.store.get(1)==null){ // List<Object> imDecision = new ArrayList<Object>(); // imDecision.add(c[1]); // InMemoryDB.store.add(1,imDecision); // }else{ // InMemoryDB.store.get(1).add(c[1]); // } // // if (InMemoryDB.store.get(2)==null){ // List<Object> imMaxQ = new ArrayList<Object>(); // imMaxQ.add(maxQ); // InMemoryDB.store.add(2,imMaxQ); // }else{ // InMemoryDB.store.get(2).add(maxQ); // } // // if (InMemoryDB.store.get(3)==null){ // List<Object> imTime= new ArrayList<Object>(); // imTime.add(new Date()); // InMemoryDB.store.add(3,imTime); // }else{ // InMemoryDB.store.get(3).add(new Date()); // } responseAction.run(); if (Boolean.TRUE.equals(currentFeedback.getTerminal())) { long delta = (new Date()).getTime() - startTime; System.out.println("Time taken to process " + feedbackCount + " msgs:" + delta + " ms"); System.out.println("Time taken per msg: " + (delta / feedbackCount) + " ms"); System.out .println("Msgs per s: " + ((1000.0 * (double) feedbackCount) / ((double) delta)) + " msgs"); if (Boolean.TRUE.equals(config.getProperty("collect.traces", Boolean.class)) && Boolean.TRUE.equals(config.getProperty("display.desktop.chart", Boolean.class))) { final LineChart demo = new LineChart(chartDesc, traces); demo.pack(); demo.setVisible(true); } } } else { logger.log(Level.WARNING, "Attempt to learn from a feedback with no corresponding request/response"); responseAction.run(); } // //select qmovies,qsports,qconcerts from // (select t1.qvalue as qsports,t1.decisionid from trace t1 where t1.decision='SPORTS' order by t1.decisiontime) as A1 // join (select t2.qvalue as qmovies,t2.decisionid from trace t2 where t2.decision='MOVIES' order by t2.decisiontime) as A2 on A1.decisionid = A2.decisionid // join (select t3.qvalue as qconcerts,t3.decisionid from trace t3 where t3.decision='CONCERTS' order by t3.decisiontime) as A3 on A1.decisionid = A3.decisionid }
From source file:org.entcore.archive.controllers.ArchiveController.java
License:Open Source License
@Override public void init(Vertx vertx, final JsonObject config, RouteMatcher rm, Map<String, fr.wseduc.webutils.security.SecuredAction> securedActions) { super.init(vertx, config, rm, securedActions); String exportPath = config.getString("export-path", System.getProperty("java.io.tmpdir")); Set<String> expectedExports = new HashSet<>(); final JsonArray e = config.getJsonArray("expected-exports"); for (Object o : e) { if (o instanceof String) { expectedExports.add((String) o); }// w w w. ja v a 2s. com } LocalMap<Object, Object> server = vertx.sharedData().getLocalMap("server"); Boolean cluster = (Boolean) server.get("cluster"); final Map<String, Long> userExport = MapFactory.getSyncClusterMap(Archive.ARCHIVES, vertx); EmailFactory emailFactory = new EmailFactory(vertx, config); EmailSender notification = config.getBoolean("send.export.email", false) ? emailFactory.getSender() : null; storage = new StorageFactory(vertx, config).getStorage(); exportService = new FileSystemExportService(vertx.fileSystem(), eb, exportPath, expectedExports, notification, storage, userExport, new TimelineHelper(vertx, eb, config)); eventStore = EventStoreFactory.getFactory().getEventStore(Archive.class.getSimpleName()); Long periodicUserClear = config.getLong("periodicUserClear"); if (periodicUserClear != null) { vertx.setPeriodic(periodicUserClear, new Handler<Long>() { @Override public void handle(Long event) { final long limit = System.currentTimeMillis() - config.getLong("userClearDelay", 3600000l); Set<Map.Entry<String, Long>> entries = new HashSet<>(userExport.entrySet()); for (Map.Entry<String, Long> e : entries) { if (e.getValue() == null || e.getValue() < limit) { userExport.remove(e.getKey()); } } } }); } }