public override async Task CallAsync <TRequest>(TRequest request, IDictionary <string, object> metadata, CancellationToken cancellationToken) { if (!(request is MessageData messageData)) { throw new Exception("injected wrong implementation"); } var uri = RequestBuilder.BuildUri(WebhookConfig, messageData.Payload); var httpMethod = RequestBuilder.SelectHttpMethod(WebhookConfig, messageData.Payload); var payload = RequestBuilder.BuildPayload(this.WebhookConfig, messageData.Payload, metadata); var config = RequestBuilder.SelectWebhookConfig(WebhookConfig, messageData.Payload); var headers = RequestBuilder.GetHttpHeaders(WebhookConfig, messageData); var authenticationConfig = RequestBuilder.GetAuthenticationConfig(WebhookConfig, messageData.Payload); var httpClient = HttpClientFactory.Get(config); await AddAuthenticationHeaderAsync(cancellationToken, authenticationConfig, headers); var response = await httpClient.SendRequestReliablyAsync(httpMethod, uri, headers, payload, cancellationToken); BigBrother.Publish( new WebhookEvent( messageData.EventHandlerActorId, messageData.Type, $"Response status code {response.StatusCode}", uri.AbsoluteUri, httpMethod, response.StatusCode, messageData.CorrelationId )); if (metadata == null) { metadata = new Dictionary <string, object>(); } else { metadata.Clear(); } var content = await response.Content.ReadAsStringAsync(); metadata.Add("HttpStatusCode", (int)response.StatusCode); metadata.Add("HttpResponseContent", content); //call callback var eswHandler = _eventHandlerFactory.CreateWebhookHandler(_subscriberConfiguration.Callback.Name); await eswHandler.CallAsync(messageData, metadata, cancellationToken); }
public override async Task Call <TRequest>(TRequest request, IDictionary <string, object> metadata = null) { if (!(request is MessageData messageData)) { throw new Exception("injected wrong implementation"); } if (WebhookConfig.AuthenticationConfig.Type != AuthenticationType.None) { await AcquireTokenHandler.GetToken(_client); } var uri = RequestBuilder.BuildUri(WebhookConfig, messageData.Payload); var httpVerb = RequestBuilder.SelectHttpVerb(WebhookConfig, messageData.Payload); var payload = RequestBuilder.BuildPayload(WebhookConfig, messageData.Payload, metadata); void TelemetryEvent(string msg) { BigBrother.Publish(new HttpClientFailure(messageData.Handle, messageData.Type, messageData.Payload, msg)); } var response = await _client.ExecuteAsJsonReliably(httpVerb, uri, payload, TelemetryEvent); BigBrother.Publish(new WebhookEvent(messageData.Handle, messageData.Type, messageData.Payload, response.IsSuccessStatusCode.ToString())); if (metadata == null) { metadata = new Dictionary <string, object>(); } else { metadata.Clear(); } var content = await response.Content.ReadAsStringAsync(); metadata.Add("HttpStatusCode", (int)response.StatusCode); metadata.Add("HttpResponseContent", content); BigBrother.Publish(new WebhookEvent(messageData.Handle, messageData.Type, content)); //call callback var eswHandler = _eventHandlerFactory.CreateWebhookHandler(_eventHandlerConfig.CallbackConfig.Name); await eswHandler.Call(messageData, metadata); }