Perl prometheus gauge add label с set_function не дает ожидаемого результата

Пытаюсь добавить метку к датчику прометея. Использование метода set работает нормально, но похоже, что я не могу правильно использовать метод set_function.

В результате я просто не вижу метрики шкалы, в которой я использовал метод set_function.

Результат (очищенный) выглядит следующим образом:

# HELP Test Test help 
# TYPE Test gauge

Ожидается, что в третьей строке написано Test {color = red} 123.

Вставьте в код.

#!/usr/bin/env perl

use Net::Prometheus;

my $client = Net::Prometheus->new;

$client->new_gauge(name => "Test", help => "Test help", labels => [qw/color/])->set_function('red', sub { return 123 });

print $client->render;

Не уверен, что я делаю что-то не так или это ошибка?

Прометей new_gauge- ›new_function ()

МЕТОДЫ

набор

$ gauge- ›set ([@label_values], $ value)
$ child-› set ($ value)

Устанавливает текущее значение для шкалы.

Если для датчика определены какие-либо метки, сначала необходимо указать их значения.

set_function

$ gauge- ›set_function ([@label_values], $ func)
$ child-› set_function ($ func)

Устанавливает функцию обратного вызова, возвращающую значение для датчика. Если манометр снабжен меткой, каждая комбинация меток требует своей функции.

При вызове функции не будут переданы аргументы, и ожидается, что она вернет одно значение


person Orjanp    schedule 27.09.2018    source источник
comment
Имеет ли Mojolicious отношение к вашей проблеме? Ваш сокращенный код выводит для меня ожидаемую строку: use Net::Prometheus; my $c = Net::Prometheus->new(); $c->new_gauge(help=>'',name=>'Test3',labels=>['color']);->set('red',123);print $c->render выводит Test3{color="red"} 123.   -  person Corion    schedule 27.09.2018
comment
Вы совершенно правы. Я использовал Mojolicious в исходном коде, поэтому по какой-то причине я сделал это и в примере. Заменили его на лучший пример без него. Метод set работает нормально, но, судя по всему, set_function - нет.   -  person Orjanp    schedule 28.09.2018
comment
Теперь об этом сообщалось как отчет об ошибке   -  person Corion    schedule 03.10.2018
comment
Да, отправил. Это исправлено в версии 0.06. rt.cpan.org/Public/Bug/Display.html?id= 127284   -  person Orjanp    schedule 15.10.2018


Ответы (1)


Я не уверен, что это предполагаемый подход к Net :: Prometheus, но создание датчик, установка значения, а затем установка функции работает для меня:

my $c = Net::Prometheus->new;
my $g = $c->new_gauge(name=>'Test',help=>'help',labels=>['color']);
$g->set('red',1);
$g->set_function('red',sub { warn 'Getter called'; 123 });
print $c->render

Это выводит

Getter called at ...
# HELP Test help
# TYPE Test gauge
Test{color="red"} 123

Я думаю, что документация могла бы быть более ясной по этому поводу.

Эта проблема устранена в версии 0.06.

person Corion    schedule 28.09.2018
comment
Да, это должно быть либо задокументировано, либо (если это ошибка) исправлено в коде. соответствующий код Обращает внимание только на values (которые созданы set). Он динамически вызывает функции (если они существуют), но сначала вам нужно иметь value. - person melpomene; 28.09.2018
comment
Да, я отправил отчет об ошибке. Это было исправлено в версии 0.06. rt.cpan.org/Public/Bug/Display.html?id=127284 - person Orjanp; 15.10.2018