示例#1
0
        /// <summary>
        /// This method is called for every Lambda invocation. This method takes in an S3 event object and can be used
        /// to respond to S3 notifications.
        /// </summary>
        /// <param name="s3Event"></param>
        /// <param name="context"></param>
        /// <returns></returns>
        public async Task <string> FunctionHandler(S3Event s3Event, ILambdaContext context)
        {
            context.Logger.LogLine("S3 Event Function Handler");
            var s3CurrentEvent = s3Event.Records?[0].S3;

            if (s3CurrentEvent == null)
            {
                return(null);
            }
            try
            {
                string eventMessage;
                context.Logger.LogLine("Handler: Trying to GetObjectAsync from Amazon S3 Client");
                // Get the S3 object that trigger the event
                var response = await _amazonS3Client.GetObjectAsync(s3CurrentEvent.Bucket.Name, s3CurrentEvent.Object.Key);

                // read the response stream and  write your business logic what you want to do with event trigerred and data received.
                using (var stream = response.ResponseStream)
                {
                    var reader     = new StreamReader(stream);
                    var s3Document = reader.ReadToEnd();
                    reader.Dispose();
                    var jsonDoc = JsonConvert.DeserializeObject(s3Document);
                    var items   = JObject.Parse(jsonDoc.ToString());
                    eventMessage =
                        ($"Handler: Got Data from Key {s3CurrentEvent.Object.Key} for {items.SelectToken("event").Value<string>()}" +
                         $" with description {items.SelectToken("description").Value<string>()}");
                    context.Logger.LogLine(eventMessage);
                }

                // you can modify the SlackMessage message here, before sending it.
                await _slackClient.SendMessageAsync(_message, _webHookUri);

                context.Logger.LogLine($"Handler: Sent notification to channel {_message.Channel}");
                return(eventMessage);
            }
            catch (Exception e)
            {
                context.Logger.LogLine($"Error getting object {s3CurrentEvent.Object.Key} from bucket {s3CurrentEvent.Bucket.Name}. Make sure they exist and your bucket is in the same region as this function.");
                context.Logger.LogLine(e.Message);
                context.Logger.LogLine(e.StackTrace);
                throw;
            }
        }
示例#2
0
 public async Task Log(LogType logType, string message)
 {
     await _client.SendMessageAsync(message);
 }
示例#3
0
 public async Task AddAsync(T payload, CancellationToken cancellationToken = new CancellationToken())
 {
     await _slackClient.SendMessageAsync(payload);
 }