protected virtual void AcceptHeartbeat(MessageEventArgs message)
 {
     try
     {
         HeartbeatResponse response = message.Data.FromJson <HeartbeatResponse>();
         if (response.ResponseStatus == null)
         {
             _heartbeatStatus.AddEvent("null");
         }
         else
         {
             _heartbeatStatus.AddEvent(response.ResponseStatus.Status);
         }
         _acceptHeartbeatLatency.AddValue(DateTimeUtils.CurrentTimeInMilliseconds - _heartbeatAcceptStartTime);
         if (response.ResponseStatus.IsServiceDown())
         {
             _sessionContext.Markdown();
         }
         if (response.ResponseStatus.IsFail())
         {
             _log.Warn("heartbeat failed: " + response.ResponseStatus.Message);
         }
         else if (response.ResponseStatus.isPartialFail())
         {
             _log.Info("heartbeat partial failed: " + response.ResponseStatus.Message);
         }
         Register(response.FailedInstances);
     }
     catch (Exception e)
     {
         _log.Warn("handle heartbeat message failed", e);
     }
 }
        protected void LogEvent(ResponseStatus status, string service, string operation)
        {
            string metricId = _distributionMetricName + "|" + service + "|" + operation;
            Dictionary <string, string> metadata = new Dictionary <string, string>()
            {
                { "metric_name_distribution", _distributionMetricName },
                { "service", service },
                { "operation", operation }
            };
            IEventMetric metric = _eventMetricManager.GetMetric(metricId, new MetricConfig(metadata));

            if (status == null)
            {
                metric.AddEvent("null");
            }
            else
            {
                metric.AddEvent(status.ErrorCode);
            }
        }
        private void Metric(string changeType, bool updated, Instance instance)
        {
            if (string.IsNullOrWhiteSpace(changeType) || instance == null)
            {
                return;
            }

            string metricId = "service-discovery." + changeType + "." + updated + "." + instance;

            Dictionary <string, string> metadata = new Dictionary <string, string>();

            metadata["metric_name_distribution"] = _serviceDiscoveryMetricName;
            metadata["regionId"]   = instance.RegionId;
            metadata["zoneId"]     = instance.ZoneId;
            metadata["serviceId"]  = instance.ServiceId;
            metadata["updated"]    = updated ? "true" : "false";
            metadata["instanceId"] = instance.InstanceId;

            IEventMetric metric = _eventMetricManager.GetMetric(metricId, new MetricConfig(metadata));

            metric.AddEvent(changeType);
        }