private void UpdateMetrics()
{
if (!PopulateInstanceId())
return;
if (!PopulateRegion())
return;
List<Amazon.CloudWatch.Model.MetricDatum> metrics = new List<Amazon.CloudWatch.Model.MetricDatum>();
if (_isSubmitDiskSpaceAvailable ||
_isSubmitDiskSpaceUsed ||
_isSubmitDiskSpaceUtilization)
{
// Get the list of drives from the system
var drives = System.IO.DriveInfo.GetDrives();
foreach (var drive in drives)
{
AddDriveMetrics(drive, metrics);
}
}
if (_isSubmitMemoryAvailable ||
_isSubmitMemoryUsed ||
_isSubmitMemoryUtilization ||
_isSubmitPhysicalMemoryAvailable ||
_isSubmitPhysicalMemoryUsed ||
_isSubmitPhysicalMemoryUtilization ||
_isSubmitVirtualMemoryAvailable ||
_isSubmitVirtualMemoryUsed ||
_isSubmitVirtualMemoryUtilization)
{
SubmitMemoryMetrics(metrics);
}
Info("\tSubmitting metric data");
var client = CreateClient();
for (int skip = 0; ; skip += 20)
{
var metricsThisRound = metrics.Skip(skip).Take(20);
if (!metricsThisRound.Any())
break;
var request = new Amazon.CloudWatch.Model.PutMetricDataRequest()
{
Namespace = CloudWatchNamespace,
MetricData = metricsThisRound.ToList()
};
var response = client.PutMetricData(request);
}
// We don't care about the response
Info("Done.");
}