Add per-stage RequestHandler metrics

Details

Description

Currently RequestHandlerBase defines several metrics for keeping track of general-purpose requests. These metrics are also used in SearchHandler.

However, query processing in SolrCloud consists of several (varying) stages, and each of these stages may result in additional shard requests. These details are not captured by the metrics, because they treat all requests the same way.

In some applications it's important to know how many requests are user requests, and how many of them are generated internally by SolrCloud - for example, when diagnosing uneven distribution of requests across shards, or when autoscaling framework wants to detect "hot replicas". If we split the metrics at least into distributed vs. non-distributed requests then the numbers become more meaningful and representative of the global load vs. local load.