Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
        }