Skip to content
This repository was archived by the owner on Aug 11, 2020. It is now read-only.

Commit 910523a

Browse files
committed
tweak: Clean up experiment logs and propagate changes to job logs.
1 parent 3d1e879 commit 910523a

File tree

3 files changed

+33
-16
lines changed

3 files changed

+33
-16
lines changed

paperspace/cli/jobs.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,11 +87,14 @@ def list_jobs(api_key, **filters):
8787
@click.option("--registryUsername", "registryUsername", help="Docker registry username")
8888
@click.option("--registryPassword", "registryPassword", help="Docker registry password")
8989
@api_key_option
90-
def create_job(api_key, **kwargs):
90+
@click.pass_context
91+
def create_job(ctx, api_key, **kwargs):
9192
del_if_value_is_none(kwargs)
9293
jobs_api = client.API(config.CONFIG_HOST, api_key=api_key)
9394
command = jobs_commands.CreateJobCommand(api=jobs_api)
94-
command.execute(kwargs)
95+
job = command.execute(kwargs)
96+
if job is not None:
97+
ctx.invoke(list_logs, job_id=job["handle"], line=0, limit=100, follow=True, api_key=api_key)
9598

9699

97100
@jobs_group.command("logs", help="List job logs")

paperspace/commands/experiments.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -179,8 +179,7 @@ def get_experiment_details(experiment_id, api=experiments_api):
179179

180180
class ExperimentLogsCommand(common.CommandBase):
181181
last_line_number = 0
182-
base_url = "/jobs/logs?experimentId={}&line={}&limit={}"
183-
other_url = "/jobs/logs"
182+
base_url = "/jobs/logs"
184183

185184
is_logs_complete = False
186185

@@ -213,13 +212,12 @@ def execute(self, experiment_id, line, limit, follow):
213212
self.is_logs_complete = True
214213

215214
def _get_logs(self, experiment_id, line, limit):
216-
url = self.base_url.format(experiment_id, line, limit)
217215
params = {
218216
'experimentId': experiment_id,
219217
'line': line,
220218
'limit': limit
221219
};
222-
return self.api.get(self.other_url, params=params)
220+
return self.api.get(self.base_url, params=params)
223221

224222
def _log_logs_list(self, data, table, table_data, follow):
225223
if not data:

paperspace/commands/jobs.py

Lines changed: 26 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -72,11 +72,14 @@ def _get_table_data(self, jobs):
7272

7373
class JobLogsCommand(common.CommandBase):
7474
last_line_number = 0
75-
base_url = "/jobs/logs?jobId={}&line={}&limit={}"
75+
base_url = "/jobs/logs"
7676

7777
is_logs_complete = False
7878

7979
def execute(self, job_id, line, limit, follow):
80+
if follow:
81+
self.logger.log("Awaiting logs...")
82+
8083
self.last_line_number = line
8184
table_title = "Job %s logs" % job_id
8285
table_data = [("LINE", "MESSAGE")]
@@ -96,24 +99,37 @@ def execute(self, job_id, line, limit, follow):
9699
self.logger.log("Error while parsing response data: {}".format(e))
97100
return
98101
else:
99-
self._log_logs_list(data, table, table_data)
102+
self._log_logs_list(data, table, table_data, follow)
100103

101104
if not follow:
102105
self.is_logs_complete = True
103106

104107
def _get_logs(self, job_id, line, limit):
105-
url = self.base_url.format(job_id, line, limit)
106-
return self.api.get(url)
107-
108-
def _log_logs_list(self, data, table, table_data):
108+
params = {
109+
'jobId': job_id,
110+
'line': line,
111+
'limit': limit
112+
};
113+
return self.api.get(self.base_url, params=params)
114+
115+
def _log_logs_list(self, data, table, table_data, follow):
109116
if not data:
110117
self.logger.log("No Logs found")
111118
else:
112-
table_str = self._make_table(data, table, table_data)
113-
if len(table_str.splitlines()) > get_terminal_lines():
114-
pydoc.pager(table_str)
119+
if follow:
120+
if data[-1].get("message") == "PSEOF":
121+
self.is_logs_complete = True
122+
else:
123+
self.last_line_number = data[-1].get("line")
124+
for log in data:
125+
log_str = "{}\t{}\t{}"
126+
self.logger.log(log_str.format(style(fg="blue", text=str(log.get("jobId"))), style(fg="red", text=str(log.get("line"))), log.get("message")))
115127
else:
116-
self.logger.log(table_str)
128+
table_str = self._make_table(data, table, table_data)
129+
if len(table_str.splitlines()) > get_terminal_lines():
130+
pydoc.pager(table_str)
131+
else:
132+
self.logger.log(table_str)
117133

118134
def _make_table(self, logs, table, table_data):
119135
if logs[-1].get("message") == "PSEOF":

0 commit comments

Comments
 (0)