diff --git a/Src/Metrics/Graphite/GraphiteExtensions.cs b/Src/Metrics/Graphite/GraphiteExtensions.cs index f52d4689..9e2bff22 100644 --- a/Src/Metrics/Graphite/GraphiteExtensions.cs +++ b/Src/Metrics/Graphite/GraphiteExtensions.cs @@ -6,39 +6,41 @@ namespace Metrics { public static class GraphiteExtensions { - public static MetricsReports WithGraphite(this MetricsReports reports, Uri graphiteUri, TimeSpan interval) + public static MetricsReports WithGraphite(this MetricsReports reports, Uri graphiteUri, TimeSpan interval, + string metricNamePrefix = null) { if (graphiteUri.Scheme.ToLowerInvariant() == "net.tcp") { - return reports.WithTCPGraphite(graphiteUri.Host, graphiteUri.Port, interval); + return reports.WithTCPGraphite(graphiteUri.Host, graphiteUri.Port, interval, metricNamePrefix); } if (graphiteUri.Scheme.ToLowerInvariant() == "net.udp") { - return reports.WithUDPGraphite(graphiteUri.Host, graphiteUri.Port, interval); + return reports.WithUDPGraphite(graphiteUri.Host, graphiteUri.Port, interval, metricNamePrefix); } if (graphiteUri.Scheme.ToLowerInvariant() == "net.pickled") { - return reports.WithPickledGraphite(graphiteUri.Host, graphiteUri.Port, interval); + return reports.WithPickledGraphite(graphiteUri.Host, graphiteUri.Port, interval, PickleGraphiteSender.DefaultPickleJarSize, metricNamePrefix); } throw new ArgumentException("Graphite uri scheme must be either net.tcp or net.udp or net.pickled (ex: net.udp://graphite.myhost.com:2003 )", "graphiteUri"); } - public static MetricsReports WithPickledGraphite(this MetricsReports reports, string host, int port, TimeSpan interval, int batchSize = PickleGraphiteSender.DefaultPickleJarSize) + public static MetricsReports WithPickledGraphite(this MetricsReports reports, string host, int port, TimeSpan interval, int batchSize = PickleGraphiteSender.DefaultPickleJarSize, + string metricNamePrefix = null) { - return reports.WithGraphite(new PickleGraphiteSender(host, port, batchSize), interval); + return reports.WithGraphite(new PickleGraphiteSender(host, port, batchSize, metricNamePrefix), interval); } - public static MetricsReports WithTCPGraphite(this MetricsReports reports, string host, int port, TimeSpan interval) + public static MetricsReports WithTCPGraphite(this MetricsReports reports, string host, int port, TimeSpan interval, string metricNamePrefix = null) { - return reports.WithGraphite(new TcpGraphiteSender(host, port), interval); + return reports.WithGraphite(new TcpGraphiteSender(host, port, metricNamePrefix), interval); } - public static MetricsReports WithUDPGraphite(this MetricsReports reports, string host, int port, TimeSpan interval) + public static MetricsReports WithUDPGraphite(this MetricsReports reports, string host, int port, TimeSpan interval, string metricNamePrefix = null) { - return reports.WithGraphite(new UdpGraphiteSender(host, port), interval); + return reports.WithGraphite(new UdpGraphiteSender(host, port, metricNamePrefix), interval); } public static MetricsReports WithGraphite(this MetricsReports reports, GraphiteSender graphiteLink, TimeSpan interval) diff --git a/Src/Metrics/Graphite/GraphiteSender.cs b/Src/Metrics/Graphite/GraphiteSender.cs index 2a6929ae..95c419d4 100644 --- a/Src/Metrics/Graphite/GraphiteSender.cs +++ b/Src/Metrics/Graphite/GraphiteSender.cs @@ -4,9 +4,11 @@ namespace Metrics.Graphite { public abstract class GraphiteSender : IDisposable { + protected string MetricNamePrefix; public virtual void Send(string name, string value, string timestamp) { - var data = string.Concat(name, " ", value, " ", timestamp, "\n"); + var metricName = string.IsNullOrEmpty(MetricNamePrefix) ? name : string.Format("{0}.{1}", MetricNamePrefix, name); + var data = string.Concat(metricName, " ", value, " ", timestamp, "\n"); SendData(data); } diff --git a/Src/Metrics/Graphite/PickleGraphiteSender.cs b/Src/Metrics/Graphite/PickleGraphiteSender.cs index b101208b..c3653951 100644 --- a/Src/Metrics/Graphite/PickleGraphiteSender.cs +++ b/Src/Metrics/Graphite/PickleGraphiteSender.cs @@ -21,11 +21,12 @@ public sealed class PickleGraphiteSender : GraphiteSender private PickleJar jar = new PickleJar(); - public PickleGraphiteSender(string host, int port, int batchSize = DefaultPickleJarSize) + public PickleGraphiteSender(string host, int port, int batchSize = DefaultPickleJarSize, string metricNamePrefix = null) { this.host = host; this.port = port; this.pickleJarSize = batchSize; + this.MetricNamePrefix = metricNamePrefix; } public override void Send(string name, string value, string timestamp) diff --git a/Src/Metrics/Graphite/TcpGraphiteSender.cs b/Src/Metrics/Graphite/TcpGraphiteSender.cs index 47f91b0b..60c8dcdc 100644 --- a/Src/Metrics/Graphite/TcpGraphiteSender.cs +++ b/Src/Metrics/Graphite/TcpGraphiteSender.cs @@ -16,10 +16,11 @@ public sealed class TcpGraphiteSender : GraphiteSender private TcpClient client; - public TcpGraphiteSender(string host, int port) + public TcpGraphiteSender(string host, int port, string metricNamePrefix = null) { this.host = host; this.port = port; + this.MetricNamePrefix = metricNamePrefix; } protected override void SendData(string data) diff --git a/Src/Metrics/Graphite/UdpGraphiteSender.cs b/Src/Metrics/Graphite/UdpGraphiteSender.cs index 22cf8998..bad41e91 100644 --- a/Src/Metrics/Graphite/UdpGraphiteSender.cs +++ b/Src/Metrics/Graphite/UdpGraphiteSender.cs @@ -16,10 +16,11 @@ public sealed class UdpGraphiteSender : GraphiteSender private UdpClient client; - public UdpGraphiteSender(string host, int port) + public UdpGraphiteSender(string host, int port, string metricNamePrefix = null) { this.host = host; this.port = port; + this.MetricNamePrefix = metricNamePrefix; } protected override void SendData(string data) @@ -43,7 +44,7 @@ protected override void SendData(string data) } public override void Flush() - { + { } private static UdpClient InitClient(string host, int port)