diff --git a/jupyter_server/prometheus/metrics.py b/jupyter_server/prometheus/metrics.py index 0afcf6e23e..ff71523299 100644 --- a/jupyter_server/prometheus/metrics.py +++ b/jupyter_server/prometheus/metrics.py @@ -53,6 +53,11 @@ # New prometheus metrics that do not exist in notebook v6 go here SERVER_INFO = Info("jupyter_server", "Jupyter Server Version information") +SERVER_EXTENSION_INFO = Info( + "jupyter_server_extension", + "Jupyter Server Extensiom Version Information", + ["name", "version", "enabled"], +) __all__ = [ "HTTP_REQUEST_DURATION_SECONDS", diff --git a/jupyter_server/serverapp.py b/jupyter_server/serverapp.py index 26499c410e..ca8bc98743 100644 --- a/jupyter_server/serverapp.py +++ b/jupyter_server/serverapp.py @@ -110,7 +110,7 @@ GatewaySessionManager, ) from jupyter_server.log import log_request -from jupyter_server.prometheus.metrics import SERVER_INFO +from jupyter_server.prometheus.metrics import SERVER_EXTENSION_INFO, SERVER_INFO from jupyter_server.services.config import ConfigManager from jupyter_server.services.contents.filemanager import ( AsyncFileContentsManager, @@ -2703,6 +2703,11 @@ def init_metrics(self) -> None: """ SERVER_INFO.info({"version": __version__}) + for ext in self.extension_manager.extensions.values(): + SERVER_EXTENSION_INFO.labels( + name=ext.name, version=ext.version, enabled=str(ext.enabled).lower() + ) + @catch_config_error def initialize( self,