Jeer
@Jeer
уверенный пользователь

Как правильно подключить метрики c#?

Хочу добавить через сбор метрик (System.Diagnostics.Metrics) количество строк в таблице.
Для этого добавляю новый класс, который зарегистрирую в DI. Он принимает зависимость на сервис-репозиторий, в котором прописан нужный метод select top(1) from table.
Не понимаю как правильно написать, сервис репозитория обычный, там получаются свои зависимости и я не могу сделать метод получения количества записей статичным. А в метод CreateObservableGauge нужно передать статичную функцию, насколько я понимаю, объясните, пожалуйста, как сделать правильно

using System.Diagnostics.Metrics;

namespace MyProject.Outbox;

public class Metrics
{
    private readonly IOutboxRepository _repository;
    public static readonly Meter OutboxMeter = new("Outbox");

    public Metrics(IOutboxRepository repository)
    {
        _repository = repository;
    }

    public ObservableGauge<int> OutboxCount =
        OutboxMeter.CreateObservableGauge<int>("outbox-count", () =>
        {
            return GetLength; // Cannot access non-static property 'GetLength' in static context
        });

    private int GetLength => _repository.GetLength().GetAwaiter().GetResult();
}
  • Вопрос задан
  • 266 просмотров
Решения вопроса 1
Jeer
@Jeer Автор вопроса
уверенный пользователь
В общем, как обычно тупка какая-то, мне не нужно было выносить в отдельное поле, достаточно было зарегистрировать в конструкторе (стыдно за такие вопросы, но удалять не буду, что поделать)
using System.Diagnostics.Metrics;

namespace MyProject.Outbox;

public class OutboxMetrics
{
    private readonly IOutboxRepository _repository;
    public static readonly Meter OutboxMeter = new("Outbox");
    public readonly Counter<int> OutboxPublishCounter = OutboxMeter.CreateCounter<int>("outbox-publish");

    public OutboxMetrics(IOutboxRepository repository)
    {
        _repository = repository;

        OutboxMeter.CreateObservableGauge<long>("outbox-count", () => GetOutboxLength);
    }

    private long GetOutboxLength => _repository.GetLength().GetAwaiter().GetResult();
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
freeExec
@freeExec
Участник OpenStreetMap
Заводите статичное поле под длину. И в подходящий момент длину там изменяете.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы