public static async Task <Result> OneWayRequestAsync(this HttpClient client, HttpRequestMessage request, string requestBody = null, CancellationToken ct = default) { HttpResponseMessage response = null; try { response = await client.SendAsync(request, ct); var responseString = await response.Content.ReadAsStringAsync(); var requestDump = DumpFormatter.BuildDump(request, response, requestBody, responseString); if (!response.IsSuccessStatusCode) { var ex = new HttpRequestException($"Response code does not indicate success: {(int)response.StatusCode} ({response.StatusCode})."); return(Result.Failed(ex, requestDump)); } else { return(Result.Success(requestDump)); } } catch (Exception ex) { var requestDump = DumpFormatter.BuildDump(request, response, requestBody, ex.ToString()); return(Result.Failed(ex, requestDump)); } }
public override async Task <(string Dump, Exception Exception)> ExecuteJobAsync(RuleJobData job) { var requestBody = job["RequestBody"].ToString(Formatting.Indented); var requestMsg = BuildRequest(job, requestBody); HttpResponseMessage response = null; try { response = await HttpClientPool.GetHttpClient().SendAsync(requestMsg); var responseString = await response.Content.ReadAsStringAsync(); var requestDump = DumpFormatter.BuildDump(requestMsg, response, requestBody, responseString, TimeSpan.Zero, false); return(requestDump, null); } catch (Exception ex) { if (requestMsg != null) { var requestDump = DumpFormatter.BuildDump(requestMsg, response, requestBody, ex.ToString(), TimeSpan.Zero, false); return(requestDump, ex); } else { var requestDump = ex.ToString(); return(requestDump, ex); } } }
protected override async Task <(string Dump, Exception Exception)> ExecuteJobAsync(MediumJob job) { using (var httpClient = httpClientFactory.CreateClient()) { httpClient.Timeout = TimeSpan.FromSeconds(4); httpClient.DefaultRequestHeaders.Add("Accept", "application/json"); httpClient.DefaultRequestHeaders.Add("Accept-Charset", "utf-8"); httpClient.DefaultRequestHeaders.Add("User-Agent", "Squidex Headless CMS"); string id; HttpResponseMessage response = null; var meRequest = BuildMeRequest(job); try { response = await httpClient.SendAsync(meRequest); var responseString = await response.Content.ReadAsStringAsync(); var responseJson = JToken.Parse(responseString); id = responseJson["data"]["id"].ToString(); } catch (Exception ex) { var requestDump = DumpFormatter.BuildDump(meRequest, response, ex.ToString()); return(requestDump, ex); } return(await httpClient.OneWayRequestAsync(BuildPostRequest(job, id), job.RequestBody)); } }
protected override async Task <(string Dump, Exception Exception)> ExecuteJobAsync(WebhookJob job) { var requestBody = job.Body; var requestMessage = BuildRequest(job, requestBody); HttpResponseMessage response = null; try { response = await HttpClientPool.GetHttpClient().SendAsync(requestMessage); var responseString = await response.Content.ReadAsStringAsync(); var requestDump = DumpFormatter.BuildDump(requestMessage, response, requestBody, responseString, TimeSpan.Zero, false); Exception ex = null; if (!response.IsSuccessStatusCode) { ex = new HttpRequestException($"Response code does not indicate success: {(int)response.StatusCode} ({response.StatusCode})."); } return(requestDump, ex); } catch (Exception ex) { var requestDump = DumpFormatter.BuildDump(requestMessage, response, requestBody, ex.ToString(), TimeSpan.Zero, false); return(requestDump, ex); } }
protected override async Task <(string Dump, Exception Exception)> ExecuteJobAsync(FastlyJob job) { if (string.IsNullOrWhiteSpace(job.Key)) { return(null, new InvalidOperationException("The action cannot handle this event.")); } var requestMsg = BuildRequest(job); HttpResponseMessage response = null; try { response = await HttpClientPool.GetHttpClient().SendAsync(requestMsg); var responseString = await response.Content.ReadAsStringAsync(); var requestDump = DumpFormatter.BuildDump(requestMsg, response, null, responseString, TimeSpan.Zero, false); return(requestDump, null); } catch (Exception ex) { var requestDump = DumpFormatter.BuildDump(requestMsg, response, null, ex.ToString(), TimeSpan.Zero, false); return(requestDump, ex); } }
protected override async Task <(string Dump, Exception Exception)> ExecuteJobAsync(MediumJob job) { var httpClient = clients.GetClient(string.Empty); string id; HttpResponseMessage response = null; var meRequest = BuildMeRequest(job); try { response = await httpClient.SendAsync(meRequest); var responseString = await response.Content.ReadAsStringAsync(); var responseJson = JToken.Parse(responseString); id = responseJson["data"]["id"].ToString(); } catch (Exception ex) { var requestDump = DumpFormatter.BuildDump(meRequest, response, ex.ToString()); return(requestDump, ex); } return(await httpClient.OneWayRequestAsync(BuildPostRequest(job, id), job.RequestBody)); }
public static async Task <(string Dump, Exception Exception)> OneWayRequestAsync(this HttpClient client, HttpRequestMessage request, string requestBody = null) { HttpResponseMessage response = null; try { response = await client.SendAsync(request); var responseString = await response.Content.ReadAsStringAsync(); var requestDump = DumpFormatter.BuildDump(request, response, requestBody, responseString); Exception ex = null; if (!response.IsSuccessStatusCode) { ex = new HttpRequestException($"Response code does not indicate success: {(int)response.StatusCode} ({response.StatusCode})."); } return(requestDump, ex); } catch (Exception ex) { var requestDump = DumpFormatter.BuildDump(request, response, requestBody, ex.ToString()); return(requestDump, ex); } }
/// <summary> /// Dumps variables. /// </summary> /// <param name="ctx">Current runtime context.</param> /// <param name="variables">Variables to be dumped.</param> public static void var_dump(Context ctx, params PhpValue[] variables) { var formatter = new DumpFormatter(ctx, "\n"); // TODO: HtmlDumpFormatter for (int i = 0; i < variables.Length; i++) { ctx.Echo(formatter.Serialize(variables[i].GetValue())); } }
public virtual async Task <(string Dump, WebhookResult Result, TimeSpan Elapsed)> SendAsync(WebhookJob job) { HttpRequestMessage request = BuildRequest(job); HttpResponseMessage response = null; var isTimeout = false; var watch = Stopwatch.StartNew(); try { using (var client = new HttpClient { Timeout = Timeout }) { response = await client.SendAsync(request); } } catch (TimeoutException) { isTimeout = true; } catch (OperationCanceledException) { isTimeout = true; } finally { watch.Stop(); } var responseString = string.Empty; if (response != null) { responseString = await response.Content.ReadAsStringAsync(); } var dump = DumpFormatter.BuildDump(request, response, job.RequestBody, responseString, watch.Elapsed); var result = WebhookResult.Failed; if (isTimeout) { result = WebhookResult.Timeout; } else if (response?.IsSuccessStatusCode == true) { result = WebhookResult.Success; } return(dump, result, watch.Elapsed); }
protected override async Task <Result> ExecuteJobAsync(MediumJob job, CancellationToken ct = default) { using (var httpClient = httpClientFactory.CreateClient()) { httpClient.Timeout = TimeSpan.FromSeconds(4); httpClient.DefaultRequestHeaders.Add("Accept", "application/json"); httpClient.DefaultRequestHeaders.Add("Accept-Charset", "utf-8"); httpClient.DefaultRequestHeaders.Add("User-Agent", "Squidex Headless CMS"); string path; if (!string.IsNullOrWhiteSpace(job.PublicationId)) { path = $"v1/publications/{job.PublicationId}/posts"; } else { HttpResponseMessage response = null; var meRequest = BuildMeRequest(job); try { response = await httpClient.SendAsync(meRequest, ct); var responseString = await response.Content.ReadAsStringAsync(ct); var responseJson = serializer.Deserialize <UserResponse>(responseString); var id = responseJson.Data?.Id; path = $"v1/users/{id}/posts"; } catch (Exception ex) { var requestDump = DumpFormatter.BuildDump(meRequest, response, ex.ToString()); return(Result.Failed(ex, requestDump)); } } return(await httpClient.OneWayRequestAsync(BuildPostRequest(job, path), job.RequestBody, ct)); } }
public override async Task <(string Dump, Exception Exception)> ExecuteJobAsync(RuleJobData job) { var requestBody = job["RequestBody"].ToString(Formatting.Indented); var requestMsg = BuildRequest(job, requestBody); HttpResponseMessage response = null; try { response = await HttpClientPool.GetHttpClient().SendAsync(requestMsg); var responseString = await response.Content.ReadAsStringAsync(); var requestDump = DumpFormatter.BuildDump(requestMsg, response, requestBody, responseString, TimeSpan.Zero, false); Exception ex = null; if (!response.IsSuccessStatusCode) { ex = new HttpRequestException($"Response code does not indicate success: {(int)response.StatusCode} ({response.StatusCode})."); } return(requestDump, ex); } catch (Exception ex) { if (requestMsg != null) { var requestDump = DumpFormatter.BuildDump(requestMsg, response, requestBody, ex.ToString(), TimeSpan.Zero, false); return(requestDump, ex); } else { throw; } } }
public override async Task <(string Dump, Exception Exception)> ExecuteJobAsync(RuleJobData job) { if (!job.TryGetValue("Key", out var keyToken)) { return(null, new InvalidOperationException("The action cannot handle this event.")); } var requestMsg = BuildRequest(job, keyToken.Value <string>()); HttpResponseMessage response = null; try { response = await HttpClientPool.GetHttpClient().SendAsync(requestMsg); var responseString = await response.Content.ReadAsStringAsync(); var requestDump = DumpFormatter.BuildDump(requestMsg, response, null, responseString, TimeSpan.Zero, false); return(requestDump, null); } catch (Exception ex) { if (requestMsg != null) { var requestDump = DumpFormatter.BuildDump(requestMsg, response, null, ex.ToString(), TimeSpan.Zero, false); return(requestDump, ex); } else { var requestDump = ex.ToString(); return(requestDump, ex); } } }
protected override async Task <(string Dump, Exception Exception)> ExecuteJobAsync(SlackJob job) { var requestBody = job.Body; var requestMessage = BuildRequest(job, requestBody); HttpResponseMessage response = null; try { response = await HttpClientPool.GetHttpClient().SendAsync(requestMessage); var responseString = await response.Content.ReadAsStringAsync(); var requestDump = DumpFormatter.BuildDump(requestMessage, response, requestBody, responseString, TimeSpan.Zero, false); return(requestDump, null); } catch (Exception ex) { var requestDump = DumpFormatter.BuildDump(requestMessage, response, requestBody, ex.ToString(), TimeSpan.Zero, false); return(requestDump, ex); } }
/// <summary> /// Dumps variables. /// </summary> /// <param name="ctx">Current runtime context.</param> /// <param name="variables">Variables to be dumped.</param> public static void var_dump(Context ctx, params PhpValue[] variables) { var formatter = new DumpFormatter(ctx, "\n"); // TODO: HtmlDumpFormatter for (int i = 0; i < variables.Length; i++) { ctx.Echo(formatter.Serialize(variables[i])); } }
private async Task <InvocationResponse> DispatchEventAsync(InvocationRequest input) { try { var payload = SignPayload(input.Payload, input.Webhook); var requestString = payload.ToString(Formatting.Indented); var responseString = string.Empty; var request = BuildRequest(requestString, input.Webhook); var response = (HttpResponseMessage)null; var isTimeout = false; var watch = Stopwatch.StartNew(); try { using (log.MeasureInformation(w => w .WriteProperty("action", "SendToHook") .WriteProperty("status", "Invoked") .WriteProperty("requestUrl", request.RequestUri.ToString()))) { using (var client = new HttpClient { Timeout = Timeout }) { response = await client.SendAsync(request); } } } catch (TimeoutException) { isTimeout = true; } catch (OperationCanceledException) { isTimeout = true; } finally { watch.Stop(); } if (response != null) { responseString = await response.Content.ReadAsStringAsync(); } var dump = DumpFormatter.BuildDump(request, response, requestString, responseString, watch.Elapsed); var result = WebhookResult.Fail; if (isTimeout) { result = WebhookResult.Timeout; } else if (response?.IsSuccessStatusCode == true) { result = WebhookResult.Success; } return(new InvocationResponse { Dump = dump, Result = result, Elapsed = watch.Elapsed, Webhook = input.Webhook }); } catch (Exception ex) { log.LogError(ex, w => w .WriteProperty("action", "SendToHook") .WriteProperty("status", "Failed")); return(null); } }