You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			79 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Python
		
	
			
		
		
	
	
			79 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Python
		
	
"""
 | 
						|
Prometheus metrics exported by Jupyter Server
 | 
						|
 | 
						|
Read https://prometheus.io/docs/practices/naming/ for naming
 | 
						|
conventions for metrics & labels.
 | 
						|
"""
 | 
						|
 | 
						|
from prometheus_client import Gauge, Histogram, Info
 | 
						|
 | 
						|
from jupyter_server._version import version_info as server_version_info
 | 
						|
 | 
						|
try:
 | 
						|
    from notebook._version import version_info as notebook_version_info
 | 
						|
except ImportError:
 | 
						|
    notebook_version_info = None
 | 
						|
 | 
						|
 | 
						|
if (
 | 
						|
    notebook_version_info is not None  # No notebook package found
 | 
						|
    and notebook_version_info < (7,)  # Notebook package found, is version 6
 | 
						|
    # Notebook package found, but its version is the same as jupyter_server
 | 
						|
    # version. This means some package (looking at you, nbclassic) has shimmed
 | 
						|
    # the notebook package to instead be imports from the jupyter_server package.
 | 
						|
    # In such cases, notebook.prometheus.metrics is actually *this file*, so
 | 
						|
    # trying to import it will cause a circular import. So we don't.
 | 
						|
    and notebook_version_info != server_version_info
 | 
						|
):
 | 
						|
    # Jupyter Notebook v6 also defined these metrics.  Re-defining them results in a ValueError,
 | 
						|
    # so we simply re-export them if we are co-existing with the notebook v6 package.
 | 
						|
    # See https://github.com/jupyter/jupyter_server/issues/209
 | 
						|
    from notebook.prometheus.metrics import (
 | 
						|
        HTTP_REQUEST_DURATION_SECONDS,
 | 
						|
        KERNEL_CURRENTLY_RUNNING_TOTAL,
 | 
						|
        TERMINAL_CURRENTLY_RUNNING_TOTAL,
 | 
						|
    )
 | 
						|
else:
 | 
						|
    HTTP_REQUEST_DURATION_SECONDS = Histogram(
 | 
						|
        "http_request_duration_seconds",
 | 
						|
        "duration in seconds for all HTTP requests",
 | 
						|
        ["method", "handler", "status_code"],
 | 
						|
    )
 | 
						|
 | 
						|
    TERMINAL_CURRENTLY_RUNNING_TOTAL = Gauge(
 | 
						|
        "terminal_currently_running_total",
 | 
						|
        "counter for how many terminals are running",
 | 
						|
    )
 | 
						|
 | 
						|
    KERNEL_CURRENTLY_RUNNING_TOTAL = Gauge(
 | 
						|
        "kernel_currently_running_total",
 | 
						|
        "counter for how many kernels are running labeled by type",
 | 
						|
        ["type"],
 | 
						|
    )
 | 
						|
 | 
						|
# 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 Extension 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",
 | 
						|
    "TERMINAL_CURRENTLY_RUNNING_TOTAL",
 | 
						|
    "KERNEL_CURRENTLY_RUNNING_TOTAL",
 | 
						|
    "SERVER_INFO",
 | 
						|
]
 |