Skip to content
This repository was archived by the owner on May 22, 2025. It is now read-only.

Add terminal #112

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 15 additions & 7 deletions scripts/auto-stop-idle/autostop.py
Original file line number Diff line number Diff line change
Expand Up @@ -68,13 +68,13 @@
exit(2)


def is_idle(last_activity):
def is_idle(last_activity, process_type):
last_activity = datetime.strptime(last_activity,"%Y-%m-%dT%H:%M:%S.%fz")
if (datetime.now() - last_activity).total_seconds() > time:
print('Notebook is idle. Last activity time = ', last_activity)
print(process_type + ' is idle. Last activity time = ', last_activity)
return True
else:
print('Notebook is not idle. Last activity time = ', last_activity)
print(process_type + ' is not idle. Last activity time = ', last_activity)
return False


Expand All @@ -94,13 +94,13 @@ def get_notebook_name():
if notebook['kernel']['execution_state'] == 'idle':
if not ignore_connections:
if notebook['kernel']['connections'] == 0:
if not is_idle(notebook['kernel']['last_activity']):
if not is_idle(notebook['kernel']['last_activity'], 'Notebook'):
idle = False
else:
idle = False
print('Notebook idle state set as %s because no kernel has been detected.' % idle)
else:
if not is_idle(notebook['kernel']['last_activity']):
if not is_idle(notebook['kernel']['last_activity'], 'Notebook'):
idle = False
print('Notebook idle state set as %s since kernel connections are ignored.' % idle)
else:
Expand All @@ -111,15 +111,23 @@ def get_notebook_name():
uptime = client.describe_notebook_instance(
NotebookInstanceName=get_notebook_name()
)['LastModifiedTime']
if not is_idle(uptime.strftime("%Y-%m-%dT%H:%M:%S.%fz")):
if not is_idle(uptime.strftime("%Y-%m-%dT%H:%M:%S.%fz"), 'Notebook'):
idle = False
print('Notebook idle state set as %s since no sessions detected.' % idle)

# Look for idle terminal sessions.
response = requests.get('https://localhost:'+port+'/api/terminals', verify=False)
data = response.json()
if len(data) > 0:
for terminal in data:
if not is_idle(terminal['last_activity'], 'Terminal ' + terminal['name']):
idle = False

if idle:
print('Closing idle notebook')
client = boto3.client('sagemaker')
client.stop_notebook_instance(
NotebookInstanceName=get_notebook_name()
)
else:
print('Notebook not idle. Pass.')
print('Notebook not idle. Pass.')