fn env(key: &str) -> Option<String> {
std::env::var(key).ok()
}
pub fn is_batch() -> bool {
env("AWS_BATCH_JOB_ID").is_some()
}
fn get_environment() -> String {
env("PRODUCT_ENVIRONMENT").unwrap_or_else(|| {
if env("CI_COMMIT_REF_NAME").as_deref() == Some("trunk") {
"production".to_owned()
} else {
"development".to_owned()
}
})
}
fn get_version() -> String {
env("PRODUCT_VERSION")
.or_else(|| {
let sha = env("CI_COMMIT_SHA")?;
let end = sha.len().min(8);
sha.get(..end).map(ToOwned::to_owned)
})
.unwrap_or_else(|| "00000000".to_owned())
}
fn resolve_service(fallback: &str) -> String {
env("PRODUCT_ID")
.or_else(|| env("JOB_DEFINITION_NAME"))
.or_else(|| env("JOB_NAME"))
.or_else(|| env("AWS_BATCH_JQ_NAME").map(|q| format!("from-{q}")))
.unwrap_or_else(|| fallback.to_owned())
}
fn unknown() -> String {
"unknown".to_owned()
}
pub fn batch_source_fields(fallback: &str) -> Vec<(&'static str, String)> {
vec![
("ddsource", "batch".to_owned()),
("dd.service", resolve_service(fallback)),
("dd.version", get_version()),
("deployment.environment", get_environment()),
(
"job_metadata.id",
env("AWS_BATCH_JOB_ID").unwrap_or_else(unknown),
),
(
"job_metadata.queue",
env("AWS_BATCH_JQ_NAME").unwrap_or_else(unknown),
),
(
"job_metadata.definition_name",
env("JOB_DEFINITION_NAME").unwrap_or_else(unknown),
),
(
"job_metadata.attempt",
env("AWS_BATCH_JOB_ATTEMPT").unwrap_or_else(unknown),
),
(
"job_metadata.compute_environment",
env("AWS_BATCH_CE_NAME").unwrap_or_else(unknown),
),
]
}
pub fn default_source_fields(fallback: &str) -> Vec<(&'static str, String)> {
vec![
("ddsource", "rust".to_owned()),
(
"dd.service",
env("PRODUCT_ID").unwrap_or_else(|| fallback.to_owned()),
),
("dd.version", get_version()),
("deployment.environment", get_environment()),
]
}
pub fn source_fields(product_id_fallback: &str) -> Vec<(&'static str, String)> {
if is_batch() {
batch_source_fields(product_id_fallback)
} else {
default_source_fields(product_id_fallback)
}
}