Skip to content

Commit

Permalink
prometheus: Expose 3 activity metrics
Browse files Browse the repository at this point in the history
This exposes some of the info from /api/status in the prometheus
metrics endpoint, so they can be scraped over time and queried.

- Server started timestamp, so we can easily see how long servers
  have been running
- Last activity timestamp, so we can see when users were actually
  active
- User activity duration (in seconds), so we can more easily build
  reports of how long users are actually active over time.

All these would be very helpful in JupyterHub environments.

Follow-up to #1470
  • Loading branch information
yuvipanda committed Nov 4, 2024
1 parent 0d3eeb0 commit 5b157ca
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 1 deletion.
3 changes: 3 additions & 0 deletions jupyter_server/prometheus/metrics.py
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down
8 changes: 7 additions & 1 deletion jupyter_server/serverapp.py
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -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,
Expand Down

0 comments on commit 5b157ca

Please sign in to comment.