mirror of
https://github.com/digital-asset/daml.git
synced 2024-09-19 16:57:40 +03:00
LT-25 publish JSON-API HikariCP metrics (#16921)
* JSON-API: publish HikariCP metrics * formatting * address review comment
This commit is contained in:
parent
dfeec9c423
commit
6c3f997499
@ -109,7 +109,10 @@ object ContractDao {
|
||||
// pool for connections awaiting database access
|
||||
val es = Executors.newWorkStealingPool(cfg.baseConfig.poolSize)
|
||||
val (ds, conn) =
|
||||
ConnectionPool.connect(cfg.baseConfig)(ExecutionContext.fromExecutor(es), cs)
|
||||
ConnectionPool.connect(cfg.baseConfig, metrics.getMetricRegistry)(
|
||||
ExecutionContext.fromExecutor(es),
|
||||
cs,
|
||||
)
|
||||
new ContractDao(ds, conn, es)
|
||||
}
|
||||
setup.fold(msg => throw new IllegalArgumentException(msg), identity)
|
||||
|
@ -3,8 +3,10 @@
|
||||
|
||||
package com.daml.http.metrics
|
||||
|
||||
import com.codahale.metrics.MetricRegistry
|
||||
import com.daml.metrics.api.MetricHandle.{Counter, LabeledMetricsFactory, MetricsFactory, Timer}
|
||||
import com.daml.metrics.api.MetricName
|
||||
import com.daml.metrics.api.dropwizard.DropwizardMetricsFactory
|
||||
import com.daml.metrics.api.noop.NoOpMetricsFactory
|
||||
import com.daml.metrics.http.{DamlHttpMetrics, DamlWebSocketMetrics}
|
||||
import com.daml.metrics.{CacheMetrics, HealthMetrics}
|
||||
@ -27,6 +29,13 @@ class HttpJsonApiMetrics(
|
||||
) {
|
||||
import HttpJsonApiMetrics._
|
||||
|
||||
@nowarn
|
||||
def getMetricRegistry: Option[MetricRegistry] =
|
||||
defaultMetricsFactory match {
|
||||
case mf: DropwizardMetricsFactory => Some(mf.registry)
|
||||
case _ => None
|
||||
}
|
||||
|
||||
val prefix: MetricName = MetricName.Daml :+ "http_json_api"
|
||||
|
||||
@nowarn
|
||||
|
@ -34,6 +34,7 @@ da_scala_library(
|
||||
deps = [
|
||||
"//libs-scala/scala-utils",
|
||||
"@maven//:com_zaxxer_HikariCP",
|
||||
"@maven//:io_dropwizard_metrics_metrics_core",
|
||||
],
|
||||
)
|
||||
|
||||
|
@ -4,6 +4,7 @@
|
||||
package com.daml.dbutils
|
||||
|
||||
import cats.effect.{Blocker, ContextShift, IO}
|
||||
import com.codahale.metrics.MetricRegistry
|
||||
import com.zaxxer.hikari.{HikariConfig, HikariDataSource}
|
||||
import doobie._
|
||||
|
||||
@ -37,12 +38,13 @@ object ConnectionPool {
|
||||
type T = Transactor.Aux[IO, _ <: DataSource with Closeable]
|
||||
|
||||
def connect(
|
||||
c: JdbcConfig
|
||||
c: JdbcConfig,
|
||||
metricRegistry: Option[MetricRegistry] = None,
|
||||
)(implicit
|
||||
ec: ExecutionContext,
|
||||
cs: ContextShift[IO],
|
||||
): (DataSource with Closeable, T) = {
|
||||
val ds = dataSource(c)
|
||||
val ds = dataSource(c, metricRegistry)
|
||||
(
|
||||
ds,
|
||||
Transactor
|
||||
@ -55,7 +57,8 @@ object ConnectionPool {
|
||||
}
|
||||
|
||||
private[this] def dataSource(
|
||||
jc: JdbcConfig
|
||||
jc: JdbcConfig,
|
||||
metricRegistry: Option[MetricRegistry],
|
||||
) = {
|
||||
import jc._
|
||||
val c = new HikariConfig
|
||||
@ -66,6 +69,10 @@ object ConnectionPool {
|
||||
c.setConnectionTimeout(jc.connectionTimeout.toMillis)
|
||||
c.setMaximumPoolSize(poolSize)
|
||||
c.setIdleTimeout(jc.idleTimeout.toMillis)
|
||||
metricRegistry match {
|
||||
case Some(mr) => c.setMetricRegistry(mr)
|
||||
case None =>
|
||||
}
|
||||
new HikariDataSource(c)
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user