in atlas-chart/src/main/scala/com/netflix/atlas/chart/graphics/TimeAxis.scala [84:129]
def draw(g: Graphics2D, x1: Int, y1: Int, x2: Int, y2: Int): Unit = {
val txtH = ChartSettings.smallFontDims.height
val labelPadding = TimeAxis.minTickLabelWidth / 2
// Horizontal line across the bottom of the chart. The main horizontal line for the axis is
// made faint so it is easier to see lines in the chart that are directly against the axis.
style.withAlpha(alpha).configure(g)
g.drawLine(x1, y1, x2, y1)
style.configure(g)
val xscale = scale(x1, x2)
val majorTicks = ticks(x1, x2).filter(_.major)
var indicatedTransition = false
majorTicks.foreach { tick =>
val px = xscale(tick.timestamp)
if (px >= x1 && px <= x2) {
// Vertical tick mark
g.drawLine(px, y1, px, y1 + 4)
// Label for the tick mark
if (tick.timestamp >= transitionTime && !indicatedTransition) {
indicatedTransition = true
val before = transition.getOffsetBefore
val after = transition.getOffsetAfter
val delta = Duration.ofSeconds(after.getTotalSeconds - before.getTotalSeconds)
val label = (if (delta.isNegative) "" else "+") + delta.toString.substring(2)
val txt =
Text(label, font = ChartSettings.smallFont, style = style.copy(color = Color.RED))
txt.draw(g, px - labelPadding, y1 + txtH / 2, px + labelPadding, y1 + txtH)
} else {
val txt = Text(tick.label, font = ChartSettings.smallFont, style = style)
txt.draw(g, px - labelPadding, y1 + txtH / 2, px + labelPadding, y1 + txtH)
}
}
}
// Show short form of time zone as a label for the axis
if (showZone) {
val name = zone.getDisplayName(TextStyle.NARROW_STANDALONE, Locale.US)
val zoneLabel =
Text(name, font = ChartSettings.smallFont, style = style, alignment = TextAlignment.RIGHT)
val labelW = (name.length + 2) * ChartSettings.smallFontDims.width
val padding = labelPadding + 2
zoneLabel.draw(g, x1 - labelW - padding, y1 + txtH / 2, x1 - padding, y1 + txtH)
}
}