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

Commit 3d1e879

Browse files
committed
feat: Handle streaming experiment logs differently from finished logs.
1 parent 1751183 commit 3d1e879

File tree

1 file changed

+23
-12
lines changed

1 file changed

+23
-12
lines changed

paperspace/commands/experiments.py

Lines changed: 23 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,9 @@ def execute(self, json_):
5555
self._log_create_experiment(response,
5656
"New experiment created and started with ID: {}",
5757
"Unknown error while creating/starting the experiment")
58+
if response.ok:
59+
return response.json()
60+
return None
5861

5962

6063
def start_experiment(experiment_id, api=experiments_api):
@@ -182,16 +185,17 @@ class ExperimentLogsCommand(common.CommandBase):
182185
is_logs_complete = False
183186

184187
def execute(self, experiment_id, line, limit, follow):
188+
if follow:
189+
self.logger.log("Awaiting logs...")
190+
185191
self.last_line_number = line
186192
table_title = "Experiment %s logs" % experiment_id
187-
table_data = [("LINE", "MESSAGE")]
193+
table_data = [("JOB ID", "LINE", "MESSAGE")]
188194
table = terminaltables.AsciiTable(table_data, title=table_title)
189195

190196
while not self.is_logs_complete:
191-
print ("follow " + str(follow))
192197
response = self._get_logs(experiment_id, self.last_line_number, limit)
193198

194-
print ("got data")
195199
try:
196200
data = response.json()
197201
if not response.ok:
@@ -203,11 +207,8 @@ def execute(self, experiment_id, line, limit, follow):
203207
self.logger.log("Error while parsing response data: {}".format(e))
204208
return
205209
else:
206-
print ("parsed data")
207-
self._log_logs_list(data, table, table_data)
208-
print ("logged data")
210+
self._log_logs_list(data, table, table_data, follow)
209211

210-
print ("follow " + follow)
211212
if not follow:
212213
self.is_logs_complete = True
213214

@@ -220,15 +221,25 @@ def _get_logs(self, experiment_id, line, limit):
220221
};
221222
return self.api.get(self.other_url, params=params)
222223

223-
def _log_logs_list(self, data, table, table_data):
224+
def _log_logs_list(self, data, table, table_data, follow):
224225
if not data:
225226
self.logger.log("No Logs found")
226227
else:
227-
table_str = self._make_table(data, table, table_data)
228-
if len(table_str.splitlines()) > get_terminal_lines():
229-
pydoc.pager(table_str)
228+
if follow:
229+
# TODO track number of jobs seen to look for PSEOF
230+
if data[-1].get("message") == "PSEOF":
231+
self.is_logs_complete = True
232+
else:
233+
self.last_line_number = data[-1].get("line")
234+
for log in data:
235+
log_str = "{}\t{}\t{}"
236+
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")))
230237
else:
231-
self.logger.log(table_str)
238+
table_str = self._make_table(data, table, table_data)
239+
if len(table_str.splitlines()) > get_terminal_lines():
240+
pydoc.pager(table_str)
241+
else:
242+
self.logger.log(table_str)
232243

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

0 commit comments

Comments
 (0)