Skip to content

Commit cc075ad

Browse files
committed
feat: Implement micrometer-statsd module with PureConfig interop
refactor: Make micrometer-jmx more configurable
1 parent d66543e commit cc075ad

File tree

5 files changed

+42
-10
lines changed

5 files changed

+42
-10
lines changed

build.sbt

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -177,9 +177,18 @@ lazy val micrometerStatsD = project
177177
.settings(commonSettings)
178178
.settings(
179179
name := "sst-micrometer-statsd",
180-
libraryDependencies += Dependencies.micrometerStatsD
180+
libraryDependencies ++= Seq(
181+
Dependencies.micrometerStatsD,
182+
Dependencies.jsr305 // required because of Scala compiler
183+
)
181184
)
182185

186+
lazy val micrometerStatsDPureConfig = project
187+
.in(file("micrometer-statsd-pureconfig"))
188+
.dependsOn(micrometerStatsD, pureConfig)
189+
.settings(commonSettings)
190+
.settings(name := "sst-micrometer-statsd-pureconfig")
191+
183192
lazy val pureConfig = project
184193
.in(file("pureconfig"))
185194
.settings(commonSettings)

micrometer-jmx/src/main/scala/com/avast/sst/micrometer/jmx/MicrometerJmxModule.scala

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,23 +16,25 @@ object MicrometerJmxModule {
1616

1717
/** Makes configured [[io.micrometer.jmx.JmxMeterRegistry]]. */
1818
@SuppressWarnings(Array("org.wartremover.warts.NonUnitStatements"))
19-
def make[F[_]: Sync](config: MicrometerJmxConfig): Resource[F, JmxMeterRegistry] = {
19+
def make[F[_]: Sync](config: MicrometerJmxConfig,
20+
clock: Clock = Clock.SYSTEM,
21+
nameMapper: HierarchicalNameMapper = HierarchicalNameMapper.DEFAULT): Resource[F, JmxMeterRegistry] = {
2022
Resource
2123
.make {
2224
Sync[F].delay {
2325
if (config.enableTypeScopeNameHierarchy) {
2426
val dropwizardRegistry = new MetricRegistry
2527
val registry = new JmxMeterRegistry(
2628
new CustomJmxConfig(config),
27-
Clock.SYSTEM,
28-
HierarchicalNameMapper.DEFAULT,
29+
clock,
30+
nameMapper,
2931
dropwizardRegistry,
3032
makeJmxReporter(dropwizardRegistry, config.domain)
3133
)
3234
registry.config.namingConvention(NamingConvention.dot)
3335
registry
3436
} else {
35-
new JmxMeterRegistry(new CustomJmxConfig(config), Clock.SYSTEM)
37+
new JmxMeterRegistry(new CustomJmxConfig(config), clock, nameMapper)
3638
}
3739
}
3840
}(registry => Sync[F].delay(registry.close()))
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package com.avast.sst.micrometer.statsd.pureconfig
2+
3+
import com.avast.sst.micrometer.statsd.MicrometerStatsDConfig
4+
import pureconfig.ConfigReader
5+
import pureconfig.generic.semiauto.{deriveEnumerationReader, deriveReader}
6+
7+
trait ConfigReaders {
8+
9+
implicit val micrometerStatsDFlavorReader: ConfigReader[MicrometerStatsDConfig.Flavor] = deriveEnumerationReader
10+
11+
implicit val micrometerStatsDProtocolReader: ConfigReader[MicrometerStatsDConfig.Protocol] = deriveEnumerationReader
12+
13+
implicit val micrometerStatsDConfigReader: ConfigReader[MicrometerStatsDConfig] = deriveReader
14+
15+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
package com.avast.sst.micrometer.statsd.pureconfig
2+
3+
object implicits extends ConfigReaders

micrometer-statsd/src/main/scala/com/avast/sst/micrometer/statsd/MicrometerStatsDModule.scala

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
package com.avast.sst.micrometer.statsd
22

3-
import java.time.{Clock, Duration}
3+
import java.time.Duration
44

55
import cats.effect.{Resource, Sync}
66
import com.avast.sst.micrometer.statsd.MicrometerStatsDConfig.{Flavor, Protocol}
7-
import io.micrometer.core.instrument.config.NamingConvention
7+
import io.micrometer.core.instrument.Clock
88
import io.micrometer.core.instrument.util.HierarchicalNameMapper
99
import io.micrometer.statsd.{StatsdConfig, StatsdFlavor, StatsdMeterRegistry, StatsdProtocol}
1010

@@ -13,14 +13,17 @@ import scala.language.higherKinds
1313
object MicrometerStatsDModule {
1414

1515
/** Makes configured [[io.micrometer.statsd.StatsdMeterRegistry]]. */
16-
def make[F[_]: Sync](config: MicrometerStatsDConfig, clock: Clock): Resource[F, StatsdMeterRegistry] = {
16+
def make[F[_]: Sync](config: MicrometerStatsDConfig,
17+
clock: Clock = Clock.SYSTEM,
18+
nameMapper: HierarchicalNameMapper = HierarchicalNameMapper.DEFAULT): Resource[F, StatsdMeterRegistry] = {
1719
Resource
1820
.make {
1921
Sync[F].delay {
2022
StatsdMeterRegistry
2123
.builder(new CustomStatsdConfig(config))
22-
.
23-
new StatsdMeterRegistry(???, ???)
24+
.clock(clock)
25+
.nameMapper(nameMapper)
26+
.build
2427
}
2528
}(registry => Sync[F].delay(registry.close()))
2629
}

0 commit comments

Comments
 (0)