in atlas-chart/src/main/scala/com/netflix/atlas/chart/model/PlotDef.scala [68:135]
def bounds(start: Long, end: Long): (Double, Double) = {
val dataLines = lines
if (dataLines.isEmpty) 0.0 -> 1.0
else {
val step = dataLines.head.data.data.step
val (regular, stacked) = dataLines
.filter(line => line.lineStyle != LineStyle.VSPAN && !Heatmap.isPercentileHeatmap(line))
.partition(_.lineStyle != LineStyle.STACK)
var max = -JDouble.MAX_VALUE
var min = JDouble.MAX_VALUE
var posSum = 0.0
var negSum = 0.0
dataLines
.filter(Heatmap.isPercentileHeatmap)
.filter(line => hasNonZeroData(start, end, step, line.data.data))
.flatMap(line => Heatmap.percentileBucketRange(line.data.tags))
.foreach {
case (mn, mx) =>
min = math.min(min, mn)
max = math.max(max, mx)
}
var t = start
while (t < end) {
regular.foreach { line =>
val v = line.data.data(t)
if (JDouble.isFinite(v)) {
max = if (v > max) v else max
min = if (v < min) v else min
}
}
stacked.foreach { line =>
val v = line.data.data(t)
if (JDouble.isFinite(v)) {
if (v >= 0.0) posSum += v else negSum += v
}
}
if (stacked.nonEmpty) {
val v = stacked.head.data.data(t)
if (JDouble.isFinite(v)) {
max = if (v > max) v else max
min = if (v < min) v else min
}
max = if (posSum > 0.0 && posSum > max) posSum else max
min = if (negSum < 0.0 && negSum < min) negSum else min
}
posSum = 0.0
negSum = 0.0
t += step
}
// If an area or stack is shown it will fill to zero and the filled area should be shown
val hasArea = dataLines.exists { line =>
line.lineStyle == LineStyle.AREA || line.lineStyle == LineStyle.STACK
}
min = if (min == JDouble.MAX_VALUE) 0.0 else min
max = if (max == -JDouble.MAX_VALUE) 1.0 else max
finalBounds(hasArea, min, max)
}
}