X-Git-Url: https://git.pterodactylus.net/?p=Sone.git;a=blobdiff_plain;f=src%2Fmain%2Fkotlin%2Fnet%2Fpterodactylus%2Fsone%2Ftemplate%2FHistogramRenderer.kt;fp=src%2Fmain%2Fkotlin%2Fnet%2Fpterodactylus%2Fsone%2Ftemplate%2FHistogramRenderer.kt;h=dba32b2cc9730bdafe0a53003e360371cc846d12;hp=0000000000000000000000000000000000000000;hb=d50730f6a330439e0e7ef97ca9329dffe72d5640;hpb=97fe04482ebb8a08e43294acde041c2975cbd8ee diff --git a/src/main/kotlin/net/pterodactylus/sone/template/HistogramRenderer.kt b/src/main/kotlin/net/pterodactylus/sone/template/HistogramRenderer.kt new file mode 100644 index 0000000..dba32b2 --- /dev/null +++ b/src/main/kotlin/net/pterodactylus/sone/template/HistogramRenderer.kt @@ -0,0 +1,46 @@ +package net.pterodactylus.sone.template + +import com.codahale.metrics.* +import net.pterodactylus.sone.utils.* +import net.pterodactylus.util.template.* + +/** + * [Filter] that renders a [Histogram] as a table row. + */ +class HistogramRenderer : Filter { + + override fun format(templateContext: TemplateContext, data: Any?, parameters: Map?): Any? { + templateContext["metricName"] = (parameters?.get("name") as String?)?.dotToCamel()?.let { "Page.Metrics.$it.Title" } + (data as? Histogram)?.snapshot?.run { + templateContext["count"] = data.count + templateContext["min"] = min + templateContext["max"] = max + templateContext["mean"] = mean + templateContext["median"] = median + templateContext["percentile75"] = get75thPercentile() + templateContext["percentile95"] = get95thPercentile() + templateContext["percentile98"] = get98thPercentile() + templateContext["percentile99"] = get99thPercentile() + templateContext["percentile999"] = get999thPercentile() + } + return template.render(templateContext) + } + +} + +private val template = """ + <% metricName|l10n|html> + <% count|html> + <% min|duration scale=='μs'|html> + <% max|duration scale=='μs'|html> + <% mean|duration scale=='μs'|html> + <% median|duration scale=='μs'|html> + <% percentile75|duration scale=='μs'|html> + <% percentile95|duration scale=='μs'|html> + <% percentile98|duration scale=='μs'|html> + <% percentile99|duration scale=='μs'|html> + <% percentile999|duration scale=='μs'|html> +""".asTemplate() + +private fun String.dotToCamel() = + split(".").joinToString("", transform = String::capitalize)