/// <summary> /// Sends the data asynchronously. /// </summary> /// <returns>A task.</returns> private async Task SendDataAsync() { // use a copy of the data so we can limit the time in the blocking state Amazon.CloudWatch.Model.MetricDatum[] copy = null; try { await semaphore.WaitAsync(); copy = new Amazon.CloudWatch.Model.MetricDatum[data.Count]; data.CopyTo(copy); data.Clear(); lastSend = DateTimeOffset.UtcNow; } finally { semaphore.Release(); } var t = Task.Factory.StartNew(() => { // send the metrics to AWS CloudWatch // NOTE: for now this is fire and forget cloudWatch.PutMetricDataAsync(new Amazon.CloudWatch.Model.PutMetricDataRequest { MetricData = copy.ToList(), Namespace = configuration.MetricNamespace }); }, TaskCreationOptions.LongRunning); }
private void RenderAWSMetricDatum(Amazon.CloudWatch.Model.MetricDatum metricDatum, TextWriter writer) { if (!String.IsNullOrEmpty(metricDatum.MetricName)) { writer.Write("MetricName: {0}, ", metricDatum.MetricName); } if (!String.IsNullOrEmpty(metricDatum.Unit)) { writer.Write("Unit: {0}, ", metricDatum.Unit); } if (metricDatum.StatisticValues == null) { writer.Write("Value: {0}, ", metricDatum.Value.ToString(CultureInfo.InvariantCulture)); } if (metricDatum.Dimensions != null && metricDatum.Dimensions.Any()) { writer.Write("Dimensions: {0}, ", String.Join(", ", metricDatum.Dimensions.Select( x => String.Format("{0}: {1}", x.Name, x.Value)).ToArray())); } if (metricDatum.Timestamp != default(DateTime)) { writer.Write("Timestamp: {0}, ", metricDatum.Timestamp.ToString(CultureInfo.CurrentCulture)); } if (metricDatum.StatisticValues != null) { if (metricDatum.StatisticValues.Maximum > 0) { writer.Write("Maximum: {0}, ", metricDatum.StatisticValues.Maximum.ToString(CultureInfo.InvariantCulture)); } writer.Write("Minimum: {0}, ", metricDatum.StatisticValues.Minimum.ToString(CultureInfo.InvariantCulture)); if (metricDatum.StatisticValues.SampleCount > 1) { writer.Write("SampleCount: {0}, ", metricDatum.StatisticValues.SampleCount.ToString(CultureInfo.InvariantCulture)); } if (metricDatum.StatisticValues.Sum > 0) { writer.Write("Sum: {0}, ", metricDatum.StatisticValues.Sum.ToString(CultureInfo.InvariantCulture)); } } }