void Writer(object sender, ElapsedEventArgs e)
{
try
{
var logEvents = new List<InputLogEvent>();
var more = true;
while (more)
{
InputLogEvent item;
more = items.TryTake(out item);
if (more)
logEvents.Add(item);
}
if (logEvents.Count == 0)
return;
if (!Settings.Default.SendUsageData)
return;
using (var logs = new AmazonCloudWatchLogsClient(AwsKeys.AccessKey, AwsKeys.SecretKey, RegionEndpoint.APSoutheast2))
{
var request = new PutLogEventsRequest(AwsKeys.GroupName, LogStreamName, logEvents);
var describeLogStreamsRequest = new DescribeLogStreamsRequest(AwsKeys.GroupName);
var describeLogStreamsResponse = logs.DescribeLogStreams(describeLogStreamsRequest);
var logStreams = describeLogStreamsResponse.LogStreams;
var logStream = logStreams.FirstOrDefault(ls => ls.LogStreamName == LogStreamName);
if (logStream != null)
{
var token = logStream.UploadSequenceToken;
request.SequenceToken = token;
checkResponse(logs.PutLogEvents(request));
}
else
{
var createRequest = new CreateLogStreamRequest(AwsKeys.GroupName, LogStreamName);
checkResponse(logs.CreateLogStream(createRequest));
checkResponse(logs.PutLogEvents(request));
}
}
}
catch(Exception ee)
{
TraceInfo.WriteLine(ee.Message);
TraceDebug.WriteLine(ee.StackTrace);
}
finally
{
if(timer != null)
timer.Start();
}
}