Example #1
0
        public IEnumerable <IMetricDefinition> GetMetricDefinitions()
        {
            byte[] buffer;
            using (var webClient = new WebClient())
            {
                if (credentials != null)
                {
                    webClient.Credentials = credentials;
                }

                buffer = webClient.DownloadData(uri);
            } // using

            Overview overview;

            using (var memoryStream = new MemoryStream(buffer))
                overview = (Overview)jsonSerializer.ReadObject(memoryStream);

            Func <string, Func <double>, MetricDefinition> metricDefinition =
                (s, vp) => new MetricDefinition(MetricNameBuilder.BuildMetricName(name, s), vp, aggregationStrategy);

            yield return(metricDefinition("message_stats.ack", () => overview.MessageStats.Ack));

            yield return(metricDefinition("message_stats.ack_details.rate", () => overview.MessageStats.AckDetails.Rate));

            yield return(metricDefinition("message_stats.deliver", () => overview.MessageStats.Deliver));

            yield return(metricDefinition("message_stats.deliver_details.rate", () => overview.MessageStats.DeliverDetails.Rate));

            yield return(metricDefinition("message_stats.redeliver", () => overview.MessageStats.Redeliver));

            yield return(metricDefinition("message_stats.redeliver_details.rate", () => overview.MessageStats.RedeliverDetails.Rate));

            yield return(metricDefinition("queue_totals.messages", () => overview.QueueTotals.Messages));

            yield return(metricDefinition("queue_totals.messages_details.rate", () => overview.QueueTotals.MessagesDetails.Rate));

            yield return(metricDefinition("queue_totals.messages_ready", () => overview.QueueTotals.MessagesReady));

            yield return(metricDefinition("queue_totals.messages_ready_details.rate", () => overview.QueueTotals.MessagesReadyDetails.Rate));

            yield return(metricDefinition("queue_totals.messages_unacknowledged", () => overview.QueueTotals.MessagesUnacknowledged));

            yield return(metricDefinition("queue_totals.messages_unacknowledged_details.rate", () => overview.QueueTotals.MessagesUnacknowledgedDetails.Rate));

            yield return(metricDefinition("object_totals.consumers", () => overview.ObjectTotals.Consumers));

            yield return(metricDefinition("object_totals.queues", () => overview.ObjectTotals.Queues));

            yield return(metricDefinition("object_totals.exchanges", () => overview.ObjectTotals.Exchanges));

            yield return(metricDefinition("object_totals.connections", () => overview.ObjectTotals.Connections));

            yield return(metricDefinition("object_totals.channels", () => overview.ObjectTotals.Channels));
        }
Example #2
0
        internal static string NormalizeWcfPerformanceCounterName(string counterName)
        {
            //
            // See this:
            // * https://msdn.microsoft.com/en-us/library/ms731087(v=vs.110).aspx
            // * https://msdn.microsoft.com/en-us/library/ms735098.aspx
            // * http://stackoverflow.com/q/41393811/60188
            var serviceName        = counterName.SubstringBefore("@").Replace('.', '_');
            var serviceBaseAddress = counterName.SubstringAfter("@").Trim('|').Replace('.', '_');

            var normalizedCounterName = string.Format("{0}.{1}",
                                                      MetricNameBuilder.SanitizeMetricName(serviceName).ToLowerInvariant(),
                                                      MetricNameBuilder.SanitizeMetricName(serviceBaseAddress).ToLowerInvariant());

            while (normalizedCounterName.Contains("__"))
            {
                normalizedCounterName = normalizedCounterName.Replace("__", "_");
            }

            return(normalizedCounterName);
        }
Example #3
0
        private IEnumerable <IMetricDefinition> CreatePerformanceCounterMetricDefinition(MetricConfigurationElement metric,
                                                                                         Func <string, string> metricNameProcessor)
        {
            return(ParsePerformanceCounters(metric.Path).Select(pc => {
                var name = metric.Name;

                if (!string.IsNullOrWhiteSpace(pc.Item1) && name.Contains("**"))
                {
                    var fragment = MetricNameBuilder.SanitizeMetricName(metricNameProcessor(pc.Item1)).ToLowerInvariant();

                    fragment = fragment.Trim('_');
                    while (fragment.Contains("__"))
                    {
                        fragment = fragment.Replace("__", "_");
                    }

                    name = name.Replace("**", fragment);
                } // if

                var metricDefinition = new PerformanceCounterMetricDefinition(name, () => pc.Item2.NextValue(), metric.AggregationStrategy);
                return metricDefinition;
            }));
        }
Example #4
0
        public IEnumerable <IMetricDefinition> GetMetricDefinitions()
        {
            using (var tcpClient = new TcpClient())
            {
                tcpClient.Connect(uri.Host, uri.Port);

                using (var networkStream = tcpClient.GetStream())
                {
                    WriteString(networkStream, "stats\n");

                    var stats =
                        ReadStrings(networkStream).
                        TakeWhile(s => !s.Equals("END", StringComparison.InvariantCultureIgnoreCase)).
                        Where(s => s.StartsWith("STAT ")).
                        Select(s => s.SubstringAfter("STAT ")).
                        Select(s => s.Split(' '));

                    foreach (var stat in stats)
                    {
                        long value;
                        if (!long.TryParse(stat[1], out value))
                        {
                            continue;
                        }

                        var metric = stat[0];

                        yield return(new MetricDefinition(
                                         MetricNameBuilder.BuildMetricName(name, metric),
                                         () => value,
                                         aggregationStrategy));
                    } // foreach

                    WriteString(networkStream, "quit\n");
                } // using
            }     // using
        }
 public string BuildMetricName(string @namespace, string name)
 {
     return(MetricNameBuilder.BuildMetricName(@namespace, name));
 }