Sha256: b026184e367153532991acfaa21d88831c3ec54bb2836233329ca7c7e5841367
Contents?: true
Size: 1.8 KB
Versions: 2
Compression:
Stored size: 1.8 KB
Contents
module CollectdServer class Mapper attr_reader :metric_name, :timestamp, :value def self.parse(line) if klass = mapper_class(line) klass.parse(line) else warn "No Mapper found for '#{line}'" [] end end def initialize(metric_name, timestamp, value) @metric_name, @timestamp, @value = metric_name, timestamp, value end def to_datapoint %Q{"#{@metric_name}",#{@timestamp},#{@value}} end protected def self.mapper_class(line) self.subclasses.detect { |c| c.matches?(line) } end def self.plugin_name(line) _, collectd_type, *_ = line.split collectd_type.split('/')[1] end def self.parse_line(line) _, path, _, data = line.split(' ') timestamp, *values = data.split(':') return path, timestamp, values end def self.metric_name_from_type(collectd_type) @parts = collectd_type.split('/') @host = @parts[0] @plugin, @plugin_instance = @parts[1].split('-') @type, @type_instance = @parts[2].split('-') return [@host, @plugin, @plugin_instance, @type, @type_instance].join(',') end def self.subclasses @subclasses ||= [] end def self.inherited(subclass) subclasses << subclass end end class CPU < Mapper def self.matches?(line) plugin_name(line) =~ /cpu-[\d+]/ end def self.parse(line) path, timestamp, values = parse_line(line) metric_name = metric_name_from_type(path) values.map do |val| self.new(metric_name, timestamp, val) end end def self.metric_name_from_type(collectd_type) super # apollo, cpu, 0, idle [@host, @plugin, @plugin_instance, @type_instance].join(',') end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
absperf-collectd_server-0.1.0 | lib/collectd_server/mapper.rb |
absperf-collectd_server-0.1.1 | lib/collectd_server/mapper.rb |