Skip to content

Commit fc2478a

Browse files
committed
config: add metrics section to schema
This patch introduces all metrics configuration. Part of tarantool#8861 NO_DOC=tarantool/doc#3544 links the most actual schema, no need to update the issue.
1 parent bb74d6c commit fc2478a

File tree

8 files changed

+176
-1
lines changed

8 files changed

+176
-1
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
## feature/config
2+
3+
* All metrics `box.cfg{}` options are now supported by config (gh-8861).

src/box/CMakeLists.txt

+1
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ lua_source(lua_sources lua/config/applier/box_cfg.lua config_applier_box_cfg
4343
lua_source(lua_sources lua/config/applier/console.lua config_applier_console_lua)
4444
lua_source(lua_sources lua/config/applier/credentials.lua config_applier_credentials_lua)
4545
lua_source(lua_sources lua/config/applier/fiber.lua config_applier_fiber_lua)
46+
lua_source(lua_sources lua/config/applier/metrics.lua config_applier_metrics_lua)
4647
lua_source(lua_sources lua/config/applier/mkdir.lua config_applier_mkdir_lua)
4748
lua_source(lua_sources lua/config/cluster_config.lua config_cluster_config_lua)
4849
lua_source(lua_sources lua/config/configdata.lua config_configdata_lua)
+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
local log = require('internal.config.utils.log')
2+
3+
local function apply(config)
4+
local configdata = config._configdata
5+
local include = configdata:get('metrics.include', {use_default = true})
6+
local exclude = configdata:get('metrics.exclude', {use_default = true})
7+
local labels = configdata:get('metrics.labels', {use_default = true})
8+
9+
local default_include = { 'all' }
10+
local default_exclude = { }
11+
local default_labels = { alias = configdata._instance_name }
12+
13+
include = include or default_include
14+
exclude = exclude or default_exclude
15+
labels = labels or default_labels
16+
17+
box.cfg.metrics.include = include
18+
log.verbose('metrics.apply: include applied')
19+
20+
box.cfg.metrics.exclude = exclude
21+
log.verbose('metrics.apply: exclude applied')
22+
23+
box.cfg.metrics.labels = labels
24+
log.verbose('metrics.apply: labels applied')
25+
end
26+
27+
return {
28+
name = 'metrics',
29+
apply = apply,
30+
}

src/box/lua/config/init.lua

+1
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,7 @@ function methods._initialize(self)
122122
self:_register_applier(require('internal.config.applier.console'))
123123
self:_register_applier(require('internal.config.applier.fiber'))
124124
self:_register_applier(require('internal.config.applier.app'))
125+
self:_register_applier(require('internal.config.applier.metrics'))
125126

126127
-- Tarantool Enterprise Edition has its own additions
127128
-- for this module.

src/box/lua/config/instance_config.lua

+44
Original file line numberDiff line numberDiff line change
@@ -1357,6 +1357,50 @@ return schema.new('instance_config', schema.record({
13571357
box_cfg = 'password_history_length',
13581358
})),
13591359
}),
1360+
metrics = schema.record({
1361+
include = schema.set({
1362+
'all',
1363+
'network',
1364+
'operations',
1365+
'system',
1366+
'replicas',
1367+
'info',
1368+
'slab',
1369+
'runtime',
1370+
'memory',
1371+
'spaces',
1372+
'fibers',
1373+
'cpu',
1374+
'vinyl',
1375+
'memtx',
1376+
'luajit',
1377+
'clock',
1378+
'event_loop',
1379+
}),
1380+
exclude = schema.set({
1381+
'all',
1382+
'network',
1383+
'operations',
1384+
'system',
1385+
'replicas',
1386+
'info',
1387+
'slab',
1388+
'runtime',
1389+
'memory',
1390+
'spaces',
1391+
'fibers',
1392+
'cpu',
1393+
'vinyl',
1394+
'memtx',
1395+
'luajit',
1396+
'clock',
1397+
'event_loop',
1398+
}),
1399+
labels = schema.map({
1400+
key = schema.scalar({type = 'string'}),
1401+
value = schema.scalar({type = 'string'}),
1402+
}),
1403+
}),
13601404
}, {
13611405
-- This kind of validation cannot be implemented as the
13621406
-- 'validate' annotation of a particular schema node. There

src/box/lua/init.c

+5
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,7 @@ extern char session_lua[],
142142
config_applier_console_lua[],
143143
config_applier_credentials_lua[],
144144
config_applier_fiber_lua[],
145+
config_applier_metrics_lua[],
145146
config_applier_mkdir_lua[],
146147
config_cluster_config_lua[],
147148
config_configdata_lua[],
@@ -372,6 +373,10 @@ static const char *lua_sources[] = {
372373
"internal.config.applier.fiber",
373374
config_applier_fiber_lua,
374375

376+
"config/applier/metrics",
377+
"internal.config.applier.metrics",
378+
config_applier_metrics_lua,
379+
375380
"config/applier/mkdir",
376381
"internal.config.applier.mkdir",
377382
config_applier_mkdir_lua,

test/config-luatest/config_test.lua

+78
Original file line numberDiff line numberDiff line change
@@ -688,3 +688,81 @@ g.test_security_options = function()
688688
t.assert_equals(box.cfg.password_history_length, 3)
689689
end)
690690
end
691+
692+
g.test_metrics_options_default = function()
693+
local dir = treegen.prepare_directory(g, {}, {})
694+
local config = [[
695+
credentials:
696+
users:
697+
guest:
698+
roles:
699+
- super
700+
701+
iproto:
702+
listen: unix/:./{{ instance_name }}.iproto
703+
704+
groups:
705+
group-001:
706+
replicasets:
707+
replicaset-001:
708+
instances:
709+
instance-001: {}
710+
]]
711+
712+
-- Test defaults.
713+
local config_file = treegen.write_script(dir, 'base_config.yaml', config)
714+
local opts = {
715+
config_file = config_file,
716+
alias = 'instance-001',
717+
chdir = dir,
718+
}
719+
g.server = server:new(opts)
720+
g.server:start()
721+
g.server:exec(function()
722+
t.assert_equals(box.cfg.metrics.include, {'all'})
723+
t.assert_equals(box.cfg.metrics.exclude, { })
724+
t.assert_equals(box.cfg.metrics.labels, {alias = 'instance-001'})
725+
end)
726+
g.server:stop()
727+
end
728+
729+
g.test_metrics_options = function()
730+
local dir = treegen.prepare_directory(g, {}, {})
731+
local config = [[
732+
credentials:
733+
users:
734+
guest:
735+
roles:
736+
- super
737+
738+
iproto:
739+
listen: unix/:./{{ instance_name }}.iproto
740+
741+
metrics:
742+
include: [cpu]
743+
exclude: [all]
744+
labels:
745+
foo: bar
746+
747+
groups:
748+
group-001:
749+
replicasets:
750+
replicaset-001:
751+
instances:
752+
instance-001: {}
753+
]]
754+
755+
local config_file = treegen.write_script(dir, 'base_config.yaml', config)
756+
local opts = {
757+
config_file = config_file,
758+
alias = 'instance-001',
759+
chdir = dir,
760+
}
761+
g.server = server:new(opts)
762+
g.server:start()
763+
g.server:exec(function()
764+
t.assert_equals(box.cfg.metrics.include, {'cpu'})
765+
t.assert_equals(box.cfg.metrics.exclude, {'all'})
766+
t.assert_equals(box.cfg.metrics.labels, {foo = 'bar'})
767+
end)
768+
end

test/config-luatest/instance_config_schema_test.lua

+14-1
Original file line numberDiff line numberDiff line change
@@ -1037,7 +1037,7 @@ g.test_box_cfg_coverage = function()
10371037
audit_format = true,
10381038
audit_filter = true,
10391039

1040-
-- TODO: Will be added in the scope of gh-8861.
1040+
-- For now defaults are managed by options applier.
10411041
metrics = true,
10421042
}
10431043

@@ -1280,3 +1280,16 @@ g.test_security_community = function()
12801280

12811281
instance_config:validate(iconfig)
12821282
end
1283+
1284+
g.test_metrics = function()
1285+
local iconfig = {
1286+
metrics = {
1287+
include = {'network', 'info', 'cpu'},
1288+
exclude = {'info'},
1289+
labels = {foo = 'bar'},
1290+
}
1291+
}
1292+
1293+
instance_config:validate(iconfig)
1294+
validate_fields(iconfig.metrics, instance_config.schema.fields.metrics)
1295+
end

0 commit comments

Comments
 (0)