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)); }
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); }
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; })); }
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)); }