def toGraphConfig()

in atlas-eval/src/main/scala/com/netflix/atlas/eval/graph/Grapher.scala [109:184]


  def toGraphConfig(uri: Uri): GraphConfig = {
    val params = uri.query()
    val id = IdParamSanitizer.sanitize(params.get("id").getOrElse("default"))

    val features = params
      .get("features")
      .map(v => Features.valueOf(v.toUpperCase(Locale.US)))
      .getOrElse(Features.STABLE)

    import com.netflix.atlas.chart.GraphConstants.*
    val axes = (0 until MaxYAxis).map(i => i -> newAxis(params, i)).toMap

    val vision = params.get("vision").map(v => VisionType.valueOf(v))

    val theme = params.get("theme").getOrElse(settings.theme)
    val palette = params.get("palette").getOrElse(settings.primaryPalette(theme))

    val flags = ImageFlags(
      title = params.get("title").filter(_ != ""),
      width = params.get("w").fold(settings.width)(_.toInt),
      height = params.get("h").fold(settings.height)(_.toInt),
      zoom = params.get("zoom").fold(1.0)(_.toDouble),
      axes = axes,
      axisPerLine = params.get("axis_per_line").contains("1"),
      showLegend = !params.get("no_legend").contains("1"),
      showLegendStats = !params.get("no_legend_stats").contains("1"),
      showOnlyGraph = params.get("only_graph").contains("1"),
      vision = vision.getOrElse(VisionType.normal),
      palette = palette,
      theme = theme,
      layout = Layout.create(params.get("layout").getOrElse("canvas")),
      hints = processHints(params.get("hints"))
    )

    val q = params.get("q")
    if (q.isEmpty) {
      throw new IllegalArgumentException("missing required parameter 'q'")
    }

    val timezones = params.getAll("tz").reverse
    val parsedQuery = Try {
      val vars = Map("tz" -> GraphConfig.getTimeZoneIds(settings, timezones).head)
      val exprs = settings.interpreter
        .execute(q.get, vars, features)
        .stack
        .reverse
        .flatMap {
          case ModelExtractors.PresentationType(s) =>
            s.perOffset
          case v =>
            val tpe = v.getClass.getSimpleName
            throw new IllegalArgumentException(s"expecting time series expr, found $tpe '$v'")
        }
      if (settings.simpleLegendsEnabled)
        SimpleLegends.generate(exprs)
      else
        exprs
    }

    GraphConfig(
      settings = settings,
      query = q.get,
      parsedQuery = parsedQuery,
      start = params.get("s"),
      end = params.get("e"),
      timezones = timezones,
      step = params.get("step"),
      flags = flags,
      format = params.get("format").getOrElse("png"),
      id = id,
      features = features,
      isBrowser = false,
      isAllowedFromBrowser = true,
      uri = uri.toString
    )
  }