1717)
1818
1919
20- @cli .group ("experiments" , help = "Manage experiments" , cls = ClickGroup )
20+ @cli .group ([ "experiments" , "experiment" ] , help = "Manage experiments" , cls = ClickGroup )
2121def experiments ():
2222 pass
2323
@@ -235,6 +235,13 @@ def common_experiments_create_single_node_options(f):
235235 return functools .reduce (lambda x , opt : opt (x ), reversed (options ), f )
236236
237237
238+ show_logs_option = click .option (
239+ "--logs/--no-logs" ,
240+ "show_logs" ,
241+ default = False ,
242+ )
243+
244+
238245@create_experiment .command (name = "multinode" , help = "Create multi node experiment" )
239246@common_experiments_create_options
240247@common_experiment_create_multi_node_options
@@ -259,30 +266,42 @@ def create_single_node(api_key, **kwargs):
259266@create_and_start_experiment .command (name = "multinode" , help = "Create and start new multi node experiment" )
260267@common_experiments_create_options
261268@common_experiment_create_multi_node_options
262- def create_and_start_multi_node (api_key , ** kwargs ):
269+ @show_logs_option
270+ @click .pass_context
271+ def create_and_start_multi_node (ctx , api_key , show_logs , ** kwargs ):
263272 del_if_value_is_none (kwargs )
264273 experiments_api = client .API (config .CONFIG_EXPERIMENTS_HOST , api_key = api_key )
265274 command = experiments_commands .CreateAndStartExperimentCommand (api = experiments_api )
266- command .execute (kwargs )
275+ experiment = command .execute (kwargs )
276+ if experiment and show_logs :
277+ ctx .invoke (list_logs , experiment_id = experiment ["handle" ], line = 0 , limit = 100 , follow = True , api_key = api_key )
267278
268279
269280@create_and_start_experiment .command (name = "singlenode" , help = "Create and start new single node experiment" )
270281@common_experiments_create_options
271282@common_experiments_create_single_node_options
272- def create_and_start_single_node (api_key , ** kwargs ):
283+ @show_logs_option
284+ @click .pass_context
285+ def create_and_start_single_node (ctx , api_key , show_logs , ** kwargs ):
273286 kwargs ["experimentType" ] = constants .ExperimentType .SINGLE_NODE
274287 del_if_value_is_none (kwargs )
275288 experiments_api = client .API (config .CONFIG_EXPERIMENTS_HOST , api_key = api_key )
276289 command = experiments_commands .CreateAndStartExperimentCommand (api = experiments_api )
277- command .execute (kwargs )
290+ experiment = command .execute (kwargs )
291+ if experiment and show_logs :
292+ ctx .invoke (list_logs , experiment_id = experiment ["handle" ], line = 0 , limit = 100 , follow = True , api_key = api_key )
278293
279294
280295@experiments .command ("start" , help = "Start experiment" )
281296@click .argument ("experiment-id" )
282297@api_key_option
283- def start_experiment (experiment_id , api_key ):
298+ @show_logs_option
299+ @click .pass_context
300+ def start_experiment (ctx , experiment_id , show_logs , api_key ):
284301 experiments_api = client .API (config .CONFIG_EXPERIMENTS_HOST , api_key = api_key )
285302 experiments_commands .start_experiment (experiment_id , api = experiments_api )
303+ if show_logs :
304+ ctx .invoke (list_logs , experiment_id = experiment_id , line = 0 , limit = 100 , follow = True , api_key = api_key )
286305
287306
288307@experiments .command ("stop" , help = "Stop experiment" )
@@ -308,3 +327,34 @@ def list_experiments(project_ids, api_key):
308327def get_experiment_details (experiment_id , api_key ):
309328 experiments_api = client .API (config .CONFIG_EXPERIMENTS_HOST , api_key = api_key )
310329 experiments_commands .get_experiment_details (experiment_id , api = experiments_api )
330+
331+
332+ @experiments .command ("logs" , help = "List experiment logs" )
333+ @click .option (
334+ "--experimentId" ,
335+ "experiment_id" ,
336+ required = True
337+ )
338+ @click .option (
339+ "--line" ,
340+ "line" ,
341+ required = False ,
342+ default = 0
343+ )
344+ @click .option (
345+ "--limit" ,
346+ "limit" ,
347+ required = False ,
348+ default = 10000
349+ )
350+ @click .option (
351+ "--follow" ,
352+ "follow" ,
353+ required = False ,
354+ default = False
355+ )
356+ @api_key_option
357+ def list_logs (experiment_id , line , limit , follow , api_key = None ):
358+ logs_api = client .API (config .CONFIG_LOG_HOST , api_key = api_key )
359+ command = experiments_commands .ExperimentLogsCommand (api = logs_api )
360+ command .execute (experiment_id , line , limit , follow )
0 commit comments