diff options
Diffstat (limited to 'kamon-core/src/main/scala/kamon/module/Module.scala')
-rw-r--r-- | kamon-core/src/main/scala/kamon/module/Module.scala | 60 |
1 files changed, 50 insertions, 10 deletions
diff --git a/kamon-core/src/main/scala/kamon/module/Module.scala b/kamon-core/src/main/scala/kamon/module/Module.scala index 41649629..f32e949b 100644 --- a/kamon-core/src/main/scala/kamon/module/Module.scala +++ b/kamon-core/src/main/scala/kamon/module/Module.scala @@ -289,19 +289,25 @@ object Module { } filter(_.isSuccess) map(_.get) toSeq - // Legacy modules from <1.2.0 - val legacyModules = config.getStringList("kamon.reporters").asScala map { moduleClass => - Settings(moduleClass, moduleClass, true) - } toSeq - val (repeatedLegacyModules, uniqueLegacyModules) = legacyModules.partition(lm => moduleSettings.find(_.fqcn == lm.fqcn).nonEmpty) - repeatedLegacyModules.foreach(m => - _logger.warn(s"Module [${m.name}] is configured twice, please remove it from the deprecated kamon.reporters setting.")) + // Load all modules that might have been configured using the legacy "kamon.reporters" setting from <1.2.0 + // versions. This little hack should be removed by the time we release 2.0. + // + if(config.hasPath("kamon.reporters")) { + val legacyModules = config.getStringList("kamon.reporters").asScala map { moduleClass => + Settings(moduleClass, moduleClass, true) + } toSeq - uniqueLegacyModules.foreach(m => - _logger.warn(s"Module [${m.name}] is configured in the deprecated kamon.reporters setting, please consider moving it to kamon.modules.")) + val (repeatedLegacyModules, uniqueLegacyModules) = legacyModules.partition(lm => moduleSettings.find(_.fqcn == lm.fqcn).nonEmpty) + repeatedLegacyModules.foreach(m => + _logger.warn(s"Module [${m.name}] is configured twice, please remove it from the deprecated kamon.reporters setting.")) - moduleSettings ++ uniqueLegacyModules + 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 + + } else moduleSettings } /** @@ -322,6 +328,26 @@ object Module { /** + * Returns the current status of this module registry. + */ + private[kamon] def status(): Registry.Status = { + val automaticallyAddedModules = readModuleSettings(configuration.config()).map(moduleSettings => { + val entry = _registeredModules.get(moduleSettings.name) + Registry.ModuleInfo(moduleSettings.name, moduleSettings.fqcn, moduleSettings.enabled, entry.nonEmpty) + }) + + val programmaticallyAddedModules = _registeredModules + .filter { case (_, entry) => entry.programmaticallyAdded } + .map { case (name, entry) => { + Registry.ModuleInfo(name, entry.module.getClass.getName, true, true) + }} + + val allModules = automaticallyAddedModules ++ programmaticallyAddedModules + Registry.Status(allModules) + } + + + /** * Registers a module and schedules execution of its start procedure. */ private def startModule(entry: Entry[Module]): Unit = { @@ -396,6 +422,20 @@ object Module { } } + object Registry { + + case class Status( + modules: Seq[ModuleInfo] + ) + + case class ModuleInfo( + name: String, + description: String, + enabled: Boolean, + started: Boolean + ) + } + private def readRegistryConfiguration(config: Config): RegistrySettings = RegistrySettings( metricTickInterval = config.getDuration("kamon.metric.tick-interval"), |