예제 #1
0
        public async Task SendEvent(IHiarcEvent theEvent)
        {
            try
            {
                var accessKeyId     = _kinesisSettings.AccessKeyId;
                var secretAccessKey = _kinesisSettings.SecretAccessKey;
                var streamName      = _kinesisSettings.Stream;
                var partitionKey    = theEvent.Event;
                var kinesisClient   = new AmazonKinesisClient(accessKeyId, secretAccessKey, _region);

                var serializedEvent = JsonSerializer.Serialize(theEvent);
                using var memoryStream = new MemoryStream(Encoding.UTF8.GetBytes(theEvent.Event));

                var requestRecord = new PutRecordRequest()
                {
                    StreamName = streamName, PartitionKey = partitionKey, Data = memoryStream
                };
                var responseRecord = await kinesisClient.PutRecordAsync(requestRecord);

                _logger.LogDebug($"Successfully sent event '{theEvent.Event}' to '{this.Name}'. Payload: {serializedEvent}");
            }
            catch (Exception ex)
            {
                _logger.LogError($"Failed to send event '{theEvent.Event}' to '{this.Name}'. Exception: {ex.Message}");
            }
        }
예제 #2
0
 public async Task SendEvent(IHiarcEvent theEvent)
 {
     foreach (var es in _eventServices)
     {
         await Task.Run(() => {
             es.SendEvent(theEvent);
         });
     }
 }
예제 #3
0
        public async Task SendEvent(IHiarcEvent theEvent)
        {
            try
            {
                var serializedEvent = JsonSerializer.Serialize(theEvent);
                var httpContent     = new StringContent(serializedEvent);
                httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");

                if (!string.IsNullOrWhiteSpace(_webhookSettings.Secret))
                {
                    // TODO: https://stripe.com/docs/webhooks/signatures
                    var unixNow = DateTimeOffset.UtcNow.ToUnixTimeSeconds();
                    var payload = $"{unixNow}.{serializedEvent}";

                    var encoding  = new UTF8Encoding();
                    var keyBytes  = encoding.GetBytes(_webhookSettings.Secret);
                    var textBytes = encoding.GetBytes(payload);

                    using HMACSHA256 hash = new HMACSHA256(keyBytes);
                    var hashBytes  = hash.ComputeHash(textBytes);
                    var hashString = BitConverter.ToString(hashBytes).Replace("-", "").ToLower();
                    var signature  = $"t={unixNow},v1={hashString}";

                    httpContent.Headers.Add(HIARC_SIGNATURE, signature);
                }

                var response = await WebhookClient.PostAsync(_webhookSettings.URL, httpContent);

                if (response.IsSuccessStatusCode)
                {
                    _logger.LogDebug($"Successfully sent event '{theEvent.Event}' to '{this.Name}'. Payload: {serializedEvent}");
                }
                else
                {
                    var body = await response.Content.ReadAsStringAsync();

                    _logger.LogError($"Failed to send event to '{this.Name}'. Response Body: {body}");
                }
            }
            catch (Exception ex)
            {
                _logger.LogError($"Failed to send event to '{this.Name}'. Exception: {ex.Message}");
            }
        }
예제 #4
0
        public async Task SendEvent(IHiarcEvent theEvent)
        {
            try
            {
                var topicClient = new TopicClient(_serviceBusSettings.ConnectionString, _serviceBusSettings.Topic);

                var serializedEvent = JsonSerializer.Serialize(theEvent);
                var message         = new Message(Encoding.UTF8.GetBytes(serializedEvent))
                {
                    ContentType = "application/json",
                    MessageId   = Guid.NewGuid().ToString()
                };

                await topicClient.SendAsync(message);

                _logger.LogDebug($"Successfully sent event '{theEvent.Event}' to '{this.Name}'. Payload: {serializedEvent}");
            }
            catch (Exception ex)
            {
                _logger.LogError($"Failed to send event to '{this.Name}'. Exception: {ex.Message}");
            }
        }
예제 #5
0
        public async Task SendEvent(IHiarcEvent theEvent)
        {
            try
            {
                var serializedEvent = JsonSerializer.Serialize(theEvent);

                var topicName      = new TopicName(_pubSubSettings.ProjectId, _pubSubSettings.Topic);
                var sacByteArray   = Encoding.UTF8.GetBytes(_pubSubSettings.ServiceAccountCredential);
                var sacStream      = new MemoryStream(sacByteArray);
                var credential     = GoogleCredential.FromServiceAccountCredential(ServiceAccountCredential.FromServiceAccountData(sacStream));
                var createSettings = new ClientCreationSettings(credentials: credential.ToChannelCredentials());
                var publisher      = await CreateAsync(topicName, clientCreationSettings : createSettings);

                var messageId = await publisher.PublishAsync(serializedEvent);

                await publisher.ShutdownAsync(TimeSpan.FromSeconds(10));

                _logger.LogDebug($"Successfully sent event '{theEvent.Event}' to '{this.Name}'. Payload: {serializedEvent}");
            }
            catch (Exception ex)
            {
                _logger.LogError($"Failed to send event '{theEvent.Event}' to '{this.Name}'. Exception: {ex.Message}");
            }
        }