Skip to main content

when

Exécute les clauses suivantes si au moins une expression conditionnelle est vraie

La clause when() est exécuté sur l'endpoint courant, et éventuellement, comme alternative à une précédente clause when().

La clause when() est évaluée dans la portée de sa clause maitre (from, parallel, to, map, reduce)

Usage: évaluation conditionnelle

interface org.mddynamics.network.stream.LinkStream
    public LinkStream when(String label, [(LinkStream stream, Event event) -> { return ...true|false }],..) throws StreamDefinitionException;

@param label: libellé de la lambda

@param stream: instance du stream

@param event: évenement ou message reçu par la lambda

@function lambda: implémentation de la fonction lambda. Doit retouner true pour exécuter les clauses suivantes ou false dans le cas contraire

Lorsque plusieurs fonctions lambda sont définies, elles sont exécutées séquentiellement sur les mêmes données reçues en entrée. La clause suivante est exécutée si au moins une lambda retourne true


@Override
public void build() throws Exception {

make("data collect")
.from("collect", "www.mddynamics.fr/app/data", (stream, probe) -> {
return probe;
})
.when("warning", (stream, probe) -> probe.resource().matches("status", "WARNING"))
.reply("warning ack", ok("warning received"))

.when("error", (stream, probe) -> probe.resource().matches("status", "ERROR"))
.to("notify", "www.business.com/montitoring/notification", (stream, probe) -> {
return createNotificationFrom(probe);
})
.reply("error ack", ok("error received"))
...
}

Usage: évaluation conditionnelle via regex

interface org.mddynamics.network.stream.LinkStream
    public LinkStream when(String regex, [(LinkStream stream, Event event) -> { <lambda>}],..) throws StreamDefinitionException;

@param label: libellé de la lambda

@param stream: instance du stream

@param event: évenement ou message reçu par la lambda

@function lambda: implémentation de la fonction lambda. Doit retouner une valeur (non booléenne) qui sera évaluée par la regex

Lorsque plusieurs fonctions lambda sont définies, elles sont exécutées séquentiellement sur les mêmes données reçues en entrée. La clause suivante est exécutée si au moins une regex retourne true


@Override
public void build() throws Exception {

make("api")
.from("REST/JSON demo", "www.mddynamics.fr/app/demo/api", (stream, request) -> {
stream.info("request received: %s", request);
return request;
})
.when("POST /demo/api", (stream, request) -> request.headers.getOrDefault("mddynamics-api", ""))
.reply("ok", (stream, request) -> ...)

.when("GET /demo/api", (stream, request) -> request.headers.getOrDefault("mddynamics-api", ""))
.reply("ok", (stream, request) -> ...)
...

}