Пример #1
0
        public InstanceRegistry(InstanceRepository instanceRepository, ArtemisClientConfig config)
        {
            Preconditions.CheckArgument(instanceRepository != null, "instance repository");
            Preconditions.CheckArgument(config != null, "config");
            _instanceRepository = instanceRepository;
            _ttl      = config.ConfigurationManager.GetProperty(config.Key("instance-registry.instance-ttl"), 20 * 1000, 5 * 1000, 24 * 60 * 60 * 1000);
            _interval = config.ConfigurationManager.GetProperty(config.Key("instance-registry.heartbeat-interval"), 5 * 1000, 500, 5 * 60 * 1000);

            Action <WebSocket> onOpen = (webSocket) => {
            };
            Action <WebSocket, MessageEventArgs> onMessage = (webSocket, message) =>
            {
                AcceptHeartbeat(message);
            };

            _sessionContext = new WebSocketSessionContext(config, onOpen, onMessage);

            var heartbeatStatusMetricConfig = new MetricConfig(new Dictionary <string, string>()
            {
                { "metric_name_distribution", config.Key("heartbeat.event.distribution") }
            });

            _heartbeatStatus         = config.EventMetricManager.GetMetric(config.Key("heartbeat.event"), heartbeatStatusMetricConfig);
            _prepareHeartbeatLatency = config.AuditMetricManager.GetMetric(config.Key("heartbeat.prepare-latency"), new MetricConfig(new Dictionary <string, string>()
            {
                { "metric_name_distribution", config.Key("heartbeat.prepare-latency.distribution") }
            }));
            _sendHeartbeatLatency = config.AuditMetricManager.GetMetric(config.Key("heartbeat.send-latency"), new MetricConfig(new Dictionary <string, string>()
            {
                { "metric_name_distribution", config.Key("heartbeat.send-latency.distribution") }
            }));
            _acceptHeartbeatLatency = config.AuditMetricManager.GetMetric(config.Key("heartbeat.accept-latency"), new MetricConfig(new Dictionary <string, string>()
            {
                { "metric_name_distribution", config.Key("heartbeat.accept-latency.distribution") }
            }));

            _heartbeater = new DynamicTimer(config.ConfigurationManager.GetProperty(config.Key("instances-registry.heartbeat-interval.dynamic-scheduled-thread.run-interval"), 1000, 500, 90 * 1000),
                                            () =>
            {
                CheckHeartbeat();
            });
        }
Пример #2
0
        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);
            }
        }
Пример #3
0
        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);
        }
        /// <summary>
        /// ExportEvemtSamples is the shared logic for all event metric exports
        /// </summary>
        private void ExportEventSamples(StreamWriter writer, IEventMetricDefinition metricDefinition, IEventMetric metric)
        {
            writer.Write("\"Sequence\",\"Timestamp\"");
            foreach (var valueDefinition in metricDefinition.Values)
            {
                writer.Write(",\"{0}\"", valueDefinition.Caption);
            }
            writer.WriteLine();

            foreach (var sample in metric.Samples)
            {
                var eventSample = sample as IEventMetricSample;
                if (eventSample == null)
                    continue;

                writer.Write("{0},\"{1}\"", eventSample.Sequence, eventSample.Timestamp.ToString("yyyy-MM-dd HH:mm:ss"));
                for (var i = 0; i < eventSample.Values.Count(); i++)
                {
                    writer.Write(",\"{0}\"", eventSample.Values[i]);
                }
                writer.WriteLine();
            }
        }
        /// <summary>
        /// ExportEvemtSamples is the shared logic for all event metric exports
        /// </summary>
        private void ExportEventSamples(StreamWriter writer, IEventMetricDefinition metricDefinition, IEventMetric metric)
        {
            writer.Write("\"Sequence\",\"Timestamp\"");
            foreach (var valueDefinition in metricDefinition.Values)
            {
                writer.Write(",\"{0}\"", valueDefinition.Caption);
            }
            writer.WriteLine();

            foreach (var sample in metric.Samples)
            {
                var eventSample = sample as IEventMetricSample;
                if (eventSample == null)
                {
                    continue;
                }

                writer.Write("{0},\"{1}\"", eventSample.Sequence, eventSample.Timestamp.ToString("yyyy-MM-dd HH:mm:ss"));
                for (var i = 0; i < eventSample.Values.Count(); i++)
                {
                    writer.Write(",\"{0}\"", eventSample.Values[i]);
                }
                writer.WriteLine();
            }
        }
Пример #6
0
 private NullEventMetricManager()
 {
     Metrics = new IEventMetric[0];
     Config  = new MetricManagerConfig <IEventMetric>(NullEventMetricReporter.Instance);
 }