From be8a1155f89e26c14424c5a0cf54647d9ccbb7b2 Mon Sep 17 00:00:00 2001 From: bgrozev Date: Tue, 20 Feb 2024 16:58:54 -0600 Subject: [PATCH] Move the metrics update logic to jicoco. (#1134) * Move the metrics update logic to jicoco. * Use Metrics updater. * Update jicoco. --- .../jicofo/metrics/JicofoMetricsContainer.kt | 58 ++----------------- .../org/jitsi/jicofo/bridge/BridgeSelector.kt | 2 +- .../JicofoSelectorKotestProjectConfig.kt | 2 +- .../org/jitsi/jicofo/rest/Statistics.java | 2 +- .../kotlin/org/jitsi/jicofo/FocusManager.kt | 2 +- .../kotlin/org/jitsi/jicofo/JicofoServices.kt | 6 +- .../org/jitsi/jicofo/xmpp/XmppServices.kt | 2 +- pom.xml | 2 +- 8 files changed, 14 insertions(+), 62 deletions(-) diff --git a/jicofo-common/src/main/kotlin/org/jitsi/jicofo/metrics/JicofoMetricsContainer.kt b/jicofo-common/src/main/kotlin/org/jitsi/jicofo/metrics/JicofoMetricsContainer.kt index 0511c570d9..fd773e7748 100644 --- a/jicofo-common/src/main/kotlin/org/jitsi/jicofo/metrics/JicofoMetricsContainer.kt +++ b/jicofo-common/src/main/kotlin/org/jitsi/jicofo/metrics/JicofoMetricsContainer.kt @@ -21,66 +21,18 @@ import org.jitsi.config.JitsiConfig import org.jitsi.jicofo.TaskPools import org.jitsi.metaconfig.config import org.jitsi.metrics.MetricsContainer -import org.jitsi.utils.logging2.createLogger +import org.jitsi.metrics.MetricsUpdater import java.time.Duration -import java.util.concurrent.CopyOnWriteArrayList -import java.util.concurrent.ScheduledFuture -import java.util.concurrent.TimeUnit class JicofoMetricsContainer private constructor() : MetricsContainer(namespace = "jitsi_jicofo") { - private val logger = createLogger() - private val subtasks: MutableList<() -> Unit> = CopyOnWriteArrayList() + val metricsUpdater = MetricsUpdater(TaskPools.scheduledPool, updateInterval) - private var updateTask: ScheduledFuture<*>? = null - - // Allow updates to be disabled for tests - var disablePeriodicUpdates = false - - fun addUpdateTask(subtask: () -> Unit) { - if (disablePeriodicUpdates) { - logger.warn("Periodic updates are disabled, will not execute update task.") - return - } - - subtasks.add(subtask) - synchronized(this) { - if (updateTask == null) { - logger.info("Scheduling metrics update task with interval $updateInterval.") - updateTask = TaskPools.scheduledPool.scheduleAtFixedRate( - { updateMetrics() }, - 0, - updateInterval.toMillis(), - TimeUnit.MILLISECONDS - ) - } - } - } - - fun updateMetrics() { - synchronized(this) { - logger.debug("Running ${subtasks.size} subtasks.") - subtasks.forEach { - try { - it.invoke() - } catch (e: Exception) { - logger.warn("Exception while running subtask", e) - } - } + companion object { + private val updateInterval: Duration by config { + "jicofo.metrics.update-interval".from(JitsiConfig.newConfig) } - } - - fun stop() = synchronized(this) { - updateTask?.cancel(false) - updateTask = null - subtasks.clear() - } - companion object { @JvmStatic val instance = JicofoMetricsContainer() - - val updateInterval: Duration by config { - "jicofo.metrics.update-interval".from(JitsiConfig.newConfig) - } } } diff --git a/jicofo-selector/src/main/kotlin/org/jitsi/jicofo/bridge/BridgeSelector.kt b/jicofo-selector/src/main/kotlin/org/jitsi/jicofo/bridge/BridgeSelector.kt index 41da7292a0..64e151c6b0 100644 --- a/jicofo-selector/src/main/kotlin/org/jitsi/jicofo/bridge/BridgeSelector.kt +++ b/jicofo-selector/src/main/kotlin/org/jitsi/jicofo/bridge/BridgeSelector.kt @@ -63,7 +63,7 @@ class BridgeSelector @JvmOverloads constructor( private val bridges: MutableMap = mutableMapOf() init { - JicofoMetricsContainer.instance.addUpdateTask { updateMetrics() } + JicofoMetricsContainer.instance.metricsUpdater.addUpdateTask { updateMetrics() } } val operationalBridgeCount: Int diff --git a/jicofo-selector/src/test/kotlin/org/jitsi/jicofo/JicofoSelectorKotestProjectConfig.kt b/jicofo-selector/src/test/kotlin/org/jitsi/jicofo/JicofoSelectorKotestProjectConfig.kt index 774c1ac573..92910ef907 100644 --- a/jicofo-selector/src/test/kotlin/org/jitsi/jicofo/JicofoSelectorKotestProjectConfig.kt +++ b/jicofo-selector/src/test/kotlin/org/jitsi/jicofo/JicofoSelectorKotestProjectConfig.kt @@ -28,6 +28,6 @@ class JicofoSelectorKotestProjectConfig : AbstractProjectConfig() { MetaconfigSettings.cacheEnabled = false JicofoMetricsContainer.instance.checkForNameConflicts = false - JicofoMetricsContainer.instance.disablePeriodicUpdates = true + JicofoMetricsContainer.instance.metricsUpdater.disablePeriodicUpdates = true } } diff --git a/jicofo/src/main/java/org/jitsi/jicofo/rest/Statistics.java b/jicofo/src/main/java/org/jitsi/jicofo/rest/Statistics.java index 8fb50859a5..d37801ce0f 100644 --- a/jicofo/src/main/java/org/jitsi/jicofo/rest/Statistics.java +++ b/jicofo/src/main/java/org/jitsi/jicofo/rest/Statistics.java @@ -41,7 +41,7 @@ public String getStats() JicofoServices jicofoServices = Objects.requireNonNull(JicofoServices.getJicofoServicesSingleton(), "jicofoServices"); // Update the metrics that are usually updated periodically so we read the current values. - JicofoMetricsContainer.getInstance().updateMetrics(); + JicofoMetricsContainer.getInstance().getMetricsUpdater().updateMetrics(); return jicofoServices.getStats().toJSONString(); } } diff --git a/jicofo/src/main/kotlin/org/jitsi/jicofo/FocusManager.kt b/jicofo/src/main/kotlin/org/jitsi/jicofo/FocusManager.kt index ca9bcccafd..0384a3511f 100644 --- a/jicofo/src/main/kotlin/org/jitsi/jicofo/FocusManager.kt +++ b/jicofo/src/main/kotlin/org/jitsi/jicofo/FocusManager.kt @@ -74,7 +74,7 @@ class FocusManager( private val pinnedConferences: MutableMap = HashMap() fun start() { - metricsContainer.addUpdateTask { updateMetrics() } + metricsContainer.metricsUpdater.addUpdateTask { updateMetrics() } } /** diff --git a/jicofo/src/main/kotlin/org/jitsi/jicofo/JicofoServices.kt b/jicofo/src/main/kotlin/org/jitsi/jicofo/JicofoServices.kt index 5545b433c4..2d4c40e634 100644 --- a/jicofo/src/main/kotlin/org/jitsi/jicofo/JicofoServices.kt +++ b/jicofo/src/main/kotlin/org/jitsi/jicofo/JicofoServices.kt @@ -120,7 +120,7 @@ class JicofoServices { init { if (jibriDetector != null || sipJibriDetector != null) { - JicofoMetricsContainer.instance.addUpdateTask { + JicofoMetricsContainer.instance.metricsUpdater.addUpdateTask { JibriDetectorMetrics.updateMetrics(jibriDetector = jibriDetector, sipJibriDetector = sipJibriDetector) } } @@ -167,7 +167,7 @@ class JicofoServices { init { logger.info("Registering GlobalMetrics periodic updates.") - JicofoMetricsContainer.instance.addUpdateTask { GlobalMetrics.update() } + JicofoMetricsContainer.instance.metricsUpdater.addUpdateTask { GlobalMetrics.update() } } fun shutdown() { @@ -176,7 +176,7 @@ class JicofoServices { it.shutdown() } healthChecker?.shutdown() - JicofoMetricsContainer.instance.stop() + JicofoMetricsContainer.instance.metricsUpdater.stop() jettyServer?.stop() jvbDoctor?.let { bridgeSelector.removeHandler(it) diff --git a/jicofo/src/main/kotlin/org/jitsi/jicofo/xmpp/XmppServices.kt b/jicofo/src/main/kotlin/org/jitsi/jicofo/xmpp/XmppServices.kt index d7eb49ea77..8a4e68d9ad 100644 --- a/jicofo/src/main/kotlin/org/jitsi/jicofo/xmpp/XmppServices.kt +++ b/jicofo/src/main/kotlin/org/jitsi/jicofo/xmpp/XmppServices.kt @@ -69,7 +69,7 @@ class XmppServices( breweryJid ).apply { init() - JicofoMetricsContainer.instance.addUpdateTask { updateMetrics() } + JicofoMetricsContainer.instance.metricsUpdater.addUpdateTask { updateMetrics() } } } ?: run { logger.info("No Jigasi detector configured.") diff --git a/pom.xml b/pom.xml index 137b5f3267..a48921b030 100644 --- a/pom.xml +++ b/pom.xml @@ -44,7 +44,7 @@ 1.7.32 3.0.10 1.0-127-g6c65524 - 1.1-127-gf49982f + 1.1-132-g906f995 3.0.0 4.6.0 5.10.0