///|
fn main raise {
  let log = @lens.EventLog::new([
    @lens.LogEvent::new("1", "ticket-1", "open", 0L, 1L),
    @lens.LogEvent::new(
      "2",
      "ticket-1",
      "investigate",
      2L,
      4L,
      resource=Some("support"),
    ),
    @lens.LogEvent::new(
      "3",
      "ticket-1",
      "investigate",
      5L,
      8L,
      resource=Some("support"),
    ),
    @lens.LogEvent::new("4", "ticket-1", "close", 9L, 10L),
  ])
  let graph = log.discover()
  assert_true(
    graph.edges.any(edge => {
      edge.source == "investigate" && edge.target == "investigate"
    }),
  )
  let result = log.traces()[0].align([
    @lens.ReferencePath::new("single-investigation", [
      "open", "investigate", "close",
    ]),
  ])
  assert_eq(result.cost, 1)
  let report = log.performance()
  assert_true(report.resources[0].service.p95 == Some(3L))
  println(@lens.alignment_to_json(result).stringify())
  println(@lens.performance_to_json(report).stringify())
}