@@ -11,13 +11,24 @@ module Graphql = struct
1111 (Printf. sprintf " Invalid global ID prefix for type %s" type_)
1212 |> int_of_string
1313
14+ let generate_trace_upload_post =
15+ {|
16+ mutation GenerateTraceUploadPost {
17+ generateTraceUploadPost(input: {} ) {
18+ url
19+ formData
20+ }
21+ }
22+ | }
23+
1424 let create_trace =
1525 {|
16- mutation CreateTrace ($ projectId: ID!, $name: String!, $key: String!, $size: Int! ) {
26+ mutation CreateTrace ($ projectId: ID!, $name: String!, $slotName: String, $ key: String!, $size: Int! ) {
1727 createTrace(
1828 input: {
1929 projectId : $ projectId,
2030 name : $ name,
31+ defaultSlotName : $ slotName,
2132 key : $ key,
2233 size : $ size
2334 }
@@ -133,25 +144,22 @@ let parse_s3_signature_request ~body =
133144 let open CCOption.Infix in
134145 let open Yojson.Basic.Util in
135146 let json = Yojson.Basic. from_string body in
136- let data = json |> member " data" in
147+ let data = json |> member " data" |> member " generateTraceUploadPost " in
137148 let url = data |> member " url" |> to_string_option in
138- let signature =
139- data |> member " fields" |> member " x-amz-signature" |> to_string_option
140- in
141- let credential =
142- data |> member " fields" |> member " x-amz-credential" |> to_string_option
143- in
144- let algorithm =
145- data |> member " fields" |> member " x-amz-algorithm" |> to_string_option
146- in
147- let date =
148- data |> member " fields" |> member " x-amz-date" |> to_string_option
149+ let formData =
150+ match data |> member " formData" with
151+ | `String str -> Yojson.Basic. from_string str
152+ | _ -> `Null
149153 in
150- let key = data |> member " fields" |> member " key" |> to_string_option in
151- let policy = data |> member " fields" |> member " policy" |> to_string_option in
152- let acl = data |> member " fields" |> member " acl" |> to_string_option in
154+ let signature = formData |> member " x-amz-signature" |> to_string_option in
155+ let credential = formData |> member " x-amz-credential" |> to_string_option in
156+ let algorithm = formData |> member " x-amz-algorithm" |> to_string_option in
157+ let date = formData |> member " x-amz-date" |> to_string_option in
158+ let key = formData |> member " key" |> to_string_option in
159+ let policy = formData |> member " policy" |> to_string_option in
160+ let acl = formData |> member " acl" |> to_string_option in
153161 let success_action_status =
154- data |> member " fields " |> member " success_action_status" |> to_int_option
162+ formData |> member " success_action_status" |> to_int_option
155163 in
156164 url >> = fun url ->
157165 signature >> = fun signature ->
@@ -179,10 +187,15 @@ let parse_s3_response ~body =
179187
180188let build_s3_signed_post_request ~api =
181189 let {Api. endpoint; key} = api in
182- { Api.Request. url = endpoint ^ " /api/v1/trace_s3_post "
183- ; header = [(" API-KEY" , key)]
190+ { Api.Request. url = endpoint ^ " /api/v2 "
191+ ; header = [(" API-KEY" , key); ( " Content-Type " , " application/json " ) ]
184192 ; method_ = Post
185- ; data = Multipart [] }
193+ ; data =
194+ Raw
195+ (Yojson.Safe. to_string
196+ (`Assoc
197+ [ (" query" , `String Graphql. generate_trace_upload_post)
198+ ; (" variables" , `Assoc [] ) ])) }
186199
187200let build_file_upload_request ~s3_url ~s3_signature ~(file : Api.File.t ) =
188201 let direct_fields =
@@ -196,9 +209,20 @@ let build_file_upload_request ~s3_url ~s3_signature ~(file : Api.File.t) =
196209 ; method_ = Post
197210 ; data = Multipart (direct_fields @ [{name = " file" ; content = File file}]) }
198211
199- let build_trace_import_request ~api ~project_id ~s3_key ~trace_name ~file =
212+ let build_trace_import_request
213+ ~api
214+ ~project_id
215+ ~slot_name
216+ ~s3_key
217+ ~trace_name
218+ ~file =
200219 let {Api. endpoint; key} = api in
201220 let {Api.File. size; _} = file in
221+ let slot_name_var =
222+ match slot_name with
223+ | Some name -> `String name
224+ | None -> `Null
225+ in
202226 { Api.Request. url = endpoint ^ " /api/v2"
203227 ; header = [(" API-KEY" , key); (" Content-Type" , " application/json" )]
204228 ; method_ = Post
@@ -209,7 +233,8 @@ let build_trace_import_request ~api ~project_id ~s3_key ~trace_name ~file =
209233 [ (" query" , `String Graphql. create_trace)
210234 ; ( " variables"
211235 , `Assoc
212- [ ( " projectId"
236+ [ (" slotName" , slot_name_var)
237+ ; ( " projectId"
213238 , `String
214239 (Graphql. to_global_id ~type_: " Project" ~id: project_id)
215240 )
0 commit comments