mirror of
https://github.com/neondatabase/neon.git
synced 2025-12-26 15:49:58 +00:00
feat: add build_tag env support for set_build_info_metric (#5576)
- Add a new util `project_build_tag` macro, similar to `project_git_version` - Update the `set_build_info_metric` to accept and make use of `build_tag` info - Update all codes which use the `set_build_info_metric`
This commit is contained in:
@@ -89,14 +89,14 @@ pub const DISK_WRITE_SECONDS_BUCKETS: &[f64] = &[
|
|||||||
0.000_050, 0.000_100, 0.000_500, 0.001, 0.003, 0.005, 0.01, 0.05, 0.1, 0.3, 0.5,
|
0.000_050, 0.000_100, 0.000_500, 0.001, 0.003, 0.005, 0.01, 0.05, 0.1, 0.3, 0.5,
|
||||||
];
|
];
|
||||||
|
|
||||||
pub fn set_build_info_metric(revision: &str) {
|
pub fn set_build_info_metric(revision: &str, build_tag: &str) {
|
||||||
let metric = register_int_gauge_vec!(
|
let metric = register_int_gauge_vec!(
|
||||||
"libmetrics_build_info",
|
"libmetrics_build_info",
|
||||||
"Build/version information",
|
"Build/version information",
|
||||||
&["revision"]
|
&["revision", "build_tag"]
|
||||||
)
|
)
|
||||||
.expect("Failed to register build info metric");
|
.expect("Failed to register build info metric");
|
||||||
metric.with_label_values(&[revision]).set(1);
|
metric.with_label_values(&[revision, build_tag]).set(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Records I/O stats in a "cross-platform" way.
|
// Records I/O stats in a "cross-platform" way.
|
||||||
|
|||||||
@@ -130,6 +130,21 @@ macro_rules! project_git_version {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// This is a shortcut to embed build tag into binaries and avoid copying the same build script to all packages
|
||||||
|
#[macro_export]
|
||||||
|
macro_rules! project_build_tag {
|
||||||
|
($const_identifier:ident) => {
|
||||||
|
const $const_identifier: &::core::primitive::str = {
|
||||||
|
const __ARG: &[&::core::primitive::str; 2] = &match ::core::option_env!("BUILD_TAG") {
|
||||||
|
::core::option::Option::Some(x) => ["build_tag-env:", x],
|
||||||
|
::core::option::Option::None => ["build_tag:", ""],
|
||||||
|
};
|
||||||
|
|
||||||
|
$crate::__const_format::concatcp!(__ARG[0], __ARG[1])
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
/// Re-export for `project_git_version` macro
|
/// Re-export for `project_git_version` macro
|
||||||
#[doc(hidden)]
|
#[doc(hidden)]
|
||||||
pub use const_format as __const_format;
|
pub use const_format as __const_format;
|
||||||
|
|||||||
@@ -34,11 +34,12 @@ use postgres_backend::AuthType;
|
|||||||
use utils::logging::TracingErrorLayerEnablement;
|
use utils::logging::TracingErrorLayerEnablement;
|
||||||
use utils::signals::ShutdownSignals;
|
use utils::signals::ShutdownSignals;
|
||||||
use utils::{
|
use utils::{
|
||||||
auth::JwtAuth, logging, project_git_version, sentry_init::init_sentry, signals::Signal,
|
auth::JwtAuth, logging, project_build_tag, project_git_version, sentry_init::init_sentry,
|
||||||
tcp_listener,
|
signals::Signal, tcp_listener,
|
||||||
};
|
};
|
||||||
|
|
||||||
project_git_version!(GIT_VERSION);
|
project_git_version!(GIT_VERSION);
|
||||||
|
project_build_tag!(BUILD_TAG);
|
||||||
|
|
||||||
const PID_FILE_NAME: &str = "pageserver.pid";
|
const PID_FILE_NAME: &str = "pageserver.pid";
|
||||||
|
|
||||||
@@ -258,11 +259,12 @@ fn start_pageserver(
|
|||||||
// A changed version string indicates changed software.
|
// A changed version string indicates changed software.
|
||||||
// A changed launch timestamp indicates a pageserver restart.
|
// A changed launch timestamp indicates a pageserver restart.
|
||||||
info!(
|
info!(
|
||||||
"version: {} launch_timestamp: {}",
|
"version: {} launch_timestamp: {} build_tag: {}",
|
||||||
version(),
|
version(),
|
||||||
launch_ts.to_string()
|
launch_ts.to_string(),
|
||||||
|
BUILD_TAG,
|
||||||
);
|
);
|
||||||
set_build_info_metric(GIT_VERSION);
|
set_build_info_metric(GIT_VERSION, BUILD_TAG);
|
||||||
set_launch_timestamp_metric(launch_ts);
|
set_launch_timestamp_metric(launch_ts);
|
||||||
pageserver::preinitialize_metrics();
|
pageserver::preinitialize_metrics();
|
||||||
|
|
||||||
|
|||||||
@@ -16,9 +16,10 @@ use tokio::task::JoinSet;
|
|||||||
use tokio_util::sync::CancellationToken;
|
use tokio_util::sync::CancellationToken;
|
||||||
use tracing::info;
|
use tracing::info;
|
||||||
use tracing::warn;
|
use tracing::warn;
|
||||||
use utils::{project_git_version, sentry_init::init_sentry};
|
use utils::{project_build_tag, project_git_version, sentry_init::init_sentry};
|
||||||
|
|
||||||
project_git_version!(GIT_VERSION);
|
project_git_version!(GIT_VERSION);
|
||||||
|
project_build_tag!(BUILD_TAG);
|
||||||
|
|
||||||
use clap::{Parser, ValueEnum};
|
use clap::{Parser, ValueEnum};
|
||||||
|
|
||||||
@@ -100,7 +101,8 @@ async fn main() -> anyhow::Result<()> {
|
|||||||
let _sentry_guard = init_sentry(Some(GIT_VERSION.into()), &[]);
|
let _sentry_guard = init_sentry(Some(GIT_VERSION.into()), &[]);
|
||||||
|
|
||||||
info!("Version: {GIT_VERSION}");
|
info!("Version: {GIT_VERSION}");
|
||||||
::metrics::set_build_info_metric(GIT_VERSION);
|
info!("Build_tag: {BUILD_TAG}");
|
||||||
|
::metrics::set_build_info_metric(GIT_VERSION, BUILD_TAG);
|
||||||
|
|
||||||
let args = ProxyCliArgs::parse();
|
let args = ProxyCliArgs::parse();
|
||||||
let config = build_config(&args)?;
|
let config = build_config(&args)?;
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ use utils::auth::{JwtAuth, Scope};
|
|||||||
use utils::{
|
use utils::{
|
||||||
id::NodeId,
|
id::NodeId,
|
||||||
logging::{self, LogFormat},
|
logging::{self, LogFormat},
|
||||||
project_git_version,
|
project_build_tag, project_git_version,
|
||||||
sentry_init::init_sentry,
|
sentry_init::init_sentry,
|
||||||
tcp_listener,
|
tcp_listener,
|
||||||
};
|
};
|
||||||
@@ -51,6 +51,7 @@ const PID_FILE_NAME: &str = "safekeeper.pid";
|
|||||||
const ID_FILE_NAME: &str = "safekeeper.id";
|
const ID_FILE_NAME: &str = "safekeeper.id";
|
||||||
|
|
||||||
project_git_version!(GIT_VERSION);
|
project_git_version!(GIT_VERSION);
|
||||||
|
project_build_tag!(BUILD_TAG);
|
||||||
|
|
||||||
const ABOUT: &str = r#"
|
const ABOUT: &str = r#"
|
||||||
A fleet of safekeepers is responsible for reliably storing WAL received from
|
A fleet of safekeepers is responsible for reliably storing WAL received from
|
||||||
@@ -204,6 +205,7 @@ async fn main() -> anyhow::Result<()> {
|
|||||||
)?;
|
)?;
|
||||||
logging::replace_panic_hook_with_tracing_panic_hook().forget();
|
logging::replace_panic_hook_with_tracing_panic_hook().forget();
|
||||||
info!("version: {GIT_VERSION}");
|
info!("version: {GIT_VERSION}");
|
||||||
|
info!("buld_tag: {BUILD_TAG}");
|
||||||
|
|
||||||
let args_workdir = &args.datadir;
|
let args_workdir = &args.datadir;
|
||||||
let workdir = args_workdir.canonicalize_utf8().with_context(|| {
|
let workdir = args_workdir.canonicalize_utf8().with_context(|| {
|
||||||
@@ -423,7 +425,7 @@ async fn start_safekeeper(conf: SafeKeeperConf) -> Result<()> {
|
|||||||
.map(|res| ("WAL remover".to_owned(), res));
|
.map(|res| ("WAL remover".to_owned(), res));
|
||||||
tasks_handles.push(Box::pin(wal_remover_handle));
|
tasks_handles.push(Box::pin(wal_remover_handle));
|
||||||
|
|
||||||
set_build_info_metric(GIT_VERSION);
|
set_build_info_metric(GIT_VERSION, BUILD_TAG);
|
||||||
|
|
||||||
// TODO: update tokio-stream, convert to real async Stream with
|
// TODO: update tokio-stream, convert to real async Stream with
|
||||||
// SignalStream, map it to obtain missing signal name, combine streams into
|
// SignalStream, map it to obtain missing signal name, combine streams into
|
||||||
|
|||||||
@@ -44,10 +44,11 @@ use storage_broker::{
|
|||||||
};
|
};
|
||||||
use utils::id::TenantTimelineId;
|
use utils::id::TenantTimelineId;
|
||||||
use utils::logging::{self, LogFormat};
|
use utils::logging::{self, LogFormat};
|
||||||
use utils::project_git_version;
|
|
||||||
use utils::sentry_init::init_sentry;
|
use utils::sentry_init::init_sentry;
|
||||||
|
use utils::{project_build_tag, project_git_version};
|
||||||
|
|
||||||
project_git_version!(GIT_VERSION);
|
project_git_version!(GIT_VERSION);
|
||||||
|
project_build_tag!(BUILD_TAG);
|
||||||
|
|
||||||
const DEFAULT_CHAN_SIZE: usize = 32;
|
const DEFAULT_CHAN_SIZE: usize = 32;
|
||||||
const DEFAULT_ALL_KEYS_CHAN_SIZE: usize = 16384;
|
const DEFAULT_ALL_KEYS_CHAN_SIZE: usize = 16384;
|
||||||
@@ -438,7 +439,8 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
|
|||||||
// initialize sentry if SENTRY_DSN is provided
|
// initialize sentry if SENTRY_DSN is provided
|
||||||
let _sentry_guard = init_sentry(Some(GIT_VERSION.into()), &[]);
|
let _sentry_guard = init_sentry(Some(GIT_VERSION.into()), &[]);
|
||||||
info!("version: {GIT_VERSION}");
|
info!("version: {GIT_VERSION}");
|
||||||
::metrics::set_build_info_metric(GIT_VERSION);
|
info!("build_tag: {BUILD_TAG}");
|
||||||
|
metrics::set_build_info_metric(GIT_VERSION, BUILD_TAG);
|
||||||
|
|
||||||
// On any shutdown signal, log receival and exit.
|
// On any shutdown signal, log receival and exit.
|
||||||
std::thread::spawn(move || {
|
std::thread::spawn(move || {
|
||||||
|
|||||||
@@ -17,3 +17,6 @@ def test_build_info_metric(neon_env_builder: NeonEnvBuilder, link_proxy: NeonPro
|
|||||||
|
|
||||||
assert "revision" in sample.labels
|
assert "revision" in sample.labels
|
||||||
assert len(sample.labels["revision"]) > 0
|
assert len(sample.labels["revision"]) > 0
|
||||||
|
|
||||||
|
assert "build_tag" in sample.labels
|
||||||
|
assert len(sample.labels["build_tag"]) > 0
|
||||||
|
|||||||
Reference in New Issue
Block a user