Example usage for io.vertx.core Vertx sharedData

List of usage examples for io.vertx.core Vertx sharedData

Introduction

In this page you can find the example usage for io.vertx.core Vertx sharedData.

Prototype

@CacheReturn
SharedData sharedData();

Source Link

Document

Get the shared data object.

Usage

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());
                    }
                }
            }
        });
    }
}