All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.gatling.charts.report.Container.scala Maven / Gradle / Ivy

There is a newer version: 3.13.1
Show newest version
/*
 * Copyright 2011-2024 GatlingCorp (https://gatling.io)
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *  http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package io.gatling.charts.report

import scala.annotation.tailrec
import scala.collection.mutable

import io.gatling.charts.component.RequestStatistics
import io.gatling.charts.stats.Group

private[gatling] object Container {
  val Group = "GROUP"
  val Request = "REQUEST"
}

private[charts] trait Container

private[charts] final class RequestContainer(val name: String, val stats: RequestStatistics) extends Container

private[charts] object GroupContainer {
  def root(requestStats: RequestStatistics): GroupContainer = GroupContainer("ROOT", requestStats)

  def apply(name: String, stats: RequestStatistics): GroupContainer =
    new GroupContainer(name, stats, mutable.LinkedHashMap.empty, mutable.LinkedHashMap.empty)
}

private[charts] final class GroupContainer(
    val name: String,
    val stats: RequestStatistics,
    val requests: mutable.Map[String, RequestContainer],
    val groups: mutable.Map[String, GroupContainer]
) extends Container {
  private def findGroup(path: List[String]) = {
    @tailrec
    def getGroupRec(g: GroupContainer, path: List[String]): GroupContainer = path match {
      case head :: tail => getGroupRec(g.groups(head), tail)
      case _            => g
    }

    getGroupRec(this, path)
  }

  def addGroup(group: Group, stats: RequestStatistics): Unit = {
    val parentGroup = group.hierarchy.dropRight(1)
    findGroup(parentGroup).groups += (group.name -> GroupContainer(group.name, stats))
  }

  def addRequest(group: Option[Group], requestName: String, stats: RequestStatistics): Unit = {
    val parentGroup = group.map(_.hierarchy).getOrElse(Nil)
    findGroup(parentGroup).requests += (requestName -> new RequestContainer(requestName, stats))
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy