From 394dbba66b3806519b5f19497f78e437572128b2 Mon Sep 17 00:00:00 2001 From: Igor Zolotarev Date: Mon, 3 Feb 2025 19:42:56 +0300 Subject: [PATCH] Add new metrics category: cpu extended --- CHANGELOG.md | 3 ++ metrics/tarantool.lua | 2 ++ test/cfg_test.lua | 80 ++++++++++++++++++++++++++----------------- 3 files changed, 53 insertions(+), 32 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 56f7f08e..0443308e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Added +- New metrics category in config: ``cpu_extended``. + ### Fixed - Use box.info.ro instead of box.cfg.read_only in replication metrics. diff --git a/metrics/tarantool.lua b/metrics/tarantool.lua index b3b57612..15db28e0 100644 --- a/metrics/tarantool.lua +++ b/metrics/tarantool.lua @@ -5,6 +5,7 @@ local utils = require('metrics.utils') local const = require('metrics.const') local default_metrics = { + -- category = {update: function, list: table}, network = require('metrics.tarantool.network'), operations = require('metrics.tarantool.operations'), system = require('metrics.tarantool.system'), @@ -24,6 +25,7 @@ local default_metrics = { clock = require('metrics.tarantool.clock'), event_loop = require('metrics.tarantool.event_loop'), config = require('metrics.tarantool.config'), + cpu_extended = require('metrics.psutils.cpu'), } local all_metrics_map = {} diff --git a/test/cfg_test.lua b/test/cfg_test.lua index e77875b0..9aee79db 100644 --- a/test/cfg_test.lua +++ b/test/cfg_test.lua @@ -127,38 +127,54 @@ group.test_table_is_immutable = function(g) end) end -group.test_include = function(g) - g.server:exec(function() - local metrics = require('metrics') - local utils = require('test.utils') -- luacheck: ignore 431 - - metrics.cfg{ - include = {'info'}, - } - - local default_metrics = metrics.collect{invoke_callbacks = true} - local uptime = utils.find_metric('tnt_info_uptime', default_metrics) - t.assert_not_equals(uptime, nil) - local memlua = utils.find_metric('tnt_info_memory_lua', default_metrics) - t.assert_equals(memlua, nil) - end) -end - -group.test_exclude = function(g) - g.server:exec(function() - local metrics = require('metrics') - local utils = require('test.utils') -- luacheck: ignore 431 - - metrics.cfg{ - exclude = {'memory'}, - } - - local default_metrics = metrics.collect{invoke_callbacks = true} - local uptime = utils.find_metric('tnt_info_uptime', default_metrics) - t.assert_not_equals(uptime, nil) - local memlua = utils.find_metric('tnt_info_memory_lua', default_metrics) - t.assert_equals(memlua, nil) - end) +local matrix = { + -- {category: string, includes: string, excludes: string, linux_only: boolean} + {'info', 'tnt_info_uptime', 'tnt_info_memory_lua'}, + {'cpu_extended', 'tnt_cpu_thread', 'tnt_info_memory_lua', true}, + {'network', 'tnt_net_sent_total', 'tnt_info_memory_lua'}, + {'operations', 'tnt_stats_op_total', 'tnt_info_memory_lua'}, + {'system', 'tnt_cfg_current_time', 'tnt_info_memory_lua'}, + {'replicas', 'tnt_replication_lsn', 'tnt_info_memory_lua'}, + -- TODO: add more caterories +} + +for _, row in ipairs(matrix) do + local m_category, m_include, m_exclude, m_linux_only = unpack(row) + + group[('test_include_%s'):format(m_category)] = function(g) + g.server:exec(function(category, include, exclude, linux_only) + t.skip_if(linux_only and jit.os ~= 'Linux', 'Linux is the only supported platform') + local metrics = require('metrics') + local utils = require('test.utils') -- luacheck: ignore 431 + + metrics.cfg{ + include = {category}, + } + + local default_metrics = metrics.collect{invoke_callbacks = true} + local included = utils.find_metric(include, default_metrics) + t.assert_not_equals(included, nil) + local excluded = utils.find_metric(exclude, default_metrics) + t.assert_equals(excluded, nil) + end, {m_category, m_include, m_exclude, m_linux_only}) + end + group[('test_exclude_%s'):format(category)] = function(g) + g.server:exec(function(category, include, exclude, linux_only) + t.skip_if(linux_only and jit.os ~= 'Linux', 'Linux is the only supported platform') + local metrics = require('metrics') + local utils = require('test.utils') -- luacheck: ignore 431 + + metrics.cfg{ + exclude = {category}, + } + + local default_metrics = metrics.collect{invoke_callbacks = true} + local uptime = utils.find_metric(exclude, default_metrics) + t.assert_not_equals(uptime, nil) + local memlua = utils.find_metric(include, default_metrics) + t.assert_equals(memlua, nil) + end, {m_category, m_include, m_exclude, m_linux_only}) + end end group.test_include_with_exclude = function(g)