code: def _test_master_restart_notebook(
      managed_cluster: Cluster, downtime: int
  ) -> None:
      with cmd.interactive_command(
          "notebook", "start", "--detach"
      ) as notebook:
          task_id = notebook.task_id
          assert task_id is not None
          wait_for_task_state("notebook", task_id, "RUNNING")
          notebook_url = f"{conf.make_master_url()}proxy/{task_id}/"
          _check_notebook_url(notebook_url)
  
          if downtime >= 0:
              managed_cluster.kill_master()
              time.sleep(downtime)
              managed_cluster.restart_master()
  
          _check_notebook_url(notebook_url)
  
          print("notebook ok")
  
imports: import logging
  import subprocess
  import time
  import docker
  import pytest
  import requests
  from determined.common import constants
  from determined.common.api import authentication, task_is_ready, task_logs
  from determined.common.api.bindings import experimentv1State
  from tests import api_utils
  from tests import command
  from tests import config
  from tests import experiment
  from tests.cluster.test_users import det_spawn
  from .abstract_cluster import Cluster
  from .managed_cluster import ManagedCluster, get_agent_data
  from .managed_cluster_k8s import ManagedK8sCluster
  from .test_groups import det_cmd, det_cmd_json
  from .utils import assert_command_succeeded, run_command, wait_for_command_state, wait_for_task_state
label_desc: Use image node_id 24 for calling a global function with example usage: _test_master_restart_notebook(managed_cluster, downtime) without return types