public void Start()
        {
            try
            {
                var publisher = new AtlasMetricPublisher(config);
                var mon = DefaultMonitorRegistry.getInstance();
                var monitors = mon.getRegisteredMonitors();

                var monitorsFlatten = new List<IMonitor>();
                foreach (var monitor in monitors)
                {
                    var compositeMonitor = monitor as ICompositeMonitor;
                    if (ReferenceEquals(null, compositeMonitor) == false)
                        monitorsFlatten.AddRange(compositeMonitor.getMonitors());
                    else
                        monitorsFlatten.Add(monitor);
                }
                var timestamp = DateTime.UtcNow.GetCurrentUnixTimestampMillis();
                var metrics = monitorsFlatten.Select(x => new Metric(x.getConfig(), timestamp, x.GetValue()));

                AtlasMetrics atlasMetrics = new AtlasMetrics(metrics);
                publisher.Publish(atlasMetrics);
            }
            catch (Exception ex)
            {
                log.FatalException("Failed to execute task.", ex);
            }
            finally
            {
                ScheduledStart = DateTime.UtcNow.AddSeconds(10);
            }
        }
 public void Publish(AtlasMetrics metrics)
 {
     var request = new RestRequest(resourceLocation, Method.POST);
     request.AddJsonBody(metrics);
     var response = client.Execute(request);
     if (response.StatusCode != System.Net.HttpStatusCode.OK)
         log.ErrorException("Failed to push metrics. Details: " + response.Content, response.ErrorException);
 }