All Downloads are FREE. Search and download functionalities are using the official Maven repository.

zio.metrics.connectors.prometheus.package.scala Maven / Gradle / Ivy

package zio.metrics.connectors

import zio._
import zio.metrics.connectors.internal.MetricsClient

package object prometheus {

  lazy val publisherLayer: ULayer[PrometheusPublisher] = ZLayer.fromZIO(PrometheusPublisher.make)

  lazy val prometheusLayer: ZLayer[MetricsConfig & PrometheusPublisher, Nothing, Unit] =
    ZLayer.fromZIO(
      for {
        conf <- ZIO.service[MetricsConfig]
        pub  <- ZIO.service[PrometheusPublisher]
        _    <- MetricsClient.make(prometheusHandler(pub, conf))
      } yield (),
    )

  private def prometheusHandler(clt: PrometheusPublisher, config: MetricsConfig): Iterable[MetricEvent] => UIO[Unit] =
    events =>
      for {
        old            <- clt.get
        reportComplete <- ZIO.foreach(Chunk.fromIterable(events)) { e =>
                            PrometheusEncoder.encode(e, descriptionKey = Some(config.descriptionKey)).catchAll { t =>
                              ZIO.succeed(Chunk.empty)
                            }
                          }
        _              <- clt.set(reportComplete.flatten.addString(new StringBuilder(old.length), "\n").toString())
      } yield ()

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy