diff options
Diffstat (limited to 'kamon-core/src/main/scala/kamon/status')
3 files changed, 46 insertions, 21 deletions
diff --git a/kamon-core/src/main/scala/kamon/status/JsonMarshalling.scala b/kamon-core/src/main/scala/kamon/status/JsonMarshalling.scala index 345e5cad..5a3f22dc 100644 --- a/kamon-core/src/main/scala/kamon/status/JsonMarshalling.scala +++ b/kamon-core/src/main/scala/kamon/status/JsonMarshalling.scala @@ -1,12 +1,10 @@ package kamon.status import com.grack.nanojson.JsonWriter -import kamon.module.Module -import kamon.module.Module.Registry import java.lang.{StringBuilder => JavaStringBuilder} import com.typesafe.config.ConfigRenderOptions -import kamon.metric.MetricRegistry +import kamon.module.Module trait JsonMarshalling[T] { @@ -20,8 +18,15 @@ trait JsonMarshalling[T] { object JsonMarshalling { - implicit object ModuleRegistryStatusJsonMarshalling extends JsonMarshalling[Module.Registry.Status] { - override def toJson(instance: Registry.Status, builder: JavaStringBuilder): Unit = { + implicit object ModuleRegistryStatusJsonMarshalling extends JsonMarshalling[Status.ModuleRegistry] { + override def toJson(instance: Status.ModuleRegistry, builder: JavaStringBuilder): Unit = { + def moduleKindString(moduleKind: Module.Kind): String = moduleKind match { + case Module.Kind.Combined => "combined" + case Module.Kind.Metric => "metric" + case Module.Kind.Span => "span" + case Module.Kind.Plain => "plain" + } + val array = JsonWriter.on(builder) .`object`() .array("modules") @@ -30,9 +35,9 @@ object JsonMarshalling { array.`object`() .value("name", m.name) .value("description", m.description) - .value("kind", m.kind) - .value("enabled", m.enabled) - .value("started", m.started) + .value("kind", moduleKindString(m.kind)) + .value("isProgrammaticallyRegistered", m.isProgrammaticallyRegistered) + .value("isStarted", m.isStarted) .end() }) @@ -40,8 +45,8 @@ object JsonMarshalling { } } - implicit object BaseInfoJsonMarshalling extends JsonMarshalling[Status.BaseInfo] { - override def toJson(instance: Status.BaseInfo, builder: JavaStringBuilder): Unit = { + implicit object BaseInfoJsonMarshalling extends JsonMarshalling[Status.Settings] { + override def toJson(instance: Status.Settings, builder: JavaStringBuilder): Unit = { val baseConfigJson = JsonWriter.on(builder) .`object`() .value("version", instance.version) @@ -65,8 +70,8 @@ object JsonMarshalling { } } - implicit object MetricRegistryStatusJsonMarshalling extends JsonMarshalling[MetricRegistry.Status] { - override def toJson(instance: MetricRegistry.Status, builder: JavaStringBuilder): Unit = { + implicit object MetricRegistryStatusJsonMarshalling extends JsonMarshalling[Status.MetricRegistry] { + override def toJson(instance: Status.MetricRegistry, builder: JavaStringBuilder): Unit = { val metricsObject = JsonWriter.on(builder) .`object` .array("metrics") diff --git a/kamon-core/src/main/scala/kamon/status/Status.scala b/kamon-core/src/main/scala/kamon/status/Status.scala index 0d141ed0..dc059277 100644 --- a/kamon-core/src/main/scala/kamon/status/Status.scala +++ b/kamon-core/src/main/scala/kamon/status/Status.scala @@ -1,26 +1,27 @@ package kamon.status import com.typesafe.config.Config +import kamon.metric.InstrumentFactory.InstrumentType import kamon.metric.MetricRegistry import kamon.{Configuration, Environment, Kamon} -import kamon.module.Module - +import kamon.module.ModuleRegistry +import kamon.module.Module.{Kind => ModuleKind} /** * Allows accessing of component's status APIs without exposing any other internal API from those components. */ -class Status(_moduleRegistry: Module.Registry, _metricRegistry: MetricRegistry, configuration: Configuration) { +class Status(_moduleRegistry: ModuleRegistry, _metricRegistry: MetricRegistry, configuration: Configuration) { - def baseInfo(): Status.BaseInfo = - Status.BaseInfo(BuildInfo.version, Kamon.environment, configuration.config()) + def settings(): Status.Settings = + Status.Settings(BuildInfo.version, Kamon.environment, configuration.config()) /** * Information about what modules have been detected in the classpath and their current status. */ - def moduleRegistry(): Module.Registry.Status = + def moduleRegistry(): Status.ModuleRegistry = _moduleRegistry.status() - def metricRegistry(): MetricRegistry.Status = + def metricRegistry(): Status.MetricRegistry = _metricRegistry.status() } @@ -28,13 +29,32 @@ class Status(_moduleRegistry: Module.Registry, _metricRegistry: MetricRegistry, object Status { - case class BaseInfo( + case class Settings( version: String, environment: Environment, config: Config ) + case class ModuleRegistry( + modules: Seq[Module] + ) + + case class Module( + name: String, + description: String, + kind: ModuleKind, + isProgrammaticallyRegistered: Boolean, + isStarted: Boolean + ) + case class MetricRegistry( + metrics: Seq[Metric] + ) + case class Metric( + name: String, + tags: Map[String, String], + instrumentType: InstrumentType + ) } diff --git a/kamon-core/src/main/scala/kamon/status/StatusPageServer.scala b/kamon-core/src/main/scala/kamon/status/StatusPageServer.scala index 7a124c1b..35273f39 100644 --- a/kamon-core/src/main/scala/kamon/status/StatusPageServer.scala +++ b/kamon-core/src/main/scala/kamon/status/StatusPageServer.scala @@ -17,7 +17,7 @@ class StatusPageServer(hostname: String, port: Int, resourceLoader: ClassLoader, // Serve the current status data on Json. session.getUri() match { - case "/status/config" => json(status.baseInfo()) + case "/status/settings" => json(status.settings()) case "/status/modules" => json(status.moduleRegistry()) case "/status/metrics" => json(status.metricRegistry()) case _ => NotFound |