From c985537bfe1b352911aa3ba6247112dfac917171 Mon Sep 17 00:00:00 2001 From: Ivan Topolnjak Date: Thu, 7 Feb 2019 15:09:34 +0100 Subject: show instrumentation modules in the status page --- .../main/scala/kamon/module/ModuleRegistry.scala | 23 +++-- .../main/scala/kamon/status/JsonMarshalling.scala | 3 +- .../src/main/scala/kamon/status/Status.scala | 1 + kamon-status/src/App.vue | 8 +- kamon-status/src/api/StatusApi.ts | 18 ++-- .../src/components/InstrumentationModuleList.vue | 44 +++++++++ .../components/InstrumentationModuleStatusCard.vue | 40 ++++++++ kamon-status/src/components/ModuleCard.vue | 91 ------------------ kamon-status/src/components/ModuleList.vue | 30 +++--- kamon-status/src/components/ModuleStatusCard.vue | 52 ++++++++++ kamon-status/src/components/OverviewCard.vue | 71 ++++++++++++++ kamon-status/src/components/StatusCard.vue | 105 ++++++++++++--------- kamon-status/src/views/Overview.vue | 26 +++-- 13 files changed, 328 insertions(+), 184 deletions(-) create mode 100644 kamon-status/src/components/InstrumentationModuleList.vue create mode 100644 kamon-status/src/components/InstrumentationModuleStatusCard.vue delete mode 100644 kamon-status/src/components/ModuleCard.vue create mode 100644 kamon-status/src/components/ModuleStatusCard.vue create mode 100644 kamon-status/src/components/OverviewCard.vue diff --git a/kamon-core/src/main/scala/kamon/module/ModuleRegistry.scala b/kamon-core/src/main/scala/kamon/module/ModuleRegistry.scala index 18921b03..81b94f29 100644 --- a/kamon-core/src/main/scala/kamon/module/ModuleRegistry.scala +++ b/kamon-core/src/main/scala/kamon/module/ModuleRegistry.scala @@ -335,23 +335,22 @@ class ModuleRegistry(classLoading: ClassLoading, configuration: Configuration, c */ private[kamon] def status(): Status.ModuleRegistry = { val automaticallyAddedModules = readModuleSettings(configuration.config()).map(moduleSettings => { - _registeredModules.get(moduleSettings.name) - .map(moduleEntry => - // The module is on the classpath and started. - Status.Module(moduleEntry.name, moduleEntry.settings.description, moduleEntry.settings.clazz.getCanonicalName, - moduleEntry.settings.kind, false, true) - - ).getOrElse( - // The module is on the classpath but has not been started. - Status.Module(moduleSettings.name, moduleSettings.description, moduleSettings.clazz.getCanonicalName, - moduleSettings.kind, false, false) - ) + val isActive = _registeredModules.get(moduleSettings.name).nonEmpty + + Status.Module( + moduleSettings.name, + moduleSettings.description, + moduleSettings.clazz.getCanonicalName, + moduleSettings.kind, + isProgrammaticallyRegistered = false, + moduleSettings.enabled, + isActive) }) val programmaticallyAddedModules = _registeredModules .filter { case (_, entry) => entry.programmaticallyAdded } .map { case (name, entry) => Status.Module(name, entry.settings.description, entry.settings.clazz.getCanonicalName, - entry.settings.kind, true, true) } + entry.settings.kind, true, true, true) } val allModules = automaticallyAddedModules ++ programmaticallyAddedModules Status.ModuleRegistry(allModules) diff --git a/kamon-core/src/main/scala/kamon/status/JsonMarshalling.scala b/kamon-core/src/main/scala/kamon/status/JsonMarshalling.scala index a84d016a..3fb2df1e 100644 --- a/kamon-core/src/main/scala/kamon/status/JsonMarshalling.scala +++ b/kamon-core/src/main/scala/kamon/status/JsonMarshalling.scala @@ -40,7 +40,8 @@ object JsonMarshalling { .value("clazz", m.clazz) .value("kind", moduleKindString(m.kind)) .value("isProgrammaticallyRegistered", m.isProgrammaticallyRegistered) - .value("isStarted", m.isStarted) + .value("enabled", m.isEnabled) + .value("started", m.isStarted) .end() }) diff --git a/kamon-core/src/main/scala/kamon/status/Status.scala b/kamon-core/src/main/scala/kamon/status/Status.scala index dd5d475f..9b323922 100644 --- a/kamon-core/src/main/scala/kamon/status/Status.scala +++ b/kamon-core/src/main/scala/kamon/status/Status.scala @@ -73,6 +73,7 @@ object Status { clazz: String, kind: ModuleKind, isProgrammaticallyRegistered: Boolean, + isEnabled: Boolean, isStarted: Boolean ) diff --git a/kamon-status/src/App.vue b/kamon-status/src/App.vue index ebb432c9..fd612828 100644 --- a/kamon-status/src/App.vue +++ b/kamon-status/src/App.vue @@ -4,7 +4,7 @@
- +
@@ -17,7 +17,7 @@ diff --git a/kamon-status/src/api/StatusApi.ts b/kamon-status/src/api/StatusApi.ts index 3add6161..a077a48b 100644 --- a/kamon-status/src/api/StatusApi.ts +++ b/kamon-status/src/api/StatusApi.ts @@ -27,7 +27,8 @@ export interface Module { clazz: string kind: ModuleKind isProgrammaticallyRegistered: boolean - isStarted: boolean + enabled: boolean + started: boolean } export interface Metric { @@ -46,14 +47,15 @@ export interface MetricRegistry { } export interface InstrumentationModule { + name: string description: string - isEnabled: boolean - isActive: boolean + enabled: boolean + active: boolean } export interface Instrumentation { isActive: boolean - modules: { [key: string]: InstrumentationModule } + modules: InstrumentationModule[] errors: { [key: string]: string[]} } @@ -109,13 +111,17 @@ export class StatusApi { return axios.get('/status/instrumentation').then(response => { const instrumentation: Instrumentation = { isActive: response.data.isActive as boolean, - modules: {}, + modules: [], errors: {} } const rawModules = response.data.modules Object.keys(rawModules).forEach(key => { - instrumentation.modules[key] = JSON.parse(rawModules[key]) + const rawModule = JSON.parse(rawModules[key]) + instrumentation.modules.push({ + name: key, + ...rawModule + }) }) const rawErrors = response.data.errors diff --git a/kamon-status/src/components/InstrumentationModuleList.vue b/kamon-status/src/components/InstrumentationModuleList.vue new file mode 100644 index 00000000..224f6716 --- /dev/null +++ b/kamon-status/src/components/InstrumentationModuleList.vue @@ -0,0 +1,44 @@ + + + + + diff --git a/kamon-status/src/components/InstrumentationModuleStatusCard.vue b/kamon-status/src/components/InstrumentationModuleStatusCard.vue new file mode 100644 index 00000000..6fb1206f --- /dev/null +++ b/kamon-status/src/components/InstrumentationModuleStatusCard.vue @@ -0,0 +1,40 @@ + + + + + diff --git a/kamon-status/src/components/ModuleCard.vue b/kamon-status/src/components/ModuleCard.vue deleted file mode 100644 index ea3a0c68..00000000 --- a/kamon-status/src/components/ModuleCard.vue +++ /dev/null @@ -1,91 +0,0 @@ - - - - - diff --git a/kamon-status/src/components/ModuleList.vue b/kamon-status/src/components/ModuleList.vue index 746ccf16..eddc05d0 100644 --- a/kamon-status/src/components/ModuleList.vue +++ b/kamon-status/src/components/ModuleList.vue @@ -4,20 +4,19 @@

Reporters

- +
- +
-

Modules

- +
@@ -25,12 +24,12 @@ - - + \ No newline at end of file diff --git a/kamon-status/src/components/ModuleStatusCard.vue b/kamon-status/src/components/ModuleStatusCard.vue new file mode 100644 index 00000000..825fce40 --- /dev/null +++ b/kamon-status/src/components/ModuleStatusCard.vue @@ -0,0 +1,52 @@ + + + + + diff --git a/kamon-status/src/components/OverviewCard.vue b/kamon-status/src/components/OverviewCard.vue new file mode 100644 index 00000000..a1805596 --- /dev/null +++ b/kamon-status/src/components/OverviewCard.vue @@ -0,0 +1,71 @@ + + + + diff --git a/kamon-status/src/components/StatusCard.vue b/kamon-status/src/components/StatusCard.vue index 193744df..7293940e 100644 --- a/kamon-status/src/components/StatusCard.vue +++ b/kamon-status/src/components/StatusCard.vue @@ -1,71 +1,84 @@ - + + diff --git a/kamon-status/src/views/Overview.vue b/kamon-status/src/views/Overview.vue index 830f5110..ae79f0c6 100644 --- a/kamon-status/src/views/Overview.vue +++ b/kamon-status/src/views/Overview.vue @@ -2,10 +2,10 @@
-

Status

+

Overview

- +
@@ -22,9 +22,13 @@

Metrics

-
+
+
+ +
+
@@ -33,16 +37,18 @@ import { Component, Vue } from 'vue-property-decorator' import {Option, none, some} from 'ts-option' import ModuleList from '../components/ModuleList.vue' +import InstrumentationModuleList from '../components/InstrumentationModuleList.vue' import MetricList from '../components/MetricList.vue' import EnvironmentCard from '../components/EnvironmentCard.vue' -import StatusCard from '../components/StatusCard.vue' +import OverviewCard from '../components/OverviewCard.vue' import {StatusApi, Settings, ModuleRegistry, ModuleKind, MetricRegistry, Module, Metric, - Instrumentation, Environment} from '../api/StatusApi' + Instrumentation, Environment, InstrumentationModule} from '../api/StatusApi' @Component({ components: { - 'status-card': StatusCard, + 'overview-card': OverviewCard, 'module-list': ModuleList, + 'instrumentation-module-list': InstrumentationModuleList, 'metric-list': MetricList, 'environment-card': EnvironmentCard }, @@ -93,6 +99,12 @@ export default class Overview extends Vue { .getOrElse([]) } + get instrumentationModules(): InstrumentationModule[] { + return this.instrumentation + .map(i => i.modules) + .getOrElse([]) + } + get environment(): Option { return this.settings.map(s => s.environment) } @@ -113,7 +125,7 @@ export default class Overview extends Vue { } private isStarted(module: Module): boolean { - return module.isStarted + return module.started } } -- cgit v1.2.3