%% Licensed under the Apache License, Version 2.0 (the "License"); you may not
%% use this file except in compliance with the License. You may obtain a copy of
%% the License at
%%
%%   http://www.apache.org/licenses/LICENSE-2.0
%%
%% Unless required by applicable law or agreed to in writing, software
%% distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
%% WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
%% License for the specific language governing permissions and limitations under
%% the License.

{[nouveau, search_latency], [
    {type, histogram},
    {desc, <<"Distribution of overall search request latency as experienced by the end user">>}
]}.

{[nouveau, active_searches], [
    {type, counter},
    {desc, <<"number of active search requests">>}
]}.