LT-25 publish JSON-API HikariCP metrics (#16921)

* JSON-API: publish HikariCP metrics

* formatting

* address review comment
This commit is contained in:
peterkvokacka-da 2023-05-30 11:47:22 +10:00 committed by GitHub
parent dfeec9c423
commit 6c3f997499
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 24 additions and 4 deletions

View File

@ -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)

View File

@ -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

View File

@ -34,6 +34,7 @@ da_scala_library(
deps = [
"//libs-scala/scala-utils",
"@maven//:com_zaxxer_HikariCP",
"@maven//:io_dropwizard_metrics_metrics_core",
],
)

View File

@ -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)
}
}