Fix broken beacon chain metrics, add slot clock metrics

This commit is contained in:
Paul Hauner
2019-08-12 17:44:47 +10:00
parent 95a320817e
commit d7c546844c
9 changed files with 68 additions and 28 deletions

View File

@@ -39,6 +39,23 @@ pub fn get_prometheus<T: BeaconChainTypes + 'static>(req: Request<Body>) -> ApiR
.get::<DBPath>()
.ok_or_else(|| ApiError::ServerError("DBPath extension missing".to_string()))?;
// There are two categories of metrics:
//
// - Dynamically updated: things like histograms and event counters that are updated on the
// fly.
// - Statically updated: things which are only updated at the time of the scrape (used where we
// can avoid cluttering up code with metrics calls).
//
// The `prometheus` crate has a `DEFAULT_REGISTRY` global singleton (via `lazy_static`) which
// keeps the state of all the metrics. Dynamically updated things will already be up-to-date in
// the registry (because they update themselves) however statically updated things need to be
// "scraped".
//
// We proceed by, first updating all the static metrics using `scrape_for_metrics(..)`. Then,
// using `prometheus::gather(..)` to collect the global `DEFAULT_REGISTRY` metrics into a
// string that can be returned via HTTP.
slot_clock::scrape_for_metrics::<T::EthSpec, T::SlotClock>(&beacon_chain.slot_clock);
store::scrape_for_metrics(&db_path);
beacon_chain::scrape_for_metrics(&beacon_chain);