Skip to content

Commit f21ae1c

Browse files
author
p0rtale
committed
Add tnt_cartridge_config_applied metric
1 parent 7f584b9 commit f21ae1c

File tree

6 files changed

+70
-0
lines changed

6 files changed

+70
-0
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
55
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
66

77
## [Unreleased]
8+
### Added
9+
- `tnt_cartridge_config_applied` metric
810

911
## [1.3.1] - 2025-02-24
1012

doc/monitoring/api_reference.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -564,6 +564,7 @@ Metrics functions
564564
* ``luajit``
565565
* ``cartridge_issues``
566566
* ``cartridge_failover``
567+
* ``cartridge_config``
567568
* ``clock``
568569
* ``event_loop``
569570
* ``config``

doc/monitoring/metrics_reference.rst

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -414,6 +414,9 @@ Cartridge
414414
* - ``tnt_cartridge_failover_trigger_total``
415415
- Count of failover triggers in cluster.
416416

417+
* - ``tnt_cartridge_config_applied``
418+
- Whether the Cartridge configuration was successfully applied (1 if applied, 0 otherwise).
419+
417420
.. _metrics-reference-luajit:
418421

419422
LuaJIT metrics

metrics/cartridge/config.lua

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
local utils = require('metrics.utils')
2+
local collectors_list = {}
3+
local vars = nil
4+
5+
local function update()
6+
if vars == nil then
7+
local is_cartridge = pcall(require, 'cartridge')
8+
if not is_cartridge then
9+
return
10+
end
11+
12+
vars = require('cartridge.vars').new('cartridge.twophase')
13+
end
14+
15+
local config_applied = vars.config_applied
16+
if config_applied ~= nil then
17+
collectors_list.config_applied =
18+
utils.set_gauge(
19+
'cartridge_config_applied',
20+
'Whether the Cartridge configuration was successfully applied',
21+
config_applied and 1 or 0,
22+
nil,
23+
nil,
24+
{default = true}
25+
)
26+
end
27+
end
28+
29+
return {
30+
update = update,
31+
list = collectors_list,
32+
}

metrics/tarantool.lua

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ local default_metrics = {
2222
luajit = require('metrics.tarantool.luajit'),
2323
cartridge_issues = require('metrics.cartridge.issues'),
2424
cartridge_failover = require('metrics.cartridge.failover'),
25+
cartridge_config = require('metrics.cartridge.config'),
2526
clock = require('metrics.tarantool.clock'),
2627
event_loop = require('metrics.tarantool.event_loop'),
2728
config = require('metrics.tarantool.config'),

test/integration/cartridge_metrics_test.lua

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,3 +144,34 @@ g.test_failover = function()
144144
g.cluster.main_server:start()
145145
g.cluster:wait_until_healthy()
146146
end
147+
148+
g.test_config_applied_metric = function()
149+
local main_server = g.cluster:server('main')
150+
151+
t.helpers.retrying({}, function()
152+
local resp = main_server:http_request('get', '/metrics')
153+
local config_metric = utils.find_metric('tnt_cartridge_config_applied', resp.json)
154+
155+
t.assert_is_not(config_metric, nil, 'Cartridge config applied metric presents in /metrics response')
156+
t.assert_equals(config_metric[1].value, 1, 'Config should be applied')
157+
end)
158+
159+
local patch = require('cartridge').config_patch_clusterwide
160+
local ok, err = patch({
161+
['conflict'] = {},
162+
['conflict.yml'] = "text",
163+
})
164+
t.assert_equals(ok, nil)
165+
t.assert_covers(err, {
166+
class_name = 'PatchConfigError',
167+
err = 'Ambiguous sections "conflict" and "conflict.yml"',
168+
})
169+
170+
t.helpers.retrying({}, function()
171+
local resp = main_server:http_request('get', '/metrics')
172+
local config_metric = utils.find_metric('tnt_cartridge_config_applied', resp.json)
173+
174+
t.assert_is_not(config_metric, nil, 'Cartridge config applied metric presents in /metrics response')
175+
t.assert_equals(config_metric[1].value, 0, 'Config should not be applied')
176+
end)
177+
end

0 commit comments

Comments
 (0)