示例#1
0
        /// <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));
        }
示例#2
0
        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,}", "."));
        }