@@ -16,10 +16,30 @@ let get_file path =
1616 | _ ->
1717 Lwt_result. fail (" Could not read file " ^ path ^ " for unknown reasons" ))
1818
19+ let resolve_project_name ~api ~verify ~project_id ~project_name =
20+ (* The user can provide an ID or a name. If a name is provided, look for the
21+ corresponding ID. Otherwise, just return the given ID. *)
22+ let open Lwt_result.Infix in
23+ match (project_id, project_name) with
24+ | (None , None )
25+ | (Some _ , Some _ ) ->
26+ Lwt_result. fail " Exactly one of project ID or name must be provided."
27+ | (Some id , None) -> Lwt_result. return id
28+ | (None, Some name ) -> (
29+ Cs_api_core. build_list_projects_request ~api
30+ |> Cs_api_io. send_request ~verify
31+ >> = Cs_api_io. get_response
32+ >> = fun body ->
33+ let projects = Cs_api_core. parse_list_projects_response ~body in
34+ match CCList.Assoc. get ~eq: String. equal name projects with
35+ | None -> Lwt_result. fail (Printf. sprintf " Project name not found: %s" name)
36+ | Some id -> Lwt_result. return id)
37+
1938let upload_trace
2039 ~trace_file
2140 ~trace_name
2241 ~project_id
42+ ~project_name
2343 ~api_endpoint
2444 ~api_key
2545 ~no_check_certificate =
@@ -28,6 +48,8 @@ let upload_trace
2848 let api = Api. make ~api_endpoint ~api_key in
2949 (let open Lwt_result.Infix in
3050 get_file trace_file >> = fun file ->
51+ resolve_project_name ~api ~verify ~project_id ~project_name
52+ >> = fun project_id ->
3153 Cs_api_core. build_s3_signed_post_request ~api
3254 |> Cs_api_io. send_request ~verify
3355 >> = Cs_api_io. get_response
@@ -73,8 +95,18 @@ let trace_name =
7395 & info [" n" ; " trace-name" ] ~docv: " TRACENAME" ~doc )
7496
7597let project_id =
76- let doc = " ID of the project to which the trace should be added" in
77- Cmdliner.Arg. (required & opt (some int ) None & info [" p" ; " project-id" ] ~doc )
98+ let doc =
99+ " ID of the project to which the trace should be added. Mutually exclusive \
100+ with --project-name."
101+ in
102+ Cmdliner.Arg. (value & opt (some int ) None & info [" p" ; " project-id" ] ~doc )
103+
104+ let project_name =
105+ let doc =
106+ " Name of the project to which the trace should be added. Mutually \
107+ exclusive with --project-id."
108+ in
109+ Cmdliner.Arg. (value & opt (some string ) None & info [" project-name" ] ~doc )
78110
79111let api_endpoint =
80112 let doc = " Base URL of the API server." in
@@ -104,11 +136,12 @@ let upload_trace_main
104136 trace_file
105137 trace_name
106138 project_id
139+ project_name
107140 api_endpoint
108141 api_key
109142 no_check_certificate =
110- upload_trace ~trace_file ~trace_name ~project_id ~api_endpoint ~api_key
111- ~no_check_certificate
143+ upload_trace ~trace_file ~trace_name ~project_id ~project_name ~api_endpoint
144+ ~api_key ~ no_check_certificate
112145 |> Lwt_main. run
113146
114147let upload_trace_term =
@@ -117,6 +150,7 @@ let upload_trace_term =
117150 $ trace_file
118151 $ trace_name
119152 $ project_id
153+ $ project_name
120154 $ api_endpoint
121155 $ api_key
122156 $ no_check_certificate)
0 commit comments