This class is a simple Facade over the CloudWatch client. This class is a very small abstraction over the CloudWatch client. It allows us to change the details of how we're communicating with CloudWatch without the need to expose this in the rest of our code. It also provides a shim for us to be able to Mock to unit test the rest of the code
Class that handles sending metrics data to CloudWatch This class is responsible for emitting all the stored metrics to AWS CloudWatch. Metrics are published asynchronously using a thread. The thread waits on a condition variable and is signaled (by AWSCloudWatchMetricManager) whenever new metrics are available