From 6edc9b752cc09a510a6604c9fcab11536c8704dc Mon Sep 17 00:00:00 2001 From: Simon Delamare <simon.delamare@ens-lyon.fr> Date: Wed, 20 May 2020 13:04:32 +0200 Subject: [PATCH] [lib] kwollect - populate clusters network metrics from network devices metrics content --- .../gen/puppet/templates/kwollect-network.erb | 1 - lib/refrepo/input_loader.rb | 35 +++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/lib/refrepo/gen/puppet/templates/kwollect-network.erb b/lib/refrepo/gen/puppet/templates/kwollect-network.erb index 9d7e9864fab..eedf37b4dde 100644 --- a/lib/refrepo/gen/puppet/templates/kwollect-network.erb +++ b/lib/refrepo/gen/puppet/templates/kwollect-network.erb @@ -12,7 +12,6 @@ neteq.fetch('metrics', []).each {|metric| next if lport.empty? port_uid = neteq['linecards'].length > 1 ? "#{linecard_uid}_#{lport_uid}" : lport_uid port_name = lport['snmp_name'] - # TODO: Handle secondary interface port_node = lport['uid'] labels = lport['kind'] == 'node' ? {'interface': lport['port']} : {} labels.update({'_device_alias': port_node}) diff --git a/lib/refrepo/input_loader.rb b/lib/refrepo/input_loader.rb index 1101da4751d..86e71abc1ad 100644 --- a/lib/refrepo/input_loader.rb +++ b/lib/refrepo/input_loader.rb @@ -60,6 +60,9 @@ def load_yaml_file_hierarchy(directory = File.expand_path("../../input/grid5000/ # populate each node with software informations add_software(global_hash) + # populate each cluster with metrics network information + add_network_metrics(global_hash) + return global_hash end @@ -221,3 +224,35 @@ def add_software(h) end end end + +def add_network_metrics(h) + # for each cluster + h['sites'].each_pair do |site_uid, site| + site['clusters'].each_pair do |cluster_uid, cluster| + + # remove any network metrics defined in cluster + cluster['metrics'] = cluster.fetch('metrics', []).reject {|m| m['name'] =~ /network_.*_bytes_total/} + + # for each interface of a cluster's node + node_uid, node = cluster['nodes'].first + node["network_adapters"].each do |iface_uid, iface| + + # get switch attached to interface + if iface['mounted'] and not iface['management'] and iface['interface'] == 'Ethernet' + switch, _ = net_switch_port_lookup(site, node_uid, iface_uid) || net_switch_port_lookup(site, node_uid) + else + switch, _ = net_switch_port_lookup(site, node_uid, iface_uid) + end + + # for each network metric declared for the switch + site.fetch('networks', {}).fetch(switch, {}).fetch('metrics', []).select{|m| m['name'] =~ /network_.*_bytes_total/}.each do |metric| + + # add this metric to cluster's list of available metrics, associated to node interface + cluster['metrics'].push(metric.merge( + {"labels": {"interface": iface_uid}, "source": {"protocol": "network_equipment"}} + )) + end + end + end + end +end -- GitLab