diff --git a/Gemfile b/Gemfile index 4a24572..743fd6c 100644 --- a/Gemfile +++ b/Gemfile @@ -1,7 +1,7 @@ -source "https://rubygems.org" +source 'https://rubygems.org' group :test do - gem 'simplecov',"~> 0.16.1", require: false + gem 'simplecov', '~> 0.16.1', require: false end gemspec diff --git a/Rakefile b/Rakefile index 88acd6b..15001f9 100644 --- a/Rakefile +++ b/Rakefile @@ -1,7 +1,7 @@ -require "bundler" +require 'bundler' Bundler::GemHelper.install_tasks -require "rake/testtask" +require 'rake/testtask' require 'rake/clean' CLEAN.concat FileList[ @@ -10,8 +10,8 @@ CLEAN.concat FileList[ ] Rake::TestTask.new(:test) do |t| - t.libs.push("lib", "test") - t.test_files = FileList["test/**/test_*.rb"] + t.libs.push('lib', 'test') + t.test_files = FileList['test/**/test_*.rb'] t.verbose = true t.warning = false end @@ -20,8 +20,8 @@ task default: [:test] namespace :docker do desc 'Build docker image' - task :build, [:tag] => :build do |t, args| - raise "Argument `tag` was not provided." unless args.tag + task :build, [:tag] => :build do |_t, args| + raise 'Argument `tag` was not provided.' unless args.tag cp Dir['pkg/fluent-plugin-kubernetes-metrics-*.gem'], 'docker/' sh "docker build --no-cache -t splunk/connect-for-kubernetes:#{args.tag} ./docker" diff --git a/VERSION b/VERSION new file mode 100644 index 0000000..1cc5f65 --- /dev/null +++ b/VERSION @@ -0,0 +1 @@ +1.1.0 \ No newline at end of file diff --git a/fluent-plugin-kubernetes-metrics.gemspec b/fluent-plugin-kubernetes-metrics.gemspec index bcb2cb9..c01d7f9 100644 --- a/fluent-plugin-kubernetes-metrics.gemspec +++ b/fluent-plugin-kubernetes-metrics.gemspec @@ -1,32 +1,29 @@ -lib = File.expand_path("../lib", __FILE__) +lib = File.expand_path('lib', __dir__) $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib) Gem::Specification.new do |spec| - spec.name = "fluent-plugin-kubernetes-metrics" - spec.version = "1.1.0.Alpha" - spec.authors = ["Don Tregonning", "Chaitanya Phalak"] - spec.email = ["team-da-sf@splunk.com"] - - spec.summary = %q{A fluentd input plugin that collects kubernetes cluster metrics.} - spec.description = %q{A fluentd input plugin that collects node and container metrics from a kubernetes cluster via summary API.} - spec.homepage = "https://github.com/splunk/fluent-plugin-kubernetes-metrics" - spec.license = "Apache-2.0" - + spec.name = 'fluent-plugin-kubernetes-metrics' + spec.version = File.read('VERSION') + spec.authors = ['Splunk Inc.'] + spec.email = ['DataEdge@splunk.com'] + spec.summary = 'A fluentd input plugin that collects kubernetes cluster metrics.' + spec.description = 'A fluentd input plugin that collects node and container metrics from a kubernetes cluster.' + spec.homepage = 'https://github.com/splunk/fluent-plugin-kubernetes-metrics' + spec.license = 'Apache-2.0' test_files, files = `git ls-files -z`.split("\x0").partition do |f| f.match(%r{^(test|spec|features)/}) end spec.files = files spec.executables = files.grep(%r{^bin/}) { |f| File.basename(f) } spec.test_files = test_files - spec.require_paths = ["lib"] - - spec.add_development_dependency "bundler", "~> 2.0.1" - spec.add_development_dependency "rake", "~> 12.3.2" - spec.add_development_dependency "test-unit", "~> 3.3.0" - spec.add_development_dependency "simplecov", "~> 0.16.1" - spec.add_development_dependency "webmock", "~> 3.5.1" - spec.add_runtime_dependency "fluentd", "~> 1.3.3" - spec.add_runtime_dependency "kubeclient", "~> 4.2.2" - spec.add_runtime_dependency "multi_json", "~> 1.13.1" - spec.add_runtime_dependency "oj", "~> 3.7.8" -end \ No newline at end of file + spec.require_paths = ['lib'] + spec.add_development_dependency 'bundler', '~> 2.0.1' + spec.add_development_dependency 'rake', '~> 12.3.2' + spec.add_development_dependency 'simplecov', '~> 0.16.1' + spec.add_development_dependency 'test-unit', '~> 3.3.0' + spec.add_development_dependency 'webmock', '~> 3.5.1' + spec.add_runtime_dependency 'fluentd', '~> 1.3.3' + spec.add_runtime_dependency 'kubeclient', '~> 4.2.2' + spec.add_runtime_dependency 'multi_json', '~> 1.13.1' + spec.add_runtime_dependency 'oj', '~> 3.7.8' +end diff --git a/lib/fluent/plugin/in_kubernetes_metrics.rb b/lib/fluent/plugin/in_kubernetes_metrics.rb index 7475f6d..fb7c835 100644 --- a/lib/fluent/plugin/in_kubernetes_metrics.rb +++ b/lib/fluent/plugin/in_kubernetes_metrics.rb @@ -214,7 +214,7 @@ def initialize_rest_client if @ca_file.nil? && File.exist?(secret_ca_file) @ca_file = secret_ca_file end - if @bearer_token_file.nil? and File.exist?(secret_token_file) + if @bearer_token_file.nil? && File.exist?(secret_token_file) @bearer_token_file = secret_token_file end end @@ -226,9 +226,9 @@ def initialize_rest_client def set_ssl_options if @use_rest_client_ssl ssl_options = { - ssl_ca_file: @ca_file, - verify_ssl: @insecure_ssl ? OpenSSL::SSL::VERIFY_NONE : OpenSSL::SSL::VERIFY_PEER, - headers: {:Authorization => 'Bearer ' + File.read(@bearer_token_file)} + ssl_ca_file: @ca_file, + verify_ssl: @insecure_ssl ? OpenSSL::SSL::VERIFY_NONE : OpenSSL::SSL::VERIFY_PEER, + headers: { Authorization: 'Bearer ' + File.read(@bearer_token_file) } } else ssl_options = {} @@ -239,21 +239,21 @@ def set_ssl_options # This method is used to set the options for sending a request to the kubelet api def request_options options = { method: 'get', url: @kubelet_url } - options = options.merge(set_ssl_options()) + options = options.merge(set_ssl_options) options end # This method is used to set the options for sending a request to the stats api def request_options_stats options = { method: 'get', url: @kubelet_url_stats } - options = options.merge(set_ssl_options()) + options = options.merge(set_ssl_options) options end # This method is used to set the options for sending a request to the cadvisor api def cadvisor_request_options options = { method: 'get', url: @cadvisor_url } - options = options.merge(set_ssl_options()) + options = options.merge(set_ssl_options) options end @@ -361,7 +361,7 @@ def emit_system_container_metrics(node_name, container) end def emit_stats_breakdown(stats) - stats_latest = stats[-1] + stats_latest = stats[-1] tag = 'node' labels = { 'node' => @node_name } stats_timestamp = parse_time stats_latest['timestamp'] @@ -410,84 +410,83 @@ def emit_cpu_metrics_stats(tag:, metrics:, labels:, time:) if cpu_cfs_throttled_time = metrics['cfs']['throttled_time'] router.emit generate_tag("#{tag}.cpu.cfs.throttled_time"), time, labels.merge('value' => cpu_cfs_throttled_time) end - if cpu_load_average = metrics['load_average'] + if cpu_load_average = metrics['load_average'] router.emit generate_tag("#{tag}.cpu.load_average"), time, labels.merge('value' => cpu_load_average) end end def emit_diskio_metrics_stats(tag:, metrics:, labels:, time:) - %w[io_service_bytes io_serviced io_queued sectors io_service_time io_wait_time io_merged io_time ].each do |metric_name| - if current_io_metric = metrics[metric_name] - current_io_metric.each do |device| - if diskio_io_service_bytes_major = device['major'] - router.emit generate_tag("#{tag}.diskio".concat(metric_name).concat(".major.")), time, labels.merge('device' => device['device'], 'value' => diskio_io_service_bytes_major) + %w[io_service_bytes io_serviced io_queued sectors io_service_time io_wait_time io_merged io_time].each do |metric_name| + next unless current_io_metric = metrics[metric_name] + + current_io_metric.each do |device| + if diskio_io_service_bytes_major = device['major'] + router.emit generate_tag("#{tag}.diskio".concat(metric_name).concat('.major.')), time, labels.merge('device' => device['device'], 'value' => diskio_io_service_bytes_major) end - if diskio_io_service_bytes_minor = device['minor'] - router.emit generate_tag("#{tag}.diskio".concat(metric_name).concat(".minor.")), time, labels.merge('device' => device['device'], 'value' => diskio_io_service_bytes_minor) + if diskio_io_service_bytes_minor = device['minor'] + router.emit generate_tag("#{tag}.diskio".concat(metric_name).concat('.minor.')), time, labels.merge('device' => device['device'], 'value' => diskio_io_service_bytes_minor) end device_stats = device['stats'] - device_stats.each do | device_stat | + device_stats.each do |device_stat| device_key, device_value = device_stat - router.emit generate_tag("#{tag}.diskio.".concat(metric_name).concat(".stats.").concat(device_key)), time, labels.merge('device' => device['device'], 'value' => device_value) + router.emit generate_tag("#{tag}.diskio.".concat(metric_name).concat('.stats.').concat(device_key)), time, labels.merge('device' => device['device'], 'value' => device_value) end - end end end end def emit_memory_metrics_stats(tag:, metrics:, labels:, time:) - %w[usage max_usage cache rss swap working_set failcnt].each do | metric_name | - if current_memory_metric = metrics[metric_name] + %w[usage max_usage cache rss swap working_set failcnt].each do |metric_name| + if current_memory_metric = metrics[metric_name] router.emit generate_tag("#{tag}.memory.".concat(metric_name)), time, labels.merge('value' => current_memory_metric) end - end - %w[container_data hierarchical_data ].each do | metric_name_group | - if current_memory_metric_group = metrics[metric_name_group] - current_memory_metric_group.each do | metric_name | - metric_key, metric_value = metric_name - router.emit generate_tag("#{tag}.memory.".concat(metric_name_group).concat(".").concat(metric_key)), time, labels.merge('value' => metric_value) - end + %w[container_data hierarchical_data].each do |metric_name_group| + next unless current_memory_metric_group = metrics[metric_name_group] + + current_memory_metric_group.each do |metric_name| + metric_key, metric_value = metric_name + router.emit generate_tag("#{tag}.memory.".concat(metric_name_group).concat('.').concat(metric_key)), time, labels.merge('value' => metric_value) end end end def emit_network_metrics_stats(tag:, metrics:, labels:, time:) network_name = metrics['name'] - %w[rx_bytes rx_packets rx_errors rx_dropped tx_bytes tx_packets tx_errors tx_dropped].each do | metric_name | + %w[rx_bytes rx_packets rx_errors rx_dropped tx_bytes tx_packets tx_errors tx_dropped].each do |metric_name| if current_network_metric = metrics[metric_name] - router.emit generate_tag("#{tag}.network.".concat(network_name).concat(".").concat(metric_name)), time, labels.merge('value' => current_network_metric) + router.emit generate_tag("#{tag}.network.".concat(network_name).concat('.').concat(metric_name)), time, labels.merge('value' => current_network_metric) end end if network_interfaces = metrics['interfaces'] - network_interfaces.each do | current_interface | + network_interfaces.each do |current_interface| name = current_interface['name'] - %w[rx_bytes rx_packets rx_errors rx_dropped tx_bytes tx_packets tx_errors tx_dropped].each do | current_metric| + %w[rx_bytes rx_packets rx_errors rx_dropped tx_bytes tx_packets tx_errors tx_dropped].each do |current_metric| if metric_value = current_interface[current_metric] - router.emit generate_tag("#{tag}.network.".concat(name).concat(".").concat(current_metric)), time, labels.merge('value' => metric_value) + router.emit generate_tag("#{tag}.network.".concat(name).concat('.').concat(current_metric)), time, labels.merge('value' => metric_value) end end end end - %w[tcp tcp6 udp udp6].each do | metric_name_group | - if metric_group = metrics[metric_name_group] - metric_group.each do |current_metric| - metric_key, metric_value = current_metric - router.emit generate_tag("#{tag}.network.".concat(metric_name_group).concat(".").concat(metric_key)), time, labels.merge('value' => metric_value) - end + %w[tcp tcp6 udp udp6].each do |metric_name_group| + next unless metric_group = metrics[metric_name_group] + + metric_group.each do |current_metric| + metric_key, metric_value = current_metric + router.emit generate_tag("#{tag}.network.".concat(metric_name_group).concat('.').concat(metric_key)), time, labels.merge('value' => metric_value) end end end def emit_filesystem_metrics_stats(tag:, metrics:, labels:, time:) - metrics.each do | file_system | + metrics.each do |file_system| device = file_system['device'] type = file_system['type'] - file_system.each do | file_metric | - file_key , file_value = file_metric - if not ['device', 'type', 'has_inodes'].include? file_key + file_system.each do |file_metric| + file_key, file_value = file_metric + unless %w[device type has_inodes].include? file_key router.emit generate_tag("#{tag}.filesystem.".concat(file_key)), time, labels.merge('device' => device, 'type' => type, 'value' => file_value) end end @@ -495,7 +494,7 @@ def emit_filesystem_metrics_stats(tag:, metrics:, labels:, time:) end def emit_tasks_stats_metrics_stats(tag:, metrics:, labels:, time:) - metrics.each do | task_stats | + metrics.each do |task_stats| task_key, task_value = task_stats router.emit generate_tag("#{tag}.tasks_stats.".concat(task_key)), time, labels.merge('value' => task_value) end @@ -573,36 +572,34 @@ def emit_stats_metrics(metrics) def emit_cadvisor_metrics(metrics) metrics = metrics.split("\n") - for metric in metrics - if metric.include? "container_name=" - if metric.match(/^((?!container_name="").)*$/) && metric[0] != '#' - metric_str, metric_val = metric.split(" ") - if metric_val.kind_of? String - metric_val = metric_val.to_f - end - first_occur = metric_str.index('{') - metric_name = metric_str[0..first_occur-1] - pod_name = metric.match(/pod_name="\S*"/).to_s - pod_name = pod_name.split('"')[1] - image_name = metric.match(/image="\S*"/).to_s - image_name = image_name.split('"')[1] - namespace = metric.match(/namespace="\S*"/).to_s - namespace = namespace.split('"')[1] - metric_labels = {'pod_name' => pod_name, 'image' => image_name, 'namespace' => namespace, 'value' => metric_val, 'node' => @node_name} - if metric.match(/^((?!container_name="POD").)*$/) - tag = 'pod' - tag = generate_tag("#{tag}#{metric_name.gsub('_', '.')}") - tag = tag.gsub('container', '') - else - container_name = metric.match(/container_name="\S*"/).to_s - container_name = container_name.split('"')[1] - container_label = {'container_name' => container_name} - metric_labels.merge(container_label) - tag = generate_tag("#{metric_name.gsub('_', '.')}") - end - router.emit tag, @scraped_at_cadvisor, metric_labels - end + metrics.each do |metric| + next unless metric.include? 'container_name=' + + next unless metric.match(/^((?!container_name="").)*$/) && metric[0] != '#' + + metric_str, metric_val = metric.split(' ') + metric_val = metric_val.to_f if metric_val.is_a? String + first_occur = metric_str.index('{') + metric_name = metric_str[0..first_occur - 1] + pod_name = metric.match(/pod_name="\S*"/).to_s + pod_name = pod_name.split('"')[1] + image_name = metric.match(/image="\S*"/).to_s + image_name = image_name.split('"')[1] + namespace = metric.match(/namespace="\S*"/).to_s + namespace = namespace.split('"')[1] + metric_labels = { 'pod_name' => pod_name, 'image' => image_name, 'namespace' => namespace, 'value' => metric_val, 'node' => @node_name } + if metric =~ /^((?!container_name="POD").)*$/ + tag = 'pod' + tag = generate_tag("#{tag}#{metric_name.tr('_', '.')}") + tag = tag.gsub('container', '') + else + container_name = metric.match(/container_name="\S*"/).to_s + container_name = container_name.split('"')[1] + container_label = { 'container_name' => container_name } + metric_labels.merge(container_label) + tag = generate_tag(metric_name.tr('_', '.').to_s) end + router.emit tag, @scraped_at_cadvisor, metric_labels end end diff --git a/test/helper.rb b/test/helper.rb index 8b60880..54985c2 100644 --- a/test/helper.rb +++ b/test/helper.rb @@ -1,12 +1,12 @@ require 'simplecov' SimpleCov.start -$LOAD_PATH.unshift(File.expand_path("../../", __FILE__)) -require "test-unit" -require "fluent/test" -require "fluent/test/driver/input" -require "fluent/test/helpers" -require "webmock/test_unit" +$LOAD_PATH.unshift(File.expand_path('..', __dir__)) +require 'test-unit' +require 'fluent/test' +require 'fluent/test/driver/input' +require 'fluent/test/helpers' +require 'webmock/test_unit' # require "minitest/autorun" # require "webmock/minitest" @@ -14,16 +14,32 @@ Test::Unit::TestCase.include(Fluent::Test::Helpers) Test::Unit::TestCase.extend(Fluent::Test::Helpers) -#WebMock.allow_net_connect! +# WebMock.allow_net_connect! module PluginTestHelper + def k8s_host + 'generics-aws-node-name' + end + + def k8s_port + '10255' + end + + def k8s_url(path = 'api') + "https://#{k8s_host}:#{k8s_port}/#{path}" + end + + def kubelet_summary_api_url + 'http://generics-aws-node-name:10255/stats/summary' + end - def k8s_host() "generics-aws-node-name" end - def k8s_port() "10255" end - def k8s_url(path='api') "https://#{k8s_host}:#{k8s_port}/#{path}" end - def kubelet_summary_api_url() "http://generics-aws-node-name:10255/stats/summary" end - def kubelet_stats_api_url() "http://generics-aws-node-name:10255/stats/" end - def kubelet_cadvisor_api_url() "http://generics-aws-node-name:10255/metrics/cadvisor" end + def kubelet_stats_api_url + 'http://generics-aws-node-name:10255/stats/' + end + + def kubelet_cadvisor_api_url + 'http://generics-aws-node-name:10255/metrics/cadvisor' + end def stub_k8s_requests ENV['KUBERNETES_SERVICE_HOST'] = k8s_host @@ -40,74 +56,74 @@ def stub_k8s_requests end def stub_k8s_proxy_summary_api - open(File.expand_path('../unit.json', __FILE__)).tap { |f| + open(File.expand_path('unit.json', __dir__)).tap do |f| stub_request(:get, "#{k8s_url}/v1/nodes/generics-aws-node-name:10255/proxy/stats/summary") .to_return(body: f.read) - }.close + end.close end def stub_k8s_api - open(File.expand_path('../api.json', __FILE__)).tap { |f| + open(File.expand_path('api.json', __dir__)).tap do |f| stub_request(:get, k8s_url) .to_return(body: f.read) - }.close + end.close end def stub_k8s_v1 - open(File.expand_path('../v1.json', __FILE__)).tap { |f| + open(File.expand_path('v1.json', __dir__)).tap do |f| stub_request(:get, "#{k8s_url}/v1") .to_return(body: f.read) - }.close + end.close end def stub_kubelet_summary_api - open(File.expand_path('../unit.json', __FILE__)).tap { |f| - stub_request(:get, "#{kubelet_summary_api_url}") - .to_return(body: f.read()) - }.close + open(File.expand_path('unit.json', __dir__)).tap do |f| + stub_request(:get, kubelet_summary_api_url.to_s) + .to_return(body: f.read) + end.close end def stub_metrics_cadvisor - open(File.expand_path('../metrics_cadvisor.txt', __FILE__)).tap { |f| - stub_request(:get, "#{kubelet_cadvisor_api_url}") - .to_return(body: f.read()) - }.close + open(File.expand_path('metrics_cadvisor.txt', __dir__)).tap do |f| + stub_request(:get, kubelet_cadvisor_api_url.to_s) + .to_return(body: f.read) + end.close end def stub_k8s_proxy_cadvisor_api - open(File.expand_path('../metrics_cadvisor.txt', __FILE__)).tap { |f| - stub_request(:get, "#{k8s_url}/v1/nodes/generics-aws-node-name:10255/proxy/metrics/cadvisor") + open(File.expand_path('metrics_cadvisor.txt', __dir__)).tap do |f| + stub_request(:get, "#{k8s_url}/v1/nodes/generics-aws-node-name:10255/proxy/metrics/cadvisor") .to_return(body: f.read) - }.close + end.close end def stub_metrics_stats - open(File.expand_path('../stats.json', __FILE__)).tap { |f| - stub_request(:get, "#{kubelet_stats_api_url}") - .to_return(body: f.read()) - }.close + open(File.expand_path('stats.json', __dir__)).tap do |f| + stub_request(:get, kubelet_stats_api_url.to_s) + .to_return(body: f.read) + end.close end def stub_metrics_proxy_stats - open(File.expand_path('../stats.json', __FILE__)).tap { |f| + open(File.expand_path('stats.json', __dir__)).tap do |f| stub_request(:get, "#{k8s_url}/v1/nodes/generics-aws-node-name:10255/proxy/stats/") - .to_return(body: f.read) - }.close + .to_return(body: f.read) + end.close end def get_unit_parsed_string parsed_string = nil - open(File.expand_path('../unit.json', __FILE__)).tap { |f| - parsed_string = f.read() - }.close + open(File.expand_path('unit.json', __dir__)).tap do |f| + parsed_string = f.read + end.close parsed_string end def get_stats_parsed_string get_stats_parsed_string = nil - open(File.expand_path('../stats.json', __FILE__)).tap { |f| - get_stats_parsed_string = f.read() - }.close + open(File.expand_path('stats.json', __dir__)).tap do |f| + get_stats_parsed_string = f.read + end.close get_stats_parsed_string end @@ -117,4 +133,4 @@ def generate_tag(item_name, tag) [tag_prefix, item_name, tag_suffix].join end -end \ No newline at end of file +end diff --git a/test/plugin/test_in_kubernetes_metrics.rb b/test/plugin/test_in_kubernetes_metrics.rb index 6cc8fb2..eb9c54d 100644 --- a/test/plugin/test_in_kubernetes_metrics.rb +++ b/test/plugin/test_in_kubernetes_metrics.rb @@ -1,5 +1,5 @@ -require "helper" -require "fluent/plugin/in_kubernetes_metrics.rb" +require 'helper' +require 'fluent/plugin/in_kubernetes_metrics.rb' class KubernetesMetricsInputTest < Test::Unit::TestCase include Fluent::Test::Helpers @@ -7,10 +7,10 @@ class KubernetesMetricsInputTest < Test::Unit::TestCase @@driver = nil - @@hash_map_test = Hash.new - @@hash_map_cadvisor = Hash.new + @@hash_map_test = {} + @@hash_map_cadvisor = {} - CONFIG = %[ + CONFIG = %( type kubernetes_metrics node_name generics-aws-node-name tag kube.* @@ -19,9 +19,9 @@ class KubernetesMetricsInputTest < Test::Unit::TestCase use_rest_client true use_rest_client_ssl false kubelet_port 10_255 - ] + ).freeze - SUMMARY_CONFIG = %[ + SUMMARY_CONFIG = %( type kubernetes_metrics node_names 'generics-aws-node-name' tag kube.* @@ -30,7 +30,7 @@ class KubernetesMetricsInputTest < Test::Unit::TestCase use_rest_client false use_rest_client_ssl false kubelet_port 10_255 - ] + ).freeze setup do Fluent::Test.setup @@ -39,9 +39,9 @@ class KubernetesMetricsInputTest < Test::Unit::TestCase @@parsed_string2 = JSON.parse(get_stats_parsed_string) get_cadvisor_parsed_string = nil - open(File.expand_path('../../metrics_cadvisor.txt', __FILE__)).tap {|f| - get_cadvisor_parsed_string = f.read() - }.close + open(File.expand_path('../metrics_cadvisor.txt', __dir__)).tap do |f| + get_cadvisor_parsed_string = f.read + end.close stub_k8s_requests @@ -52,44 +52,39 @@ class KubernetesMetricsInputTest < Test::Unit::TestCase @@driver.run timeout: 20, expect_emits: 1, shutdown: true metrics = get_cadvisor_parsed_string.split("\n") - for metric in metrics - if metric.include? "container_name=" - if metric.match(/^((?!container_name="").)*$/) && metric[0] != '#' - metric_str, metric_val = metric.split(" ") - if metric_val.kind_of? String - metric_val = metric_val.to_f - end - first_occur = metric_str.index('{') - metric_name = metric_str[0..first_occur - 1] - pod_name = metric.match(/pod_name="\S*"/).to_s - pod_name = pod_name.split('"')[1] - image_name = metric.match(/image="\S*"/).to_s - image_name = image_name.split('"')[1] - namespace = metric.match(/namespace="\S*"/).to_s - namespace = namespace.split('"')[1] - metric_labels = {'pod_name' => pod_name, 'image' => image_name, 'namespace' => namespace, 'value' => metric_val, 'node' => @node_name} - if metric.match(/^((?!container_name="POD").)*$/) - tag = 'pod' - tag = generate_tag("#{tag}#{metric_name.gsub('_', '.')}", @@driver.instance.tag) - tag = tag.gsub('container', '') - else - container_name = metric.match(/container_name="\S*"/).to_s - container_name = container_name.split('"')[1] - container_label = {'container_name' => container_name} - metric_labels.merge(container_label) - tag = generate_tag("#{metric_name.gsub('_', '.')}", @@driver.instance.tag) - end - @@hash_map_cadvisor[tag] = metric_labels["value"] - end + metrics.each do |metric| + next unless metric.include? 'container_name=' + + next unless metric.match(/^((?!container_name="").)*$/) && metric[0] != '#' + + metric_str, metric_val = metric.split(' ') + metric_val = metric_val.to_f if metric_val.is_a? String + first_occur = metric_str.index('{') + metric_name = metric_str[0..first_occur - 1] + pod_name = metric.match(/pod_name="\S*"/).to_s + pod_name = pod_name.split('"')[1] + image_name = metric.match(/image="\S*"/).to_s + image_name = image_name.split('"')[1] + namespace = metric.match(/namespace="\S*"/).to_s + namespace = namespace.split('"')[1] + metric_labels = { 'pod_name' => pod_name, 'image' => image_name, 'namespace' => namespace, 'value' => metric_val, 'node' => @node_name } + if metric =~ /^((?!container_name="POD").)*$/ + tag = 'pod' + tag = generate_tag("#{tag}#{metric_name.tr('_', '.')}", @@driver.instance.tag) + tag = tag.gsub('container', '') + else + container_name = metric.match(/container_name="\S*"/).to_s + container_name = container_name.split('"')[1] + container_label = { 'container_name' => container_name } + metric_labels.merge(container_label) + tag = generate_tag(metric_name.tr('_', '.').to_s, @@driver.instance.tag) end + @@hash_map_cadvisor[tag] = metric_labels['value'] end - @@driver.events.each do |tag, time, record| @@hash_map_test[tag] = tag, time, record end - - end def create_driver(conf = CONFIG) @@ -97,9 +92,9 @@ def create_driver(conf = CONFIG) end test 'configuration' do - assert_nothing_raised(Fluent::ConfigError) { + assert_nothing_raised(Fluent::ConfigError) do create_driver(CONFIG) - } + end d = create_driver assert_equal 'generics-aws-node-name', d.instance.node_name @@ -109,98 +104,87 @@ def create_driver(conf = CONFIG) assert_equal true, d.instance.use_rest_client end - sub_test_case "node_unit_tests" do - + sub_test_case 'node_unit_tests' do test 'test_emit_cpu_metrics' do + assert_not_nil @@hash_map_test.key?('kube.node.cpu.usage') + assert_equal @@parsed_unit_string['node']['cpu']['usageNanoCores'], @@hash_map_test['kube.node.cpu.usage'][2]['value'] - assert_not_nil @@hash_map_test.has_key?('kube.node.cpu.usage') - assert_equal @@parsed_unit_string['node']['cpu']['usageNanoCores'], @@hash_map_test['kube.node.cpu.usage'][2]["value"] - - assert_not_nil @@hash_map_test.has_key?('kube.node.cpu.usage_rate') - assert_equal @@parsed_unit_string['node']['cpu']['usageNanoCores'] / 1_000_000, @@hash_map_test['kube.node.cpu.usage_rate'][2]["value"] - + assert_not_nil @@hash_map_test.key?('kube.node.cpu.usage_rate') + assert_equal @@parsed_unit_string['node']['cpu']['usageNanoCores'] / 1_000_000, @@hash_map_test['kube.node.cpu.usage_rate'][2]['value'] end test 'test_emit_memory_metrics' do - assert_not_nil @@hash_map_test.find('kube.node.memory.available_bytes') - assert_equal @@parsed_unit_string['node']['memory']['availableBytes'], @@hash_map_test['kube.node.memory.available_bytes'][2]["value"] + assert_equal @@parsed_unit_string['node']['memory']['availableBytes'], @@hash_map_test['kube.node.memory.available_bytes'][2]['value'] assert_not_nil @@hash_map_test.find('kube.node.memory.usage_bytes') - assert_equal @@parsed_unit_string['node']['memory']['usageBytes'], @@hash_map_test['kube.node.memory.usage_bytes'][2]["value"] + assert_equal @@parsed_unit_string['node']['memory']['usageBytes'], @@hash_map_test['kube.node.memory.usage_bytes'][2]['value'] assert_not_nil @@hash_map_test.find('kube.node.memory.working_set_bytes') - assert_equal @@parsed_unit_string['node']['memory']['workingSetBytes'], @@hash_map_test['kube.node.memory.working_set_bytes'][2]["value"] + assert_equal @@parsed_unit_string['node']['memory']['workingSetBytes'], @@hash_map_test['kube.node.memory.working_set_bytes'][2]['value'] assert_not_nil @@hash_map_test.find('kube.node.memory.rss_bytes') - assert_equal @@parsed_unit_string['node']['memory']['rssBytes'], @@hash_map_test['kube.node.memory.rss_bytes'][2]["value"] + assert_equal @@parsed_unit_string['node']['memory']['rssBytes'], @@hash_map_test['kube.node.memory.rss_bytes'][2]['value'] assert_not_nil @@hash_map_test.find('kube.node.memory.page_faults') - assert_equal @@parsed_unit_string['node']['memory']['pageFaults'], @@hash_map_test['kube.node.memory.page_faults'][2]["value"] + assert_equal @@parsed_unit_string['node']['memory']['pageFaults'], @@hash_map_test['kube.node.memory.page_faults'][2]['value'] assert_not_nil @@hash_map_test.find('kube.node.memory.major_page_faults') - assert_equal @@parsed_unit_string['node']['memory']['majorPageFaults'], @@hash_map_test['kube.node.memory.major_page_faults'][2]["value"] - + assert_equal @@parsed_unit_string['node']['memory']['majorPageFaults'], @@hash_map_test['kube.node.memory.major_page_faults'][2]['value'] end test 'test_emit_network_metrics' do - assert_not_nil @@hash_map_test.find('kube.node.network.rx_bytes') - assert_equal @@parsed_unit_string['node']['network']['rxBytes'], @@hash_map_test['kube.node.network.rx_bytes'][2]["value"] + assert_equal @@parsed_unit_string['node']['network']['rxBytes'], @@hash_map_test['kube.node.network.rx_bytes'][2]['value'] assert_not_nil @@hash_map_test.find('kube.node.network.rx_errors') - assert_equal @@parsed_unit_string['node']['network']['rxErrors'], @@hash_map_test['kube.node.network.rx_errors'][2]["value"] + assert_equal @@parsed_unit_string['node']['network']['rxErrors'], @@hash_map_test['kube.node.network.rx_errors'][2]['value'] assert_not_nil @@hash_map_test.find('kube.node.network.tx_bytes') - assert_equal @@parsed_unit_string['node']['network']['txBytes'], @@hash_map_test['kube.node.network.tx_bytes'][2]["value"] + assert_equal @@parsed_unit_string['node']['network']['txBytes'], @@hash_map_test['kube.node.network.tx_bytes'][2]['value'] assert_not_nil @@hash_map_test.find('kube.node.network.tx_errors') - assert_equal @@parsed_unit_string['node']['network']['txErrors'], @@hash_map_test['kube.node.network.tx_errors'][2]["value"] - + assert_equal @@parsed_unit_string['node']['network']['txErrors'], @@hash_map_test['kube.node.network.tx_errors'][2]['value'] end test 'test_emit_fs_metrics' do - assert_not_nil @@hash_map_test.find('kube.node.fs.available_bytes') - assert_equal @@parsed_unit_string['node']['fs']['availableBytes'], @@hash_map_test['kube.node.fs.available_bytes'][2]["value"] + assert_equal @@parsed_unit_string['node']['fs']['availableBytes'], @@hash_map_test['kube.node.fs.available_bytes'][2]['value'] assert_not_nil @@hash_map_test.find('kube.node.fs.capacity_bytes') - assert_equal @@parsed_unit_string['node']['fs']['capacityBytes'], @@hash_map_test['kube.node.fs.capacity_bytes'][2]["value"] + assert_equal @@parsed_unit_string['node']['fs']['capacityBytes'], @@hash_map_test['kube.node.fs.capacity_bytes'][2]['value'] assert_not_nil @@hash_map_test.find('kube.node.fs.used_bytes') - assert_equal @@parsed_unit_string['node']['fs']['usedBytes'], @@hash_map_test['kube.node.fs.used_bytes'][2]["value"] + assert_equal @@parsed_unit_string['node']['fs']['usedBytes'], @@hash_map_test['kube.node.fs.used_bytes'][2]['value'] assert_not_nil @@hash_map_test.find('kube.node.fs.inodes_free') - assert_equal @@parsed_unit_string['node']['fs']['inodesFree'], @@hash_map_test['kube.node.fs.inodes_free'][2]["value"] + assert_equal @@parsed_unit_string['node']['fs']['inodesFree'], @@hash_map_test['kube.node.fs.inodes_free'][2]['value'] assert_not_nil @@hash_map_test.find('kube.node.fs.inodes') - assert_equal @@parsed_unit_string['node']['fs']['inodes'], @@hash_map_test['kube.node.fs.inodes'][2]["value"] + assert_equal @@parsed_unit_string['node']['fs']['inodes'], @@hash_map_test['kube.node.fs.inodes'][2]['value'] assert_not_nil @@hash_map_test.find('kube.node.fs.inodes_used') - assert_equal @@parsed_unit_string['node']['fs']['inodesUsed'], @@hash_map_test['kube.node.fs.inodes_used'][2]["value"] - + assert_equal @@parsed_unit_string['node']['fs']['inodesUsed'], @@hash_map_test['kube.node.fs.inodes_used'][2]['value'] end test 'test_emit_fs_imagefs_metrics' do - assert_not_nil @@hash_map_test.find('kube.node.fs.available_bytes') - assert_equal @@parsed_unit_string['node']['runtime']['imageFs']['availableBytes'], @@hash_map_test['kube.node.imagefs.available_bytes'][2]["value"] + assert_equal @@parsed_unit_string['node']['runtime']['imageFs']['availableBytes'], @@hash_map_test['kube.node.imagefs.available_bytes'][2]['value'] assert_not_nil @@hash_map_test.find('kube.node.fs.capacity_bytes') - assert_equal @@parsed_unit_string['node']['runtime']['imageFs']['capacityBytes'], @@hash_map_test['kube.node.imagefs.capacity_bytes'][2]["value"] + assert_equal @@parsed_unit_string['node']['runtime']['imageFs']['capacityBytes'], @@hash_map_test['kube.node.imagefs.capacity_bytes'][2]['value'] assert_not_nil @@hash_map_test.find('kube.node.fs.used_bytes') - assert_equal @@parsed_unit_string['node']['runtime']['imageFs']['usedBytes'], @@hash_map_test['kube.node.imagefs.used_bytes'][2]["value"] + assert_equal @@parsed_unit_string['node']['runtime']['imageFs']['usedBytes'], @@hash_map_test['kube.node.imagefs.used_bytes'][2]['value'] assert_not_nil @@hash_map_test.find('kube.node.fs.inodes_free') - assert_equal @@parsed_unit_string['node']['runtime']['imageFs']['inodesFree'], @@hash_map_test['kube.node.imagefs.inodes_free'][2]["value"] + assert_equal @@parsed_unit_string['node']['runtime']['imageFs']['inodesFree'], @@hash_map_test['kube.node.imagefs.inodes_free'][2]['value'] assert_not_nil @@hash_map_test.find('kube.node.fs.inodes') - assert_equal @@parsed_unit_string['node']['runtime']['imageFs']['inodes'], @@hash_map_test['kube.node.imagefs.inodes'][2]["value"] + assert_equal @@parsed_unit_string['node']['runtime']['imageFs']['inodes'], @@hash_map_test['kube.node.imagefs.inodes'][2]['value'] assert_not_nil @@hash_map_test.find('kube.node.fs.inodes_used') - assert_equal @@parsed_unit_string['node']['runtime']['imageFs']['inodesUsed'], @@hash_map_test['kube.node.imagefs.inodes_used'][2]["value"] - + assert_equal @@parsed_unit_string['node']['runtime']['imageFs']['inodesUsed'], @@hash_map_test['kube.node.imagefs.inodes_used'][2]['value'] end test 'summary_api' do @@ -209,273 +193,268 @@ def create_driver(conf = CONFIG) events = d.events assert_not_nil events end - end - sub_test_case "metrics_cadvisor_unit_tests" do - + sub_test_case 'metrics_cadvisor_unit_tests' do test 'Test - metrics cadvisor: container_cpu_load_average_10s' do - assert_true @@hash_map_cadvisor.has_key?('kube.container.cpu.load.average.10s') - assert_equal @@hash_map_cadvisor['kube.container.cpu.load.average.10s'], @@hash_map_test["kube.container.cpu.load.average.10s"][2]["value"] + assert_true @@hash_map_cadvisor.key?('kube.container.cpu.load.average.10s') + assert_equal @@hash_map_cadvisor['kube.container.cpu.load.average.10s'], @@hash_map_test['kube.container.cpu.load.average.10s'][2]['value'] end test 'Test - metrics cadvisor: container_cpu_system_seconds_total' do - assert_true @@hash_map_cadvisor.has_key?('kube.container.cpu.system.seconds.total') - assert_equal @@hash_map_cadvisor['kube.container.cpu.system.seconds.total'], @@hash_map_test["kube.container.cpu.system.seconds.total"][2]["value"] + assert_true @@hash_map_cadvisor.key?('kube.container.cpu.system.seconds.total') + assert_equal @@hash_map_cadvisor['kube.container.cpu.system.seconds.total'], @@hash_map_test['kube.container.cpu.system.seconds.total'][2]['value'] end test 'Test - metrics cadvisor: container_cpu_usage_seconds_total' do - assert_true @@hash_map_cadvisor.has_key?('kube.container.cpu.usage.seconds.total') - assert_equal @@hash_map_cadvisor['kube.container.cpu.usage.seconds.total'], @@hash_map_test["kube.container.cpu.usage.seconds.total"][2]["value"] + assert_true @@hash_map_cadvisor.key?('kube.container.cpu.usage.seconds.total') + assert_equal @@hash_map_cadvisor['kube.container.cpu.usage.seconds.total'], @@hash_map_test['kube.container.cpu.usage.seconds.total'][2]['value'] end test 'Test - metrics cadvisor: container_cpu_user_seconds_total' do - assert_true @@hash_map_cadvisor.has_key?('kube.container.cpu.user.seconds.total') - assert_equal @@hash_map_cadvisor['kube.container.cpu.user.seconds.total'], @@hash_map_test["kube.container.cpu.user.seconds.total"][2]["value"] + assert_true @@hash_map_cadvisor.key?('kube.container.cpu.user.seconds.total') + assert_equal @@hash_map_cadvisor['kube.container.cpu.user.seconds.total'], @@hash_map_test['kube.container.cpu.user.seconds.total'][2]['value'] end test 'Test - metrics cadvisor: container_fs_inodes_free' do - assert_true @@hash_map_cadvisor.has_key?('kube.container.fs.inodes.free') - assert_equal @@hash_map_cadvisor['kube.container.fs.inodes.free'], @@hash_map_test["kube.container.fs.inodes.free"][2]["value"] + assert_true @@hash_map_cadvisor.key?('kube.container.fs.inodes.free') + assert_equal @@hash_map_cadvisor['kube.container.fs.inodes.free'], @@hash_map_test['kube.container.fs.inodes.free'][2]['value'] end test 'Test - metrics cadvisor: container_fs_inodes_total' do - assert_true @@hash_map_cadvisor.has_key?('kube.container.fs.inodes.total') - assert_equal @@hash_map_cadvisor['kube.container.fs.inodes.total'], @@hash_map_test["kube.container.fs.inodes.total"][2]["value"] + assert_true @@hash_map_cadvisor.key?('kube.container.fs.inodes.total') + assert_equal @@hash_map_cadvisor['kube.container.fs.inodes.total'], @@hash_map_test['kube.container.fs.inodes.total'][2]['value'] end test 'Test - metrics cadvisor: container_fs_io_current' do - assert_true @@hash_map_cadvisor.has_key?('kube.container.fs.io.current') - assert_equal @@hash_map_cadvisor['kube.container.fs.io.current'], @@hash_map_test["kube.container.fs.io.current"][2]["value"] + assert_true @@hash_map_cadvisor.key?('kube.container.fs.io.current') + assert_equal @@hash_map_cadvisor['kube.container.fs.io.current'], @@hash_map_test['kube.container.fs.io.current'][2]['value'] end test 'Test - metrics cadvisor: container_fs_io_time_seconds_total' do - assert_true @@hash_map_cadvisor.has_key?('kube.container.fs.io.time.seconds.total') - assert_equal @@hash_map_cadvisor['kube.container.fs.io.time.seconds.total'], @@hash_map_test["kube.container.fs.io.time.seconds.total"][2]["value"] + assert_true @@hash_map_cadvisor.key?('kube.container.fs.io.time.seconds.total') + assert_equal @@hash_map_cadvisor['kube.container.fs.io.time.seconds.total'], @@hash_map_test['kube.container.fs.io.time.seconds.total'][2]['value'] end test 'Test - metrics cadvisor: container_fs_io_time_weighted_seconds_total' do - assert_true @@hash_map_cadvisor.has_key?('kube.container.fs.io.time.weighted.seconds.total') - assert_equal @@hash_map_cadvisor['kube.container.fs.io.time.weighted.seconds.total'], @@hash_map_test["kube.container.fs.io.time.weighted.seconds.total"][2]["value"] + assert_true @@hash_map_cadvisor.key?('kube.container.fs.io.time.weighted.seconds.total') + assert_equal @@hash_map_cadvisor['kube.container.fs.io.time.weighted.seconds.total'], @@hash_map_test['kube.container.fs.io.time.weighted.seconds.total'][2]['value'] end test 'Test - metrics cadvisor: container_fs_limit_bytes' do - assert_true @@hash_map_cadvisor.has_key?('kube.container.fs.limit.bytes') - assert_equal @@hash_map_cadvisor['kube.container.fs.limit.bytes'], @@hash_map_test["kube.container.fs.limit.bytes"][2]["value"] + assert_true @@hash_map_cadvisor.key?('kube.container.fs.limit.bytes') + assert_equal @@hash_map_cadvisor['kube.container.fs.limit.bytes'], @@hash_map_test['kube.container.fs.limit.bytes'][2]['value'] end test 'Test - metrics cadvisor: container_fs_read_seconds_total' do - assert_true @@hash_map_cadvisor.has_key?('kube.container.fs.read.seconds.total') - assert_equal @@hash_map_cadvisor['kube.container.fs.read.seconds.total'], @@hash_map_test["kube.container.fs.read.seconds.total"][2]["value"] - + assert_true @@hash_map_cadvisor.key?('kube.container.fs.read.seconds.total') + assert_equal @@hash_map_cadvisor['kube.container.fs.read.seconds.total'], @@hash_map_test['kube.container.fs.read.seconds.total'][2]['value'] end # TODO: Current Test does not work - metric present in metrics_cadvisor.txt but not being parsed by connector in test/working in production test 'Test - metrics cadvisor: container_fs_reads_bytes_total' do - assert_false @@hash_map_cadvisor.has_key?('kube.container.fs.reads.bytes.total') - #assert_equal @@hash_map_cadvisor['kube.container.fs.reads.bytes.total'], @@hash_map_test["kube.container.fs.reads.bytes.total"][2]["value"] + assert_false @@hash_map_cadvisor.key?('kube.container.fs.reads.bytes.total') + # assert_equal @@hash_map_cadvisor['kube.container.fs.reads.bytes.total'], @@hash_map_test["kube.container.fs.reads.bytes.total"][2]["value"] end test 'Test - metrics cadvisor: container_fs_reads_merged_total' do - assert_true @@hash_map_cadvisor.has_key?('kube.container.fs.reads.merged.total') - assert_equal @@hash_map_cadvisor['kube.container.fs.reads.merged.total'], @@hash_map_test["kube.container.fs.reads.merged.total"][2]["value"] + assert_true @@hash_map_cadvisor.key?('kube.container.fs.reads.merged.total') + assert_equal @@hash_map_cadvisor['kube.container.fs.reads.merged.total'], @@hash_map_test['kube.container.fs.reads.merged.total'][2]['value'] end test 'Test - metrics cadvisor: container_fs_reads_total' do - assert_true @@hash_map_cadvisor.has_key?('kube.container.fs.reads.total') - assert_equal @@hash_map_cadvisor['kube.container.fs.reads.total'], @@hash_map_test["kube.container.fs.reads.total"][2]["value"] + assert_true @@hash_map_cadvisor.key?('kube.container.fs.reads.total') + assert_equal @@hash_map_cadvisor['kube.container.fs.reads.total'], @@hash_map_test['kube.container.fs.reads.total'][2]['value'] end test 'Test - metrics cadvisor: container_fs_sector_reads_total' do - assert_true @@hash_map_cadvisor.has_key?('kube.container.fs.sector.reads.total') - assert_equal @@hash_map_cadvisor['kube.container.fs.sector.reads.total'], @@hash_map_test["kube.container.fs.sector.reads.total"][2]["value"] + assert_true @@hash_map_cadvisor.key?('kube.container.fs.sector.reads.total') + assert_equal @@hash_map_cadvisor['kube.container.fs.sector.reads.total'], @@hash_map_test['kube.container.fs.sector.reads.total'][2]['value'] end test 'Test - metrics cadvisor: container_fs_sector_writes_total' do - assert_true @@hash_map_cadvisor.has_key?('kube.container.fs.sector.writes.total') - assert_equal @@hash_map_cadvisor['kube.container.fs.sector.writes.total'], @@hash_map_test["kube.container.fs.sector.writes.total"][2]["value"] + assert_true @@hash_map_cadvisor.key?('kube.container.fs.sector.writes.total') + assert_equal @@hash_map_cadvisor['kube.container.fs.sector.writes.total'], @@hash_map_test['kube.container.fs.sector.writes.total'][2]['value'] end test 'Test - metrics cadvisor: container_fs_usage_bytes' do - assert_true @@hash_map_cadvisor.has_key?('kube.container.fs.usage.bytes') - assert_equal @@hash_map_cadvisor['kube.container.fs.usage.bytes'], @@hash_map_test["kube.container.fs.usage.bytes"][2]["value"] + assert_true @@hash_map_cadvisor.key?('kube.container.fs.usage.bytes') + assert_equal @@hash_map_cadvisor['kube.container.fs.usage.bytes'], @@hash_map_test['kube.container.fs.usage.bytes'][2]['value'] end test 'Test - metrics cadvisor: container_fs_write_seconds_total' do - assert_true @@hash_map_cadvisor.has_key?('kube.container.fs.write.seconds.total') - assert_equal @@hash_map_cadvisor['kube.container.fs.write.seconds.total'], @@hash_map_test["kube.container.fs.write.seconds.total"][2]["value"] + assert_true @@hash_map_cadvisor.key?('kube.container.fs.write.seconds.total') + assert_equal @@hash_map_cadvisor['kube.container.fs.write.seconds.total'], @@hash_map_test['kube.container.fs.write.seconds.total'][2]['value'] end # TODO: Current Test does not work - metric present in metrics_cadvisor.txt but not being parsed by connector in test/working in production test 'Test - metrics cadvisor: container_fs_writes_bytes_total' do - assert_false @@hash_map_cadvisor.has_key?('kube.container.fs.writes.bytes.total') - #assert_equal @@hash_map_cadvisor['kube.container.fs.writes.bytes.total'], @@hash_map_test["kube.container.fs.writes.bytes.total"][2]["value"] + assert_false @@hash_map_cadvisor.key?('kube.container.fs.writes.bytes.total') + # assert_equal @@hash_map_cadvisor['kube.container.fs.writes.bytes.total'], @@hash_map_test["kube.container.fs.writes.bytes.total"][2]["value"] end test 'Test - metrics cadvisor: container_fs_writes_merged_total' do - assert_true @@hash_map_cadvisor.has_key?('kube.container.fs.writes.merged.total') - #assert_equal @@hash_map_cadvisor['kube.container.fs.writes.merged.total'], @@hash_map_test["kube.container.fs.writes.merged.total"][2]["value"] + assert_true @@hash_map_cadvisor.key?('kube.container.fs.writes.merged.total') + # assert_equal @@hash_map_cadvisor['kube.container.fs.writes.merged.total'], @@hash_map_test["kube.container.fs.writes.merged.total"][2]["value"] end test 'Test - metrics cadvisor: container_fs_writes_total' do - assert_true @@hash_map_cadvisor.has_key?('kube.container.fs.writes.total') - assert_equal @@hash_map_cadvisor['kube.container.fs.writes.total'], @@hash_map_test["kube.container.fs.writes.total"][2]["value"] + assert_true @@hash_map_cadvisor.key?('kube.container.fs.writes.total') + assert_equal @@hash_map_cadvisor['kube.container.fs.writes.total'], @@hash_map_test['kube.container.fs.writes.total'][2]['value'] end test 'Test - metrics cadvisor: container_last_seen' do - assert_true @@hash_map_cadvisor.has_key?('kube.container.last.seen') - assert_equal @@hash_map_cadvisor['kube.container.last.seen'], @@hash_map_test["kube.container.last.seen"][2]["value"] + assert_true @@hash_map_cadvisor.key?('kube.container.last.seen') + assert_equal @@hash_map_cadvisor['kube.container.last.seen'], @@hash_map_test['kube.container.last.seen'][2]['value'] end test 'Test - metrics cadvisor: container_memory_cache' do - assert_true @@hash_map_cadvisor.has_key?('kube.container.memory.cache') - assert_equal @@hash_map_cadvisor['kube.container.memory.cache'], @@hash_map_test["kube.container.memory.cache"][2]["value"] + assert_true @@hash_map_cadvisor.key?('kube.container.memory.cache') + assert_equal @@hash_map_cadvisor['kube.container.memory.cache'], @@hash_map_test['kube.container.memory.cache'][2]['value'] end test 'Test - metrics cadvisor: container_memory_failcnt' do - assert_true @@hash_map_cadvisor.has_key?('kube.container.memory.failcnt') - assert_equal @@hash_map_cadvisor['kube.container.memory.failcnt'], @@hash_map_test["kube.container.memory.failcnt"][2]["value"] + assert_true @@hash_map_cadvisor.key?('kube.container.memory.failcnt') + assert_equal @@hash_map_cadvisor['kube.container.memory.failcnt'], @@hash_map_test['kube.container.memory.failcnt'][2]['value'] end test 'Test - metrics cadvisor: container_memory_failures_total' do - assert_true @@hash_map_cadvisor.has_key?('kube.container.memory.failures.total') - assert_equal @@hash_map_cadvisor['kube.container.memory.failures.total'], @@hash_map_test["kube.container.memory.failures.total"][2]["value"] + assert_true @@hash_map_cadvisor.key?('kube.container.memory.failures.total') + assert_equal @@hash_map_cadvisor['kube.container.memory.failures.total'], @@hash_map_test['kube.container.memory.failures.total'][2]['value'] end test 'Test - metrics cadvisor: container_memory_max_usage_bytes' do - assert_true @@hash_map_cadvisor.has_key?('kube.container.memory.max.usage.bytes') - assert_equal @@hash_map_cadvisor['kube.container.memory.max.usage.bytes'], @@hash_map_test["kube.container.memory.max.usage.bytes"][2]["value"] + assert_true @@hash_map_cadvisor.key?('kube.container.memory.max.usage.bytes') + assert_equal @@hash_map_cadvisor['kube.container.memory.max.usage.bytes'], @@hash_map_test['kube.container.memory.max.usage.bytes'][2]['value'] end test 'Test - metrics cadvisor: container_memory_rss' do - assert_true @@hash_map_cadvisor.has_key?('kube.container.memory.rss') - assert_equal @@hash_map_cadvisor['kube.container.memory.rss'], @@hash_map_test["kube.container.memory.rss"][2]["value"] + assert_true @@hash_map_cadvisor.key?('kube.container.memory.rss') + assert_equal @@hash_map_cadvisor['kube.container.memory.rss'], @@hash_map_test['kube.container.memory.rss'][2]['value'] end test 'Test - metrics cadvisor: container_memory_swap' do - assert_true @@hash_map_cadvisor.has_key?('kube.container.memory.swap') - assert_equal @@hash_map_cadvisor['kube.container.memory.swap'], @@hash_map_test["kube.container.memory.swap"][2]["value"] + assert_true @@hash_map_cadvisor.key?('kube.container.memory.swap') + assert_equal @@hash_map_cadvisor['kube.container.memory.swap'], @@hash_map_test['kube.container.memory.swap'][2]['value'] end test 'Test - metrics cadvisor: container_memory_usage_bytes' do - assert_true @@hash_map_cadvisor.has_key?('kube.container.memory.usage.bytes') - assert_equal @@hash_map_cadvisor['kube.container.memory.usage.bytes'], @@hash_map_test["kube.container.memory.usage.bytes"][2]["value"] + assert_true @@hash_map_cadvisor.key?('kube.container.memory.usage.bytes') + assert_equal @@hash_map_cadvisor['kube.container.memory.usage.bytes'], @@hash_map_test['kube.container.memory.usage.bytes'][2]['value'] end test 'Test - metrics cadvisor: container_memory_working_set_bytes' do - assert_true @@hash_map_cadvisor.has_key?('kube.container.memory.working.set.bytes') - assert_equal @@hash_map_cadvisor['kube.container.memory.working.set.bytes'], @@hash_map_test["kube.container.memory.working.set.bytes"][2]["value"] + assert_true @@hash_map_cadvisor.key?('kube.container.memory.working.set.bytes') + assert_equal @@hash_map_cadvisor['kube.container.memory.working.set.bytes'], @@hash_map_test['kube.container.memory.working.set.bytes'][2]['value'] end test 'Test - metrics cadvisor: container_network_receive_bytes_total' do - assert_true @@hash_map_cadvisor.has_key?('kube.container.network.receive.bytes.total') - assert_equal @@hash_map_cadvisor['kube.container.network.receive.bytes.total'], @@hash_map_test["kube.container.network.receive.bytes.total"][2]["value"] + assert_true @@hash_map_cadvisor.key?('kube.container.network.receive.bytes.total') + assert_equal @@hash_map_cadvisor['kube.container.network.receive.bytes.total'], @@hash_map_test['kube.container.network.receive.bytes.total'][2]['value'] end test 'Test - metrics cadvisor: container_network_receive_errors_total' do - assert_true @@hash_map_cadvisor.has_key?('kube.container.network.receive.errors.total') - assert_equal @@hash_map_cadvisor['kube.container.network.receive.errors.total'], @@hash_map_test["kube.container.network.receive.errors.total"][2]["value"] + assert_true @@hash_map_cadvisor.key?('kube.container.network.receive.errors.total') + assert_equal @@hash_map_cadvisor['kube.container.network.receive.errors.total'], @@hash_map_test['kube.container.network.receive.errors.total'][2]['value'] end test 'Test - metrics cadvisor: container_network_receive_packets_dropped_total' do - assert_true @@hash_map_cadvisor.has_key?('kube.container.network.receive.packets.dropped.total') - assert_equal @@hash_map_cadvisor['kube.container.network.receive.packets.dropped.total'], @@hash_map_test["kube.container.network.receive.packets.dropped.total"][2]["value"] + assert_true @@hash_map_cadvisor.key?('kube.container.network.receive.packets.dropped.total') + assert_equal @@hash_map_cadvisor['kube.container.network.receive.packets.dropped.total'], @@hash_map_test['kube.container.network.receive.packets.dropped.total'][2]['value'] end test 'Test - metrics cadvisor: container_network_receive_packets_total' do - assert_true @@hash_map_cadvisor.has_key?('kube.container.network.receive.packets.total') - assert_equal @@hash_map_cadvisor['kube.container.network.receive.packets.total'], @@hash_map_test["kube.container.network.receive.packets.total"][2]["value"] + assert_true @@hash_map_cadvisor.key?('kube.container.network.receive.packets.total') + assert_equal @@hash_map_cadvisor['kube.container.network.receive.packets.total'], @@hash_map_test['kube.container.network.receive.packets.total'][2]['value'] end test 'Test - metrics cadvisor: container_network_tcp_usage_total' do - assert_true @@hash_map_cadvisor.has_key?('kube.container.network.tcp.usage.total') - assert_equal @@hash_map_cadvisor['kube.container.network.tcp.usage.total'], @@hash_map_test["kube.container.network.tcp.usage.total"][2]["value"] + assert_true @@hash_map_cadvisor.key?('kube.container.network.tcp.usage.total') + assert_equal @@hash_map_cadvisor['kube.container.network.tcp.usage.total'], @@hash_map_test['kube.container.network.tcp.usage.total'][2]['value'] end test 'Test - metrics cadvisor: container_network_transmit_bytes_total' do - assert_true @@hash_map_cadvisor.has_key?('kube.container.network.transmit.bytes.total') - assert_equal @@hash_map_cadvisor['kube.container.network.transmit.bytes.total'], @@hash_map_test["kube.container.network.transmit.bytes.total"][2]["value"] + assert_true @@hash_map_cadvisor.key?('kube.container.network.transmit.bytes.total') + assert_equal @@hash_map_cadvisor['kube.container.network.transmit.bytes.total'], @@hash_map_test['kube.container.network.transmit.bytes.total'][2]['value'] end test 'Test - metrics cadvisor: container_network_transmit_errors_total' do - assert_true @@hash_map_cadvisor.has_key?('kube.container.network.transmit.errors.total') - assert_equal @@hash_map_cadvisor['kube.container.network.transmit.errors.total'], @@hash_map_test["kube.container.network.transmit.errors.total"][2]["value"] + assert_true @@hash_map_cadvisor.key?('kube.container.network.transmit.errors.total') + assert_equal @@hash_map_cadvisor['kube.container.network.transmit.errors.total'], @@hash_map_test['kube.container.network.transmit.errors.total'][2]['value'] end test 'Test - metrics cadvisor: container_network_transmit_packets_dropped_total' do - assert_true @@hash_map_cadvisor.has_key?('kube.container.network.transmit.packets.dropped.total') - assert_equal @@hash_map_cadvisor['kube.container.network.transmit.packets.dropped.total'], @@hash_map_test["kube.container.network.transmit.packets.dropped.total"][2]["value"] + assert_true @@hash_map_cadvisor.key?('kube.container.network.transmit.packets.dropped.total') + assert_equal @@hash_map_cadvisor['kube.container.network.transmit.packets.dropped.total'], @@hash_map_test['kube.container.network.transmit.packets.dropped.total'][2]['value'] end test 'Test - metrics cadvisor: container_network_transmit_packets_total' do - assert_true @@hash_map_cadvisor.has_key?('kube.container.network.transmit.packets.total') - assert_equal @@hash_map_cadvisor['kube.container.network.transmit.packets.total'], @@hash_map_test["kube.container.network.transmit.packets.total"][2]["value"] + assert_true @@hash_map_cadvisor.key?('kube.container.network.transmit.packets.total') + assert_equal @@hash_map_cadvisor['kube.container.network.transmit.packets.total'], @@hash_map_test['kube.container.network.transmit.packets.total'][2]['value'] end test 'Test - metrics cadvisor: container_network_udp_usage_total' do - assert_true @@hash_map_cadvisor.has_key?('kube.container.network.udp.usage.total') - assert_equal @@hash_map_cadvisor['kube.container.network.udp.usage.total'], @@hash_map_test["kube.container.network.udp.usage.total"][2]["value"] + assert_true @@hash_map_cadvisor.key?('kube.container.network.udp.usage.total') + assert_equal @@hash_map_cadvisor['kube.container.network.udp.usage.total'], @@hash_map_test['kube.container.network.udp.usage.total'][2]['value'] end # TODO: Current Test does not work - metric present in metrics_cadvisor.txt but not being parsed by connector test 'Test - metrics cadvisor: container_scrape_error' do - assert_false @@hash_map_cadvisor.has_key?('kube.container.scrape.error') - # assert_equal @@hash_map_cadvisor['kube.container.scrape.error'], @@hash_map_test["kube.container.scrape.error"][2]["value"] + assert_false @@hash_map_cadvisor.key?('kube.container.scrape.error') + # assert_equal @@hash_map_cadvisor['kube.container.scrape.error'], @@hash_map_test["kube.container.scrape.error"][2]["value"] end test 'Test - metrics cadvisor: container_spec_cpu_period' do - assert_true @@hash_map_cadvisor.has_key?('kube.container.spec.cpu.period') - assert_equal @@hash_map_cadvisor['kube.container.spec.cpu.period'], @@hash_map_test["kube.container.spec.cpu.period"][2]["value"] + assert_true @@hash_map_cadvisor.key?('kube.container.spec.cpu.period') + assert_equal @@hash_map_cadvisor['kube.container.spec.cpu.period'], @@hash_map_test['kube.container.spec.cpu.period'][2]['value'] end test 'Test - metrics cadvisor: container_spec_cpu_shares' do - assert_true @@hash_map_cadvisor.has_key?('kube.container.spec.cpu.shares') - assert_equal @@hash_map_cadvisor['kube.container.spec.cpu.shares'], @@hash_map_test["kube.container.spec.cpu.shares"][2]["value"] + assert_true @@hash_map_cadvisor.key?('kube.container.spec.cpu.shares') + assert_equal @@hash_map_cadvisor['kube.container.spec.cpu.shares'], @@hash_map_test['kube.container.spec.cpu.shares'][2]['value'] end test 'Test - metrics cadvisor: container_spec_memory_limit_bytes' do - assert_true @@hash_map_cadvisor.has_key?('kube.container.spec.memory.limit.bytes') - assert_equal @@hash_map_cadvisor['kube.container.spec.memory.limit.bytes'], @@hash_map_test["kube.container.spec.memory.limit.bytes"][2]["value"] + assert_true @@hash_map_cadvisor.key?('kube.container.spec.memory.limit.bytes') + assert_equal @@hash_map_cadvisor['kube.container.spec.memory.limit.bytes'], @@hash_map_test['kube.container.spec.memory.limit.bytes'][2]['value'] end test 'Test - metrics cadvisor: container_spec_memory_reservation_limit_bytes' do - assert_true @@hash_map_cadvisor.has_key?('kube.container.spec.memory.reservation.limit.bytes') - assert_equal @@hash_map_cadvisor['kube.container.spec.memory.reservation.limit.bytes'], @@hash_map_test["kube.container.spec.memory.reservation.limit.bytes"][2]["value"] + assert_true @@hash_map_cadvisor.key?('kube.container.spec.memory.reservation.limit.bytes') + assert_equal @@hash_map_cadvisor['kube.container.spec.memory.reservation.limit.bytes'], @@hash_map_test['kube.container.spec.memory.reservation.limit.bytes'][2]['value'] end test 'Test - metrics cadvisor: container_spec_memory_swap_limit_bytes' do - assert_true @@hash_map_cadvisor.has_key?('kube.container.spec.memory.swap.limit.bytes') - assert_equal @@hash_map_cadvisor['kube.container.spec.memory.swap.limit.bytes'], @@hash_map_test["kube.container.spec.memory.swap.limit.bytes"][2]["value"] + assert_true @@hash_map_cadvisor.key?('kube.container.spec.memory.swap.limit.bytes') + assert_equal @@hash_map_cadvisor['kube.container.spec.memory.swap.limit.bytes'], @@hash_map_test['kube.container.spec.memory.swap.limit.bytes'][2]['value'] end test 'Test - metrics cadvisor: container_start_time_seconds' do - assert_true @@hash_map_cadvisor.has_key?('kube.container.start.time.seconds') - assert_equal @@hash_map_cadvisor['kube.container.start.time.seconds'], @@hash_map_test["kube.container.start.time.seconds"][2]["value"] + assert_true @@hash_map_cadvisor.key?('kube.container.start.time.seconds') + assert_equal @@hash_map_cadvisor['kube.container.start.time.seconds'], @@hash_map_test['kube.container.start.time.seconds'][2]['value'] end test 'Test - metrics cadvisor: container_tasks_state' do - assert_true @@hash_map_cadvisor.has_key?('kube.container.tasks.state') - assert_equal @@hash_map_cadvisor['kube.container.tasks.state'], @@hash_map_test["kube.container.tasks.state"][2]["value"] + assert_true @@hash_map_cadvisor.key?('kube.container.tasks.state') + assert_equal @@hash_map_cadvisor['kube.container.tasks.state'], @@hash_map_test['kube.container.tasks.state'][2]['value'] end # TODO: Current Test does not work - metric present in metrics_cadvisor.txt but not being parsed by connector test 'Test - metrics cadvisor: machine_cpu_cores' do - assert_false @@hash_map_cadvisor.has_key?('kube.machine.cpu.cores') - #assert_equal @@hash_map_cadvisor['kube.machine.cpu.cores'], @@hash_map_test["kube.machine.cpu.cores"][2]["value"] + assert_false @@hash_map_cadvisor.key?('kube.machine.cpu.cores') + # assert_equal @@hash_map_cadvisor['kube.machine.cpu.cores'], @@hash_map_test["kube.machine.cpu.cores"][2]["value"] end # TODO: Current Test does not work - metric present in metrics_cadvisor.txt but not being parsed by connector test 'Test - metrics cadvisor: machine_memory_bytes' do - assert_false @@hash_map_cadvisor.has_key?('kube.container.machine.memory.bytes') - #assert_equal @@hash_map_cadvisor['kube.container.machine.memory.bytes'], @@hash_map_test["kube.container.machine.memory.bytes"][2]["value"] + assert_false @@hash_map_cadvisor.key?('kube.container.machine.memory.bytes') + # assert_equal @@hash_map_cadvisor['kube.container.machine.memory.bytes'], @@hash_map_test["kube.container.machine.memory.bytes"][2]["value"] end # TODO: Test does not work - metric not present in metrics_cadvisor.txt test 'Test - metrics cadvisor: container_cpu_cfs_throttled_seconds_total' do - assert_false @@hash_map_cadvisor.has_key?('kube.container.cpu.cfs.throttled.seconds.total') + assert_false @@hash_map_cadvisor.key?('kube.container.cpu.cfs.throttled.seconds.total') # assert_equal @@hash_map_cadvisor['kube.container.cpu.cfs.throttled.seconds.total'], @@hash_map_test["kube.container.cpu.cfs.throttled.seconds.total"][2]["value"] end - end - -end \ No newline at end of file +end