/// <inheritdoc /> public string Format(string context, MetricTags tags, GraphiteMetricName name) { var tagsDictionary = tags.Keys.Zip(tags.Values, (key, value) => new { key, value }) .ToDictionary(x => $"tag:{x.key}", x => x.value, StringComparer.OrdinalIgnoreCase); var unit = GraphiteMetricName.Escape(name.Unit.Name); var escapedName = string.Join(".", name.Folder.Select(x => GraphiteMetricName.Escape(x)).Where(x => !string.IsNullOrEmpty(x))); string nameWithUnit; if (string.IsNullOrEmpty(escapedName)) { nameWithUnit = unit; } else if (string.IsNullOrEmpty(unit) || escapedName.EndsWith(unit, StringComparison.OrdinalIgnoreCase)) { nameWithUnit = escapedName; } else { nameWithUnit = $"{escapedName}-{unit}"; } tagsDictionary["type"] = name.Type.ToString(); tagsDictionary["name"] = escapedName; tagsDictionary["unit"] = unit; tagsDictionary["nameWithUnit"] = nameWithUnit; tagsDictionary["context"] = context; return(Render(tagsDictionary)); }
private string Render(Dictionary <string, string> context) { var builder = new StringBuilder(); foreach (var token in _tokens) { builder.Append(GraphiteMetricName.Escape(token(context), true)); } return(Regex.Replace(builder.ToString().Trim('.'), "[.]{2,}", ".")); }