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
)
}