io.prometheus.client.exporter.common.TextFormat Scala Examples
The following examples show how to use io.prometheus.client.exporter.common.TextFormat.
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example.
Example 1
Source File: package.scala From zio-metrics with Apache License 2.0 | 5 votes |
package zio.metrics.prometheus import zio.{ Has, Layer, Task, ZLayer } import io.prometheus.client.CollectorRegistry import io.prometheus.client.exporter.{ HTTPServer, PushGateway } import io.prometheus.client.bridge.Graphite import io.prometheus.client.exporter.common.TextFormat import io.prometheus.client.exporter.HttpConnectionFactory import io.prometheus.client.exporter.BasicAuthHttpConnectionFactory import io.prometheus.client.hotspot.DefaultExports import java.net.InetSocketAddress import java.io.StringWriter package object exporters { type Exporters = Has[Exporters.Service] object Exporters { trait Service { def http(r: CollectorRegistry, port: Int): Task[HTTPServer] def graphite(r: CollectorRegistry, host: String, port: Int, intervalSeconds: Int): Task[Thread] def pushGateway( r: CollectorRegistry, hots: String, port: Int, jobName: String, user: Option[String], password: Option[String], httpConnectionFactory: Option[HttpConnectionFactory] ): Task[Unit] def write004(r: CollectorRegistry): Task[String] def initializeDefaultExports(r: CollectorRegistry): Task[Unit] } val live: Layer[Nothing, Exporters] = ZLayer.succeed(new Service { def http(r: CollectorRegistry, port: Int): zio.Task[HTTPServer] = Task { new HTTPServer(new InetSocketAddress(port), r) } def graphite(r: CollectorRegistry, host: String, port: Int, intervalSeconds: Int): Task[Thread] = Task { val g = new Graphite(host, port) g.start(r, intervalSeconds) } def pushGateway( r: CollectorRegistry, host: String, port: Int, jobName: String, user: Option[String], password: Option[String], httpConnectionFactory: Option[HttpConnectionFactory] ): Task[Unit] = Task { val pg = new PushGateway(s"$host:$port") if (user.isDefined) for { u <- user p <- password } yield pg.setConnectionFactory(new BasicAuthHttpConnectionFactory(u, p)) else if (httpConnectionFactory.isDefined) for { conn <- httpConnectionFactory } yield pg.setConnectionFactory(conn) pg.pushAdd(r, jobName) } def write004(r: CollectorRegistry): Task[String] = Task { val writer = new StringWriter TextFormat.write004(writer, r.metricFamilySamples) writer.toString } def initializeDefaultExports(r: CollectorRegistry): Task[Unit] = Task(DefaultExports.initialize()) }) def stopHttp(server: HTTPServer): Task[Unit] = Task(server.stop()) } }
Example 2
Source File: MetricsController.scala From daf with BSD 3-Clause "New" or "Revised" License | 5 votes |
package controllers import java.io.Writer import javax.inject.Singleton import akka.util.ByteString import io.prometheus.client._ import io.prometheus.client.exporter.common.TextFormat import io.prometheus.client.hotspot.DefaultExports import play.api.http.HttpEntity import play.api.mvc._ @Singleton class MetricsController extends Controller { //export default jvm metrics DefaultExports.initialize() def index = Action { val samples = new StringBuilder() val writer = new WriterAdapter(samples) TextFormat.write004(writer, CollectorRegistry.defaultRegistry.metricFamilySamples()) writer.close() Result( header = ResponseHeader(200, Map.empty), body = HttpEntity.Strict(ByteString(samples.toString), Some(TextFormat.CONTENT_TYPE_004)) ) } } class WriterAdapter(buffer: StringBuilder) extends Writer { override def write(charArray: Array[Char], offset: Int, length: Int): Unit = { buffer ++= new String(new String(charArray, offset, length).getBytes("UTF-8"), "UTF-8") } override def flush(): Unit = {} override def close(): Unit = {} }
Example 3
Source File: MetricsController.scala From daf with BSD 3-Clause "New" or "Revised" License | 5 votes |
package controllers import java.io.Writer import javax.inject.Singleton import akka.util.ByteString import io.prometheus.client._ import io.prometheus.client.exporter.common.TextFormat import io.prometheus.client.hotspot.DefaultExports import play.api.http.HttpEntity import play.api.mvc._ @Singleton class MetricsController extends Controller { //export default jvm metrics DefaultExports.initialize() def index = Action { val samples = new StringBuilder() val writer = new WriterAdapter(samples) TextFormat.write004(writer, CollectorRegistry.defaultRegistry.metricFamilySamples()) writer.close() Result( header = ResponseHeader(200, Map.empty), body = HttpEntity.Strict(ByteString(samples.toString), Some(TextFormat.CONTENT_TYPE_004)) ) } } class WriterAdapter(buffer: StringBuilder) extends Writer { override def write(charArray: Array[Char], offset: Int, length: Int): Unit = { val b = buffer.append(new String(new String(charArray, offset, length).getBytes("UTF-8"), "UTF-8")) } override def flush(): Unit = {} override def close(): Unit = {} }
Example 4
Source File: MetricsController.scala From daf with BSD 3-Clause "New" or "Revised" License | 5 votes |
package controllers import java.io.Writer import javax.inject.Singleton import akka.util.ByteString import io.prometheus.client._ import io.prometheus.client.exporter.common.TextFormat import io.prometheus.client.hotspot.DefaultExports import play.api.http.HttpEntity import play.api.mvc._ @Singleton class MetricsController extends Controller { //export default jvm metrics DefaultExports.initialize() def index = Action { val samples = new StringBuilder() val writer = new WriterAdapter(samples) TextFormat.write004(writer, CollectorRegistry.defaultRegistry.metricFamilySamples()) writer.close() Result( header = ResponseHeader(200, Map.empty), body = HttpEntity.Strict(ByteString(samples.toString), Some(TextFormat.CONTENT_TYPE_004)) ) } } class WriterAdapter(buffer: StringBuilder) extends Writer { override def write(charArray: Array[Char], offset: Int, length: Int): Unit = { buffer ++= new String(new String(charArray, offset, length).getBytes("UTF-8"), "UTF-8") } override def flush(): Unit = {} override def close(): Unit = {} }
Example 5
Source File: MetricsController.scala From daf with BSD 3-Clause "New" or "Revised" License | 5 votes |
package controllers import java.io.Writer import javax.inject.Singleton import akka.util.ByteString import io.prometheus.client._ import io.prometheus.client.exporter.common.TextFormat import io.prometheus.client.hotspot.DefaultExports import play.api.http.HttpEntity import play.api.mvc._ @Singleton class MetricsController extends Controller { //export default jvm metrics DefaultExports.initialize() def index = Action { val samples = new StringBuilder() val writer = new WriterAdapter(samples) TextFormat.write004(writer, CollectorRegistry.defaultRegistry.metricFamilySamples()) writer.close() Result( header = ResponseHeader(200, Map.empty), body = HttpEntity.Strict(ByteString(samples.toString), Some(TextFormat.CONTENT_TYPE_004)) ) } } class WriterAdapter(buffer: StringBuilder) extends Writer { override def write(charArray: Array[Char], offset: Int, length: Int): Unit = { buffer ++= new String(new String(charArray, offset, length).getBytes("UTF-8"), "UTF-8") } override def flush(): Unit = {} override def close(): Unit = {} }
Example 6
Source File: PrometheusMarshallers.scala From akka-http-metrics with Apache License 2.0 | 5 votes |
package fr.davit.akka.http.metrics.prometheus.marshalling import java.io.StringWriter import akka.http.scaladsl.marshalling.{Marshaller, ToEntityMarshaller} import akka.http.scaladsl.model.{ContentType, HttpCharsets, HttpEntity, MediaTypes} import fr.davit.akka.http.metrics.prometheus.PrometheusRegistry import io.prometheus.client.exporter.common.TextFormat trait PrometheusMarshallers { val PrometheusContentType: ContentType = { MediaTypes.`text/plain` withParams Map("version" -> "0.0.4") withCharset HttpCharsets.`UTF-8` } implicit val marshaller: ToEntityMarshaller[PrometheusRegistry] = { Marshaller.opaque { registry => val output = new StringWriter() try { TextFormat.write004(output, registry.underlying.metricFamilySamples) HttpEntity(output.toString).withContentType(PrometheusContentType) } finally { output.close() } } } } object PrometheusMarshallers extends PrometheusMarshallers
Example 7
Source File: MetricsService.scala From finagle-prometheus with MIT License | 5 votes |
package com.samstarling.prometheusfinagle.metrics import java.io.StringWriter import com.twitter.finagle.Service import com.twitter.finagle.http.{Request, Response, Status} import com.twitter.util.Future import io.prometheus.client.CollectorRegistry import io.prometheus.client.exporter.common.TextFormat class MetricsService(registry: CollectorRegistry) extends Service[Request, Response] { override def apply(request: Request): Future[Response] = { val writer = new StringWriter TextFormat.write004(writer, registry.metricFamilySamples()) val response = Response(request.version, Status.Ok) response.setContentString(writer.toString) Future(response) } }
Example 8
Source File: AkkaHttpPrometheusExporter.scala From cloudstate with Apache License 2.0 | 5 votes |
package io.cloudstate.proxy import java.io.OutputStreamWriter import java.util import akka.actor.ActorSystem import akka.http.scaladsl.Http import io.prometheus.client.CollectorRegistry import akka.http.scaladsl.model._ import akka.http.scaladsl.server.Directives._ import akka.stream.Materializer import akka.util.ByteString import io.prometheus.client.exporter.common.TextFormat import scala.concurrent.Future class AkkaHttpPrometheusExporter(metricsPort: Int, registry: CollectorRegistry = CollectorRegistry.defaultRegistry)( implicit system: ActorSystem, mat: Materializer ) { private[this] final val PrometheusContentType = ContentType.parse(TextFormat.CONTENT_TYPE_004).right.get private def routes = get { (path("metrics") | pathSingleSlash) { encodeResponse { parameter(Symbol("name[]").*) { names => complete { val namesSet = new util.HashSet[String]() names.foreach(namesSet.add) val builder = ByteString.newBuilder val writer = new OutputStreamWriter(builder.asOutputStream) TextFormat.write004(writer, registry.filteredMetricFamilySamples(namesSet)) // Very important to flush the writer before we build the byte string! writer.flush() HttpEntity(PrometheusContentType, builder.result()) } } } } } def start(): Future[Http.ServerBinding] = Http().bindAndHandle(routes, "0.0.0.0", metricsPort) }
Example 9
Source File: PrometheusRouting.scala From vinyldns with Apache License 2.0 | 5 votes |
package vinyldns.api.route import java.io.StringWriter import akka.http.scaladsl.model._ import akka.http.scaladsl.server.Directives import io.prometheus.client.CollectorRegistry import io.prometheus.client.exporter.common.TextFormat import scala.collection.JavaConverters._ trait PrometheusRoute extends Directives { def collectorRegistry: CollectorRegistry private val `text/plain; version=0.0.4; charset=utf-8` = ContentType { MediaType.customWithFixedCharset( "text", "plain", HttpCharsets.`UTF-8`, params = Map("version" -> "0.0.4") ) } def renderMetrics(registry: CollectorRegistry, names: Set[String]): String = { val writer = new StringWriter() TextFormat.write004(writer, registry.filteredMetricFamilySamples(names.toSet.asJava)) writer.toString } val prometheusRoute = (get & path("metrics" / "prometheus") & parameter('name.*)) { names => val content = renderMetrics(collectorRegistry, names.toSet) complete { HttpResponse(entity = HttpEntity(`text/plain; version=0.0.4; charset=utf-8`, content)) } } }
Example 10
Source File: MetricFamilySamplesEntity.scala From prometheus-akka-http with MIT License | 5 votes |
package com.lonelyplanet.prometheus.api import java.io.{StringWriter, Writer} import java.util import akka.http.scaladsl.marshalling.{ToEntityMarshaller, Marshaller} import akka.http.scaladsl.model._ import io.prometheus.client.Collector.MetricFamilySamples import io.prometheus.client.CollectorRegistry import io.prometheus.client.exporter.common.TextFormat case class MetricFamilySamplesEntity(samples: util.Enumeration[MetricFamilySamples]) object MetricFamilySamplesEntity { private val mediaTypeParams = Map("version" -> "0.0.4") private val mediaType = MediaType.customWithFixedCharset("text", "plain", HttpCharsets.`UTF-8`, params = mediaTypeParams) def fromRegistry(collectorRegistry: CollectorRegistry): MetricFamilySamplesEntity = { MetricFamilySamplesEntity(collectorRegistry.metricFamilySamples()) } def toPrometheusTextFormat(e: MetricFamilySamplesEntity): String = { val writer: Writer = new StringWriter() TextFormat.write004(writer, e.samples) writer.toString } implicit val metricsFamilySamplesMarshaller: ToEntityMarshaller[MetricFamilySamplesEntity] = { Marshaller.withFixedContentType(mediaType) { s => HttpEntity(mediaType, toPrometheusTextFormat(s)) } } }
Example 11
Source File: MetricsEndpointSpec.scala From prometheus-akka-http with MIT License | 5 votes |
package com.lonelyplanet.prometheus.api import java.io.StringWriter import akka.http.scaladsl.model.HttpCharsets import akka.http.scaladsl.testkit.ScalatestRouteTest import com.lonelyplanet.prometheus.Utils._ import io.prometheus.client.exporter.common.TextFormat import io.prometheus.client.{CollectorRegistry, Histogram} import org.scalatest.flatspec.AnyFlatSpec import org.scalatest.matchers.should.Matchers import scala.util.Random class MetricsEndpointSpec extends AnyFlatSpec with Matchers with ScalatestRouteTest { "Metrics endpoint" should "return the correct media type and charset" in { val api = createEndpoint(CollectorRegistry.defaultRegistry) Get("/metrics") ~> api.routes ~> check { mediaType.subType shouldBe "plain" mediaType.isText shouldBe true mediaType.params shouldBe Map("version" -> "0.0.4") charset shouldBe HttpCharsets.`UTF-8` } } it should "return serialized metrics in the prometheus text format" in { val registry = new CollectorRegistry() val api = createEndpoint(registry) val hist = Histogram.build().name(RandomTestName).help(RandomTestHelp).linearBuckets(0, 1, 10).register(registry) hist.observe(Math.abs(Random.nextDouble())) Get("/metrics") ~> api.routes ~> check { val resp = responseAs[String] val writer = new StringWriter() TextFormat.write004(writer, registry.metricFamilySamples()) resp shouldBe writer.toString } } private val RandomTestName = generateRandomStringOfLength(16) private val RandomTestHelp = generateRandomStringOfLength(16) private def createEndpoint(collectorRegistry: CollectorRegistry) = { new MetricsEndpoint(collectorRegistry) } }
Example 12
Source File: PrometheusController.scala From play-prometheus-filters with MIT License | 5 votes |
package com.github.stijndehaes.playprometheusfilters.controllers import akka.util.ByteString import com.github.stijndehaes.playprometheusfilters.utils.WriterAdapter import javax.inject._ import play.api.mvc._ import io.prometheus.client.CollectorRegistry import io.prometheus.client.exporter.common.TextFormat import org.slf4j.LoggerFactory import play.api.http.HttpEntity class PrometheusController @Inject()(registry: CollectorRegistry, cc: ControllerComponents) extends AbstractController(cc) { private val logger = LoggerFactory.getLogger(classOf[PrometheusController]) def getMetrics = Action { logger.trace("Metrics call received") val samples = new StringBuilder() val writer = new WriterAdapter(samples) TextFormat.write004(writer, registry.metricFamilySamples()) writer.close() Result( header = ResponseHeader(200, Map.empty), body = HttpEntity.Strict(ByteString(samples.toString), Some(TextFormat.CONTENT_TYPE_004)) ) } }