///|
fn main raise {
let pattern = @cep.Pattern::new(
"checkout-funnel",
[
@cep.Stage::new("view", @cep.Kind("view")),
@cep.Stage::new("coupon", @cep.Kind("coupon"), min=0),
@cep.Stage::new(
"purchase",
@cep.Kind("purchase"),
contiguity=@cep.SkipAny,
),
],
600000L,
)
let metrics = @cep.DetectionMetrics::new()
let engine = @cep.Engine::new([pattern])
for
(id, kind, time) in [
("v", "view", 0L),
("p1", "purchase", 100L),
("p2", "purchase", 200L),
] {
ignore(engine.push(@cep.Event::new(id, "visit/1", time, kind)))
}
let preview = engine.preview([], 200L)
assert_eq(engine.watermark(), -1L)
assert_eq(preview.batch().matches().length(), 2)
let actual = engine.advance_watermark(200L)
metrics.observe(actual)
assert_eq(metrics.series()[0].matches, 2L)
assert_eq(actual.matches()[0].events("coupon").length(), 0)
println(@cep.metrics_to_json(metrics).stringify())
}