diff --git a/jupyter_server/prometheus/metrics.py b/jupyter_server/prometheus/metrics.py index ff7152329..3f1f7b5d7 100644 --- a/jupyter_server/prometheus/metrics.py +++ b/jupyter_server/prometheus/metrics.py @@ -58,6 +58,9 @@ "Jupyter Server Extensiom Version Information", ["name", "version", "enabled"], ) +LAST_ACTIVITY = Gauge("jupyter_server_last_activity_timestamp_seconds", "Timestamp of last seen activity on this Jupyter Server") +SERVER_STARTED = Gauge("jupyter_server_started_timestamp_seconds", "Timestamp of when this Jupyter Server was started") +ACTIVE_DURATION = Gauge("jupyter_server_active_duration_seconds", "Number of seconds this Jupyter Server has been active") __all__ = [ "HTTP_REQUEST_DURATION_SECONDS", diff --git a/jupyter_server/serverapp.py b/jupyter_server/serverapp.py index ca8bc9874..560c18fd3 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_EXTENSION_INFO, SERVER_INFO +from jupyter_server.prometheus.metrics import SERVER_EXTENSION_INFO, SERVER_INFO, SERVER_STARTED, LAST_ACTIVITY, ACTIVE_DURATION from jupyter_server.services.config import ConfigManager from jupyter_server.services.contents.filemanager import ( AsyncFileContentsManager, @@ -2708,6 +2708,12 @@ def init_metrics(self) -> None: name=ext.name, version=ext.version, enabled=str(ext.enabled).lower() ) + started = self.web_app.settings["started"] + SERVER_STARTED.set(started.timestamp()) + + LAST_ACTIVITY.set_function(lambda: self.web_app.last_activity().timestamp()) + ACTIVE_DURATION.set_function(lambda: (self.web_app.last_activity() - self.web_app.settings["started"]).total_seconds()) + @catch_config_error def initialize( self,