aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIvan Topolnjak <ivantopo@gmail.com>2019-02-11 23:16:54 +0100
committerIvan Topolnjak <ivantopo@gmail.com>2019-02-12 02:49:23 +0100
commit7152517f2586a5b40726365a756087ddddc099ca (patch)
tree26b4d9a1768dd0460a4cedb9fc4fde27750936a4
parent4ce838b1af6257625b27ea38d55947912cba00c9 (diff)
downloadKamon-7152517f2586a5b40726365a756087ddddc099ca.tar.gz
Kamon-7152517f2586a5b40726365a756087ddddc099ca.tar.bz2
Kamon-7152517f2586a5b40726365a756087ddddc099ca.zip
self-review changes and use a thread pool for the embedded status page
server
-rw-r--r--kamon-core-tests/src/test/scala/kamon/KamonLifecycleSpec.scala2
-rw-r--r--kamon-core/src/main/resources/reference.conf8
-rw-r--r--kamon-core/src/main/scala/kamon/Kamon.scala66
-rw-r--r--kamon-core/src/main/scala/kamon/StatusPage.scala22
-rw-r--r--kamon-core/src/main/scala/kamon/module/ModuleRegistry.scala38
-rw-r--r--kamon-core/src/main/scala/kamon/status/JsonMarshalling.scala8
-rw-r--r--kamon-core/src/main/scala/kamon/status/Status.scala15
-rw-r--r--kamon-core/src/main/scala/kamon/status/StatusPageServer.scala83
-rw-r--r--kamon-status/src/api/StatusApi.ts6
-rw-r--r--kamon-status/src/assets/logo.svg171
-rw-r--r--kamon-status/src/components/ModuleList.vue2
-rw-r--r--kamon-status/src/components/ModuleStatusCard.vue2
-rw-r--r--kamon-status/src/components/OverviewCard.vue2
-rw-r--r--kamon-status/src/views/Overview.vue4
-rw-r--r--kamon-status/vue.config.js2
15 files changed, 161 insertions, 270 deletions
diff --git a/kamon-core-tests/src/test/scala/kamon/KamonLifecycleSpec.scala b/kamon-core-tests/src/test/scala/kamon/KamonLifecycleSpec.scala
index 9ee07694..c0f5b50e 100644
--- a/kamon-core-tests/src/test/scala/kamon/KamonLifecycleSpec.scala
+++ b/kamon-core-tests/src/test/scala/kamon/KamonLifecycleSpec.scala
@@ -60,7 +60,7 @@ object KamonWithRunningReporter extends App {
object KamonWithTemporaryReporter extends App {
Kamon.registerModule("dummy metric reporter", new DummyMetricReporter())
- Kamon.registerModule("dummy span repoter", new DummySpanReporter())
+ Kamon.registerModule("dummy span reporter", new DummySpanReporter())
Thread.sleep(5000)
Kamon.stopAllReporters()
diff --git a/kamon-core/src/main/resources/reference.conf b/kamon-core/src/main/resources/reference.conf
index 37491c79..7a5576bc 100644
--- a/kamon-core/src/main/resources/reference.conf
+++ b/kamon-core/src/main/resources/reference.conf
@@ -27,14 +27,14 @@ kamon {
status {
- # When enabled, Kamon will start an embedded web server to publish the status mini-site that contains basic
- # status and debugging information.
+ # When enabled Kamon will start an embedded web server to publish the status page mini-site, which contains basic
+ # system information that can be used for debugging and troubleshooting issues with Kamon.
enabled = true
- # Controls the hostname and port in which the status mini-site HTTP server will be listening.
+ # Controls the hostname and port on which the status page embedded server will be listening.
listen {
hostname = "0.0.0.0"
- port = 9912
+ port = 5266
}
}
diff --git a/kamon-core/src/main/scala/kamon/Kamon.scala b/kamon-core/src/main/scala/kamon/Kamon.scala
index 284c7553..cfeea19e 100644
--- a/kamon-core/src/main/scala/kamon/Kamon.scala
+++ b/kamon-core/src/main/scala/kamon/Kamon.scala
@@ -15,10 +15,6 @@
package kamon
-import com.typesafe.config.{Config, ConfigFactory, ConfigRenderOptions}
-import kamon.metric.PeriodSnapshot
-import kamon.trace.Span
-
object Kamon extends ClassLoading
with Configuration
with Utilities
@@ -36,64 +32,6 @@ object Kamon extends ClassLoading
_environment
onReconfigure(newConfig => {
- _environment = Environment.fromConfig(config)
- })
-}
-
-
-object QuickTest extends App {
- val manualConfig =
- """
- |kamon.modules {
- | kamon-zipkin {
- | enabled = false
- | description = "Module that sends data to particular places"
- | kind = metric
- | class = kamon.MyCustomMetricDude
- | }
- |}
- |
- |kamon.environment.tags {
- | one = test
- |}
- """.stripMargin
-
- val newConfig = ConfigFactory.parseString(manualConfig).withFallback(Kamon.config())
- Kamon.reconfigure(newConfig)
-
-
-
- Kamon.loadModules()
- Kamon.registerModule("my-module", new kamon.module.MetricReporter {
- override def reportPeriodSnapshot(snapshot: PeriodSnapshot): Unit = {}
- override def start(): Unit = {}
- override def stop(): Unit = {}
- override def reconfigure(newConfig: Config): Unit = {}
- })
-
- Kamon.registerModule("my-module-for-spans", new kamon.module.SpanReporter {
- override def reportSpans(spans: Seq[Span.FinishedSpan]): Unit = {}
- override def start(): Unit = {}
- override def stop(): Unit = {}
- override def reconfigure(newConfig: Config): Unit = {}
+ _environment = Environment.fromConfig(newConfig)
})
-
-
- Kamon.histogram("test").refine("actor_class" -> "com.kamon.something.MyActor", "system" -> "HRMS").record(10)
- Kamon.rangeSampler("test-rs").refine("actor_class" -> "com.kamon.something.MyActor", "system" -> "HRMS").increment(34)
- Kamon.counter("test-counter").refine("tagcito" -> "value").increment(42)
-
- //println("JSON CONFIG: " + Kamon.config().root().render(ConfigRenderOptions.concise().setFormatted(true).setJson(true)))
-
-
- Thread.sleep(100000000)
-
-
-}
-
-class MyCustomMetricDude extends kamon.module.MetricReporter {
- override def reportPeriodSnapshot(snapshot: PeriodSnapshot): Unit = {}
- override def start(): Unit = {}
- override def stop(): Unit = {}
- override def reconfigure(newConfig: Config): Unit = {}
-}
+} \ No newline at end of file
diff --git a/kamon-core/src/main/scala/kamon/StatusPage.scala b/kamon-core/src/main/scala/kamon/StatusPage.scala
index e5c8ef52..1ac60c1b 100644
--- a/kamon-core/src/main/scala/kamon/StatusPage.scala
+++ b/kamon-core/src/main/scala/kamon/StatusPage.scala
@@ -1,9 +1,13 @@
package kamon
import com.typesafe.config.Config
-import kamon.status.{StatusPageServer, Status}
+import kamon.status.{Status, StatusPageServer}
+import org.slf4j.LoggerFactory
+
+import scala.util.{Failure, Success, Try}
trait StatusPage { self: Configuration with ClassLoading with ModuleLoading with Metrics with Configuration =>
+ private val _log = LoggerFactory.getLogger(classOf[StatusPage])
@volatile private var _statusPageServer: Option[StatusPageServer] = None
private val _status = new Status(self._moduleRegistry, self._metricsRegistry, self)
@@ -47,10 +51,20 @@ trait StatusPage { self: Configuration with ClassLoading with ModuleLoading with
}
private def startServer(hostname: String, port: Int, resourceLoader: ClassLoader): Unit = {
- val server = new StatusPageServer(hostname, port, resourceLoader, _status)
- server.start()
+ Try {
+
+ val server = new StatusPageServer(hostname, port, resourceLoader, _status)
+ server.start()
+ server
- _statusPageServer = Some(server)
+ } match {
+ case Success(server) =>
+ _log.info(s"Status page started on http://$hostname:$port/")
+ _statusPageServer = Some(server)
+
+ case Failure(t) =>
+ _log.error("Failed to start the status page embedded server", t)
+ }
}
private def stopServer(): Unit = {
diff --git a/kamon-core/src/main/scala/kamon/module/ModuleRegistry.scala b/kamon-core/src/main/scala/kamon/module/ModuleRegistry.scala
index 81b94f29..d45cd80f 100644
--- a/kamon-core/src/main/scala/kamon/module/ModuleRegistry.scala
+++ b/kamon-core/src/main/scala/kamon/module/ModuleRegistry.scala
@@ -76,7 +76,7 @@ class ModuleRegistry(classLoading: ClassLoading, configuration: Configuration, c
* configured modules state.
*/
def load(config: Config): Unit = synchronized {
- val configuredModules = readModuleSettings(config)
+ val configuredModules = readModuleSettings(config, true)
val automaticallyRegisteredModules = _registeredModules.filterNot { case (_, module) => module.programmaticallyAdded }
// Start, reconfigure and stop modules that are still present but disabled.
@@ -233,7 +233,7 @@ class ModuleRegistry(classLoading: ClassLoading, configuration: Configuration, c
_spanReporterModules.values
}
- private def readModuleSettings(config: Config): Seq[Module.Settings] = {
+ private def readModuleSettings(config: Config, emitConfigurationWarnings: Boolean): Seq[Module.Settings] = {
val moduleConfigs = config.getConfig("kamon.modules").configurations
val moduleSettings = moduleConfigs.map {
case (moduleName, moduleConfig) =>
@@ -253,11 +253,18 @@ class ModuleRegistry(classLoading: ClassLoading, configuration: Configuration, c
})
- moduleSettings.failed.foreach { t =>
- _logger.warn(s"Failed to read configuration for module [$moduleName]", t)
+ if(emitConfigurationWarnings) {
+ moduleSettings.failed.foreach { t =>
+ _logger.warn(s"Failed to read configuration for module [$moduleName]", t)
- if(moduleConfig.hasPath("requires-aspectj") || moduleConfig.hasPath("auto-start") || moduleConfig.hasPath("extension-class")) {
- _logger.warn(s"Module [$moduleName] contains legacy configuration settings, please ensure that no legacy configuration")
+ val hasLegacySettings =
+ moduleConfig.hasPath("requires-aspectj") ||
+ moduleConfig.hasPath("auto-start") ||
+ moduleConfig.hasPath("extension-class")
+
+ if (hasLegacySettings) {
+ _logger.warn(s"Module [$moduleName] contains legacy configuration settings, please ensure that no legacy configuration")
+ }
}
}
@@ -281,7 +288,10 @@ class ModuleRegistry(classLoading: ClassLoading, configuration: Configuration, c
Module.Settings(name, description, moduleClazz, inferredModuleKind, true)
}
- moduleSettings.failed.foreach(t => _logger.error(s"Failed to load legacy reporter module [${moduleClass}]", t))
+ if(emitConfigurationWarnings) {
+ moduleSettings.failed.foreach(t => _logger.error(s"Failed to load legacy reporter module [${moduleClass}]", t))
+ }
+
moduleSettings
})
.filter(_.isSuccess)
@@ -291,11 +301,13 @@ class ModuleRegistry(classLoading: ClassLoading, configuration: Configuration, c
val (repeatedLegacyModules, uniqueLegacyModules) = legacyModuleSettings
.partition(lm => moduleSettings.find(_.clazz.getName == lm.clazz.getName).nonEmpty)
- repeatedLegacyModules.foreach(m =>
- _logger.warn(s"Module [${m.name}] is configured twice, please remove it from the deprecated kamon.reporters setting."))
+ if(emitConfigurationWarnings) {
+ repeatedLegacyModules.foreach(m =>
+ _logger.warn(s"Module [${m.name}] is configured twice, please remove it from the deprecated kamon.reporters setting."))
- uniqueLegacyModules.foreach(m =>
- _logger.warn(s"Module [${m.name}] is configured in the deprecated kamon.reporters setting, please consider moving it to kamon.modules."))
+ uniqueLegacyModules.foreach(m =>
+ _logger.warn(s"Module [${m.name}] is configured in the deprecated kamon.reporters setting, please consider moving it to kamon.modules."))
+ }
moduleSettings ++ uniqueLegacyModules
@@ -334,7 +346,7 @@ class ModuleRegistry(classLoading: ClassLoading, configuration: Configuration, c
* Returns the current status of this module registry.
*/
private[kamon] def status(): Status.ModuleRegistry = {
- val automaticallyAddedModules = readModuleSettings(configuration.config()).map(moduleSettings => {
+ val automaticallyAddedModules = readModuleSettings(configuration.config(), false).map(moduleSettings => {
val isActive = _registeredModules.get(moduleSettings.name).nonEmpty
Status.Module(
@@ -342,7 +354,7 @@ class ModuleRegistry(classLoading: ClassLoading, configuration: Configuration, c
moduleSettings.description,
moduleSettings.clazz.getCanonicalName,
moduleSettings.kind,
- isProgrammaticallyRegistered = false,
+ programmaticallyRegistered = false,
moduleSettings.enabled,
isActive)
})
diff --git a/kamon-core/src/main/scala/kamon/status/JsonMarshalling.scala b/kamon-core/src/main/scala/kamon/status/JsonMarshalling.scala
index 2291648c..5ab0eb9f 100644
--- a/kamon-core/src/main/scala/kamon/status/JsonMarshalling.scala
+++ b/kamon-core/src/main/scala/kamon/status/JsonMarshalling.scala
@@ -39,9 +39,9 @@ object JsonMarshalling {
.value("description", m.description)
.value("clazz", m.clazz)
.value("kind", moduleKindString(m.kind))
- .value("isProgrammaticallyRegistered", m.isProgrammaticallyRegistered)
- .value("enabled", m.isEnabled)
- .value("started", m.isStarted)
+ .value("programmaticallyRegistered", m.programmaticallyRegistered)
+ .value("enabled", m.enabled)
+ .value("started", m.started)
.end()
})
@@ -107,7 +107,7 @@ object JsonMarshalling {
override def toJson(instance: Status.Instrumentation, builder: JavaStringBuilder): Unit = {
val instrumentationObject = JsonWriter.on(builder)
.`object`()
- .value("isActive", instance.isIActive)
+ .value("active", instance.active)
.`object`("modules")
instance.modules.asScala.foreach {
diff --git a/kamon-core/src/main/scala/kamon/status/Status.scala b/kamon-core/src/main/scala/kamon/status/Status.scala
index 956e3594..ef5bb8eb 100644
--- a/kamon-core/src/main/scala/kamon/status/Status.scala
+++ b/kamon-core/src/main/scala/kamon/status/Status.scala
@@ -9,7 +9,8 @@ import kamon.module.Module.{Kind => ModuleKind}
import java.util.{Collections, List => JavaList, Map => JavaMap}
/**
- * Exposes Kamon components' status information. This is meant to be used for informational and debugging purposes.
+ * Exposes Kamon components' status information. This is meant to be used for informational and debugging purposes and
+ * by no means should replace the use of reporters to extract information from Kamon.
*/
class Status(_moduleRegistry: ModuleRegistry, _metricRegistry: MetricRegistry, configuration: Configuration) {
@@ -20,8 +21,8 @@ class Status(_moduleRegistry: ModuleRegistry, _metricRegistry: MetricRegistry, c
Status.Settings(BuildInfo.version, Kamon.environment, configuration.config())
/**
- * Status of the module registry. Describes what modules have been detected in the classpath and their current
- * statuses.
+ * Status of the module registry. Describes what modules have been detected and registered, either from the classpath
+ * or programatically and their current status.
*/
def moduleRegistry(): Status.ModuleRegistry =
_moduleRegistry.status()
@@ -72,9 +73,9 @@ object Status {
description: String,
clazz: String,
kind: ModuleKind,
- isProgrammaticallyRegistered: Boolean,
- isEnabled: Boolean,
- isStarted: Boolean
+ programmaticallyRegistered: Boolean,
+ enabled: Boolean,
+ started: Boolean
)
case class MetricRegistry(
@@ -94,7 +95,7 @@ object Status {
* outside Kamon.
*/
private[kamon] case class Instrumentation(
- isIActive: Boolean,
+ active: Boolean,
modules: JavaMap[String, String],
errors: JavaMap[String, JavaList[Throwable]]
)
diff --git a/kamon-core/src/main/scala/kamon/status/StatusPageServer.scala b/kamon-core/src/main/scala/kamon/status/StatusPageServer.scala
index 2784b87a..b2c7ff74 100644
--- a/kamon-core/src/main/scala/kamon/status/StatusPageServer.scala
+++ b/kamon-core/src/main/scala/kamon/status/StatusPageServer.scala
@@ -1,15 +1,19 @@
package kamon.status
+import java.io.InputStream
+
import fi.iki.elonen.NanoHTTPD
-import fi.iki.elonen.NanoHTTPD.Response
import fi.iki.elonen.NanoHTTPD.Response.{Status => StatusCode}
+import java.util.Collections
+import java.util.concurrent.{ExecutorService, Executors}
+
+import scala.collection.JavaConverters.asScalaBufferConverter
class StatusPageServer(hostname: String, port: Int, resourceLoader: ClassLoader, status: Status)
extends NanoHTTPD(hostname, port) {
private val RootResourceDirectory = "status"
- private val ResourceExtensionRegex = ".*\\.([a-zA-Z]*)".r
-
+ private val ResourceExtensionRegex = ".*\\.([a-zA-Z0-9]*)".r
override def serve(session: NanoHTTPD.IHTTPSession): NanoHTTPD.Response = {
if(session.getMethod() == NanoHTTPD.Method.GET) {
@@ -25,44 +29,85 @@ class StatusPageServer(hostname: String, port: Int, resourceLoader: ClassLoader,
}
} else {
+
// Serve resources from the status page folder.
- val resource = if (session.getUri() == "/") "/index.html" else session.getUri()
- val resourcePath = RootResourceDirectory + resource
+ val requestedResource = if (session.getUri() == "/") "/index.html" else session.getUri()
+ val resourcePath = RootResourceDirectory + requestedResource
val resourceStream = resourceLoader.getResourceAsStream(resourcePath)
- if (resourceStream == null) NotFound else {
- NanoHTTPD.newChunkedResponse(StatusCode.OK, mimeType(resource), resourceStream)
- }
+ if (resourceStream == null) NotFound else resource(requestedResource, resourceStream)
}
} else NotAllowed
}
+ override def start(): Unit = {
+ setAsyncRunner(new ThreadPoolRunner(Executors.newFixedThreadPool(2)))
+ start(NanoHTTPD.SOCKET_READ_TIMEOUT, false)
+ }
+
private def mimeType(resource: String): String = {
val ResourceExtensionRegex(resourceExtension) = resource
resourceExtension match {
- case "css" => "text/css"
- case "js" => "application/javascript"
- case "ico" => "image/x-icon"
- case "svg" => "image/svg+xml"
- case "html" => "text/html"
- case _ => "text/plain"
+ case "css" => "text/css"
+ case "js" => "application/javascript"
+ case "ico" => "image/x-icon"
+ case "svg" => "image/svg+xml"
+ case "html" => "text/html"
+ case "woff2" => "font/woff2"
+ case _ => "text/plain"
}
}
- private def json[T : JsonMarshalling](instance: T): Response = {
+ private def json[T](instance: T)(implicit marshalling: JsonMarshalling[T]) = {
val builder = new java.lang.StringBuilder()
- implicitly[JsonMarshalling[T]].toJson(instance, builder)
- NanoHTTPD.newFixedLengthResponse(StatusCode.OK, "application/json", builder.toString())
+ marshalling.toJson(instance, builder)
+
+ val response = NanoHTTPD.newFixedLengthResponse(StatusCode.OK, "application/json", builder.toString())
+ response.closeConnection(true)
+ response
+ }
+
+ private def resource(name: String, stream: InputStream) = {
+ val response = NanoHTTPD.newChunkedResponse(StatusCode.OK, mimeType(name), stream)
+ response.closeConnection(true)
+ response
}
private val NotAllowed = NanoHTTPD.newFixedLengthResponse(
StatusCode.METHOD_NOT_ALLOWED,
NanoHTTPD.MIME_PLAINTEXT,
- "Only GET requests are allowed.")
+ "Only GET requests are allowed."
+ )
private val NotFound = NanoHTTPD.newFixedLengthResponse(
StatusCode.NOT_FOUND,
NanoHTTPD.MIME_PLAINTEXT,
- "The requested resource was not found.")
+ "The requested resource was not found."
+ )
+
+ // Closing the connections will ensure that the thread pool will not be exhausted by keep alive
+ // connections from the browsers.
+ NotAllowed.closeConnection(true)
+ NotFound.closeConnection(true)
+
+
+ /**
+ * AsyncRunner that uses a thread pool for handling requests rather than spawning a new thread for each request (as
+ * the default runner does).
+ */
+ private class ThreadPoolRunner(executorService: ExecutorService) extends NanoHTTPD.AsyncRunner {
+ final private val _openRequests = Collections.synchronizedList(new java.util.LinkedList[NanoHTTPD#ClientHandler]())
+
+ override def closeAll(): Unit =
+ _openRequests.asScala.foreach(_.close())
+
+ override def closed(clientHandler: NanoHTTPD#ClientHandler): Unit =
+ _openRequests.remove(clientHandler)
+
+ override def exec(clientHandler: NanoHTTPD#ClientHandler): Unit = {
+ executorService.submit(clientHandler)
+ _openRequests.add(clientHandler)
+ }
+ }
} \ No newline at end of file
diff --git a/kamon-status/src/api/StatusApi.ts b/kamon-status/src/api/StatusApi.ts
index 231c5eca..ee596b8d 100644
--- a/kamon-status/src/api/StatusApi.ts
+++ b/kamon-status/src/api/StatusApi.ts
@@ -26,7 +26,7 @@ export interface Module {
description: string
clazz: string
kind: ModuleKind
- isProgrammaticallyRegistered: boolean
+ programmaticallyRegistered: boolean
enabled: boolean
started: boolean
}
@@ -56,7 +56,7 @@ export interface InstrumentationModule {
}
export interface Instrumentation {
- isActive: boolean
+ active: boolean
modules: InstrumentationModule[]
errors: { [key: string]: string[]}
}
@@ -112,7 +112,7 @@ export class StatusApi {
public static instrumentationStatus(): Promise<Instrumentation> {
return axios.get('/status/instrumentation').then(response => {
const instrumentation: Instrumentation = {
- isActive: response.data.isActive as boolean,
+ active: response.data.active as boolean,
modules: [],
errors: {}
}
diff --git a/kamon-status/src/assets/logo.svg b/kamon-status/src/assets/logo.svg
index 96b29425..d351c48a 100644
--- a/kamon-status/src/assets/logo.svg
+++ b/kamon-status/src/assets/logo.svg
@@ -1,145 +1,26 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:xlink="http://www.w3.org/1999/xlink"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- version="1.1"
- id="Layer_1"
- x="0px"
- y="0px"
- viewBox="0 0 1529.6959 283.96277"
- xml:space="preserve"
- sodipodi:docname="logo.svg"
- inkscape:version="0.92.3 (2405546, 2018-03-11)"
- width="1529.6959"
- height="283.96277"><metadata
- id="metadata923"><rdf:RDF><cc:Work
- rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
- id="defs921" /><sodipodi:namedview
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1"
- objecttolerance="10"
- gridtolerance="10"
- guidetolerance="10"
- inkscape:pageopacity="0"
- inkscape:pageshadow="2"
- inkscape:window-width="2560"
- inkscape:window-height="1415"
- id="namedview919"
- showgrid="false"
- inkscape:zoom="0.98958333"
- inkscape:cx="1158.9481"
- inkscape:cy="121.48356"
- inkscape:window-x="1920"
- inkscape:window-y="0"
- inkscape:window-maximized="0"
- inkscape:current-layer="text950"
- fit-margin-top="0"
- fit-margin-left="0"
- fit-margin-right="0"
- fit-margin-bottom="0" />
-<style
- type="text/css"
- id="style900">
- .st0{fill:#3A493E;}
- .st1{fill:#B3B3B3;}
- .st2{fill:url(#XMLID_15_);}
- .st3{fill:#14C441;}
-</style>
-
-<g
- transform="matrix(0.99986889,0,0,0.99986889,0.18871224,0)"
- id="XMLID_903_-5"
- style="display:inline;fill:#616161;fill-opacity:1"><path
- style="fill:#616161;fill-opacity:1"
- d="m 388.3,82.3 v 62.3 l 34.9,-40 h 34 l -38.9,41.7 39.3,66.7 h -34 l -20,-37 c -3.6,-6.4 -7.2,-9.6 -10.8,-9.6 -3,0.6 -4.5,2.6 -4.5,5.5 v 41 H 360 V 68.4 h 14.7 c 7.5,0 13.6,6.4 13.6,13.9 z"
- class="st0"
- id="XMLID_914_-7"
- inkscape:connector-curvature="0" /><path
- style="fill:#616161;fill-opacity:1"
- d="m 492.9,129.9 h -28.3 c 3.4,-20.8 18.1,-31 44,-31 31,0 46.8,10.2 47.4,31 v 38.3 c 0,31 -18.7,44.8 -49.1,47 -27,2.1 -45.7,-10.4 -45.7,-35.3 0.6,-27 20.2,-34.2 48.7,-37 12.1,-1.5 18.3,-5.1 18.3,-11.3 -0.6,-6.4 -6.6,-9.6 -18.3,-9.6 -10,0 -15.5,2.5 -17,7.9 z m 35.7,36.9 v -10.4 c -6.6,2.8 -14.2,5.1 -22.5,6.8 -11.3,2.1 -17,7.4 -17,15.7 0.6,8.9 5.3,13.2 14.2,13.2 15.7,0 25.3,-9.3 25.3,-25.3 z"
- class="st0"
- id="XMLID_911_-4"
- inkscape:connector-curvature="0" /><path
- style="fill:#616161;fill-opacity:1"
- d="M 598.3,141.1 V 213 h -28.7 v -66.1 c 0,-32.1 16.2,-48 48.2,-48 14.5,0 25.5,3.2 33.6,9.6 8.1,-6.2 19.1,-9.1 33.6,-9.1 32.1,0 48,15.9 47.8,48 v 66.1 h -14.7 c -9.3,-0.6 -14,-5.1 -14,-14 v -57.8 c -0.6,-11.7 -7,-17.4 -19.6,-17.4 -12.5,0 -18.9,5.7 -19.1,17.4 V 213 H 637 v -71.8 c -0.6,-11.7 -7,-17.4 -19.6,-17.4 -12.6,0 -18.9,5.6 -19.1,17.3 z"
- class="st0"
- id="XMLID_909_-1"
- inkscape:connector-curvature="0" /><path
- style="fill:#616161;fill-opacity:1"
- d="m 850.6,157.3 c 0,38.7 -17.2,58.2 -51.2,58.2 -34,0 -51,-19.6 -51,-58.2 0,-39.1 17,-58.4 51,-58.4 34,0 51.2,19.3 51.2,58.4 z m -73.6,0 c 0.2,21.9 7.6,32.9 22.1,32.9 14.5,0 21.7,-11.5 21.9,-33.8 0,-21.9 -7.2,-32.7 -21.7,-32.7 -14.8,0 -22.3,11.3 -22.3,33.6 z"
- class="st0"
- id="XMLID_906_-8"
- inkscape:connector-curvature="0" /><path
- style="fill:#616161;fill-opacity:1"
- d="m 945.5,213 c -9.3,-0.6 -14,-5.1 -14,-14 v -57.8 c -0.6,-11.7 -7,-17.4 -19.6,-17.4 -12.6,0 -18.9,5.7 -19.1,17.4 V 213 h -28.7 v -66.1 c 0,-32.1 16.2,-48 48.2,-48 32.1,0 47.8,15.9 47.6,48 V 213 Z"
- class="st0"
- id="XMLID_904_-5"
- inkscape:connector-curvature="0" /></g><g
- transform="matrix(0.99986889,0,0,0.99986889,0.18871224,0)"
- style="display:inline"
- id="XMLID_899_-9"><path
- style="fill:#dadada;fill-opacity:1"
- d="m 153.7,244 36.5,38 c 1.2,1.2 3.1,2 5,2 h 89.5 c 5.2,0 8.3,-4.7 5.2,-8.1 l -83,-102.5 c -1.8,-2 -5.2,-1.9 -6.9,0.1 L 153.4,238 c -1.6,1.8 -1.4,4.2 0.3,6 z"
- class="st1"
- id="XMLID_902_-7"
- inkscape:connector-curvature="0" /><linearGradient
- xlink:href="#XMLID_15_-2"
- y2="-214.94597"
- x2="63.891499"
- y1="198.12531"
- x1="63.891499"
- gradientUnits="userSpaceOnUse"
- id="linearGradient936"><stop
- id="stop1003-5"
- style="stop-color:#145643"
- offset="0" /><stop
- id="stop1005-3"
- style="stop-color:#14C441"
- offset="1" /></linearGradient><path
- style="fill:#199053;fill-opacity:1"
- d="M 77,12.8 C 69.8,4.7 60.2,0 50.1,0 32.8,0 17.5,13.6 12.7,33.4 5.9,62 1.8,91.2 0.5,120.6 v 0 l 9.8,13.4 c 17.5,24.1 47.9,25.2 66.7,4.5 2.8,-2.3 5.4,-4.9 7.8,-7.8 L 127.4,79.2 C 127.3,79.2 79.5,15 77,12.8 Z"
- class="st2"
- id="XMLID_901_-8"
- inkscape:connector-curvature="0" /><path
- d="m 284.6,0 h -73.3 c -12.9,0 -24.8,5.9 -31.7,15.7 l -52.4,63.5 -42.6,51.5 c -2.4,2.9 -5,5.4 -7.8,7.8 C 58,159.2 27.6,158.1 10.1,134 L 0.3,120.6 v 0 0 0 c -1.4,30.8 0.2,61.7 4.9,92.2 0,0.1 0,0.1 0,0.2 0.4,2.3 0.7,4.7 1.1,7 0.1,0.4 0.1,0.8 0.2,1.2 0.3,2 0.7,4.1 1.1,6.1 0.1,0.5 0.2,1 0.3,1.5 0.4,2 0.8,3.9 1.2,5.9 0.1,0.5 0.2,0.9 0.3,1.4 0.5,2.2 0.9,4.4 1.4,6.6 0,0.2 0.1,0.4 0.1,0.5 4.9,22.3 20.9,38.4 39.9,40.5 0.2,0 0.3,0.1 0.5,0.1 1.3,0.1 2.5,0.2 3.8,0.2 0,0 0.1,0 0.1,0 v 0 c 32.3,0 50.7,-18.2 59.9,-30.8 L 291.7,11.8 C 295.4,6.7 291.4,0 284.6,0 Z"
- class="st3"
- id="XMLID_900_-8"
- inkscape:connector-curvature="0"
- style="fill:#34cc5b;fill-opacity:1" /><g
- aria-label="STATUS"
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:118.62699127px;line-height:125%;font-family:Montserrat;-inkscape-font-specification:'Montserrat, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#b3b3b3;fill-opacity:1;stroke:none;stroke-width:2.96567488px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- id="text950"><path
- d="m 1039.2985,138.07737 q -6.3722,0 -10.4952,2.62381 -4.1232,2.6238 -4.1232,7.99636 0,5.24764 4.1232,8.12133 4.123,2.74875 17.4919,5.99726 13.494,3.24854 20.2409,9.12086 6.8719,5.87234 6.8719,17.36714 0,11.36984 -8.6211,18.49161 -8.6209,7.12177 -22.6147,7.12177 -20.4909,0 -36.3588,-14.11859 l 9.2459,-11.11996 q 13.2442,11.49479 27.4877,11.49479 7.1219,0 11.245,-2.99864 4.248,-3.12358 4.248,-8.12133 0,-5.12266 -3.9981,-7.87142 -3.8733,-2.8737 -13.494,-5.12268 -9.6207,-2.37392 -14.6184,-4.24807 -4.9978,-1.9991 -8.8711,-5.12267 -7.7466,-5.87235 -7.7466,-17.99184 0,-12.11952 8.7461,-18.61657 8.8711,-6.62198 21.8654,-6.62198 8.3711,0 16.6174,2.74875 8.2462,2.74874 14.2435,7.74648 l -7.8714,11.11996 q -3.8733,-3.49842 -10.4952,-5.74741 -6.6221,-2.24896 -13.1191,-2.24896 z"
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:118.62699127px;font-family:Montserrat;-inkscape-font-specification:'Montserrat, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#b3b3b3;stroke-width:3.12358332px"
- id="path952"
- inkscape:connector-curvature="0" /><path
- d="m 1119.4196,140.07645 v 73.84152 h -14.7434 v -73.84152 h -26.4878 v -13.49387 h 67.7192 v 13.49387 z"
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:118.62699127px;font-family:Montserrat;-inkscape-font-specification:'Montserrat, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#b3b3b3;stroke-width:3.12358332px"
- id="path954"
- inkscape:connector-curvature="0" /><path
- d="m 1160.1512,194.05197 -8.7461,19.866 h -15.7429 l 38.4825,-87.33539 h 15.7429 l 38.4826,87.33539 h -15.7427 l -8.7462,-19.866 z m 37.7329,-13.61882 -15.8679,-35.98368 -15.8677,35.98368 z"
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:118.62699127px;font-family:Montserrat;-inkscape-font-specification:'Montserrat, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#b3b3b3;stroke-width:3.12358332px"
- id="path956"
- inkscape:connector-curvature="0" /><path
- d="m 1258.5795,140.07645 v 73.84152 h -14.7433 v -73.84152 h -26.488 v -13.49387 h 67.7193 v 13.49387 z"
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:118.62699127px;font-family:Montserrat;-inkscape-font-specification:'Montserrat, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#b3b3b3;stroke-width:3.12358332px"
- id="path958"
- inkscape:connector-curvature="0" /><path
- d="m 1315.2932,193.92703 q 5.9972,6.99683 16.2426,6.99683 10.2455,0 16.2426,-6.99683 5.9973,-6.99684 5.9973,-18.99139 v -48.35306 h 14.7434 v 48.97779 q 0,18.86643 -10.3703,29.11179 -10.3704,10.12039 -26.613,10.12039 -16.2426,0 -26.6129,-10.12039 -10.3703,-10.24536 -10.3703,-29.11179 v -48.97779 h 14.7433 v 48.35306 q 0,11.99455 5.9973,18.99139 z"
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:118.62699127px;font-family:Montserrat;-inkscape-font-specification:'Montserrat, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#b3b3b3;stroke-width:3.12358332px"
- id="path960"
- inkscape:connector-curvature="0" /><path
- d="m 1407.7291,138.07737 q -6.3721,0 -10.4954,2.62381 -4.1231,2.6238 -4.1231,7.99636 0,5.24764 4.1231,8.12133 4.1233,2.74875 17.4922,5.99726 13.4938,3.24854 20.2408,9.12086 6.8718,5.87234 6.8718,17.36714 0,11.36984 -8.621,18.49161 -8.6211,7.12177 -22.6148,7.12177 -20.4906,0 -36.3584,-14.11859 l 9.2457,-11.11996 q 13.2439,11.49479 27.4876,11.49479 7.1218,0 11.2448,-2.99864 4.2481,-3.12358 4.2481,-8.12133 0,-5.12266 -3.9981,-7.87142 -3.8733,-2.8737 -13.4941,-5.12268 -9.6204,-2.37392 -14.6182,-4.24807 -4.9978,-1.9991 -8.8709,-5.12267 -7.7466,-5.87235 -7.7466,-17.99184 0,-12.11952 8.7461,-18.61657 8.8709,-6.62198 21.865,-6.62198 8.3713,0 16.6174,2.74875 8.2464,2.74874 14.2437,7.74648 l -7.8714,11.11996 q -3.8734,-3.49842 -10.4954,-5.74741 -6.6218,-2.24896 -13.1189,-2.24896 z"
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:118.62699127px;font-family:Montserrat;-inkscape-font-specification:'Montserrat, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#b3b3b3;stroke-width:3.12358332px"
- id="path962"
- inkscape:connector-curvature="0" /></g></g></svg> \ No newline at end of file
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="Layer_1" width="1529.7" height="283.96">
+ <g id="XMLID_903_-5" fill="#616161" transform="matrix(.99987 0 0 .99987 .19 0)">
+ <path id="XMLID_914_-7" d="M388.3 82.3v62.3l34.9-40h34l-38.9 41.7 39.3 66.7h-34l-20-37c-3.6-6.4-7.2-9.6-10.8-9.6-3 .6-4.5 2.6-4.5 5.5v41H360V68.4h14.7c7.5 0 13.6 6.4 13.6 13.9z" class="st0"/>
+ <path id="XMLID_911_-4" d="M492.9 129.9h-28.3c3.4-20.8 18.1-31 44-31 31 0 46.8 10.2 47.4 31v38.3c0 31-18.7 44.8-49.1 47-27 2.1-45.7-10.4-45.7-35.3.6-27 20.2-34.2 48.7-37 12.1-1.5 18.3-5.1 18.3-11.3-.6-6.4-6.6-9.6-18.3-9.6-10 0-15.5 2.5-17 7.9zm35.7 36.9v-10.4c-6.6 2.8-14.2 5.1-22.5 6.8-11.3 2.1-17 7.4-17 15.7.6 8.9 5.3 13.2 14.2 13.2 15.7 0 25.3-9.3 25.3-25.3z" class="st0"/>
+ <path id="XMLID_909_-1" d="M598.3 141.1V213h-28.7v-66.1c0-32.1 16.2-48 48.2-48 14.5 0 25.5 3.2 33.6 9.6 8.1-6.2 19.1-9.1 33.6-9.1 32.1 0 48 15.9 47.8 48v66.1h-14.7c-9.3-.6-14-5.1-14-14v-57.8c-.6-11.7-7-17.4-19.6-17.4-12.5 0-18.9 5.7-19.1 17.4V213H637v-71.8c-.6-11.7-7-17.4-19.6-17.4-12.6 0-18.9 5.6-19.1 17.3z" class="st0"/>
+ <path id="XMLID_906_-8" d="M850.6 157.3c0 38.7-17.2 58.2-51.2 58.2s-51-19.6-51-58.2c0-39.1 17-58.4 51-58.4s51.2 19.3 51.2 58.4zm-73.6 0c.2 21.9 7.6 32.9 22.1 32.9 14.5 0 21.7-11.5 21.9-33.8 0-21.9-7.2-32.7-21.7-32.7-14.8 0-22.3 11.3-22.3 33.6z" class="st0"/>
+ <path id="XMLID_904_-5" d="M945.5 213c-9.3-.6-14-5.1-14-14v-57.8c-.6-11.7-7-17.4-19.6-17.4-12.6 0-18.9 5.7-19.1 17.4V213h-28.7v-66.1c0-32.1 16.2-48 48.2-48 32.1 0 47.8 15.9 47.6 48V213z" class="st0"/>
+ </g>
+ <g id="XMLID_899_-9" transform="matrix(.99987 0 0 .99987 .19 0)">
+ <path id="XMLID_902_-7" fill="#dadada" d="M153.7 244l36.5 38c1.2 1.2 3.1 2 5 2h89.5c5.2 0 8.3-4.7 5.2-8.1l-83-102.5c-1.8-2-5.2-1.9-6.9.1L153.4 238c-1.6 1.8-1.4 4.2.3 6z"/>
+ <linearGradient id="linearGradient936" x1="63.89" x2="63.89" y1="198.13" y2="-214.95" gradientUnits="userSpaceOnUse" xlink:href="#XMLID_15_-2">
+ <stop id="stop1003-5" offset="0" stop-color="#145643"/>
+ <stop id="stop1005-3" offset="1" stop-color="#14c441"/>
+ </linearGradient>
+ <path id="XMLID_901_-8" fill="#199053" d="M77 12.8C69.8 4.7 60.2 0 50.1 0 32.8 0 17.5 13.6 12.7 33.4 5.9 62 1.8 91.2.5 120.6l9.8 13.4c17.5 24.1 47.9 25.2 66.7 4.5 2.8-2.3 5.4-4.9 7.8-7.8l42.6-51.5c-.1 0-47.9-64.2-50.4-66.4z"/>
+ <path id="XMLID_900_-8" fill="#34cc5b" d="M284.6 0h-73.3c-12.9 0-24.8 5.9-31.7 15.7l-52.4 63.5-42.6 51.5c-2.4 2.9-5 5.4-7.8 7.8-18.8 20.7-49.2 19.6-66.7-4.5L.3 120.6c-1.4 30.8.2 61.7 4.9 92.2v.2c.4 2.3.7 4.7 1.1 7 .1.4.1.8.2 1.2a130.15 130.15 0 0 0 1.4 7.6l1.2 5.9.3 1.4c.5 2.2.9 4.4 1.4 6.6 0 .2.1.4.1.5 4.9 22.3 20.9 38.4 39.9 40.5.2 0 .3.1.5.1 1.3.1 2.5.2 3.8.2h.1c32.3 0 50.7-18.2 59.9-30.8L291.7 11.8c3.7-5.1-.3-11.8-7.1-11.8z"/>
+ <g aria-label="STATUS" style="line-height:125%;-inkscape-font-specification:'Montserrat, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start" id="text950" fill="#b3b3b3" stroke-width="3.12" font-family="Montserrat" font-size="118.63" font-weight="400" letter-spacing="0" word-spacing="0">
+ <path d="M1039.3 138.08q-6.37 0-10.5 2.62-4.12 2.62-4.12 8 0 5.25 4.12 8.12 4.13 2.75 17.5 6 13.49 3.24 20.24 9.12 6.87 5.87 6.87 17.36 0 11.37-8.62 18.5-8.62 7.12-22.62 7.12-20.49 0-36.36-14.12l9.25-11.12q13.24 11.5 27.49 11.5 7.12 0 11.24-3 4.25-3.13 4.25-8.13 0-5.12-4-7.87-3.87-2.87-13.5-5.12-9.61-2.37-14.61-4.25-5-2-8.87-5.12-7.75-5.87-7.75-18 0-12.11 8.75-18.6 8.87-6.63 21.86-6.63 8.37 0 16.62 2.75 8.25 2.75 14.24 7.74l-7.87 11.12q-3.87-3.5-10.5-5.74-6.61-2.25-13.11-2.25z" style="-inkscape-font-specification:'Montserrat, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start" id="path952"/>
+ <path d="M1119.42 140.08v73.84h-14.74v-73.84h-26.5v-13.5h67.73v13.5z" style="-inkscape-font-specification:'Montserrat, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start" id="path954"/>
+ <path d="M1160.15 194.05l-8.74 19.87h-15.75l38.48-87.34h15.75l38.48 87.34h-15.74l-8.75-19.87zm37.73-13.62l-15.86-35.98-15.87 35.98z" style="-inkscape-font-specification:'Montserrat, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start" id="path956"/>
+ <path d="M1258.58 140.08v73.84h-14.74v-73.84h-26.5v-13.5h67.73v13.5z" style="-inkscape-font-specification:'Montserrat, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start" id="path958"/>
+ <path d="M1315.3 193.93q5.99 7 16.24 7 10.24 0 16.24-7 6-7 6-19v-48.35h14.74v48.98q0 18.87-10.37 29.11-10.37 10.12-26.61 10.12-16.25 0-26.62-10.12-10.37-10.24-10.37-29.11v-48.98h14.75v48.36q0 11.99 6 18.99z" style="-inkscape-font-specification:'Montserrat, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start" id="path960"/>
+ <path d="M1407.73 138.08q-6.37 0-10.5 2.62-4.12 2.62-4.12 8 0 5.25 4.12 8.12 4.13 2.75 17.5 6 13.49 3.24 20.24 9.12 6.87 5.87 6.87 17.36 0 11.37-8.62 18.5-8.62 7.12-22.62 7.12-20.49 0-36.36-14.12l9.25-11.12q13.24 11.5 27.49 11.5 7.12 0 11.24-3 4.25-3.13 4.25-8.13 0-5.12-4-7.87-3.87-2.87-13.5-5.12-9.61-2.37-14.61-4.25-5-2-8.87-5.12-7.75-5.87-7.75-18 0-12.11 8.75-18.6 8.87-6.63 21.86-6.63 8.37 0 16.62 2.75 8.25 2.75 14.24 7.74l-7.87 11.12q-3.87-3.5-10.5-5.74-6.61-2.25-13.11-2.25z" style="-inkscape-font-specification:'Montserrat, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start" id="path962"/>
+ </g>
+ </g>
+</svg> \ No newline at end of file
diff --git a/kamon-status/src/components/ModuleList.vue b/kamon-status/src/components/ModuleList.vue
index 6cef9e2d..ded523d7 100644
--- a/kamon-status/src/components/ModuleList.vue
+++ b/kamon-status/src/components/ModuleList.vue
@@ -42,7 +42,7 @@ export default class ModuleList extends Vue {
name: 'Kamon APM',
description: 'See your metrics and trace data for free with a Starter account.',
kind: ModuleKind.Combined,
- isProgrammaticallyRegistered: false,
+ programmaticallyRegistered: false,
enabled: false,
started: false,
clazz: ''
diff --git a/kamon-status/src/components/ModuleStatusCard.vue b/kamon-status/src/components/ModuleStatusCard.vue
index d095d7b3..18e2b038 100644
--- a/kamon-status/src/components/ModuleStatusCard.vue
+++ b/kamon-status/src/components/ModuleStatusCard.vue
@@ -30,7 +30,7 @@ export default class ModuleStatusCard extends Vue {
@Prop() private module!: Module
get discoveryStatus(): string {
- return this.module.isProgrammaticallyRegistered ? 'manual' : 'automatic'
+ return this.module.programmaticallyRegistered ? 'manual' : 'automatic'
}
get runStatus(): { message: string, color: string, icon: string } {
diff --git a/kamon-status/src/components/OverviewCard.vue b/kamon-status/src/components/OverviewCard.vue
index 8939d93d..6746d761 100644
--- a/kamon-status/src/components/OverviewCard.vue
+++ b/kamon-status/src/components/OverviewCard.vue
@@ -53,7 +53,7 @@ export default class OverviewCard extends Vue {
}
get instrumentationStatusMessage(): string {
- return this.instrumentation.map(i => (i.isActive ? 'Active' : 'Disabled') as string).getOrElse('Unknown')
+ return this.instrumentation.map(i => (i.active ? 'Active' : 'Disabled') as string).getOrElse('Unknown')
}
get metricsStatusMessage(): string {
diff --git a/kamon-status/src/views/Overview.vue b/kamon-status/src/views/Overview.vue
index 7d200e81..424987c1 100644
--- a/kamon-status/src/views/Overview.vue
+++ b/kamon-status/src/views/Overview.vue
@@ -16,7 +16,7 @@
<div class="col-12 pt-4 pb-2" v-if="metrics.length > 0">
<h2>Metrics</h2>
</div>
- <div class="col-12">
+ <div class="col-12" v-if="metrics.length > 0">
<metric-list :metrics="metrics"/>
</div>
<div class="col-12 mb-5">
@@ -74,7 +74,7 @@ export default class Overview extends Vue {
}
get instrumentationStatusMessage(): string {
- return this.instrumentation.map(i => (i.isActive ? 'Active' : 'Disabled') as string).getOrElse('Unknown')
+ return this.instrumentation.map(i => (i.active ? 'Active' : 'Disabled') as string).getOrElse('Unknown')
}
get metricsStatusMessage(): string {
diff --git a/kamon-status/vue.config.js b/kamon-status/vue.config.js
index 9459cace..76a1773c 100644
--- a/kamon-status/vue.config.js
+++ b/kamon-status/vue.config.js
@@ -1,6 +1,6 @@
module.exports = {
productionSourceMap: false,
devServer: {
- proxy: 'http://localhost:9912'
+ proxy: 'http://localhost:5266'
}
} \ No newline at end of file