Class: Fluent::Plugin::NodeExporter::CMetricsDataSchemaParser

Inherits:
Object
  • Object
show all
Defined in:
lib/fluent/plugin/node_exporter/cmetrics_dataschema_parser.rb

Instance Method Summary collapse

Instance Method Details

#parse(metrics) ⇒ Object



23
24
25
26
27
28
29
30
31
32
33
34
# 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) ⇒ Object

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“=>}]..



47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# 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