class Fluent::Plugin::NodeExporter::CMetricsDataSchemaParser
Public Instance Methods
parse(metrics)
click to toggle source
# File lib/fluent/plugin/node_exporter/cmetrics_dataschema_parser.rb, line 23 def parse(metrics) data = [] begin metrics.each do |metric| next if metric["values"].empty? data << to_readable_hash(metric) end rescue => e raise Fluent::Plugin::Parser::ParserError.new(e.message) end data.flatten end
to_readable_hash(metrics)
click to toggle source
Parsed CMetrics Data Schema Format {
"name" => metrics name "time" => Fluent::EventTime "labels" => {"key" => value, ...} "value" => ...
}
“labels” field is optional. It is available when {“meta”=>“label_dictionary”…} and “labels” in “values” => [{“ts”=>…, “labels”=>}]..
# File lib/fluent/plugin/node_exporter/cmetrics_dataschema_parser.rb, line 47 def to_readable_hash(metrics) opts = metrics["meta"]["opts"] metric_name = if opts["ss"].size.zero? "#{opts['ns']}_#{opts['name']}" else "#{opts['ns']}_#{opts['ss']}_#{opts['name']}" end cmetrics = [] labels = [] unless metrics["meta"]["labels"].empty? metrics["meta"]["labels"].each do |v| labels << metrics["meta"]["label_dictionary"][v] end end metrics["values"].each do |entry| cmetric = { "name" => metric_name, "value" => entry["value"], "desc" => opts["desc"], "ts" => entry["ts"] } unless metrics["meta"]["labels"].empty? params = {} entry["labels"].each_with_index do |v, index| label = labels[index] params[label] = metrics["meta"]["label_dictionary"][v] end cmetric["labels"] = params end cmetrics << cmetric end cmetrics end