-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add configuration version metrics (#504)
### What This PR adds a metric representing the configuration version that a running ndc-postgres instance uses. This will help us track adoption of new versions and inform deprecation timelines and documentation. ### How Rather than extending the existing metrics in the query_engine crate we make a new Metrics struct in the ndc_postgres_configuration crate. This is to prevent the query_engine metrics from accumulating unrelated cruft and reduce the complexity of the module graph.
- Loading branch information
Showing
14 changed files
with
140 additions
and
62 deletions.
There are no files selected for viewing
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,61 @@ | ||
//! Metrics setup and update for our connector. | ||
|
||
use prometheus::{IntGauge, Registry}; | ||
|
||
use crate::VersionTag; | ||
|
||
/// The collection of configuration-related metrics exposed through the `/metrics` endpoint. | ||
#[derive(Debug, Clone)] | ||
pub struct Metrics { | ||
configuration_version_3: IntGauge, | ||
configuration_version_4: IntGauge, | ||
} | ||
|
||
impl Metrics { | ||
/// Set up counters and gauges used to produce Prometheus metrics | ||
pub fn initialize(metrics_registry: &mut Registry) -> Result<Self, prometheus::Error> { | ||
let configuration_version_3 = add_int_gauge_metric( | ||
metrics_registry, | ||
"ndc_postgres_configuration_version_3", | ||
"Get whether configuration version 3 is used", | ||
)?; | ||
|
||
let configuration_version_4 = add_int_gauge_metric( | ||
metrics_registry, | ||
"ndc_postgres_configuration_version_4", | ||
"Get whether configuration version 4 is used", | ||
)?; | ||
|
||
Ok(Self { | ||
configuration_version_3, | ||
configuration_version_4, | ||
}) | ||
} | ||
|
||
/// Set the configuration version used by this connector instance. | ||
pub fn set_configuration_version(&self, version: VersionTag) { | ||
match version { | ||
VersionTag::Version3 => self.configuration_version_3.set(1), | ||
VersionTag::Version4 => self.configuration_version_4.set(1), | ||
} | ||
} | ||
} | ||
|
||
/// Create a new int gauge metric and register it with the provided Prometheus Registry | ||
fn add_int_gauge_metric( | ||
metrics_registry: &mut Registry, | ||
metric_name: &str, | ||
metric_description: &str, | ||
) -> Result<IntGauge, prometheus::Error> { | ||
let int_gauge = IntGauge::with_opts(prometheus::Opts::new(metric_name, metric_description))?; | ||
register_collector(metrics_registry, int_gauge) | ||
} | ||
|
||
/// Register a new collector with the registry, and returns it for later use. | ||
fn register_collector<Collector: prometheus::core::Collector + std::clone::Clone + 'static>( | ||
metrics_registry: &mut Registry, | ||
collector: Collector, | ||
) -> Result<Collector, prometheus::Error> { | ||
metrics_registry.register(Box::new(collector.clone()))?; | ||
Ok(collector) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.