Метрики Dropwizard Получают Средние Предметы За Запрос REST - PullRequest
0 голосов
/ 11 мая 2018

Я хотел бы использовать метрики Dropwizard, чтобы получить среднее количество элементов в списке для каждого запроса служб контроллера REST с весенней загрузкой.Мой контроллер принимает строку, которая сериализуется в RequestCollection.RequestCollection имеет одно поле List<Integer> ids, которое состоит из списка идентификаторов.Я хотел бы знать, каково среднее количество элементов в поле ids по всем запросам.

Контроллер

@RestController
@RequestMapping("/api")
public class ApiController {

    private MetricRegistry metricRegistry;

    public ApiController(MetricRegistry metricRegistry) {
        this.metricRegistry = metricRegistry;
    }

    @GetMapping
    public String getFooBarred(
            @RequestParam(value = "params") String requestItem
    ) {
        RequestCollection request = request = new ObjectMapper()
                .registerModule(new JavaTimeModule())
                .readValue(requestItem, RequestCollection.class);

        // Add metric here to metricRegistry for average number of items 
        // in RequestCollection across all requests.
        // RequestCollection has a single property which is a List<Integer> ids

        return "foobar";
    }
}

Вот RequestCollection класс, чье поле ids я хотел бы измерить по всем запросам.

RequestCollection

public class RequestCollection {
    private List<Integer> ids;

    public RequestCollection() {
        this.ids = new ArrayList<>();
    }

    public List<Integer> getIds() {
        return ids;
    }
}

1 Ответ

0 голосов
/ 11 мая 2018

Из 5 основных типов метрик , Измерителей, Счетчиков, Гистограмм, Метров и Таймеров, наиболее подходящим для вас, вероятно, будет Histogram,которая "измеряет распределение значений в потоке данных: например, количество результатов, возвращаемых поиском".

Histogram itemCount
    = metrics.histogram(MetricRegistry.name(RequestCollection.class, "id-count"));

В каждом запросе просто обновляйте гистограмму с помощью счетчика для коллекции.

itemCount.update(collection.getIds().size());

Отчетность предоставит вам несколько различных статистических данных, а также среднее значение, которое вам нужно

-- Histograms ----------------------------
com.example.RequestCollection.id-count
             count = 100
               min = 0
               max = 99
              mean = 45.47
            stddev = 31.65
            median = 45.00
              75% <= 73.00
              95% <= 94.00
              98% <= 99.00
              99% <= 99.00
            99.9% <= 99.00
...