class DataNode

Attributes

autoupdater[R]
firmware[R]
hardware[R]
hostname[R]
sitecode[R]

Public Class Methods

new(data, links, alfred, timestamp) click to toggle source

@param [Hash] data @param [Links] links

# File bin/ffmapquery, line 145
def initialize(data, links, alfred, timestamp)
        @data = Hash.new
        @alfred = alfred
        # Der Hostname ist Teil eines Dateisystempfads und darf daher nur bestimmte Chars enthalten.
        @hostname = remove_unsafe_chars(data['nodeinfo']['hostname'])
        @groupname = nil
        begin
                @autoupdater = remove_unsafe_chars(data['nodeinfo']['software']['autoupdater']['branch'])
        rescue
                @autoupdater = 'Unbekannt'
        end
        begin
                @firmware = remove_unsafe_chars(data['nodeinfo']['software']['firmware']['release'])
        rescue
                @firmware = 'Unbekannt'
        end
        begin
                @hardware = remove_unsafe_chars(data['nodeinfo']['hardware']['model'])
                @hardware = 'Unbekannt' if @hardware.length < 1
        rescue
                @hardware = 'Unbekannt'
        end
        begin
                @sitecode = remove_unsafe_chars(data['nodeinfo']['system']['site_code'])
                @sitecode = 'default' if @sitecode.length < 1
        rescue
                @sitecode = 'default'
        end
        @node_id = data['nodeinfo']['node_id']
        data['flags']['online'] ? @data[:online] = 1 : @data[:online] = 0
        @data[:uptime] = data['statistics']['uptime'].to_i
        @data[:loadavg] = data['statistics']['loadavg'].to_f
        @data[:memory_usage] = data['statistics']['memory_usage'].to_f
        @data[:rootfs_usage] = data['statistics']['rootfs_usage'].to_f
        @data[:clients] = data['statistics']['clients'].to_f
        @links = links.link_list(data['nodeinfo']['node_id'])
        @data[:mesh], @data[:vpn] = links.links(@node_id)
        begin
                @mac = data['nodeinfo']['network']['mac']
                @data[:traffic_rx_bytes] = alfred[@mac.to_s + '.traffic_fastd.rx_bytes'] if alfred[@mac.to_s + '.traffic_fastd.rx_bytes']
                @data[:traffic_rx_packets] = alfred[@mac.to_s + '.traffic_fastd.rx_packets'] if alfred[@mac.to_s + '.traffic_fastd.rx_packets']
                @data[:traffic_tx_bytes] = alfred[@mac.to_s + '.traffic_fastd.tx_bytes'] if alfred[@mac.to_s + '.traffic_fastd.tx_bytes']
                @data[:traffic_tx_packets] = alfred[@mac.to_s + '.traffic_fastd.tx_packets'] if alfred[@mac.to_s + '.traffic_fastd.tx_packets']

                @data[:traffic_batman_rx_bytes] = data['statistics']['traffic']['rx']['bytes'].to_i
                @data[:traffic_batman_forward_bytes] = data['statistics']['traffic']['forward']['bytes'].to_i
                @data[:traffic_batman_tx_bytes] = data['statistics']['traffic']['tx']['bytes'].to_i
                @data[:traffic_batman_mgmttx_bytes] = data['statistics']['traffic']['mgmt_tx']['bytes'].to_i
                @data[:traffic_batman_mgmtrx_bytes] = data['statistics']['traffic']['mgmt_rx']['bytes'].to_i
        rescue
                # ignored
        end
        @timestamp = timestamp
end

Public Instance Methods

get_influx_lines(socket = nil) click to toggle source
# File bin/ffmapquery, line 202
def get_influx_lines(socket = nil)
        out = Array.new
        t = @timestamp.to_i.to_s
        measurement = "nodes"
        tags = "region=" + $C[:region]
        tags << ",domain=" + @sitecode
        tags << ",group=" + @groupname if @groupname
        tags << ",nodeid=" + @node_id
        tags << ",node=" + @hostname
        tags << ",autoupdater=" + @autoupdater
        tags << ",firmware=" + @firmware
        tags << ",hardware=" + @hardware
        fields = ""
        comma = ""
        @data.each_pair { | key, dp |
                fields << comma + $mapping[key] + "=" + dp.to_s
                comma = ","
        }
        line = "#{measurement},#{tags} #{fields} #{t}"
        out << line
        @links.each { | l |
                if $node_map[l.first]
                        line = "links"
                        line << ",group=#{@groupname}" if @groupname
                        line << ",region=#{$C[:region]},domain=#{@sitecode},linktype=#{l[2]},sourcenodeid=#{@node_id},sourcenode=#{@hostname},targetnodeid=#{l.first},targetnode=#{$node_map[l.first]},autoupdater=#{@autoupdater},firmware=#{@firmware},hardware=#{@hardware} tq=#{l[1].to_s} #{t}"
                        out << line
                end
        } if @links
        out
end
setGroup(groupname) click to toggle source
# File bin/ffmapquery, line 199
def setGroup(groupname)
        @groupname = groupname.to_s
end